summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--COPYRIGHT.txt10
-rw-r--r--SConstruct24
-rw-r--r--core/config/project_settings.cpp16
-rw-r--r--core/config/project_settings.h4
-rw-r--r--core/core_bind.cpp5
-rw-r--r--core/core_bind.h1
-rw-r--r--core/extension/gdnative_interface.cpp21
-rw-r--r--core/extension/gdnative_interface.h5
-rw-r--r--core/input/input.cpp20
-rw-r--r--core/input/input.h2
-rw-r--r--core/io/packed_data_container.cpp4
-rw-r--r--core/io/pck_packer.cpp3
-rw-r--r--core/io/pck_packer.h2
-rw-r--r--core/io/resource_importer.h4
-rw-r--r--core/math/basis.cpp4
-rw-r--r--core/math/geometry_2d.h3
-rw-r--r--core/math/math_funcs.cpp4
-rw-r--r--core/math/math_funcs.h5
-rw-r--r--core/math/transform_2d.cpp6
-rw-r--r--core/math/vector2.cpp4
-rw-r--r--core/math/vector2.h2
-rw-r--r--core/math/vector3.h2
-rw-r--r--core/math/vector3i.h2
-rw-r--r--core/object/object.cpp9
-rw-r--r--core/os/os.h3
-rw-r--r--core/string/ustring.cpp16
-rw-r--r--core/templates/thread_work_pool.cpp2
-rw-r--r--core/typedefs.h4
-rw-r--r--core/variant/variant_utility.cpp13
-rw-r--r--doc/classes/@GlobalScope.xml8
-rw-r--r--doc/classes/AABB.xml11
-rw-r--r--doc/classes/AnimatedSprite2D.xml2
-rw-r--r--doc/classes/AnimatedSprite3D.xml2
-rw-r--r--doc/classes/Animation.xml29
-rw-r--r--doc/classes/AnimationNode.xml2
-rw-r--r--doc/classes/AnimationNodeAdd2.xml2
-rw-r--r--doc/classes/AnimationNodeAdd3.xml2
-rw-r--r--doc/classes/AnimationNodeAnimation.xml2
-rw-r--r--doc/classes/AnimationNodeBlend2.xml2
-rw-r--r--doc/classes/AnimationNodeBlend3.xml2
-rw-r--r--doc/classes/AnimationNodeBlendSpace1D.xml2
-rw-r--r--doc/classes/AnimationNodeBlendSpace2D.xml2
-rw-r--r--doc/classes/AnimationNodeBlendTree.xml2
-rw-r--r--doc/classes/AnimationNodeOneShot.xml2
-rw-r--r--doc/classes/AnimationNodeOutput.xml2
-rw-r--r--doc/classes/AnimationNodeStateMachine.xml2
-rw-r--r--doc/classes/AnimationNodeStateMachinePlayback.xml2
-rw-r--r--doc/classes/AnimationNodeStateMachineTransition.xml4
-rw-r--r--doc/classes/AnimationNodeTimeScale.xml2
-rw-r--r--doc/classes/AnimationNodeTimeSeek.xml2
-rw-r--r--doc/classes/AnimationNodeTransition.xml2
-rw-r--r--doc/classes/AnimationPlayer.xml4
-rw-r--r--doc/classes/AnimationTree.xml2
-rw-r--r--doc/classes/Area2D.xml2
-rw-r--r--doc/classes/ArrayMesh.xml2
-rw-r--r--doc/classes/AudioEffectDistortion.xml2
-rw-r--r--doc/classes/AudioEffectFilter.xml2
-rw-r--r--doc/classes/AudioEffectHighShelfFilter.xml2
-rw-r--r--doc/classes/AudioEffectLowShelfFilter.xml2
-rw-r--r--doc/classes/AudioEffectRecord.xml2
-rw-r--r--doc/classes/AudioServer.xml2
-rw-r--r--doc/classes/AudioStream.xml2
-rw-r--r--doc/classes/AudioStreamPlayer.xml2
-rw-r--r--doc/classes/AudioStreamPlayer2D.xml2
-rw-r--r--doc/classes/AudioStreamPlayer3D.xml2
-rw-r--r--doc/classes/BaseMaterial3D.xml2
-rw-r--r--doc/classes/Basis.xml13
-rw-r--r--doc/classes/Button.xml1
-rw-r--r--doc/classes/CPUParticles2D.xml2
-rw-r--r--doc/classes/CanvasItem.xml4
-rw-r--r--doc/classes/CanvasLayer.xml4
-rw-r--r--doc/classes/CharFXTransform.xml2
-rw-r--r--doc/classes/CharacterBody2D.xml4
-rw-r--r--doc/classes/CharacterBody3D.xml2
-rw-r--r--doc/classes/CollisionObject2D.xml4
-rw-r--r--doc/classes/CollisionObject3D.xml4
-rw-r--r--doc/classes/CollisionShape2D.xml2
-rw-r--r--doc/classes/CollisionShape3D.xml2
-rw-r--r--doc/classes/Color.xml15
-rw-r--r--doc/classes/Control.xml20
-rw-r--r--doc/classes/Dictionary.xml2
-rw-r--r--doc/classes/DirectionalLight3D.xml2
-rw-r--r--doc/classes/Directory.xml2
-rw-r--r--doc/classes/DisplayServer.xml2
-rw-r--r--doc/classes/EditorImportPlugin.xml10
-rw-r--r--doc/classes/EditorInspectorPlugin.xml2
-rw-r--r--doc/classes/EditorNode3DGizmoPlugin.xml2
-rw-r--r--doc/classes/EditorPaths.xml30
-rw-r--r--doc/classes/EditorPlugin.xml2
-rw-r--r--doc/classes/EditorSceneFormatImporter.xml13
-rw-r--r--doc/classes/EditorScenePostImport.xml2
-rw-r--r--doc/classes/EditorScenePostImportPlugin.xml4
-rw-r--r--doc/classes/Engine.xml2
-rw-r--r--doc/classes/Environment.xml7
-rw-r--r--doc/classes/File.xml4
-rw-r--r--doc/classes/FontData.xml13
-rw-r--r--doc/classes/GPUParticles2D.xml2
-rw-r--r--doc/classes/GPUParticles3D.xml2
-rw-r--r--doc/classes/GeometryInstance3D.xml12
-rw-r--r--doc/classes/GraphEdit.xml2
-rw-r--r--doc/classes/GraphNode.xml4
-rw-r--r--doc/classes/HTTPClient.xml4
-rw-r--r--doc/classes/HTTPRequest.xml4
-rw-r--r--doc/classes/Image.xml4
-rw-r--r--doc/classes/ImageTexture.xml2
-rw-r--r--doc/classes/Input.xml9
-rw-r--r--doc/classes/InputEvent.xml4
-rw-r--r--doc/classes/InputEventAction.xml2
-rw-r--r--doc/classes/InputEventJoypadButton.xml2
-rw-r--r--doc/classes/InputEventJoypadMotion.xml2
-rw-r--r--doc/classes/InputEventKey.xml2
-rw-r--r--doc/classes/InputEventMouse.xml2
-rw-r--r--doc/classes/InputEventMouseButton.xml2
-rw-r--r--doc/classes/InputEventMouseMotion.xml2
-rw-r--r--doc/classes/InputEventScreenDrag.xml2
-rw-r--r--doc/classes/InputEventScreenTouch.xml2
-rw-r--r--doc/classes/InputEventWithModifiers.xml2
-rw-r--r--doc/classes/InputMap.xml2
-rw-r--r--doc/classes/JNISingleton.xml2
-rw-r--r--doc/classes/JavaScript.xml4
-rw-r--r--doc/classes/Light2D.xml2
-rw-r--r--doc/classes/Light3D.xml2
-rw-r--r--doc/classes/LightOccluder2D.xml2
-rw-r--r--doc/classes/LightmapGI.xml4
-rw-r--r--doc/classes/MeshInstance2D.xml2
-rw-r--r--doc/classes/MultiMesh.xml4
-rw-r--r--doc/classes/MultiMeshInstance3D.xml6
-rw-r--r--doc/classes/MultiplayerPeer.xml2
-rw-r--r--doc/classes/Mutex.xml2
-rw-r--r--doc/classes/Node.xml11
-rw-r--r--doc/classes/Node2D.xml2
-rw-r--r--doc/classes/Node3D.xml2
-rw-r--r--doc/classes/OS.xml15
-rw-r--r--doc/classes/Object.xml7
-rw-r--r--doc/classes/OmniLight3D.xml2
-rw-r--r--doc/classes/PCKPacker.xml4
-rw-r--r--doc/classes/PackedScene.xml4
-rw-r--r--doc/classes/PhysicalSkyMaterial.xml4
-rw-r--r--doc/classes/PhysicsBody2D.xml2
-rw-r--r--doc/classes/PhysicsBody3D.xml2
-rw-r--r--doc/classes/PhysicsDirectBodyState2D.xml4
-rw-r--r--doc/classes/PhysicsDirectBodyState3D.xml4
-rw-r--r--doc/classes/PhysicsDirectSpaceState2D.xml4
-rw-r--r--doc/classes/PhysicsDirectSpaceState3D.xml4
-rw-r--r--doc/classes/PhysicsPointQueryParameters2D.xml2
-rw-r--r--doc/classes/PhysicsPointQueryParameters3D.xml2
-rw-r--r--doc/classes/PhysicsRayQueryParameters2D.xml2
-rw-r--r--doc/classes/PhysicsRayQueryParameters3D.xml2
-rw-r--r--doc/classes/PhysicsShapeQueryParameters2D.xml2
-rw-r--r--doc/classes/PhysicsShapeQueryParameters3D.xml2
-rw-r--r--doc/classes/Plane.xml8
-rw-r--r--doc/classes/ProjectSettings.xml20
-rw-r--r--doc/classes/Quaternion.xml17
-rw-r--r--doc/classes/RandomNumberGenerator.xml2
-rw-r--r--doc/classes/RayCast2D.xml4
-rw-r--r--doc/classes/RayCast3D.xml4
-rw-r--r--doc/classes/Rect2.xml11
-rw-r--r--doc/classes/Rect2i.xml6
-rw-r--r--doc/classes/RefCounted.xml2
-rw-r--r--doc/classes/ReferenceRect.xml2
-rw-r--r--doc/classes/ReflectionProbe.xml2
-rw-r--r--doc/classes/RenderingServer.xml2
-rw-r--r--doc/classes/Resource.xml4
-rw-r--r--doc/classes/ResourceImporter.xml2
-rw-r--r--doc/classes/RichTextEffect.xml2
-rw-r--r--doc/classes/RichTextLabel.xml2
-rw-r--r--doc/classes/RigidDynamicBody3D.xml2
-rw-r--r--doc/classes/RootMotionView.xml2
-rw-r--r--doc/classes/SceneTree.xml4
-rw-r--r--doc/classes/Script.xml2
-rw-r--r--doc/classes/Semaphore.xml2
-rw-r--r--doc/classes/Shader.xml2
-rw-r--r--doc/classes/ShaderMaterial.xml2
-rw-r--r--doc/classes/Shape2D.xml2
-rw-r--r--doc/classes/Shape3D.xml2
-rw-r--r--doc/classes/Skeleton2D.xml2
-rw-r--r--doc/classes/SoftDynamicBody3D.xml6
-rw-r--r--doc/classes/SpotLight3D.xml2
-rw-r--r--doc/classes/SpringArm3D.xml2
-rw-r--r--doc/classes/StandardMaterial3D.xml2
-rw-r--r--doc/classes/StreamPeerSSL.xml2
-rw-r--r--doc/classes/String.xml2
-rw-r--r--doc/classes/SubViewport.xml4
-rw-r--r--doc/classes/TextEdit.xml29
-rw-r--r--doc/classes/TextServer.xml8
-rw-r--r--doc/classes/TextServerExtension.xml8
-rw-r--r--doc/classes/Theme.xml2
-rw-r--r--doc/classes/Thread.xml4
-rw-r--r--doc/classes/TileMap.xml2
-rw-r--r--doc/classes/TileSet.xml2
-rw-r--r--doc/classes/Transform2D.xml13
-rw-r--r--doc/classes/Transform3D.xml14
-rw-r--r--doc/classes/Translation.xml4
-rw-r--r--doc/classes/TranslationServer.xml4
-rw-r--r--doc/classes/Variant.xml2
-rw-r--r--doc/classes/Vector2.xml39
-rw-r--r--doc/classes/Vector2i.xml47
-rw-r--r--doc/classes/Vector3.xml40
-rw-r--r--doc/classes/Vector3i.xml47
-rw-r--r--doc/classes/Viewport.xml10
-rw-r--r--doc/classes/VisualShaderNode.xml2
-rw-r--r--doc/classes/VisualShaderNodeCustom.xml2
-rw-r--r--doc/classes/VisualShaderNodeInput.xml2
-rw-r--r--doc/classes/VoxelGI.xml12
-rw-r--r--doc/classes/Window.xml8
-rw-r--r--doc/classes/World2D.xml2
-rw-r--r--doc/classes/World3D.xml2
-rw-r--r--doc/classes/WorldEnvironment.xml2
-rw-r--r--doc/classes/XRCamera3D.xml2
-rw-r--r--doc/classes/XRController3D.xml2
-rw-r--r--doc/classes/XRInterface.xml2
-rw-r--r--doc/classes/XROrigin3D.xml2
-rw-r--r--doc/classes/XRPositionalTracker.xml2
-rw-r--r--doc/classes/XRServer.xml2
-rw-r--r--doc/classes/float.xml13
-rw-r--r--doc/classes/int.xml6
-rwxr-xr-xdoc/tools/make_rst.py62
-rw-r--r--doc/translations/ar.po1142
-rw-r--r--doc/translations/ca.po1142
-rw-r--r--doc/translations/classes.pot1142
-rw-r--r--doc/translations/cs.po1142
-rw-r--r--doc/translations/de.po1407
-rw-r--r--doc/translations/el.po1142
-rw-r--r--doc/translations/es.po1238
-rw-r--r--doc/translations/fa.po1142
-rw-r--r--doc/translations/fi.po1142
-rw-r--r--doc/translations/fil.po1142
-rw-r--r--doc/translations/fr.po1275
-rw-r--r--doc/translations/gl.po1142
-rw-r--r--doc/translations/hi.po1142
-rw-r--r--doc/translations/hu.po1176
-rw-r--r--doc/translations/id.po1155
-rw-r--r--doc/translations/it.po1776
-rw-r--r--doc/translations/ja.po1161
-rw-r--r--doc/translations/ko.po1177
-rw-r--r--doc/translations/lv.po1148
-rw-r--r--doc/translations/mr.po1142
-rw-r--r--doc/translations/nb.po1142
-rw-r--r--doc/translations/nl.po1159
-rw-r--r--doc/translations/pl.po1254
-rw-r--r--doc/translations/pt_BR.po2158
-rw-r--r--doc/translations/ro.po1376
-rw-r--r--doc/translations/ru.po1164
-rw-r--r--doc/translations/sk.po1151
-rw-r--r--doc/translations/sr_Cyrl.po1168
-rw-r--r--doc/translations/sv.po1142
-rw-r--r--doc/translations/th.po1143
-rw-r--r--doc/translations/tl.po (renamed from doc/translations/et.po)1308
-rw-r--r--doc/translations/tr.po1211
-rw-r--r--doc/translations/uk.po1161
-rw-r--r--doc/translations/vi.po1241
-rw-r--r--doc/translations/zh_CN.po8711
-rw-r--r--doc/translations/zh_TW.po1142
-rw-r--r--drivers/SCsub5
-rw-r--r--drivers/gles3/rasterizer_gles3.cpp2
-rw-r--r--drivers/gles3/shader_compiler_gles3.cpp18
-rw-r--r--drivers/unix/os_unix.cpp2
-rw-r--r--drivers/wasapi/audio_driver_wasapi.cpp19
-rw-r--r--editor/action_map_editor.cpp2
-rw-r--r--editor/animation_bezier_editor.cpp102
-rw-r--r--editor/animation_bezier_editor.h17
-rw-r--r--editor/animation_track_editor.cpp58
-rw-r--r--editor/connections_dialog.cpp2
-rw-r--r--editor/debugger/script_editor_debugger.cpp50
-rw-r--r--editor/debugger/script_editor_debugger.h4
-rw-r--r--editor/dependency_editor.cpp4
-rw-r--r--editor/editor_autoload_settings.cpp12
-rw-r--r--editor/editor_export.cpp2
-rw-r--r--editor/editor_export.h2
-rw-r--r--editor/editor_file_dialog.cpp6
-rw-r--r--editor/editor_file_system.cpp6
-rw-r--r--editor/editor_help.cpp8
-rw-r--r--editor/editor_inspector.cpp4
-rw-r--r--editor/editor_node.cpp33
-rw-r--r--editor/editor_spin_slider.cpp2
-rw-r--r--editor/filesystem_dock.cpp8
-rw-r--r--editor/icons/KeyEasedSelected.svg1
-rw-r--r--editor/icons/KeyValueEased.svg1
-rw-r--r--editor/import/dynamicfont_import_settings.cpp4
-rw-r--r--editor/import/editor_import_plugin.cpp12
-rw-r--r--editor/import/editor_import_plugin.h8
-rw-r--r--editor/import/resource_importer_bitmask.cpp4
-rw-r--r--editor/import/resource_importer_bitmask.h4
-rw-r--r--editor/import/resource_importer_bmfont.cpp4
-rw-r--r--editor/import/resource_importer_bmfont.h4
-rw-r--r--editor/import/resource_importer_csv_translation.cpp4
-rw-r--r--editor/import/resource_importer_csv_translation.h4
-rw-r--r--editor/import/resource_importer_dynamicfont.cpp4
-rw-r--r--editor/import/resource_importer_dynamicfont.h4
-rw-r--r--editor/import/resource_importer_image.cpp4
-rw-r--r--editor/import/resource_importer_image.h4
-rw-r--r--editor/import/resource_importer_imagefont.cpp4
-rw-r--r--editor/import/resource_importer_imagefont.h4
-rw-r--r--editor/import/resource_importer_layered_texture.cpp4
-rw-r--r--editor/import/resource_importer_layered_texture.h4
-rw-r--r--editor/import/resource_importer_obj.cpp4
-rw-r--r--editor/import/resource_importer_obj.h4
-rw-r--r--editor/import/resource_importer_scene.cpp47
-rw-r--r--editor/import/resource_importer_scene.h16
-rw-r--r--editor/import/resource_importer_shader_file.cpp4
-rw-r--r--editor/import/resource_importer_shader_file.h4
-rw-r--r--editor/import/resource_importer_texture.cpp4
-rw-r--r--editor/import/resource_importer_texture.h4
-rw-r--r--editor/import/resource_importer_texture_atlas.cpp8
-rw-r--r--editor/import/resource_importer_texture_atlas.h4
-rw-r--r--editor/import/resource_importer_wav.cpp4
-rw-r--r--editor/import/resource_importer_wav.h4
-rw-r--r--editor/import/scene_import_settings.cpp2
-rw-r--r--editor/import_defaults_editor.cpp4
-rw-r--r--editor/import_dock.cpp30
-rw-r--r--editor/import_dock.h2
-rw-r--r--editor/plugins/animation_blend_tree_editor_plugin.cpp2
-rw-r--r--editor/plugins/canvas_item_editor_plugin.cpp4
-rw-r--r--editor/plugins/curve_editor_plugin.cpp2
-rw-r--r--editor/plugins/node_3d_editor_plugin.cpp4
-rw-r--r--editor/plugins/script_editor_plugin.cpp2
-rw-r--r--editor/plugins/script_text_editor.cpp6
-rw-r--r--editor/plugins/shader_editor_plugin.cpp9
-rw-r--r--editor/plugins/skeleton_2d_editor_plugin.cpp20
-rw-r--r--editor/plugins/skeleton_2d_editor_plugin.h2
-rw-r--r--editor/plugins/text_editor.cpp2
-rw-r--r--editor/plugins/theme_editor_preview.cpp3
-rw-r--r--editor/plugins/tiles/tile_proxies_manager_dialog.cpp2
-rw-r--r--editor/plugins/visual_shader_editor_plugin.cpp26
-rw-r--r--editor/project_export.cpp5
-rw-r--r--editor/project_manager.cpp6
-rw-r--r--editor/property_editor.cpp2
-rw-r--r--editor/scene_tree_dock.cpp12
-rw-r--r--editor/script_create_dialog.cpp26
-rw-r--r--editor/script_create_dialog.h4
-rw-r--r--editor/translations/af.po4
-rw-r--r--editor/translations/ar.po39
-rw-r--r--editor/translations/az.po4
-rw-r--r--editor/translations/bg.po8
-rw-r--r--editor/translations/bn.po8
-rw-r--r--editor/translations/br.po4
-rw-r--r--editor/translations/ca.po8
-rw-r--r--editor/translations/cs.po8
-rw-r--r--editor/translations/da.po26
-rw-r--r--editor/translations/de.po8
-rw-r--r--editor/translations/editor.pot4
-rw-r--r--editor/translations/el.po8
-rw-r--r--editor/translations/eo.po4
-rw-r--r--editor/translations/es.po18
-rw-r--r--editor/translations/es_AR.po8
-rw-r--r--editor/translations/et.po4
-rw-r--r--editor/translations/eu.po4
-rw-r--r--editor/translations/fa.po8
-rw-r--r--editor/translations/fi.po8
-rw-r--r--editor/translations/fil.po13
-rw-r--r--editor/translations/fr.po8
-rw-r--r--editor/translations/ga.po4
-rw-r--r--editor/translations/gl.po8
-rw-r--r--editor/translations/he.po8
-rw-r--r--editor/translations/hi.po4
-rw-r--r--editor/translations/hr.po4
-rw-r--r--editor/translations/hu.po22
-rw-r--r--editor/translations/id.po34
-rw-r--r--editor/translations/is.po4
-rw-r--r--editor/translations/it.po1525
-rw-r--r--editor/translations/ja.po14
-rw-r--r--editor/translations/ka.po4
-rw-r--r--editor/translations/km.po4
-rw-r--r--editor/translations/ko.po128
-rw-r--r--editor/translations/lt.po4
-rw-r--r--editor/translations/lv.po184
-rw-r--r--editor/translations/mi.po4
-rw-r--r--editor/translations/mk.po19
-rw-r--r--editor/translations/ml.po4
-rw-r--r--editor/translations/mr.po4
-rw-r--r--editor/translations/ms.po4
-rw-r--r--editor/translations/nb.po8
-rw-r--r--editor/translations/nl.po20
-rw-r--r--editor/translations/or.po4
-rw-r--r--editor/translations/pl.po8
-rw-r--r--editor/translations/pr.po4
-rw-r--r--editor/translations/pt.po12
-rw-r--r--editor/translations/pt_BR.po319
-rw-r--r--editor/translations/ro.po110
-rw-r--r--editor/translations/ru.po15
-rw-r--r--editor/translations/si.po4
-rw-r--r--editor/translations/sk.po4
-rw-r--r--editor/translations/sl.po8
-rw-r--r--editor/translations/sq.po4
-rw-r--r--editor/translations/sr_Cyrl.po38
-rw-r--r--editor/translations/sr_Latn.po4
-rw-r--r--editor/translations/sv.po8
-rw-r--r--editor/translations/ta.po4
-rw-r--r--editor/translations/te.po4
-rw-r--r--editor/translations/th.po8
-rw-r--r--editor/translations/tl.po13819
-rw-r--r--editor/translations/tr.po299
-rw-r--r--editor/translations/tt.po4
-rw-r--r--editor/translations/tzm.po4
-rw-r--r--editor/translations/uk.po8
-rw-r--r--editor/translations/ur_PK.po4
-rw-r--r--editor/translations/vi.po8
-rw-r--r--editor/translations/zh_CN.po26
-rw-r--r--editor/translations/zh_HK.po8
-rw-r--r--editor/translations/zh_TW.po23
-rw-r--r--main/main.cpp28
-rw-r--r--methods.py2
-rw-r--r--misc/dist/html/editor.html10
-rw-r--r--misc/hooks/README.md2
-rwxr-xr-xmisc/hooks/pre-commit-black2
-rw-r--r--modules/bullet/area_bullet.cpp163
-rw-r--r--modules/bullet/area_bullet.h55
-rw-r--r--modules/bullet/collision_object_bullet.cpp13
-rw-r--r--modules/bullet/collision_object_bullet.h6
-rw-r--r--modules/bullet/rigid_body_bullet.cpp2
-rw-r--r--modules/bullet/space_bullet.cpp150
-rw-r--r--modules/csg/doc_classes/CSGShape3D.xml4
-rw-r--r--modules/enet/doc_classes/ENetMultiplayerPeer.xml2
-rw-r--r--modules/gdnative/doc_classes/GDNativeLibrary.xml4
-rw-r--r--modules/gdscript/doc_classes/@GDScript.xml2
-rw-r--r--modules/gdscript/doc_classes/GDScript.xml2
-rw-r--r--modules/gdscript/gdscript_analyzer.cpp2
-rw-r--r--modules/gltf/gltf_document.cpp5
-rw-r--r--modules/gridmap/doc_classes/GridMap.xml4
-rw-r--r--modules/gridmap/grid_map_editor_plugin.cpp2
-rw-r--r--modules/lightmapper_rd/lm_compute.glsl46
-rw-r--r--modules/minimp3/resource_importer_mp3.cpp4
-rw-r--r--modules/minimp3/resource_importer_mp3.h4
-rw-r--r--modules/mono/doc_classes/CSharpScript.xml2
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/AABB.cs33
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Basis.cs41
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Color.cs172
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Colors.cs2
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Dictionary.cs6
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/GD.cs19
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Plane.cs31
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Quaternion.cs100
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2.cs22
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2i.cs14
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/StringExtensions.cs2
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Transform2D.cs39
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Transform3D.cs39
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2.cs171
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2i.cs182
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3.cs167
-rw-r--r--modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3i.cs194
-rw-r--r--modules/mono/glue/gd_glue.cpp23
-rw-r--r--modules/mono/utils/mono_reg_utils.cpp4
-rw-r--r--modules/tinyexr/SCsub3
-rw-r--r--modules/tinyexr/image_loader_tinyexr.cpp2
-rw-r--r--modules/tinyexr/image_saver_tinyexr.cpp2
-rw-r--r--modules/upnp/SCsub4
-rw-r--r--modules/upnp/upnp.cpp4
-rw-r--r--modules/upnp/upnp.h2
-rw-r--r--modules/upnp/upnp_device.cpp2
-rw-r--r--modules/visual_script/doc_classes/VisualScript.xml2
-rw-r--r--modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml73
-rw-r--r--modules/visual_script/editor/visual_script_editor.cpp12
-rw-r--r--modules/visual_script/visual_script_builtin_funcs.cpp35
-rw-r--r--modules/visual_script/visual_script_builtin_funcs.h3
-rw-r--r--modules/vorbis/resource_importer_ogg_vorbis.cpp4
-rw-r--r--modules/vorbis/resource_importer_ogg_vorbis.h4
-rw-r--r--modules/webp/SCsub1
-rw-r--r--modules/websocket/SCsub3
-rw-r--r--platform/android/display_server_android.cpp4
-rw-r--r--platform/android/export/export_plugin.cpp59
-rw-r--r--platform/android/export/gradle_export_util.cpp22
-rw-r--r--platform/android/export/gradle_export_util.h15
-rw-r--r--platform/android/java/app/AndroidManifest.xml5
-rw-r--r--platform/android/java/lib/src/org/godotengine/godot/Godot.java14
-rw-r--r--platform/android/java/lib/src/org/godotengine/godot/GodotGLRenderView.java23
-rw-r--r--platform/android/java/lib/src/org/godotengine/godot/GodotIO.java29
-rw-r--r--platform/android/java/lib/src/org/godotengine/godot/utils/GLUtils.java1
-rw-r--r--platform/android/java/lib/src/org/godotengine/godot/xr/XRMode.java2
-rw-r--r--platform/javascript/detect.py21
-rw-r--r--platform/javascript/display_server_javascript.cpp102
-rw-r--r--platform/javascript/display_server_javascript.h7
-rw-r--r--platform/javascript/js/libs/library_godot_input.js14
-rw-r--r--platform/javascript/os_javascript.h2
-rw-r--r--platform/osx/crash_handler_osx.mm5
-rw-r--r--platform/osx/joypad_osx.cpp7
-rw-r--r--platform/osx/joypad_osx.h4
-rw-r--r--platform/windows/detect.py8
-rw-r--r--platform/windows/os_windows.cpp2
-rw-r--r--scene/2d/camera_2d.cpp1
-rw-r--r--scene/2d/navigation_region_2d.cpp2
-rw-r--r--scene/2d/physics_body_2d.cpp11
-rw-r--r--scene/2d/tile_map.cpp2
-rw-r--r--scene/3d/decal.cpp3
-rw-r--r--scene/3d/gpu_particles_collision_3d.cpp6
-rw-r--r--scene/3d/occluder_instance_3d.cpp3
-rw-r--r--scene/3d/physics_body_3d.cpp17
-rw-r--r--scene/3d/reflection_probe.cpp4
-rw-r--r--scene/gui/code_edit.cpp20
-rw-r--r--scene/gui/color_picker.cpp8
-rw-r--r--scene/gui/control.cpp10
-rw-r--r--scene/gui/control.h2
-rw-r--r--scene/gui/graph_edit.cpp47
-rw-r--r--scene/gui/graph_edit.h5
-rw-r--r--scene/gui/line_edit.cpp84
-rw-r--r--scene/gui/line_edit.h3
-rw-r--r--scene/gui/range.cpp14
-rw-r--r--scene/gui/range.h1
-rw-r--r--scene/gui/scroll_container.cpp4
-rw-r--r--scene/gui/spin_box.cpp2
-rw-r--r--scene/gui/text_edit.cpp180
-rw-r--r--scene/gui/text_edit.h24
-rw-r--r--scene/gui/tree.cpp2
-rw-r--r--scene/main/canvas_item.cpp1
-rw-r--r--scene/main/viewport.cpp11
-rw-r--r--scene/main/viewport.h2
-rw-r--r--scene/main/window.cpp5
-rw-r--r--scene/main/window.h1
-rw-r--r--scene/resources/animation.cpp126
-rw-r--r--scene/resources/animation.h16
-rw-r--r--scene/resources/font.cpp3
-rw-r--r--scene/resources/packed_scene.cpp12
-rw-r--r--scene/resources/resource_format_text.cpp2
-rw-r--r--scene/resources/skeleton_modification_2d_ccdik.cpp4
-rw-r--r--scene/resources/skeleton_modification_stack_2d.cpp1
-rw-r--r--scene/resources/skeleton_modification_stack_3d.cpp1
-rw-r--r--scene/resources/sky_material.cpp16
-rw-r--r--scene/resources/visual_shader.cpp1
-rw-r--r--scene/resources/visual_shader_particle_nodes.cpp289
-rw-r--r--scene/resources/visual_shader_particle_nodes.h14
-rw-r--r--servers/physics_2d/godot_area_2d.cpp1
-rw-r--r--servers/physics_2d/godot_area_pair_2d.cpp10
-rw-r--r--servers/physics_2d/godot_area_pair_2d.h2
-rw-r--r--servers/physics_2d/godot_body_2d.cpp3
-rw-r--r--servers/physics_2d/godot_space_2d.cpp14
-rw-r--r--servers/physics_2d/godot_step_2d.cpp4
-rw-r--r--servers/physics_3d/godot_area_3d.cpp1
-rw-r--r--servers/physics_3d/godot_area_pair_3d.cpp10
-rw-r--r--servers/physics_3d/godot_area_pair_3d.h2
-rw-r--r--servers/physics_3d/godot_body_3d.cpp3
-rw-r--r--servers/physics_3d/godot_collision_solver_3d.cpp6
-rw-r--r--servers/physics_3d/godot_collision_solver_3d_sat.cpp79
-rw-r--r--servers/physics_3d/godot_shape_3d.cpp10
-rw-r--r--servers/physics_3d/godot_shape_3d.h7
-rw-r--r--servers/physics_3d/godot_soft_body_3d.cpp10
-rw-r--r--servers/physics_3d/godot_soft_body_3d.h3
-rw-r--r--servers/physics_3d/godot_space_3d.cpp8
-rw-r--r--servers/physics_3d/godot_step_3d.cpp4
-rw-r--r--servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp30
-rw-r--r--servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h3
-rw-r--r--servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp2
-rw-r--r--servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp10
-rw-r--r--servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.h3
-rw-r--r--servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.cpp2
-rw-r--r--servers/rendering/renderer_rd/renderer_storage_rd.cpp2
-rw-r--r--servers/rendering/renderer_rd/shader_compiler_rd.cpp21
-rw-r--r--servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl8
-rw-r--r--servers/rendering/renderer_rd/shaders/scene_forward_clustered_inc.glsl3
-rw-r--r--servers/rendering/renderer_rd/shaders/scene_forward_mobile.glsl15
-rw-r--r--servers/rendering/renderer_rd/shaders/scene_forward_mobile_inc.glsl3
-rw-r--r--servers/rendering/renderer_scene_cull.cpp3
-rw-r--r--servers/rendering/renderer_scene_cull.h15
-rw-r--r--servers/rendering/shader_language.cpp14
-rw-r--r--servers/text/text_server_extension.cpp9
-rw-r--r--servers/text/text_server_extension.h2
-rw-r--r--servers/text_server.cpp22
-rw-r--r--servers/text_server.h1
-rw-r--r--tests/core/io/test_pck_packer.h29
-rw-r--r--thirdparty/README.md76
-rw-r--r--thirdparty/basis_universal/encoder/apg_bmp.c4
-rw-r--r--thirdparty/basis_universal/encoder/basisu_bc7enc.cpp37
-rw-r--r--thirdparty/basis_universal/encoder/basisu_bc7enc.h1
-rw-r--r--thirdparty/basis_universal/encoder/basisu_comp.cpp10
-rw-r--r--thirdparty/basis_universal/encoder/basisu_enc.cpp4
-rw-r--r--thirdparty/basis_universal/encoder/basisu_enc.h10
-rw-r--r--thirdparty/basis_universal/encoder/basisu_resampler.cpp8
-rw-r--r--thirdparty/basis_universal/encoder/cppspmd_sse.h34
-rw-r--r--thirdparty/basis_universal/transcoder/basisu_transcoder.cpp4
-rw-r--r--thirdparty/certs/ca-certificates.crt159
-rw-r--r--thirdparty/graphite/ChangeLog238
-rw-r--r--thirdparty/graphite/src/Pass.cpp9
-rw-r--r--thirdparty/libogg/framing.c9
-rw-r--r--thirdparty/libogg/ogg/config_types.h15
-rw-r--r--thirdparty/libvorbis/COPYING2
-rw-r--r--thirdparty/libvorbis/analysis.c2
-rw-r--r--thirdparty/libvorbis/backends.h2
-rw-r--r--thirdparty/libvorbis/barkmel.c2
-rw-r--r--thirdparty/libvorbis/bitrate.c2
-rw-r--r--thirdparty/libvorbis/bitrate.h2
-rw-r--r--thirdparty/libvorbis/block.c2
-rw-r--r--thirdparty/libvorbis/books/coupled/res_books_51.h2
-rw-r--r--thirdparty/libvorbis/books/coupled/res_books_stereo.h2
-rw-r--r--thirdparty/libvorbis/books/floor/floor_books.h2
-rw-r--r--thirdparty/libvorbis/books/uncoupled/res_books_uncoupled.h2
-rw-r--r--thirdparty/libvorbis/codebook.c2
-rw-r--r--thirdparty/libvorbis/codebook.h2
-rw-r--r--thirdparty/libvorbis/codec_internal.h2
-rw-r--r--thirdparty/libvorbis/envelope.c2
-rw-r--r--thirdparty/libvorbis/envelope.h2
-rw-r--r--thirdparty/libvorbis/floor0.c2
-rw-r--r--thirdparty/libvorbis/floor1.c2
-rw-r--r--thirdparty/libvorbis/highlevel.h2
-rw-r--r--thirdparty/libvorbis/info.c22
-rw-r--r--thirdparty/libvorbis/lookup.c2
-rw-r--r--thirdparty/libvorbis/lookup.h2
-rw-r--r--thirdparty/libvorbis/lookup_data.h2
-rw-r--r--thirdparty/libvorbis/lpc.c2
-rw-r--r--thirdparty/libvorbis/lpc.h2
-rw-r--r--thirdparty/libvorbis/lsp.c5
-rw-r--r--thirdparty/libvorbis/lsp.h2
-rw-r--r--thirdparty/libvorbis/mapping0.c2
-rw-r--r--thirdparty/libvorbis/masking.h2
-rw-r--r--thirdparty/libvorbis/mdct.c2
-rw-r--r--thirdparty/libvorbis/mdct.h2
-rw-r--r--thirdparty/libvorbis/misc.h2
-rw-r--r--thirdparty/libvorbis/modes/floor_all.h2
-rw-r--r--thirdparty/libvorbis/modes/psych_11.h2
-rw-r--r--thirdparty/libvorbis/modes/psych_16.h2
-rw-r--r--thirdparty/libvorbis/modes/psych_44.h2
-rw-r--r--thirdparty/libvorbis/modes/psych_8.h2
-rw-r--r--thirdparty/libvorbis/modes/residue_16.h2
-rw-r--r--thirdparty/libvorbis/modes/residue_44.h2
-rw-r--r--thirdparty/libvorbis/modes/residue_44p51.h2
-rw-r--r--thirdparty/libvorbis/modes/residue_44u.h2
-rw-r--r--thirdparty/libvorbis/modes/residue_8.h2
-rw-r--r--thirdparty/libvorbis/modes/setup_11.h2
-rw-r--r--thirdparty/libvorbis/modes/setup_16.h2
-rw-r--r--thirdparty/libvorbis/modes/setup_22.h2
-rw-r--r--thirdparty/libvorbis/modes/setup_32.h2
-rw-r--r--thirdparty/libvorbis/modes/setup_44.h2
-rw-r--r--thirdparty/libvorbis/modes/setup_44p51.h2
-rw-r--r--thirdparty/libvorbis/modes/setup_44u.h2
-rw-r--r--thirdparty/libvorbis/modes/setup_8.h2
-rw-r--r--thirdparty/libvorbis/modes/setup_X.h2
-rw-r--r--thirdparty/libvorbis/os.h13
-rw-r--r--thirdparty/libvorbis/psy.c26
-rw-r--r--thirdparty/libvorbis/psy.h2
-rw-r--r--thirdparty/libvorbis/psytune.c2
-rw-r--r--thirdparty/libvorbis/registry.c2
-rw-r--r--thirdparty/libvorbis/registry.h2
-rw-r--r--thirdparty/libvorbis/res0.c5
-rw-r--r--thirdparty/libvorbis/scales.h2
-rw-r--r--thirdparty/libvorbis/sharedbook.c17
-rw-r--r--thirdparty/libvorbis/smallft.c2
-rw-r--r--thirdparty/libvorbis/smallft.h2
-rw-r--r--thirdparty/libvorbis/synthesis.c2
-rw-r--r--thirdparty/libvorbis/vorbis/codec.h2
-rw-r--r--thirdparty/libvorbis/vorbis/vorbisenc.h2
-rw-r--r--thirdparty/libvorbis/vorbis/vorbisfile.h2
-rw-r--r--thirdparty/libvorbis/vorbisenc.c5
-rw-r--r--thirdparty/libvorbis/vorbisfile.c25
-rw-r--r--thirdparty/libvorbis/window.c2
-rw-r--r--thirdparty/libvorbis/window.h2
-rw-r--r--thirdparty/libwebp/AUTHORS9
-rw-r--r--thirdparty/libwebp/src/dec/alpha_dec.c2
-rw-r--r--thirdparty/libwebp/src/dec/buffer_dec.c10
-rw-r--r--thirdparty/libwebp/src/dec/frame_dec.c2
-rw-r--r--thirdparty/libwebp/src/dec/io_dec.c151
-rw-r--r--thirdparty/libwebp/src/dec/vp8_dec.c14
-rw-r--r--thirdparty/libwebp/src/dec/vp8i_dec.h4
-rw-r--r--thirdparty/libwebp/src/dec/vp8l_dec.c23
-rw-r--r--thirdparty/libwebp/src/dec/webp_dec.c17
-rw-r--r--thirdparty/libwebp/src/dec/webpi_dec.h4
-rw-r--r--thirdparty/libwebp/src/demux/anim_decode.c23
-rw-r--r--thirdparty/libwebp/src/demux/demux.c25
-rw-r--r--thirdparty/libwebp/src/dsp/alpha_processing.c73
-rw-r--r--thirdparty/libwebp/src/dsp/alpha_processing_neon.c21
-rw-r--r--thirdparty/libwebp/src/dsp/alpha_processing_sse2.c42
-rw-r--r--thirdparty/libwebp/src/dsp/alpha_processing_sse41.c6
-rw-r--r--thirdparty/libwebp/src/dsp/cost.c4
-rw-r--r--thirdparty/libwebp/src/dsp/cpu.c45
-rw-r--r--thirdparty/libwebp/src/dsp/dec.c6
-rw-r--r--thirdparty/libwebp/src/dsp/dec_neon.c68
-rw-r--r--thirdparty/libwebp/src/dsp/dsp.h106
-rw-r--r--thirdparty/libwebp/src/dsp/enc.c6
-rw-r--r--thirdparty/libwebp/src/dsp/filters.c4
-rw-r--r--thirdparty/libwebp/src/dsp/filters_sse2.c5
-rw-r--r--thirdparty/libwebp/src/dsp/lossless.c66
-rw-r--r--thirdparty/libwebp/src/dsp/lossless.h17
-rw-r--r--thirdparty/libwebp/src/dsp/lossless_common.h13
-rw-r--r--thirdparty/libwebp/src/dsp/lossless_enc.c198
-rw-r--r--thirdparty/libwebp/src/dsp/lossless_enc_sse2.c133
-rw-r--r--thirdparty/libwebp/src/dsp/lossless_enc_sse41.c121
-rw-r--r--thirdparty/libwebp/src/dsp/lossless_sse2.c1
-rw-r--r--thirdparty/libwebp/src/dsp/lossless_sse41.c132
-rw-r--r--thirdparty/libwebp/src/dsp/rescaler.c11
-rw-r--r--thirdparty/libwebp/src/dsp/ssim.c2
-rw-r--r--thirdparty/libwebp/src/dsp/upsampling.c10
-rw-r--r--thirdparty/libwebp/src/dsp/yuv.c20
-rw-r--r--thirdparty/libwebp/src/enc/alpha_enc.c8
-rw-r--r--thirdparty/libwebp/src/enc/analysis_enc.c60
-rw-r--r--thirdparty/libwebp/src/enc/backward_references_enc.c201
-rw-r--r--thirdparty/libwebp/src/enc/backward_references_enc.h20
-rw-r--r--thirdparty/libwebp/src/enc/config_enc.c5
-rw-r--r--thirdparty/libwebp/src/enc/frame_enc.c20
-rw-r--r--thirdparty/libwebp/src/enc/histogram_enc.c11
-rw-r--r--thirdparty/libwebp/src/enc/histogram_enc.h6
-rw-r--r--thirdparty/libwebp/src/enc/picture_csp_enc.c14
-rw-r--r--thirdparty/libwebp/src/enc/picture_rescale_enc.c61
-rw-r--r--thirdparty/libwebp/src/enc/picture_tools_enc.c31
-rw-r--r--thirdparty/libwebp/src/enc/syntax_enc.c2
-rw-r--r--thirdparty/libwebp/src/enc/vp8i_enc.h13
-rw-r--r--thirdparty/libwebp/src/enc/vp8l_enc.c669
-rw-r--r--thirdparty/libwebp/src/enc/vp8li_enc.h4
-rw-r--r--thirdparty/libwebp/src/enc/webp_enc.c2
-rw-r--r--thirdparty/libwebp/src/mux/anim_encode.c16
-rw-r--r--thirdparty/libwebp/src/mux/muxedit.c2
-rw-r--r--thirdparty/libwebp/src/mux/muxi.h4
-rw-r--r--thirdparty/libwebp/src/mux/muxread.c6
-rw-r--r--thirdparty/libwebp/src/utils/bit_reader_inl_utils.h9
-rw-r--r--thirdparty/libwebp/src/utils/bit_reader_utils.c7
-rw-r--r--thirdparty/libwebp/src/utils/bit_reader_utils.h10
-rw-r--r--thirdparty/libwebp/src/utils/bit_writer_utils.c4
-rw-r--r--thirdparty/libwebp/src/utils/color_cache_utils.c22
-rw-r--r--thirdparty/libwebp/src/utils/huffman_encode_utils.c3
-rw-r--r--thirdparty/libwebp/src/utils/huffman_encode_utils.h2
-rw-r--r--thirdparty/libwebp/src/utils/rescaler_utils.c114
-rw-r--r--thirdparty/libwebp/src/utils/rescaler_utils.h13
-rw-r--r--thirdparty/libwebp/src/utils/utils.c11
-rw-r--r--thirdparty/libwebp/src/utils/utils.h28
-rw-r--r--thirdparty/libwebp/src/webp/decode.h2
-rw-r--r--thirdparty/libwebp/src/webp/encode.h8
-rw-r--r--thirdparty/meshoptimizer/clusterizer.cpp3
-rw-r--r--thirdparty/meshoptimizer/meshoptimizer.h29
-rw-r--r--thirdparty/meshoptimizer/simplifier.cpp20
-rw-r--r--thirdparty/meshoptimizer/vertexcodec.cpp4
-rw-r--r--thirdparty/meshoptimizer/vertexfilter.cpp156
-rw-r--r--thirdparty/miniupnpc/LICENSE3
-rw-r--r--thirdparty/miniupnpc/include/igd_desc_parse.h (renamed from thirdparty/miniupnpc/miniupnpc/igd_desc_parse.h)0
-rw-r--r--thirdparty/miniupnpc/include/miniupnpc.h (renamed from thirdparty/miniupnpc/miniupnpc/miniupnpc.h)4
-rw-r--r--thirdparty/miniupnpc/include/miniupnpc_declspec.h (renamed from thirdparty/miniupnpc/miniupnpc/miniupnpc_declspec.h)0
-rw-r--r--thirdparty/miniupnpc/include/miniupnpctypes.h (renamed from thirdparty/miniupnpc/miniupnpc/miniupnpctypes.h)6
-rw-r--r--thirdparty/miniupnpc/include/miniwget.h (renamed from thirdparty/miniupnpc/miniupnpc/miniwget.h)0
-rw-r--r--thirdparty/miniupnpc/include/portlistingparse.h (renamed from thirdparty/miniupnpc/miniupnpc/portlistingparse.h)0
-rw-r--r--thirdparty/miniupnpc/include/upnpcommands.h (renamed from thirdparty/miniupnpc/miniupnpc/upnpcommands.h)0
-rw-r--r--thirdparty/miniupnpc/include/upnpdev.h (renamed from thirdparty/miniupnpc/miniupnpc/upnpdev.h)6
-rw-r--r--thirdparty/miniupnpc/include/upnpreplyparse.h (renamed from thirdparty/miniupnpc/miniupnpc/upnpreplyparse.h)0
-rw-r--r--thirdparty/miniupnpc/src/addr_is_reserved.c (renamed from thirdparty/miniupnpc/miniupnpc/addr_is_reserved.c)2
-rw-r--r--thirdparty/miniupnpc/src/addr_is_reserved.h (renamed from thirdparty/miniupnpc/miniupnpc/addr_is_reserved.h)0
-rw-r--r--thirdparty/miniupnpc/src/codelength.h (renamed from thirdparty/miniupnpc/miniupnpc/codelength.h)0
-rw-r--r--thirdparty/miniupnpc/src/connecthostport.c (renamed from thirdparty/miniupnpc/miniupnpc/connecthostport.c)0
-rw-r--r--thirdparty/miniupnpc/src/connecthostport.h (renamed from thirdparty/miniupnpc/miniupnpc/connecthostport.h)0
-rw-r--r--thirdparty/miniupnpc/src/igd_desc_parse.c (renamed from thirdparty/miniupnpc/miniupnpc/igd_desc_parse.c)0
-rw-r--r--thirdparty/miniupnpc/src/minisoap.c (renamed from thirdparty/miniupnpc/miniupnpc/minisoap.c)0
-rw-r--r--thirdparty/miniupnpc/src/minisoap.h (renamed from thirdparty/miniupnpc/miniupnpc/minisoap.h)0
-rw-r--r--thirdparty/miniupnpc/src/minissdpc.c (renamed from thirdparty/miniupnpc/miniupnpc/minissdpc.c)35
-rw-r--r--thirdparty/miniupnpc/src/minissdpc.h (renamed from thirdparty/miniupnpc/miniupnpc/minissdpc.h)0
-rw-r--r--thirdparty/miniupnpc/src/miniupnpc.c (renamed from thirdparty/miniupnpc/miniupnpc/miniupnpc.c)0
-rw-r--r--thirdparty/miniupnpc/src/miniupnpc_socketdef.h (renamed from thirdparty/miniupnpc/miniupnpc/miniupnpc_socketdef.h)0
-rw-r--r--thirdparty/miniupnpc/src/miniupnpcstrings.h (renamed from thirdparty/miniupnpc/miniupnpc/miniupnpcstrings.h)2
-rw-r--r--thirdparty/miniupnpc/src/miniwget.c (renamed from thirdparty/miniupnpc/miniupnpc/miniwget.c)0
-rw-r--r--thirdparty/miniupnpc/src/miniwget_private.h (renamed from thirdparty/miniupnpc/miniupnpc/miniwget_private.h)0
-rw-r--r--thirdparty/miniupnpc/src/minixml.c (renamed from thirdparty/miniupnpc/miniupnpc/minixml.c)0
-rw-r--r--thirdparty/miniupnpc/src/minixml.h (renamed from thirdparty/miniupnpc/miniupnpc/minixml.h)0
-rw-r--r--thirdparty/miniupnpc/src/minixmlvalid.c (renamed from thirdparty/miniupnpc/miniupnpc/minixmlvalid.c)0
-rw-r--r--thirdparty/miniupnpc/src/portlistingparse.c (renamed from thirdparty/miniupnpc/miniupnpc/portlistingparse.c)0
-rw-r--r--thirdparty/miniupnpc/src/receivedata.c (renamed from thirdparty/miniupnpc/miniupnpc/receivedata.c)0
-rw-r--r--thirdparty/miniupnpc/src/receivedata.h (renamed from thirdparty/miniupnpc/miniupnpc/receivedata.h)0
-rw-r--r--thirdparty/miniupnpc/src/upnpcommands.c (renamed from thirdparty/miniupnpc/miniupnpc/upnpcommands.c)0
-rw-r--r--thirdparty/miniupnpc/src/upnpdev.c (renamed from thirdparty/miniupnpc/miniupnpc/upnpdev.c)0
-rw-r--r--thirdparty/miniupnpc/src/upnpreplyparse.c (renamed from thirdparty/miniupnpc/miniupnpc/upnpreplyparse.c)0
-rw-r--r--thirdparty/miniupnpc/src/win32_snprintf.h (renamed from thirdparty/miniupnpc/miniupnpc/win32_snprintf.h)0
-rw-r--r--thirdparty/pcre2/AUTHORS8
-rw-r--r--thirdparty/pcre2/LICENCE8
-rw-r--r--thirdparty/pcre2/src/config.h107
-rw-r--r--thirdparty/pcre2/src/pcre2.h12
-rw-r--r--thirdparty/pcre2/src/pcre2_auto_possess.c13
-rw-r--r--thirdparty/pcre2/src/pcre2_compile.c86
-rw-r--r--thirdparty/pcre2/src/pcre2_dfa_match.c69
-rw-r--r--thirdparty/pcre2/src/pcre2_error.c3
-rw-r--r--thirdparty/pcre2/src/pcre2_jit_compile.c89
-rw-r--r--thirdparty/pcre2/src/pcre2_jit_simd_inc.h819
-rw-r--r--thirdparty/pcre2/src/pcre2_match.c77
-rw-r--r--thirdparty/pcre2/src/pcre2_tables.c347
-rw-r--r--thirdparty/pcre2/src/pcre2_ucd.c6060
-rw-r--r--thirdparty/pcre2/src/pcre2_ucp.h8
-rw-r--r--thirdparty/pcre2/src/sljit/sljitConfigInternal.h14
-rw-r--r--thirdparty/pcre2/src/sljit/sljitExecAllocator.c124
-rw-r--r--thirdparty/pcre2/src/sljit/sljitLir.c25
-rw-r--r--thirdparty/pcre2/src/sljit/sljitLir.h76
-rw-r--r--thirdparty/pcre2/src/sljit/sljitNativeARM_32.c23
-rw-r--r--thirdparty/pcre2/src/sljit/sljitNativeARM_64.c21
-rw-r--r--thirdparty/pcre2/src/sljit/sljitNativeARM_T2_32.c21
-rw-r--r--thirdparty/pcre2/src/sljit/sljitNativeMIPS_32.c2
-rw-r--r--thirdparty/pcre2/src/sljit/sljitNativeMIPS_64.c2
-rw-r--r--thirdparty/pcre2/src/sljit/sljitNativeMIPS_common.c16
-rw-r--r--thirdparty/pcre2/src/sljit/sljitNativePPC_32.c26
-rw-r--r--thirdparty/pcre2/src/sljit/sljitNativePPC_64.c32
-rw-r--r--thirdparty/pcre2/src/sljit/sljitNativePPC_common.c93
-rw-r--r--thirdparty/pcre2/src/sljit/sljitNativeS390X.c1780
-rw-r--r--thirdparty/pcre2/src/sljit/sljitNativeSPARC_32.c3
-rw-r--r--thirdparty/pcre2/src/sljit/sljitNativeSPARC_common.c18
-rw-r--r--thirdparty/pcre2/src/sljit/sljitNativeX86_common.c2
-rw-r--r--thirdparty/pcre2/src/sljit/sljitUtils.c10
-rw-r--r--thirdparty/pcre2/src/sljit/sljitWXExecAllocator.c8
-rw-r--r--thirdparty/tinyexr/tinyexr.cc4
-rw-r--r--thirdparty/tinyexr/tinyexr.h9052
-rw-r--r--thirdparty/wslay/config.h (renamed from thirdparty/wslay/includes/config.h)2
-rw-r--r--thirdparty/wslay/patches/msvcfix.diff (renamed from thirdparty/wslay/msvcfix.diff)7
-rw-r--r--thirdparty/wslay/wslay/wslay.h (renamed from thirdparty/wslay/includes/wslay/wslay.h)140
-rw-r--r--thirdparty/wslay/wslay/wslayver.h (renamed from thirdparty/wslay/includes/wslay/wslayver.h)0
-rw-r--r--thirdparty/wslay/wslay_event.c887
-rw-r--r--thirdparty/wslay/wslay_event.h20
-rw-r--r--thirdparty/wslay/wslay_frame.c306
-rw-r--r--thirdparty/wslay/wslay_frame.h1
-rw-r--r--thirdparty/wslay/wslay_macro.h (renamed from thirdparty/wslay/wslay_stack.h)25
-rw-r--r--thirdparty/wslay/wslay_net.c5
-rw-r--r--thirdparty/wslay/wslay_queue.c98
-rw-r--r--thirdparty/wslay/wslay_queue.h22
-rw-r--r--thirdparty/wslay/wslay_stack.c86
-rw-r--r--thirdparty/xatlas/xatlas.cpp2108
-rw-r--r--thirdparty/xatlas/xatlas.h36
-rw-r--r--thirdparty/zstd/common/bitstream.h2
-rw-r--r--thirdparty/zstd/common/compiler.h3
-rw-r--r--thirdparty/zstd/common/cpu.h2
-rw-r--r--thirdparty/zstd/common/debug.c2
-rw-r--r--thirdparty/zstd/common/debug.h2
-rw-r--r--thirdparty/zstd/common/entropy_common.c2
-rw-r--r--thirdparty/zstd/common/error_private.c2
-rw-r--r--thirdparty/zstd/common/error_private.h6
-rw-r--r--thirdparty/zstd/common/fse.h4
-rw-r--r--thirdparty/zstd/common/fse_decompress.c40
-rw-r--r--thirdparty/zstd/common/huf.h5
-rw-r--r--thirdparty/zstd/common/mem.h8
-rw-r--r--thirdparty/zstd/common/pool.c2
-rw-r--r--thirdparty/zstd/common/pool.h2
-rw-r--r--thirdparty/zstd/common/xxhash.c6
-rw-r--r--thirdparty/zstd/common/xxhash.h2
-rw-r--r--thirdparty/zstd/common/zstd_common.c2
-rw-r--r--thirdparty/zstd/common/zstd_deps.h2
-rw-r--r--thirdparty/zstd/common/zstd_internal.h30
-rw-r--r--thirdparty/zstd/common/zstd_trace.h154
-rw-r--r--thirdparty/zstd/compress/fse_compress.c2
-rw-r--r--thirdparty/zstd/compress/hist.c2
-rw-r--r--thirdparty/zstd/compress/hist.h2
-rw-r--r--thirdparty/zstd/compress/huf_compress.c79
-rw-r--r--thirdparty/zstd/compress/zstd_compress.c1863
-rw-r--r--thirdparty/zstd/compress/zstd_compress_internal.h208
-rw-r--r--thirdparty/zstd/compress/zstd_compress_literals.c8
-rw-r--r--thirdparty/zstd/compress/zstd_compress_literals.h2
-rw-r--r--thirdparty/zstd/compress/zstd_compress_sequences.c20
-rw-r--r--thirdparty/zstd/compress/zstd_compress_sequences.h2
-rw-r--r--thirdparty/zstd/compress/zstd_compress_superblock.c289
-rw-r--r--thirdparty/zstd/compress/zstd_compress_superblock.h2
-rw-r--r--thirdparty/zstd/compress/zstd_cwksp.h195
-rw-r--r--thirdparty/zstd/compress/zstd_double_fast.c6
-rw-r--r--thirdparty/zstd/compress/zstd_double_fast.h2
-rw-r--r--thirdparty/zstd/compress/zstd_fast.c10
-rw-r--r--thirdparty/zstd/compress/zstd_fast.h2
-rw-r--r--thirdparty/zstd/compress/zstd_lazy.c1056
-rw-r--r--thirdparty/zstd/compress/zstd_lazy.h40
-rw-r--r--thirdparty/zstd/compress/zstd_ldm.c462
-rw-r--r--thirdparty/zstd/compress/zstd_ldm.h5
-rw-r--r--thirdparty/zstd/compress/zstd_ldm_geartab.h103
-rw-r--r--thirdparty/zstd/compress/zstd_opt.c2
-rw-r--r--thirdparty/zstd/compress/zstd_opt.h2
-rw-r--r--thirdparty/zstd/compress/zstdmt_compress.c32
-rw-r--r--thirdparty/zstd/compress/zstdmt_compress.h10
-rw-r--r--thirdparty/zstd/decompress/huf_decompress.c87
-rw-r--r--thirdparty/zstd/decompress/zstd_ddict.c2
-rw-r--r--thirdparty/zstd/decompress/zstd_ddict.h2
-rw-r--r--thirdparty/zstd/decompress/zstd_decompress.c253
-rw-r--r--thirdparty/zstd/decompress/zstd_decompress_block.c92
-rw-r--r--thirdparty/zstd/decompress/zstd_decompress_block.h2
-rw-r--r--thirdparty/zstd/decompress/zstd_decompress_internal.h19
-rw-r--r--thirdparty/zstd/zstd.h325
-rw-r--r--thirdparty/zstd/zstd_errors.h (renamed from thirdparty/zstd/common/zstd_errors.h)2
-rw-r--r--version.py1
858 files changed, 64445 insertions, 41985 deletions
diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt
index ca7f065bd6..7b212485ba 100644
--- a/COPYRIGHT.txt
+++ b/COPYRIGHT.txt
@@ -266,7 +266,7 @@ Copyright: lieff
License: CC0-1.0
Files: ./thirdparty/miniupnpc/
-Comment: MiniUPnPc
+Comment: MiniUPnP Project
Copyright: 2005-2021, Thomas Bernard
License: BSD-3-clause
@@ -369,8 +369,8 @@ License: Apache-2.0
Files: ./thirdparty/pcre2/
Comment: PCRE2
-Copyright: 1997-2020, University of Cambridge
- 2009-2020, Zoltan Herczeg
+Copyright: 1997-2021, University of Cambridge
+ 2009-2021, Zoltan Herczeg
License: BSD-3-clause
Files: ./thirdparty/pvrtccompressor/
@@ -400,7 +400,7 @@ License: Expat
Files: ./thirdparty/tinyexr/
Comment: TinyEXR
-Copyright: 2014-2020, Syoyo Fujita
+Copyright: 2014-2021, Syoyo Fujita
2002, Industrial Light & Magic, a division of Lucas Digital Ltd. LLC
License: BSD-3-clause
@@ -447,7 +447,7 @@ License: Zlib
Files: ./thirdparty/zstd/
Comment: Zstandard
-Copyright: 2016-2020, Facebook, Inc.
+Copyright: 2016-2021, Facebook, Inc.
License: BSD-3-clause
diff --git a/SConstruct b/SConstruct
index fea0e0ab28..83bd1560ff 100644
--- a/SConstruct
+++ b/SConstruct
@@ -16,7 +16,6 @@ from collections import OrderedDict
import methods
import glsl_builders
import gles3_builders
-from platform_methods import run_in_subprocess
# Scan possible build platforms
@@ -301,6 +300,13 @@ opts.Update(env_base)
env_base["platform"] = selected_platform # Must always be re-set after calling opts.Update().
Help(opts.GenerateHelpText(env_base))
+# Detect and print a warning listing unknown SCons variables to ease troubleshooting.
+unknown = opts.UnknownVariables()
+if unknown:
+ print("WARNING: Unknown SCons variables were passed and will be ignored:")
+ for item in unknown.items():
+ print(" " + item[0] + "=" + item[1])
+
# add default include paths
env_base.Prepend(CPPPATH=["#"])
@@ -706,20 +712,14 @@ if selected_platform in platform_list:
suffix="glsl.gen.h",
src_suffix=".glsl",
),
+ "GLES3_GLSL": env.Builder(
+ action=env.Run(gles3_builders.build_gles3_headers, 'Building GLES3 GLSL header: "$TARGET"'),
+ suffix="glsl.gen.h",
+ src_suffix=".glsl",
+ ),
}
env.Append(BUILDERS=GLSL_BUILDERS)
- if not env["platform"] == "server":
- env.Append(
- BUILDERS={
- "GLES3_GLSL": env.Builder(
- action=run_in_subprocess(gles3_builders.build_gles3_headers),
- suffix="glsl.gen.h",
- src_suffix=".glsl",
- )
- }
- )
-
scons_cache_path = os.environ.get("SCONS_CACHE")
if scons_cache_path != None:
CacheDir(scons_cache_path)
diff --git a/core/config/project_settings.cpp b/core/config/project_settings.cpp
index f37e7f5956..336f95c925 100644
--- a/core/config/project_settings.cpp
+++ b/core/config/project_settings.cpp
@@ -368,12 +368,12 @@ void ProjectSettings::_convert_to_last_version(int p_from_version) {
* If a project file is found, load it or fail.
* If nothing was found, error out.
*/
-Error ProjectSettings::_setup(const String &p_path, const String &p_main_pack, bool p_upwards) {
+Error ProjectSettings::_setup(const String &p_path, const String &p_main_pack, bool p_upwards, bool p_ignore_override) {
// If looking for files in a network client, use it directly
if (FileAccessNetworkClient::get_singleton()) {
Error err = _load_settings_text_or_binary("res://project.godot", "res://project.binary");
- if (err == OK) {
+ if (err == OK && !p_ignore_override) {
// Optional, we don't mind if it fails
_load_settings_text("res://override.cfg");
}
@@ -387,7 +387,7 @@ Error ProjectSettings::_setup(const String &p_path, const String &p_main_pack, b
ERR_FAIL_COND_V_MSG(!ok, ERR_CANT_OPEN, "Cannot open resource pack '" + p_main_pack + "'.");
Error err = _load_settings_text_or_binary("res://project.godot", "res://project.binary");
- if (err == OK) {
+ if (err == OK && !p_ignore_override) {
// Load override from location of the main pack
// Optional, we don't mind if it fails
_load_settings_text(p_main_pack.get_base_dir().plus_file("override.cfg"));
@@ -437,7 +437,7 @@ Error ProjectSettings::_setup(const String &p_path, const String &p_main_pack, b
// If we opened our package, try and load our project.
if (found) {
Error err = _load_settings_text_or_binary("res://project.godot", "res://project.binary");
- if (err == OK) {
+ if (err == OK && !p_ignore_override) {
// Load override from location of the executable.
// Optional, we don't mind if it fails.
_load_settings_text(exec_path.get_base_dir().plus_file("override.cfg"));
@@ -458,7 +458,7 @@ Error ProjectSettings::_setup(const String &p_path, const String &p_main_pack, b
}
Error err = _load_settings_text_or_binary("res://project.godot", "res://project.binary");
- if (err == OK) {
+ if (err == OK && !p_ignore_override) {
// Optional, we don't mind if it fails.
_load_settings_text("res://override.cfg");
}
@@ -481,7 +481,7 @@ Error ProjectSettings::_setup(const String &p_path, const String &p_main_pack, b
resource_path = current_dir;
resource_path = resource_path.replace("\\", "/"); // Windows path to Unix path just in case.
err = _load_settings_text_or_binary(current_dir.plus_file("project.godot"), current_dir.plus_file("project.binary"));
- if (err == OK) {
+ if (err == OK && !p_ignore_override) {
// Optional, we don't mind if it fails.
_load_settings_text(current_dir.plus_file("override.cfg"));
found = true;
@@ -513,8 +513,8 @@ Error ProjectSettings::_setup(const String &p_path, const String &p_main_pack, b
return OK;
}
-Error ProjectSettings::setup(const String &p_path, const String &p_main_pack, bool p_upwards) {
- Error err = _setup(p_path, p_main_pack, p_upwards);
+Error ProjectSettings::setup(const String &p_path, const String &p_main_pack, bool p_upwards, bool p_ignore_override) {
+ Error err = _setup(p_path, p_main_pack, p_upwards, p_ignore_override);
if (err == OK) {
String custom_settings = GLOBAL_DEF("application/config/project_settings_override", "");
if (custom_settings != "") {
diff --git a/core/config/project_settings.h b/core/config/project_settings.h
index ca37401751..aaa8e383f7 100644
--- a/core/config/project_settings.h
+++ b/core/config/project_settings.h
@@ -117,7 +117,7 @@ protected:
void _add_property_info_bind(const Dictionary &p_info);
- Error _setup(const String &p_path, const String &p_main_pack, bool p_upwards = false);
+ Error _setup(const String &p_path, const String &p_main_pack, bool p_upwards = false, bool p_ignore_override = false);
void _add_builtin_input_map();
@@ -156,7 +156,7 @@ public:
void set_builtin_order(const String &p_name);
bool is_builtin_setting(const String &p_name) const;
- Error setup(const String &p_path, const String &p_main_pack, bool p_upwards = false);
+ Error setup(const String &p_path, const String &p_main_pack, bool p_upwards = false, bool p_ignore_override = false);
Error save_custom(const String &p_path = "", const CustomMap &p_custom = CustomMap(), const Vector<String> &p_custom_features = Vector<String>(), bool p_merge_with_current = true);
Error save();
diff --git a/core/core_bind.cpp b/core/core_bind.cpp
index d42d39a159..0bf6efc96d 100644
--- a/core/core_bind.cpp
+++ b/core/core_bind.cpp
@@ -315,6 +315,10 @@ Error OS::set_thread_name(const String &p_name) {
return ::Thread::get_caller_id();
};
+::Thread::ID OS::get_main_thread_id() const {
+ return ::Thread::get_main_id();
+};
+
bool OS::has_feature(const String &p_feature) const {
return ::OS::get_singleton()->has_feature(p_feature);
}
@@ -601,6 +605,7 @@ void OS::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_thread_name", "name"), &OS::set_thread_name);
ClassDB::bind_method(D_METHOD("get_thread_caller_id"), &OS::get_thread_caller_id);
+ ClassDB::bind_method(D_METHOD("get_main_thread_id"), &OS::get_main_thread_id);
ClassDB::bind_method(D_METHOD("has_feature", "tag_name"), &OS::has_feature);
diff --git a/core/core_bind.h b/core/core_bind.h
index 641e3a33ae..4bacfa720c 100644
--- a/core/core_bind.h
+++ b/core/core_bind.h
@@ -237,6 +237,7 @@ public:
Error set_thread_name(const String &p_name);
Thread::ID get_thread_caller_id() const;
+ Thread::ID get_main_thread_id() const;
bool has_feature(const String &p_feature) const;
diff --git a/core/extension/gdnative_interface.cpp b/core/extension/gdnative_interface.cpp
index 4770c9c65f..19988a26cb 100644
--- a/core/extension/gdnative_interface.cpp
+++ b/core/extension/gdnative_interface.cpp
@@ -774,13 +774,25 @@ static GDNativeTypePtr gdnative_packed_vector3_array_operator_index_const(const
static GDNativeVariantPtr gdnative_array_operator_index(GDNativeTypePtr p_self, GDNativeInt p_index) {
Array *self = (Array *)p_self;
ERR_FAIL_INDEX_V(p_index, self->size(), nullptr);
- return (GDNativeTypePtr)&self[p_index];
+ return (GDNativeVariantPtr)&self->operator[](p_index);
}
static GDNativeVariantPtr gdnative_array_operator_index_const(const GDNativeTypePtr p_self, GDNativeInt p_index) {
const Array *self = (const Array *)p_self;
ERR_FAIL_INDEX_V(p_index, self->size(), nullptr);
- return (GDNativeTypePtr)&self[p_index];
+ return (GDNativeVariantPtr)&self->operator[](p_index);
+}
+
+/* Dictionary functions */
+
+static GDNativeVariantPtr gdnative_dictionary_operator_index(GDNativeTypePtr p_self, const GDNativeVariantPtr p_key) {
+ Dictionary *self = (Dictionary *)p_self;
+ return (GDNativeVariantPtr)&self->operator[](*(const Variant *)p_key);
+}
+
+static GDNativeVariantPtr gdnative_dictionary_operator_index_const(const GDNativeTypePtr p_self, const GDNativeVariantPtr p_key) {
+ const Dictionary *self = (const Dictionary *)p_self;
+ return (GDNativeVariantPtr)&self->operator[](*(const Variant *)p_key);
}
/* OBJECT API */
@@ -1001,6 +1013,11 @@ void gdnative_setup_interface(GDNativeInterface *p_interface) {
gdni.array_operator_index = gdnative_array_operator_index;
gdni.array_operator_index_const = gdnative_array_operator_index_const;
+ /* Dictionary functions */
+
+ gdni.dictionary_operator_index = gdnative_dictionary_operator_index;
+ gdni.dictionary_operator_index_const = gdnative_dictionary_operator_index_const;
+
/* OBJECT */
gdni.object_method_bind_call = gdnative_object_method_bind_call;
diff --git a/core/extension/gdnative_interface.h b/core/extension/gdnative_interface.h
index 8f8cb5a3e0..e411a9d85b 100644
--- a/core/extension/gdnative_interface.h
+++ b/core/extension/gdnative_interface.h
@@ -417,6 +417,11 @@ typedef struct {
GDNativeVariantPtr (*array_operator_index)(GDNativeTypePtr p_self, GDNativeInt p_index); // p_self should be an Array ptr
GDNativeVariantPtr (*array_operator_index_const)(const GDNativeTypePtr p_self, GDNativeInt p_index); // p_self should be an Array ptr
+ /* Dictionary functions */
+
+ GDNativeVariantPtr (*dictionary_operator_index)(GDNativeTypePtr p_self, const GDNativeVariantPtr p_key); // p_self should be an Dictionary ptr
+ GDNativeVariantPtr (*dictionary_operator_index_const)(const GDNativeTypePtr p_self, const GDNativeVariantPtr p_key); // p_self should be an Dictionary ptr
+
/* OBJECT */
void (*object_method_bind_call)(const GDNativeMethodBindPtr p_method_bind, GDNativeObjectPtr p_instance, const GDNativeVariantPtr *p_args, GDNativeInt p_arg_count, GDNativeVariantPtr r_ret, GDNativeCallError *r_error);
diff --git a/core/input/input.cpp b/core/input/input.cpp
index 4b5a84f401..d0144ca47f 100644
--- a/core/input/input.cpp
+++ b/core/input/input.cpp
@@ -91,6 +91,7 @@ Input::MouseMode Input::get_mouse_mode() const {
void Input::_bind_methods() {
ClassDB::bind_method(D_METHOD("is_key_pressed", "keycode"), &Input::is_key_pressed);
+ ClassDB::bind_method(D_METHOD("is_physical_key_pressed", "keycode"), &Input::is_physical_key_pressed);
ClassDB::bind_method(D_METHOD("is_mouse_button_pressed", "button"), &Input::is_mouse_button_pressed);
ClassDB::bind_method(D_METHOD("is_joy_button_pressed", "device", "button"), &Input::is_joy_button_pressed);
ClassDB::bind_method(D_METHOD("is_action_pressed", "action", "exact_match"), &Input::is_action_pressed, DEFVAL(false));
@@ -223,6 +224,11 @@ bool Input::is_key_pressed(Key p_keycode) const {
return keys_pressed.has(p_keycode);
}
+bool Input::is_physical_key_pressed(Key p_keycode) const {
+ _THREAD_SAFE_METHOD_
+ return physical_keys_pressed.has(p_keycode);
+}
+
bool Input::is_mouse_button_pressed(MouseButton p_button) const {
_THREAD_SAFE_METHOD_
return (mouse_button_mask & mouse_button_to_mask(p_button)) != MouseButton::NONE;
@@ -465,6 +471,13 @@ void Input::_parse_input_event_impl(const Ref<InputEvent> &p_event, bool p_is_em
keys_pressed.erase(k->get_keycode());
}
}
+ if (k.is_valid() && !k->is_echo() && k->get_physical_keycode() != Key::NONE) {
+ if (k->is_pressed()) {
+ physical_keys_pressed.insert(k->get_physical_keycode());
+ } else {
+ physical_keys_pressed.erase(k->get_physical_keycode());
+ }
+ }
Ref<InputEventMouseButton> mb = p_event;
@@ -714,11 +727,11 @@ Point2i Input::warp_mouse_motion(const Ref<InputEventMouseMotion> &p_motion, con
// detect the warp: if the relative distance is greater than the half of the size of the relevant rect
// (checked per each axis), it will be considered as the consequence of a former pointer warp.
- const Point2i rel_sgn(p_motion->get_relative().x >= 0.0f ? 1 : -1, p_motion->get_relative().y >= 0.0 ? 1 : -1);
+ const Point2i rel_sign(p_motion->get_relative().x >= 0.0f ? 1 : -1, p_motion->get_relative().y >= 0.0 ? 1 : -1);
const Size2i warp_margin = p_rect.size * 0.5f;
const Point2i rel_warped(
- Math::fmod(p_motion->get_relative().x + rel_sgn.x * warp_margin.x, p_rect.size.x) - rel_sgn.x * warp_margin.x,
- Math::fmod(p_motion->get_relative().y + rel_sgn.y * warp_margin.y, p_rect.size.y) - rel_sgn.y * warp_margin.y);
+ Math::fmod(p_motion->get_relative().x + rel_sign.x * warp_margin.x, p_rect.size.x) - rel_sign.x * warp_margin.x,
+ Math::fmod(p_motion->get_relative().y + rel_sign.y * warp_margin.y, p_rect.size.y) - rel_sign.y * warp_margin.y);
const Point2i pos_local = p_motion->get_global_position() - p_rect.position;
const Point2i pos_warped(Math::fposmod(pos_local.x, p_rect.size.x), Math::fposmod(pos_local.y, p_rect.size.y));
@@ -862,6 +875,7 @@ void Input::release_pressed_events() {
flush_buffered_events(); // this is needed to release actions strengths
keys_pressed.clear();
+ physical_keys_pressed.clear();
joy_buttons_pressed.clear();
_joy_axis.clear();
diff --git a/core/input/input.h b/core/input/input.h
index dd57ebb563..faec654a3c 100644
--- a/core/input/input.h
+++ b/core/input/input.h
@@ -87,6 +87,7 @@ public:
private:
MouseButton mouse_button_mask = MouseButton::NONE;
+ Set<Key> physical_keys_pressed;
Set<Key> keys_pressed;
Set<JoyButton> joy_buttons_pressed;
Map<JoyAxis, float> _joy_axis;
@@ -247,6 +248,7 @@ public:
static Input *get_singleton();
bool is_key_pressed(Key p_keycode) const;
+ bool is_physical_key_pressed(Key p_keycode) const;
bool is_mouse_button_pressed(MouseButton p_button) const;
bool is_joy_button_pressed(int p_device, JoyButton p_button) const;
bool is_action_pressed(const StringName &p_action, bool p_exact = false) const;
diff --git a/core/io/packed_data_container.cpp b/core/io/packed_data_container.cpp
index 4a76f0191d..d34b5b6fe3 100644
--- a/core/io/packed_data_container.cpp
+++ b/core/io/packed_data_container.cpp
@@ -100,6 +100,7 @@ Variant PackedDataContainer::_iter_get_ofs(const Variant &p_iter, uint32_t p_off
}
Variant PackedDataContainer::_get_at_ofs(uint32_t p_ofs, const uint8_t *p_buf, bool &err) const {
+ ERR_FAIL_COND_V(p_ofs + 4 > (uint32_t)data.size(), Variant());
uint32_t type = decode_uint32(p_buf + p_ofs);
if (type == TYPE_ARRAY || type == TYPE_DICT) {
@@ -122,6 +123,7 @@ Variant PackedDataContainer::_get_at_ofs(uint32_t p_ofs, const uint8_t *p_buf, b
}
uint32_t PackedDataContainer::_type_at_ofs(uint32_t p_ofs) const {
+ ERR_FAIL_COND_V(p_ofs + 4 > (uint32_t)data.size(), 0);
const uint8_t *rd = data.ptr();
ERR_FAIL_COND_V(!rd, 0);
const uint8_t *r = &rd[p_ofs];
@@ -131,6 +133,7 @@ uint32_t PackedDataContainer::_type_at_ofs(uint32_t p_ofs) const {
}
int PackedDataContainer::_size(uint32_t p_ofs) const {
+ ERR_FAIL_COND_V(p_ofs + 4 > (uint32_t)data.size(), 0);
const uint8_t *rd = data.ptr();
ERR_FAIL_COND_V(!rd, 0);
const uint8_t *r = &rd[p_ofs];
@@ -149,6 +152,7 @@ int PackedDataContainer::_size(uint32_t p_ofs) const {
}
Variant PackedDataContainer::_key_at_ofs(uint32_t p_ofs, const Variant &p_key, bool &err) const {
+ ERR_FAIL_COND_V(p_ofs + 4 > (uint32_t)data.size(), Variant());
const uint8_t *rd = data.ptr();
if (!rd) {
err = true;
diff --git a/core/io/pck_packer.cpp b/core/io/pck_packer.cpp
index 806a95398f..8d75581342 100644
--- a/core/io/pck_packer.cpp
+++ b/core/io/pck_packer.cpp
@@ -47,13 +47,14 @@ static int _get_pad(int p_alignment, int p_n) {
}
void PCKPacker::_bind_methods() {
- ClassDB::bind_method(D_METHOD("pck_start", "pck_name", "alignment", "key", "encrypt_directory"), &PCKPacker::pck_start, DEFVAL(0), DEFVAL(String()), DEFVAL(false));
+ ClassDB::bind_method(D_METHOD("pck_start", "pck_name", "alignment", "key", "encrypt_directory"), &PCKPacker::pck_start, DEFVAL(32), DEFVAL("0000000000000000000000000000000000000000000000000000000000000000"), DEFVAL(false));
ClassDB::bind_method(D_METHOD("add_file", "pck_path", "source_path", "encrypt"), &PCKPacker::add_file, DEFVAL(false));
ClassDB::bind_method(D_METHOD("flush", "verbose"), &PCKPacker::flush, DEFVAL(false));
}
Error PCKPacker::pck_start(const String &p_file, int p_alignment, const String &p_key, bool p_encrypt_directory) {
ERR_FAIL_COND_V_MSG((p_key.is_empty() || !p_key.is_valid_hex_number(false) || p_key.length() != 64), ERR_CANT_CREATE, "Invalid Encryption Key (must be 64 characters long).");
+ ERR_FAIL_COND_V_MSG(p_alignment <= 0, ERR_CANT_CREATE, "Invalid alignment, must be greater then 0.");
String _key = p_key.to_lower();
key.resize(32);
diff --git a/core/io/pck_packer.h b/core/io/pck_packer.h
index 3d2ce8f240..bd8902a01d 100644
--- a/core/io/pck_packer.h
+++ b/core/io/pck_packer.h
@@ -58,7 +58,7 @@ class PCKPacker : public RefCounted {
Vector<File> files;
public:
- Error pck_start(const String &p_file, int p_alignment = 0, const String &p_key = String(), bool p_encrypt_directory = false);
+ Error pck_start(const String &p_file, int p_alignment = 32, const String &p_key = "0000000000000000000000000000000000000000000000000000000000000000", bool p_encrypt_directory = false);
Error add_file(const String &p_file, const String &p_src, bool p_encrypt = false);
Error flush(bool p_verbose = false);
diff --git a/core/io/resource_importer.h b/core/io/resource_importer.h
index a1cacbd306..cd583e2533 100644
--- a/core/io/resource_importer.h
+++ b/core/io/resource_importer.h
@@ -134,8 +134,8 @@ public:
virtual int get_preset_count() const { return 0; }
virtual String get_preset_name(int p_idx) const { return String(); }
- virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const = 0;
- virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const = 0;
+ virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const = 0;
+ virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const = 0;
virtual String get_option_group_file() const { return String(); }
virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) = 0;
diff --git a/core/math/basis.cpp b/core/math/basis.cpp
index 3d893afb4d..566300c716 100644
--- a/core/math/basis.cpp
+++ b/core/math/basis.cpp
@@ -261,7 +261,7 @@ Vector3 Basis::get_scale_abs() const {
}
Vector3 Basis::get_scale_local() const {
- real_t det_sign = SGN(determinant());
+ real_t det_sign = SIGN(determinant());
return det_sign * Vector3(elements[0].length(), elements[1].length(), elements[2].length());
}
@@ -287,7 +287,7 @@ Vector3 Basis::get_scale() const {
// matrix elements.
//
// The rotation part of this decomposition is returned by get_rotation* functions.
- real_t det_sign = SGN(determinant());
+ real_t det_sign = SIGN(determinant());
return det_sign * get_scale_abs();
}
diff --git a/core/math/geometry_2d.h b/core/math/geometry_2d.h
index 6010159597..028ac0f4eb 100644
--- a/core/math/geometry_2d.h
+++ b/core/math/geometry_2d.h
@@ -181,8 +181,7 @@ public:
D = Vector2(D.x * Bn.x + D.y * Bn.y, D.y * Bn.x - D.x * Bn.y);
// Fail if C x B and D x B have the same sign (segments don't intersect).
- // (equivalent to condition (C.y < 0 && D.y < CMP_EPSILON) || (C.y > 0 && D.y > CMP_EPSILON))
- if (C.y * D.y > CMP_EPSILON) {
+ if ((C.y < -CMP_EPSILON && D.y < -CMP_EPSILON) || (C.y > CMP_EPSILON && D.y > CMP_EPSILON)) {
return false;
}
diff --git a/core/math/math_funcs.cpp b/core/math/math_funcs.cpp
index bbed257f60..2b6d92fe0e 100644
--- a/core/math/math_funcs.cpp
+++ b/core/math/math_funcs.cpp
@@ -53,6 +53,10 @@ uint32_t Math::rand() {
return default_rand.rand();
}
+double Math::randfn(double mean, double deviation) {
+ return default_rand.randfn(mean, deviation);
+}
+
int Math::step_decimals(double p_step) {
static const int maxn = 10;
static const double sd[maxn] = {
diff --git a/core/math/math_funcs.h b/core/math/math_funcs.h
index b3eabd3e7a..8df45255c9 100644
--- a/core/math/math_funcs.h
+++ b/core/math/math_funcs.h
@@ -266,8 +266,8 @@ public:
float s = CLAMP((p_s - p_from) / (p_to - p_from), 0.0f, 1.0f);
return s * s * (3.0f - 2.0f * s);
}
- static _ALWAYS_INLINE_ double move_toward(double p_from, double p_to, double p_delta) { return abs(p_to - p_from) <= p_delta ? p_to : p_from + SGN(p_to - p_from) * p_delta; }
- static _ALWAYS_INLINE_ float move_toward(float p_from, float p_to, float p_delta) { return abs(p_to - p_from) <= p_delta ? p_to : p_from + SGN(p_to - p_from) * p_delta; }
+ static _ALWAYS_INLINE_ double move_toward(double p_from, double p_to, double p_delta) { return abs(p_to - p_from) <= p_delta ? p_to : p_from + SIGN(p_to - p_from) * p_delta; }
+ static _ALWAYS_INLINE_ float move_toward(float p_from, float p_to, float p_delta) { return abs(p_to - p_from) <= p_delta ? p_to : p_from + SIGN(p_to - p_from) * p_delta; }
static _ALWAYS_INLINE_ double linear2db(double p_linear) { return Math::log(p_linear) * 8.6858896380650365530225783783321; }
static _ALWAYS_INLINE_ float linear2db(float p_linear) { return Math::log(p_linear) * 8.6858896380650365530225783783321; }
@@ -318,6 +318,7 @@ public:
static uint32_t rand();
static _ALWAYS_INLINE_ double randd() { return (double)rand() / (double)Math::RANDOM_32BIT_MAX; }
static _ALWAYS_INLINE_ float randf() { return (float)rand() / (float)Math::RANDOM_32BIT_MAX; }
+ static double randfn(double mean, double deviation);
static double random(double from, double to);
static float random(float from, float to);
diff --git a/core/math/transform_2d.cpp b/core/math/transform_2d.cpp
index df43c605f9..4bdeaa2a58 100644
--- a/core/math/transform_2d.cpp
+++ b/core/math/transform_2d.cpp
@@ -69,12 +69,12 @@ void Transform2D::rotate(const real_t p_phi) {
real_t Transform2D::get_skew() const {
real_t det = basis_determinant();
- return Math::acos(elements[0].normalized().dot(SGN(det) * elements[1].normalized())) - Math_PI * 0.5;
+ return Math::acos(elements[0].normalized().dot(SIGN(det) * elements[1].normalized())) - Math_PI * 0.5;
}
void Transform2D::set_skew(const real_t p_angle) {
real_t det = basis_determinant();
- elements[1] = SGN(det) * elements[0].rotated((Math_PI * 0.5 + p_angle)).normalized() * elements[1].length();
+ elements[1] = SIGN(det) * elements[0].rotated((Math_PI * 0.5 + p_angle)).normalized() * elements[1].length();
}
real_t Transform2D::get_rotation() const {
@@ -111,7 +111,7 @@ Transform2D::Transform2D(const real_t p_rot, const Size2 &p_scale, const real_t
}
Size2 Transform2D::get_scale() const {
- real_t det_sign = SGN(basis_determinant());
+ real_t det_sign = SIGN(basis_determinant());
return Size2(elements[0].length(), det_sign * elements[1].length());
}
diff --git a/core/math/vector2.cpp b/core/math/vector2.cpp
index 6259bdead0..718e94eee4 100644
--- a/core/math/vector2.cpp
+++ b/core/math/vector2.cpp
@@ -79,7 +79,7 @@ real_t Vector2::angle_to(const Vector2 &p_vector2) const {
}
real_t Vector2::angle_to_point(const Vector2 &p_vector2) const {
- return (*this - p_vector2).angle();
+ return (p_vector2 - *this).angle();
}
real_t Vector2::dot(const Vector2 &p_other) const {
@@ -91,7 +91,7 @@ real_t Vector2::cross(const Vector2 &p_other) const {
}
Vector2 Vector2::sign() const {
- return Vector2(SGN(x), SGN(y));
+ return Vector2(SIGN(x), SIGN(y));
}
Vector2 Vector2::floor() const {
diff --git a/core/math/vector2.h b/core/math/vector2.h
index 332c0475fa..0a7b9d3faf 100644
--- a/core/math/vector2.h
+++ b/core/math/vector2.h
@@ -345,7 +345,7 @@ struct Vector2i {
bool operator!=(const Vector2i &p_vec2) const;
real_t aspect() const { return width / (real_t)height; }
- Vector2i sign() const { return Vector2i(SGN(x), SGN(y)); }
+ Vector2i sign() const { return Vector2i(SIGN(x), SIGN(y)); }
Vector2i abs() const { return Vector2i(ABS(x), ABS(y)); }
Vector2i clamp(const Vector2i &p_min, const Vector2i &p_max) const;
diff --git a/core/math/vector3.h b/core/math/vector3.h
index dc9aa60458..02a56f684e 100644
--- a/core/math/vector3.h
+++ b/core/math/vector3.h
@@ -217,7 +217,7 @@ Vector3 Vector3::abs() const {
}
Vector3 Vector3::sign() const {
- return Vector3(SGN(x), SGN(y), SGN(z));
+ return Vector3(SIGN(x), SIGN(y), SIGN(z));
}
Vector3 Vector3::floor() const {
diff --git a/core/math/vector3i.h b/core/math/vector3i.h
index 9308d09045..10c28a5bb9 100644
--- a/core/math/vector3i.h
+++ b/core/math/vector3i.h
@@ -115,7 +115,7 @@ Vector3i Vector3i::abs() const {
}
Vector3i Vector3i::sign() const {
- return Vector3i(SGN(x), SGN(y), SGN(z));
+ return Vector3i(SIGN(x), SIGN(y), SIGN(z));
}
/* Operators */
diff --git a/core/object/object.cpp b/core/object/object.cpp
index 498f116997..90bd697d37 100644
--- a/core/object/object.cpp
+++ b/core/object/object.cpp
@@ -628,7 +628,10 @@ void Object::get_property_list(List<PropertyInfo> *p_list, bool p_reversed) cons
script_instance->get_property_list(p_list);
}
- _get_property_listv(p_list, p_reversed);
+ if (_extension) {
+ p_list->push_back(PropertyInfo(Variant::NIL, _extension->class_name, PROPERTY_HINT_NONE, String(), PROPERTY_USAGE_CATEGORY));
+ ClassDB::get_property_list(_extension->class_name, p_list, true, this);
+ }
if (_extension && _extension->get_property_list) {
uint32_t pcount;
@@ -641,6 +644,8 @@ void Object::get_property_list(List<PropertyInfo> *p_list, bool p_reversed) cons
}
}
+ _get_property_listv(p_list, p_reversed);
+
if (!is_class("Script")) { // can still be set, but this is for user-friendliness
p_list->push_back(PropertyInfo(Variant::OBJECT, "script", PROPERTY_HINT_RESOURCE_TYPE, "Script", PROPERTY_USAGE_DEFAULT));
}
@@ -1405,7 +1410,7 @@ void Object::_disconnect(const StringName &p_signal, const Callable &p_callable,
ERR_FAIL_COND_MSG(!s->slot_map.has(*p_callable.get_base_comparator()), "Disconnecting nonexistent signal '" + p_signal + "', callable: " + p_callable + ".");
- SignalData::Slot *slot = &s->slot_map[p_callable];
+ SignalData::Slot *slot = &s->slot_map[*p_callable.get_base_comparator()];
if (!p_force) {
slot->reference_count--; // by default is zero, if it was not referenced it will go below it
diff --git a/core/os/os.h b/core/os/os.h
index 52bf731501..3042696cce 100644
--- a/core/os/os.h
+++ b/core/os/os.h
@@ -243,7 +243,7 @@ public:
void set_stdout_enabled(bool p_enabled);
void set_stderr_enabled(bool p_enabled);
- bool is_single_window() const;
+ virtual bool is_single_window() const;
virtual void disable_crash_handler() {}
virtual bool is_disable_crash_handler() const { return false; }
@@ -298,6 +298,7 @@ public:
virtual void set_exit_code(int p_code);
virtual int get_processor_count() const;
+ virtual int get_default_thread_pool_size() const { return get_processor_count(); }
virtual String get_unique_id() const;
diff --git a/core/string/ustring.cpp b/core/string/ustring.cpp
index 4798cab641..70236231a2 100644
--- a/core/string/ustring.cpp
+++ b/core/string/ustring.cpp
@@ -38,6 +38,7 @@
#include "core/string/translation.h"
#include "core/string/ucaps.h"
#include "core/variant/variant.h"
+#include "core/version_generated.gen.h"
#include <stdio.h>
#include <stdlib.h>
@@ -4868,15 +4869,20 @@ String TTRN(const String &p_text, const String &p_text_plural, int p_n, const St
return p_text_plural;
}
+/* DTR and DTRN are used for the documentation, handling descriptions extracted
+ * from the XML.
+ * They also replace `$DOCS_URL` with the actual URL to the documentation's branch,
+ * to allow dehardcoding it in the XML and doing proper substitutions everywhere.
+ */
String DTR(const String &p_text, const String &p_context) {
// Comes straight from the XML, so remove indentation and any trailing whitespace.
const String text = p_text.dedent().strip_edges();
if (TranslationServer::get_singleton()) {
- return TranslationServer::get_singleton()->doc_translate(text, p_context);
+ return String(TranslationServer::get_singleton()->doc_translate(text, p_context)).replace("$DOCS_URL", VERSION_DOCS_URL);
}
- return text;
+ return text.replace("$DOCS_URL", VERSION_DOCS_URL);
}
String DTRN(const String &p_text, const String &p_text_plural, int p_n, const String &p_context) {
@@ -4884,14 +4890,14 @@ String DTRN(const String &p_text, const String &p_text_plural, int p_n, const St
const String text_plural = p_text_plural.dedent().strip_edges();
if (TranslationServer::get_singleton()) {
- return TranslationServer::get_singleton()->doc_translate_plural(text, text_plural, p_n, p_context);
+ return String(TranslationServer::get_singleton()->doc_translate_plural(text, text_plural, p_n, p_context)).replace("$DOCS_URL", VERSION_DOCS_URL);
}
// Return message based on English plural rule if translation is not possible.
if (p_n == 1) {
- return text;
+ return text.replace("$DOCS_URL", VERSION_DOCS_URL);
}
- return text_plural;
+ return text_plural.replace("$DOCS_URL", VERSION_DOCS_URL);
}
#endif
diff --git a/core/templates/thread_work_pool.cpp b/core/templates/thread_work_pool.cpp
index 17969a2c90..710f043a4a 100644
--- a/core/templates/thread_work_pool.cpp
+++ b/core/templates/thread_work_pool.cpp
@@ -47,7 +47,7 @@ void ThreadWorkPool::_thread_function(void *p_user) {
void ThreadWorkPool::init(int p_thread_count) {
ERR_FAIL_COND(threads != nullptr);
if (p_thread_count < 0) {
- p_thread_count = OS::get_singleton()->get_processor_count();
+ p_thread_count = OS::get_singleton()->get_default_thread_pool_size();
}
thread_count = p_thread_count;
diff --git a/core/typedefs.h b/core/typedefs.h
index 9ab874b2f0..95bd423817 100644
--- a/core/typedefs.h
+++ b/core/typedefs.h
@@ -91,8 +91,8 @@
#define ABS(m_v) (((m_v) < 0) ? (-(m_v)) : (m_v))
#endif
-#ifndef SGN
-#define SGN(m_v) (((m_v) == 0) ? (0.0) : (((m_v) < 0) ? (-1.0) : (+1.0)))
+#ifndef SIGN
+#define SIGN(m_v) (((m_v) == 0) ? (0.0) : (((m_v) < 0) ? (-1.0) : (+1.0)))
#endif
#ifndef MIN
diff --git a/core/variant/variant_utility.cpp b/core/variant/variant_utility.cpp
index e89bdd4faa..554b2f1c25 100644
--- a/core/variant/variant_utility.cpp
+++ b/core/variant/variant_utility.cpp
@@ -151,10 +151,10 @@ struct VariantUtilityFunctions {
r_error.error = Callable::CallError::CALL_OK;
switch (x.get_type()) {
case Variant::INT: {
- return SGN(VariantInternalAccessor<int64_t>::get(&x));
+ return SIGN(VariantInternalAccessor<int64_t>::get(&x));
} break;
case Variant::FLOAT: {
- return SGN(VariantInternalAccessor<double>::get(&x));
+ return SIGN(VariantInternalAccessor<double>::get(&x));
} break;
case Variant::VECTOR2: {
return VariantInternalAccessor<Vector2>::get(&x).sign();
@@ -176,11 +176,11 @@ struct VariantUtilityFunctions {
}
static inline double signf(double x) {
- return SGN(x);
+ return SIGN(x);
}
static inline int64_t signi(int64_t x) {
- return SGN(x);
+ return SIGN(x);
}
static inline double pow(double x, double y) {
@@ -403,6 +403,10 @@ struct VariantUtilityFunctions {
return Math::randf();
}
+ static inline double randfn(double mean, double deviation) {
+ return Math::randfn(mean, deviation);
+ }
+
static inline int64_t randi_range(int64_t from, int64_t to) {
return Math::random((int32_t)from, (int32_t)to);
}
@@ -1239,6 +1243,7 @@ void Variant::_register_variant_utility_functions() {
FUNCBINDR(randf, sarray(), Variant::UTILITY_FUNC_TYPE_RANDOM);
FUNCBINDR(randi_range, sarray("from", "to"), Variant::UTILITY_FUNC_TYPE_RANDOM);
FUNCBINDR(randf_range, sarray("from", "to"), Variant::UTILITY_FUNC_TYPE_RANDOM);
+ FUNCBINDR(randfn, sarray("mean", "deviation"), Variant::UTILITY_FUNC_TYPE_RANDOM);
FUNCBIND(seed, sarray("base"), Variant::UTILITY_FUNC_TYPE_RANDOM);
FUNCBINDR(rand_from_seed, sarray("seed"), Variant::UTILITY_FUNC_TYPE_RANDOM);
diff --git a/doc/classes/@GlobalScope.xml b/doc/classes/@GlobalScope.xml
index 21b5147386..9cfe494b7f 100644
--- a/doc/classes/@GlobalScope.xml
+++ b/doc/classes/@GlobalScope.xml
@@ -723,6 +723,14 @@
[/codeblock]
</description>
</method>
+ <method name="randfn">
+ <return type="float" />
+ <argument index="0" name="mean" type="float" />
+ <argument index="1" name="deviation" type="float" />
+ <description>
+ Returns a normally-distributed pseudo-random floating point value using Box-Muller transform with the specified [code]mean[/code] and a standard [code]deviation[/code]. This is also called Gaussian distribution.
+ </description>
+ </method>
<method name="randi">
<return type="int" />
<description>
diff --git a/doc/classes/AABB.xml b/doc/classes/AABB.xml
index 15d146fba1..170cfea6f9 100644
--- a/doc/classes/AABB.xml
+++ b/doc/classes/AABB.xml
@@ -9,9 +9,9 @@
[b]Note:[/b] Unlike [Rect2], [AABB] does not have a variant that uses integer coordinates.
</description>
<tutorials>
- <link title="Math documentation index">https://docs.godotengine.org/en/latest/tutorials/math/index.html</link>
- <link title="Vector math">https://docs.godotengine.org/en/latest/tutorials/math/vector_math.html</link>
- <link title="Advanced vector math">https://docs.godotengine.org/en/latest/tutorials/math/vectors_advanced.html</link>
+ <link title="Math documentation index">$DOCS_URL/tutorials/math/index.html</link>
+ <link title="Vector math">$DOCS_URL/tutorials/math/vector_math.html</link>
+ <link title="Advanced vector math">$DOCS_URL/tutorials/math/vectors_advanced.html</link>
</tutorials>
<constructors>
<constructor name="AABB">
@@ -233,12 +233,15 @@
<return type="bool" />
<argument index="0" name="right" type="AABB" />
<description>
+ Returns [code]true[/code] if the vectors are not equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
<operator name="operator *">
<return type="AABB" />
<argument index="0" name="right" type="Transform3D" />
<description>
+ Inversely transforms (multiplies) the [AABB] by the given [Transform3D] transformation matrix.
</description>
</operator>
<operator name="operator ==">
@@ -250,6 +253,8 @@
<return type="bool" />
<argument index="0" name="right" type="AABB" />
<description>
+ Returns [code]true[/code] if the AABBs are exactly equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
</operators>
diff --git a/doc/classes/AnimatedSprite2D.xml b/doc/classes/AnimatedSprite2D.xml
index b468e1d109..789c6bd960 100644
--- a/doc/classes/AnimatedSprite2D.xml
+++ b/doc/classes/AnimatedSprite2D.xml
@@ -8,7 +8,7 @@
[b]Note:[/b] You can associate a set of normal or specular maps by creating additional [SpriteFrames] resources with a [code]_normal[/code] or [code]_specular[/code] suffix. For example, having 3 [SpriteFrames] resources [code]run[/code], [code]run_normal[/code], and [code]run_specular[/code] will make it so the [code]run[/code] animation uses normal and specular maps.
</description>
<tutorials>
- <link title="2D Sprite animation">https://docs.godotengine.org/en/latest/tutorials/2d/2d_sprite_animation.html</link>
+ <link title="2D Sprite animation">$DOCS_URL/tutorials/2d/2d_sprite_animation.html</link>
<link title="2D Dodge The Creeps Demo">https://godotengine.org/asset-library/asset/515</link>
</tutorials>
<methods>
diff --git a/doc/classes/AnimatedSprite3D.xml b/doc/classes/AnimatedSprite3D.xml
index 59d7553ef4..38a87c1b2b 100644
--- a/doc/classes/AnimatedSprite3D.xml
+++ b/doc/classes/AnimatedSprite3D.xml
@@ -7,7 +7,7 @@
Animations are created using a [SpriteFrames] resource, which can be configured in the editor via the SpriteFrames panel.
</description>
<tutorials>
- <link title="2D Sprite animation (also applies to 3D)">https://docs.godotengine.org/en/latest/tutorials/2d/2d_sprite_animation.html</link>
+ <link title="2D Sprite animation (also applies to 3D)">$DOCS_URL/tutorials/2d/2d_sprite_animation.html</link>
</tutorials>
<methods>
<method name="is_playing" qualifiers="const">
diff --git a/doc/classes/Animation.xml b/doc/classes/Animation.xml
index dca943dec6..bb4089d67e 100644
--- a/doc/classes/Animation.xml
+++ b/doc/classes/Animation.xml
@@ -28,7 +28,7 @@
Animations are just data containers, and must be added to nodes such as an [AnimationPlayer] to be played back. Animation tracks have different types, each with its own set of dedicated methods. Check [enum TrackType] to see available types.
</description>
<tutorials>
- <link title="Animation documentation index">https://docs.godotengine.org/en/latest/tutorials/animation/index.html</link>
+ <link title="Animation documentation index">$DOCS_URL/tutorials/animation/index.html</link>
</tutorials>
<methods>
<method name="add_track">
@@ -130,6 +130,14 @@
Sets the stream of the key identified by [code]key_idx[/code] to value [code]stream[/code]. The [code]track_idx[/code] must be the index of an Audio Track.
</description>
</method>
+ <method name="bezier_track_get_key_handle_mode" qualifiers="const">
+ <return type="int" />
+ <argument index="0" name="track_idx" type="int" />
+ <argument index="1" name="key_idx" type="int" />
+ <description>
+ Returns the handle mode of the key identified by [code]index[/code]. See [enum HandleMode] for possible values. The [code]track_idx[/code] must be the index of a Bezier Track.
+ </description>
+ </method>
<method name="bezier_track_get_key_in_handle" qualifiers="const">
<return type="Vector2" />
<argument index="0" name="track_idx" type="int" />
@@ -161,6 +169,7 @@
<argument index="2" name="value" type="float" />
<argument index="3" name="in_handle" type="Vector2" default="Vector2(0, 0)" />
<argument index="4" name="out_handle" type="Vector2" default="Vector2(0, 0)" />
+ <argument index="5" name="handle_mode" type="int" enum="Animation.HandleMode" default="1" />
<description>
Inserts a Bezier Track key at the given [code]time[/code] in seconds. The [code]track_idx[/code] must be the index of a Bezier Track.
[code]in_handle[/code] is the left-side weight of the added Bezier curve point, [code]out_handle[/code] is the right-side one, while [code]value[/code] is the actual value at this point.
@@ -174,11 +183,22 @@
Returns the interpolated value at the given [code]time[/code] (in seconds). The [code]track_idx[/code] must be the index of a Bezier Track.
</description>
</method>
+ <method name="bezier_track_set_key_handle_mode">
+ <return type="void" />
+ <argument index="0" name="track_idx" type="int" />
+ <argument index="1" name="key_idx" type="int" />
+ <argument index="2" name="key_handle_mode" type="int" enum="Animation.HandleMode" />
+ <argument index="3" name="balanced_value_time_ratio" type="float" default="1.0" />
+ <description>
+ Changes the handle mode of the keyframe at the given [code]index[/code]. See [enum HandleMode] for possible values. The [code]track_idx[/code] must be the index of a Bezier Track.
+ </description>
+ </method>
<method name="bezier_track_set_key_in_handle">
<return type="void" />
<argument index="0" name="track_idx" type="int" />
<argument index="1" name="key_idx" type="int" />
<argument index="2" name="in_handle" type="Vector2" />
+ <argument index="3" name="balanced_value_time_ratio" type="float" default="1.0" />
<description>
Sets the in handle of the key identified by [code]key_idx[/code] to value [code]in_handle[/code]. The [code]track_idx[/code] must be the index of a Bezier Track.
</description>
@@ -188,6 +208,7 @@
<argument index="0" name="track_idx" type="int" />
<argument index="1" name="key_idx" type="int" />
<argument index="2" name="out_handle" type="Vector2" />
+ <argument index="3" name="balanced_value_time_ratio" type="float" default="1.0" />
<description>
Sets the out handle of the key identified by [code]key_idx[/code] to value [code]out_handle[/code]. The [code]track_idx[/code] must be the index of a Bezier Track.
</description>
@@ -619,5 +640,11 @@
<constant name="LOOP_PINGPONG" value="2" enum="LoopMode">
Repeats playback and reverse playback at both ends of the animation.
</constant>
+ <constant name="HANDLE_MODE_FREE" value="0" enum="HandleMode">
+ Assigning the free handle mode to a Bezier Track's keyframe allows you to edit the keyframe's left and right handles independently from one another.
+ </constant>
+ <constant name="HANDLE_MODE_BALANCED" value="1" enum="HandleMode">
+ Assigning the balanced handle mode to a Bezier Track's keyframe makes it so the two handles of the keyframe always stay aligned when changing either the keyframe's left or right handle.
+ </constant>
</constants>
</class>
diff --git a/doc/classes/AnimationNode.xml b/doc/classes/AnimationNode.xml
index 6bc44ea0a0..c9d8ae9936 100644
--- a/doc/classes/AnimationNode.xml
+++ b/doc/classes/AnimationNode.xml
@@ -8,7 +8,7 @@
Inherit this when creating nodes mainly for use in [AnimationNodeBlendTree], otherwise [AnimationRootNode] should be used instead.
</description>
<tutorials>
- <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
+ <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
</tutorials>
<methods>
<method name="_get_caption" qualifiers="virtual const">
diff --git a/doc/classes/AnimationNodeAdd2.xml b/doc/classes/AnimationNodeAdd2.xml
index 20ee33209b..472f98a5b3 100644
--- a/doc/classes/AnimationNodeAdd2.xml
+++ b/doc/classes/AnimationNodeAdd2.xml
@@ -7,7 +7,7 @@
A resource to add to an [AnimationNodeBlendTree]. Blends two animations additively based on an amount value in the [code][0.0, 1.0][/code] range.
</description>
<tutorials>
- <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
+ <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
</tutorials>
<members>
<member name="sync" type="bool" setter="set_use_sync" getter="is_using_sync" default="false">
diff --git a/doc/classes/AnimationNodeAdd3.xml b/doc/classes/AnimationNodeAdd3.xml
index 26738499bb..9ba4023b79 100644
--- a/doc/classes/AnimationNodeAdd3.xml
+++ b/doc/classes/AnimationNodeAdd3.xml
@@ -11,7 +11,7 @@
- A +add animation to blend with when the blend amount is in the [code][0.0, 1.0][/code] range
</description>
<tutorials>
- <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
+ <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
</tutorials>
<members>
diff --git a/doc/classes/AnimationNodeAnimation.xml b/doc/classes/AnimationNodeAnimation.xml
index 076e675007..3df92ad3d3 100644
--- a/doc/classes/AnimationNodeAnimation.xml
+++ b/doc/classes/AnimationNodeAnimation.xml
@@ -7,7 +7,7 @@
A resource to add to an [AnimationNodeBlendTree]. Only features one output set using the [member animation] property. Use it as an input for [AnimationNode] that blend animations together.
</description>
<tutorials>
- <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
+ <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
<link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
</tutorials>
diff --git a/doc/classes/AnimationNodeBlend2.xml b/doc/classes/AnimationNodeBlend2.xml
index 1f7a4c91c8..3b869bc299 100644
--- a/doc/classes/AnimationNodeBlend2.xml
+++ b/doc/classes/AnimationNodeBlend2.xml
@@ -7,7 +7,7 @@
A resource to add to an [AnimationNodeBlendTree]. Blends two animations linearly based on an amount value in the [code][0.0, 1.0][/code] range.
</description>
<tutorials>
- <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
+ <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
<link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
</tutorials>
diff --git a/doc/classes/AnimationNodeBlend3.xml b/doc/classes/AnimationNodeBlend3.xml
index ed827e2535..ae8fce51f2 100644
--- a/doc/classes/AnimationNodeBlend3.xml
+++ b/doc/classes/AnimationNodeBlend3.xml
@@ -11,7 +11,7 @@
- A +blend animation to blend with when the blend amount is in the [code][0.0, 1.0][/code] range
</description>
<tutorials>
- <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
+ <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
</tutorials>
<members>
<member name="sync" type="bool" setter="set_use_sync" getter="is_using_sync" default="false">
diff --git a/doc/classes/AnimationNodeBlendSpace1D.xml b/doc/classes/AnimationNodeBlendSpace1D.xml
index 6e55a79fd2..831542b64c 100644
--- a/doc/classes/AnimationNodeBlendSpace1D.xml
+++ b/doc/classes/AnimationNodeBlendSpace1D.xml
@@ -10,7 +10,7 @@
You can set the extents of the axis using the [member min_space] and [member max_space].
</description>
<tutorials>
- <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
+ <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
</tutorials>
<methods>
<method name="add_blend_point">
diff --git a/doc/classes/AnimationNodeBlendSpace2D.xml b/doc/classes/AnimationNodeBlendSpace2D.xml
index 8d51f9aecc..77d1d872e5 100644
--- a/doc/classes/AnimationNodeBlendSpace2D.xml
+++ b/doc/classes/AnimationNodeBlendSpace2D.xml
@@ -9,7 +9,7 @@
You can add vertices to the blend space with [method add_blend_point] and automatically triangulate it by setting [member auto_triangles] to [code]true[/code]. Otherwise, use [method add_triangle] and [method remove_triangle] to create up the blend space by hand.
</description>
<tutorials>
- <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
+ <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
</tutorials>
<methods>
diff --git a/doc/classes/AnimationNodeBlendTree.xml b/doc/classes/AnimationNodeBlendTree.xml
index da532dc059..a9f1f7acaa 100644
--- a/doc/classes/AnimationNodeBlendTree.xml
+++ b/doc/classes/AnimationNodeBlendTree.xml
@@ -7,7 +7,7 @@
This node may contain a sub-tree of any other blend type nodes, such as mix, blend2, blend3, one shot, etc. This is one of the most commonly used roots.
</description>
<tutorials>
- <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
+ <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
</tutorials>
<methods>
<method name="add_node">
diff --git a/doc/classes/AnimationNodeOneShot.xml b/doc/classes/AnimationNodeOneShot.xml
index 2ecc0ae07b..116b54e39e 100644
--- a/doc/classes/AnimationNodeOneShot.xml
+++ b/doc/classes/AnimationNodeOneShot.xml
@@ -7,7 +7,7 @@
A resource to add to an [AnimationNodeBlendTree]. This node will execute a sub-animation and return once it finishes. Blend times for fading in and out can be customized, as well as filters.
</description>
<tutorials>
- <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
+ <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
</tutorials>
<methods>
diff --git a/doc/classes/AnimationNodeOutput.xml b/doc/classes/AnimationNodeOutput.xml
index 34c96d13ea..6241a0fa49 100644
--- a/doc/classes/AnimationNodeOutput.xml
+++ b/doc/classes/AnimationNodeOutput.xml
@@ -6,7 +6,7 @@
<description>
</description>
<tutorials>
- <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
+ <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
<link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
</tutorials>
diff --git a/doc/classes/AnimationNodeStateMachine.xml b/doc/classes/AnimationNodeStateMachine.xml
index 17ef565b3a..5adea7308d 100644
--- a/doc/classes/AnimationNodeStateMachine.xml
+++ b/doc/classes/AnimationNodeStateMachine.xml
@@ -18,7 +18,7 @@
[/codeblocks]
</description>
<tutorials>
- <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
+ <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
</tutorials>
<methods>
<method name="add_node">
diff --git a/doc/classes/AnimationNodeStateMachinePlayback.xml b/doc/classes/AnimationNodeStateMachinePlayback.xml
index 15c6c96302..b299f8654a 100644
--- a/doc/classes/AnimationNodeStateMachinePlayback.xml
+++ b/doc/classes/AnimationNodeStateMachinePlayback.xml
@@ -18,7 +18,7 @@
[/codeblocks]
</description>
<tutorials>
- <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
+ <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
</tutorials>
<methods>
<method name="get_current_length" qualifiers="const">
diff --git a/doc/classes/AnimationNodeStateMachineTransition.xml b/doc/classes/AnimationNodeStateMachineTransition.xml
index 763bba6e93..948e3506a9 100644
--- a/doc/classes/AnimationNodeStateMachineTransition.xml
+++ b/doc/classes/AnimationNodeStateMachineTransition.xml
@@ -5,11 +5,11 @@
<description>
</description>
<tutorials>
- <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
+ <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
</tutorials>
<members>
<member name="advance_condition" type="StringName" setter="set_advance_condition" getter="get_advance_condition" default="&amp;&quot;&quot;">
- Turn on auto advance when this condition is set. The provided name will become a boolean parameter on the [AnimationTree] that can be controlled from code (see [url=https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html#controlling-from-code][/url]). For example, if [member AnimationTree.tree_root] is an [AnimationNodeStateMachine] and [member advance_condition] is set to [code]"idle"[/code]:
+ Turn on auto advance when this condition is set. The provided name will become a boolean parameter on the [AnimationTree] that can be controlled from code (see [url=$DOCS_URL/tutorials/animation/animation_tree.html#controlling-from-code][/url]). For example, if [member AnimationTree.tree_root] is an [AnimationNodeStateMachine] and [member advance_condition] is set to [code]"idle"[/code]:
[codeblocks]
[gdscript]
$animation_tree.set("parameters/conditions/idle", is_on_floor and (linear_velocity.x == 0))
diff --git a/doc/classes/AnimationNodeTimeScale.xml b/doc/classes/AnimationNodeTimeScale.xml
index 5b40b39bca..33e0127a52 100644
--- a/doc/classes/AnimationNodeTimeScale.xml
+++ b/doc/classes/AnimationNodeTimeScale.xml
@@ -7,7 +7,7 @@
Allows scaling the speed of the animation (or reversing it) in any children nodes. Setting it to 0 will pause the animation.
</description>
<tutorials>
- <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
+ <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
<link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link>
</tutorials>
</class>
diff --git a/doc/classes/AnimationNodeTimeSeek.xml b/doc/classes/AnimationNodeTimeSeek.xml
index d927c663c8..868319272e 100644
--- a/doc/classes/AnimationNodeTimeSeek.xml
+++ b/doc/classes/AnimationNodeTimeSeek.xml
@@ -27,6 +27,6 @@
[/codeblocks]
</description>
<tutorials>
- <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
+ <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
</tutorials>
</class>
diff --git a/doc/classes/AnimationNodeTransition.xml b/doc/classes/AnimationNodeTransition.xml
index b297832ac0..48961f51a5 100644
--- a/doc/classes/AnimationNodeTransition.xml
+++ b/doc/classes/AnimationNodeTransition.xml
@@ -7,7 +7,7 @@
Simple state machine for cases which don't require a more advanced [AnimationNodeStateMachine]. Animations can be connected to the inputs and transition times can be specified.
</description>
<tutorials>
- <link title="AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
+ <link title="AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
<link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
</tutorials>
diff --git a/doc/classes/AnimationPlayer.xml b/doc/classes/AnimationPlayer.xml
index 2fd923df85..9f68edbc92 100644
--- a/doc/classes/AnimationPlayer.xml
+++ b/doc/classes/AnimationPlayer.xml
@@ -9,8 +9,8 @@
Updating the target properties of animations occurs at process time.
</description>
<tutorials>
- <link title="2D Sprite animation">https://docs.godotengine.org/en/latest/tutorials/2d/2d_sprite_animation.html</link>
- <link title="Animation documentation index">https://docs.godotengine.org/en/latest/tutorials/animation/index.html</link>
+ <link title="2D Sprite animation">$DOCS_URL/tutorials/2d/2d_sprite_animation.html</link>
+ <link title="Animation documentation index">$DOCS_URL/tutorials/animation/index.html</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
</tutorials>
<methods>
diff --git a/doc/classes/AnimationTree.xml b/doc/classes/AnimationTree.xml
index 40dcd950d7..48c5398074 100644
--- a/doc/classes/AnimationTree.xml
+++ b/doc/classes/AnimationTree.xml
@@ -8,7 +8,7 @@
[b]Note:[/b] When linked with an [AnimationPlayer], several properties and methods of the corresponding [AnimationPlayer] will not function as expected. Playback and transitions should be handled using only the [AnimationTree] and its constituent [AnimationNode](s). The [AnimationPlayer] node should be used solely for adding, deleting, and editing animations.
</description>
<tutorials>
- <link title="Using AnimationTree">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html</link>
+ <link title="Using AnimationTree">$DOCS_URL/tutorials/animation/animation_tree.html</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
</tutorials>
<methods>
diff --git a/doc/classes/Area2D.xml b/doc/classes/Area2D.xml
index 8abdaac45f..0f7e6799be 100644
--- a/doc/classes/Area2D.xml
+++ b/doc/classes/Area2D.xml
@@ -7,7 +7,7 @@
2D area that detects [CollisionObject2D] nodes overlapping, entering, or exiting. Can also alter or override local physics parameters (gravity, damping) and route audio to a custom audio bus.
</description>
<tutorials>
- <link title="Using Area2D">https://docs.godotengine.org/en/latest/tutorials/physics/using_area_2d.html</link>
+ <link title="Using Area2D">$DOCS_URL/tutorials/physics/using_area_2d.html</link>
<link title="2D Dodge The Creeps Demo">https://godotengine.org/asset-library/asset/515</link>
<link title="2D Pong Demo">https://godotengine.org/asset-library/asset/121</link>
<link title="2D Platformer Demo">https://godotengine.org/asset-library/asset/120</link>
diff --git a/doc/classes/ArrayMesh.xml b/doc/classes/ArrayMesh.xml
index 7b77462322..c986947dfb 100644
--- a/doc/classes/ArrayMesh.xml
+++ b/doc/classes/ArrayMesh.xml
@@ -47,7 +47,7 @@
[b]Note:[/b] Godot uses clockwise [url=https://learnopengl.com/Advanced-OpenGL/Face-culling]winding order[/url] for front faces of triangle primitive modes.
</description>
<tutorials>
- <link title="Procedural geometry using the ArrayMesh">https://docs.godotengine.org/en/latest/tutorials/3d/procedural_geometry/arraymesh.html</link>
+ <link title="Procedural geometry using the ArrayMesh">$DOCS_URL/tutorials/3d/procedural_geometry/arraymesh.html</link>
</tutorials>
<methods>
<method name="add_blend_shape">
diff --git a/doc/classes/AudioEffectDistortion.xml b/doc/classes/AudioEffectDistortion.xml
index 600ca93028..ed1cb789e0 100644
--- a/doc/classes/AudioEffectDistortion.xml
+++ b/doc/classes/AudioEffectDistortion.xml
@@ -9,7 +9,7 @@
By distorting the waveform the frequency content change, which will often make the sound "crunchy" or "abrasive". For games, it can simulate sound coming from some saturated device or speaker very efficiently.
</description>
<tutorials>
- <link title="Audio buses">https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html</link>
+ <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link>
</tutorials>
<members>
<member name="drive" type="float" setter="set_drive" getter="get_drive" default="0.0">
diff --git a/doc/classes/AudioEffectFilter.xml b/doc/classes/AudioEffectFilter.xml
index 5b43646077..4fb1c0e7c9 100644
--- a/doc/classes/AudioEffectFilter.xml
+++ b/doc/classes/AudioEffectFilter.xml
@@ -7,7 +7,7 @@
Allows frequencies other than the [member cutoff_hz] to pass.
</description>
<tutorials>
- <link title="Audio buses">https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html</link>
+ <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link>
</tutorials>
<members>
<member name="cutoff_hz" type="float" setter="set_cutoff" getter="get_cutoff" default="2000.0">
diff --git a/doc/classes/AudioEffectHighShelfFilter.xml b/doc/classes/AudioEffectHighShelfFilter.xml
index c572824448..28498f6d8e 100644
--- a/doc/classes/AudioEffectHighShelfFilter.xml
+++ b/doc/classes/AudioEffectHighShelfFilter.xml
@@ -6,6 +6,6 @@
<description>
</description>
<tutorials>
- <link title="Audio buses">https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html</link>
+ <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link>
</tutorials>
</class>
diff --git a/doc/classes/AudioEffectLowShelfFilter.xml b/doc/classes/AudioEffectLowShelfFilter.xml
index e78dbf9732..4c839dc257 100644
--- a/doc/classes/AudioEffectLowShelfFilter.xml
+++ b/doc/classes/AudioEffectLowShelfFilter.xml
@@ -6,6 +6,6 @@
<description>
</description>
<tutorials>
- <link title="Audio buses">https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html</link>
+ <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link>
</tutorials>
</class>
diff --git a/doc/classes/AudioEffectRecord.xml b/doc/classes/AudioEffectRecord.xml
index b32206726d..0b6c5287cf 100644
--- a/doc/classes/AudioEffectRecord.xml
+++ b/doc/classes/AudioEffectRecord.xml
@@ -7,7 +7,7 @@
Allows the user to record sound from a microphone. It sets and gets the format in which the audio file will be recorded (8-bit, 16-bit, or compressed). It checks whether or not the recording is active, and if it is, records the sound. It then returns the recorded sample.
</description>
<tutorials>
- <link title="Recording with microphone">https://docs.godotengine.org/en/latest/tutorials/audio/recording_with_microphone.html</link>
+ <link title="Recording with microphone">$DOCS_URL/tutorials/audio/recording_with_microphone.html</link>
<link title="Audio Mic Record Demo">https://godotengine.org/asset-library/asset/527</link>
</tutorials>
<methods>
diff --git a/doc/classes/AudioServer.xml b/doc/classes/AudioServer.xml
index 66fa57cb52..b868cce077 100644
--- a/doc/classes/AudioServer.xml
+++ b/doc/classes/AudioServer.xml
@@ -7,7 +7,7 @@
[AudioServer] is a low-level server interface for audio access. It is in charge of creating sample data (playable audio) as well as its playback via a voice interface.
</description>
<tutorials>
- <link title="Audio buses">https://docs.godotengine.org/en/latest/tutorials/audio/audio_buses.html</link>
+ <link title="Audio buses">$DOCS_URL/tutorials/audio/audio_buses.html</link>
<link title="Audio Device Changer Demo">https://godotengine.org/asset-library/asset/525</link>
<link title="Audio Mic Record Demo">https://godotengine.org/asset-library/asset/527</link>
<link title="Audio Spectrum Demo">https://godotengine.org/asset-library/asset/528</link>
diff --git a/doc/classes/AudioStream.xml b/doc/classes/AudioStream.xml
index cff7199c4a..722ff802e7 100644
--- a/doc/classes/AudioStream.xml
+++ b/doc/classes/AudioStream.xml
@@ -7,7 +7,7 @@
Base class for audio streams. Audio streams are used for sound effects and music playback, and support WAV (via [AudioStreamSample]) and OGG (via [AudioStreamOGGVorbis]) file formats.
</description>
<tutorials>
- <link title="Audio streams">https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html</link>
+ <link title="Audio streams">$DOCS_URL/tutorials/audio/audio_streams.html</link>
<link title="Audio Generator Demo">https://godotengine.org/asset-library/asset/526</link>
<link title="Audio Mic Record Demo">https://godotengine.org/asset-library/asset/527</link>
<link title="Audio Spectrum Demo">https://godotengine.org/asset-library/asset/528</link>
diff --git a/doc/classes/AudioStreamPlayer.xml b/doc/classes/AudioStreamPlayer.xml
index b692ae858e..d20aaff1e8 100644
--- a/doc/classes/AudioStreamPlayer.xml
+++ b/doc/classes/AudioStreamPlayer.xml
@@ -8,7 +8,7 @@
To play audio positionally, use [AudioStreamPlayer2D] or [AudioStreamPlayer3D] instead of [AudioStreamPlayer].
</description>
<tutorials>
- <link title="Audio streams">https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html</link>
+ <link title="Audio streams">$DOCS_URL/tutorials/audio/audio_streams.html</link>
<link title="2D Dodge The Creeps Demo">https://godotengine.org/asset-library/asset/515</link>
<link title="Audio Device Changer Demo">https://godotengine.org/asset-library/asset/525</link>
<link title="Audio Generator Demo">https://godotengine.org/asset-library/asset/526</link>
diff --git a/doc/classes/AudioStreamPlayer2D.xml b/doc/classes/AudioStreamPlayer2D.xml
index 9c76eefbf9..0ad161a6fe 100644
--- a/doc/classes/AudioStreamPlayer2D.xml
+++ b/doc/classes/AudioStreamPlayer2D.xml
@@ -9,7 +9,7 @@
[b]Note:[/b] Hiding an [AudioStreamPlayer2D] node does not disable its audio output. To temporarily disable an [AudioStreamPlayer2D]'s audio output, set [member volume_db] to a very low value like [code]-100[/code] (which isn't audible to human hearing).
</description>
<tutorials>
- <link title="Audio streams">https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html</link>
+ <link title="Audio streams">$DOCS_URL/tutorials/audio/audio_streams.html</link>
</tutorials>
<methods>
<method name="get_playback_position">
diff --git a/doc/classes/AudioStreamPlayer3D.xml b/doc/classes/AudioStreamPlayer3D.xml
index e8a78d5a4c..ce8a6693db 100644
--- a/doc/classes/AudioStreamPlayer3D.xml
+++ b/doc/classes/AudioStreamPlayer3D.xml
@@ -10,7 +10,7 @@
[b]Note:[/b] Hiding an [AudioStreamPlayer3D] node does not disable its audio output. To temporarily disable an [AudioStreamPlayer3D]'s audio output, set [member unit_db] to a very low value like [code]-100[/code] (which isn't audible to human hearing).
</description>
<tutorials>
- <link title="Audio streams">https://docs.godotengine.org/en/latest/tutorials/audio/audio_streams.html</link>
+ <link title="Audio streams">$DOCS_URL/tutorials/audio/audio_streams.html</link>
</tutorials>
<methods>
<method name="get_playback_position">
diff --git a/doc/classes/BaseMaterial3D.xml b/doc/classes/BaseMaterial3D.xml
index 818ab50030..f0f49f89d5 100644
--- a/doc/classes/BaseMaterial3D.xml
+++ b/doc/classes/BaseMaterial3D.xml
@@ -7,7 +7,7 @@
This provides a default material with a wide variety of rendering features and properties without the need to write shader code. See the tutorial below for details.
</description>
<tutorials>
- <link title="Standard Material 3D">https://docs.godotengine.org/en/latest/tutorials/3d/standard_material_3d.html</link>
+ <link title="Standard Material 3D">$DOCS_URL/tutorials/3d/standard_material_3d.html</link>
</tutorials>
<methods>
<method name="get_feature" qualifiers="const">
diff --git a/doc/classes/Basis.xml b/doc/classes/Basis.xml
index 8ef9cd2e7c..bf3d20c11c 100644
--- a/doc/classes/Basis.xml
+++ b/doc/classes/Basis.xml
@@ -10,9 +10,9 @@
For more information, read the "Matrices and transforms" documentation article.
</description>
<tutorials>
- <link title="Math documentation index">https://docs.godotengine.org/en/latest/tutorials/math/index.html</link>
- <link title="Matrices and transforms">https://docs.godotengine.org/en/latest/tutorials/math/matrices_and_transforms.html</link>
- <link title="Using 3D transforms">https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html</link>
+ <link title="Math documentation index">$DOCS_URL/tutorials/math/index.html</link>
+ <link title="Matrices and transforms">$DOCS_URL/tutorials/math/matrices_and_transforms.html</link>
+ <link title="Using 3D transforms">$DOCS_URL/tutorials/3d/using_transforms.html</link>
<link title="Matrix Transform Demo">https://godotengine.org/asset-library/asset/584</link>
<link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link>
<link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link>
@@ -232,18 +232,22 @@
<return type="bool" />
<argument index="0" name="right" type="Basis" />
<description>
+ Returns [code]true[/code] if the [Basis] matrices are not equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
<operator name="operator *">
<return type="Basis" />
<argument index="0" name="right" type="Basis" />
<description>
+ Composes these two basis matrices by multiplying them together. This has the effect of transforming the second basis (the child) by the first basis (the parent).
</description>
</operator>
<operator name="operator *">
<return type="Vector3" />
<argument index="0" name="right" type="Vector3" />
<description>
+ Transforms (multiplies) the [Vector3] by the given [Basis] matrix.
</description>
</operator>
<operator name="operator *">
@@ -269,12 +273,15 @@
<return type="bool" />
<argument index="0" name="right" type="Basis" />
<description>
+ Returns [code]true[/code] if the [Basis] matrices are exactly equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
<operator name="operator []">
<return type="Vector3" />
<argument index="0" name="index" type="int" />
<description>
+ Access basis components using their index. [code]b[0][/code] is equivalent to [code]b.x[/code], [code]b[1][/code] is equivalent to [code]b.y[/code], and [code]b[2][/code] is equivalent to [code]b.z[/code].
</description>
</operator>
</operators>
diff --git a/doc/classes/Button.xml b/doc/classes/Button.xml
index ba55fda59c..055d5091c7 100644
--- a/doc/classes/Button.xml
+++ b/doc/classes/Button.xml
@@ -78,6 +78,7 @@
</member>
<member name="icon" type="Texture2D" setter="set_button_icon" getter="get_button_icon">
Button's icon, if text is present the icon will be placed before the text.
+ To edit margin and spacing of the icon, use [theme_item hseparation] theme property and [code]content_margin_*[/code] properties of the used [StyleBox]es.
</member>
<member name="icon_align" type="int" setter="set_icon_align" getter="get_icon_align" enum="Button.TextAlign" default="0">
Specifies if the icon should be aligned to the left, right, or center of a button. Uses the same [enum TextAlign] constants as the text alignment. If centered, text will draw on top of the icon.
diff --git a/doc/classes/CPUParticles2D.xml b/doc/classes/CPUParticles2D.xml
index 9226140c1a..0505d8ad36 100644
--- a/doc/classes/CPUParticles2D.xml
+++ b/doc/classes/CPUParticles2D.xml
@@ -8,7 +8,7 @@
See also [GPUParticles2D], which provides the same functionality with hardware acceleration, but may not run on older devices.
</description>
<tutorials>
- <link title="Particle systems (2D)">https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html</link>
+ <link title="Particle systems (2D)">$DOCS_URL/tutorials/2d/particle_systems_2d.html</link>
</tutorials>
<methods>
<method name="convert_from_particles">
diff --git a/doc/classes/CanvasItem.xml b/doc/classes/CanvasItem.xml
index 7be18c1d5c..98437ef296 100644
--- a/doc/classes/CanvasItem.xml
+++ b/doc/classes/CanvasItem.xml
@@ -12,8 +12,8 @@
[b]Note:[/b] Unless otherwise specified, all methods that have angle parameters must have angles specified as [i]radians[/i]. To convert degrees to radians, use [method @GlobalScope.deg2rad].
</description>
<tutorials>
- <link title="Viewport and canvas transforms">https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html</link>
- <link title="Custom drawing in 2D">https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html</link>
+ <link title="Viewport and canvas transforms">$DOCS_URL/tutorials/2d/2d_transforms.html</link>
+ <link title="Custom drawing in 2D">$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html</link>
<link title="Audio Spectrum Demo">https://godotengine.org/asset-library/asset/528</link>
</tutorials>
<methods>
diff --git a/doc/classes/CanvasLayer.xml b/doc/classes/CanvasLayer.xml
index 2f99f94893..9ee5ce0dcb 100644
--- a/doc/classes/CanvasLayer.xml
+++ b/doc/classes/CanvasLayer.xml
@@ -7,8 +7,8 @@
Canvas drawing layer. [CanvasItem] nodes that are direct or indirect children of a [CanvasLayer] will be drawn in that layer. The layer is a numeric index that defines the draw order. The default 2D scene renders with index 0, so a [CanvasLayer] with index -1 will be drawn below, and one with index 1 will be drawn above. This is very useful for HUDs (in layer 1+ or above), or backgrounds (in layer -1 or below).
</description>
<tutorials>
- <link title="Viewport and canvas transforms">https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html</link>
- <link title="Canvas layers">https://docs.godotengine.org/en/latest/tutorials/2d/canvas_layers.html</link>
+ <link title="Viewport and canvas transforms">$DOCS_URL/tutorials/2d/2d_transforms.html</link>
+ <link title="Canvas layers">$DOCS_URL/tutorials/2d/canvas_layers.html</link>
<link title="2D Dodge The Creeps Demo">https://godotengine.org/asset-library/asset/515</link>
</tutorials>
<methods>
diff --git a/doc/classes/CharFXTransform.xml b/doc/classes/CharFXTransform.xml
index b11d9c341a..d467c8a51d 100644
--- a/doc/classes/CharFXTransform.xml
+++ b/doc/classes/CharFXTransform.xml
@@ -7,7 +7,7 @@
By setting various properties on this object, you can control how individual characters will be displayed in a [RichTextEffect].
</description>
<tutorials>
- <link title="BBCode in RichTextLabel">https://docs.godotengine.org/en/latest/tutorials/ui/bbcode_in_richtextlabel.html</link>
+ <link title="BBCode in RichTextLabel">$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html</link>
<link title="RichTextEffect test project (third-party)">https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project</link>
</tutorials>
<members>
diff --git a/doc/classes/CharacterBody2D.xml b/doc/classes/CharacterBody2D.xml
index e14c2dc110..0f573dcd66 100644
--- a/doc/classes/CharacterBody2D.xml
+++ b/doc/classes/CharacterBody2D.xml
@@ -9,8 +9,8 @@
[b]Kinematic motion:[/b] Character bodies can also be used for kinematic motion (same functionality as [AnimatableBody2D]), which allows them to be moved by code and push other bodies on their path.
</description>
<tutorials>
- <link title="Kinematic character (2D)">https://docs.godotengine.org/en/latest/tutorials/physics/kinematic_character_2d.html</link>
- <link title="Using KinematicBody2D">https://docs.godotengine.org/en/latest/tutorials/physics/using_kinematic_body_2d.html</link>
+ <link title="Kinematic character (2D)">$DOCS_URL/tutorials/physics/kinematic_character_2d.html</link>
+ <link title="Using KinematicBody2D">$DOCS_URL/tutorials/physics/using_kinematic_body_2d.html</link>
<link title="2D Kinematic Character Demo">https://godotengine.org/asset-library/asset/113</link>
<link title="2D Platformer Demo">https://godotengine.org/asset-library/asset/120</link>
</tutorials>
diff --git a/doc/classes/CharacterBody3D.xml b/doc/classes/CharacterBody3D.xml
index 24b26fb16e..c70ce8acf9 100644
--- a/doc/classes/CharacterBody3D.xml
+++ b/doc/classes/CharacterBody3D.xml
@@ -9,7 +9,7 @@
[b]Kinematic motion:[/b] Character bodies can also be used for kinematic motion (same functionality as [AnimatableBody3D]), which allows them to be moved by code and push other bodies on their path.
</description>
<tutorials>
- <link title="Kinematic character (2D)">https://docs.godotengine.org/en/latest/tutorials/physics/kinematic_character_2d.html</link>
+ <link title="Kinematic character (2D)">$DOCS_URL/tutorials/physics/kinematic_character_2d.html</link>
<link title="3D Kinematic Character Demo">https://godotengine.org/asset-library/asset/126</link>
<link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link>
<link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link>
diff --git a/doc/classes/CollisionObject2D.xml b/doc/classes/CollisionObject2D.xml
index ba1ee3909d..63492bf9a0 100644
--- a/doc/classes/CollisionObject2D.xml
+++ b/doc/classes/CollisionObject2D.xml
@@ -198,11 +198,11 @@
<members>
<member name="collision_layer" type="int" setter="set_collision_layer" getter="get_collision_layer" default="1">
The physics layers this CollisionObject2D is in. Collision objects can exist in one or more of 32 different layers. See also [member collision_mask].
- [b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
+ [b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
</member>
<member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="1">
The physics layers this CollisionObject2D scans. Collision objects can scan one or more of 32 different layers. See also [member collision_layer].
- [b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
+ [b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
</member>
<member name="disable_mode" type="int" setter="set_disable_mode" getter="get_disable_mode" enum="CollisionObject2D.DisableMode" default="0">
Defines the behavior in physics when [member Node.process_mode] is set to [constant Node.PROCESS_MODE_DISABLED]. See [enum DisableMode] for more details about the different modes.
diff --git a/doc/classes/CollisionObject3D.xml b/doc/classes/CollisionObject3D.xml
index 19bcdcbb27..33305471b8 100644
--- a/doc/classes/CollisionObject3D.xml
+++ b/doc/classes/CollisionObject3D.xml
@@ -170,11 +170,11 @@
<members>
<member name="collision_layer" type="int" setter="set_collision_layer" getter="get_collision_layer" default="1">
The physics layers this CollisionObject3D [b]is in[/b]. Collision objects can exist in one or more of 32 different layers. See also [member collision_mask].
- [b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
+ [b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
</member>
<member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="1">
The physics layers this CollisionObject3D [b]scans[/b]. Collision objects can scan one or more of 32 different layers. See also [member collision_layer].
- [b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
+ [b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
</member>
<member name="disable_mode" type="int" setter="set_disable_mode" getter="get_disable_mode" enum="CollisionObject3D.DisableMode" default="0">
Defines the behavior in physics when [member Node.process_mode] is set to [constant Node.PROCESS_MODE_DISABLED]. See [enum DisableMode] for more details about the different modes.
diff --git a/doc/classes/CollisionShape2D.xml b/doc/classes/CollisionShape2D.xml
index 5159b2b15b..c86bf18f24 100644
--- a/doc/classes/CollisionShape2D.xml
+++ b/doc/classes/CollisionShape2D.xml
@@ -7,7 +7,7 @@
Editor facility for creating and editing collision shapes in 2D space. You can use this node to represent all sorts of collision shapes, for example, add this to an [Area2D] to give it a detection shape, or add it to a [PhysicsBody2D] to create a solid object. [b]IMPORTANT[/b]: this is an Editor-only helper to create shapes, use [method CollisionObject2D.shape_owner_get_shape] to get the actual shape.
</description>
<tutorials>
- <link title="Physics introduction">https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link>
+ <link title="Physics introduction">$DOCS_URL/tutorials/physics/physics_introduction.html</link>
<link title="2D Dodge The Creeps Demo">https://godotengine.org/asset-library/asset/515</link>
<link title="2D Pong Demo">https://godotengine.org/asset-library/asset/121</link>
<link title="2D Kinematic Character Demo">https://godotengine.org/asset-library/asset/113</link>
diff --git a/doc/classes/CollisionShape3D.xml b/doc/classes/CollisionShape3D.xml
index 84e362c38b..0f96d7c191 100644
--- a/doc/classes/CollisionShape3D.xml
+++ b/doc/classes/CollisionShape3D.xml
@@ -7,7 +7,7 @@
Editor facility for creating and editing collision shapes in 3D space. You can use this node to represent all sorts of collision shapes, for example, add this to an [Area3D] to give it a detection shape, or add it to a [PhysicsBody3D] to create a solid object. [b]IMPORTANT[/b]: this is an Editor-only helper to create shapes, use [method CollisionObject3D.shape_owner_get_shape] to get the actual shape.
</description>
<tutorials>
- <link title="Physics introduction">https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link>
+ <link title="Physics introduction">$DOCS_URL/tutorials/physics/physics_introduction.html</link>
<link title="3D Kinematic Character Demo">https://godotengine.org/asset-library/asset/126</link>
<link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
diff --git a/doc/classes/Color.xml b/doc/classes/Color.xml
index 650f10a97f..22fb853b40 100644
--- a/doc/classes/Color.xml
+++ b/doc/classes/Color.xml
@@ -881,54 +881,64 @@
<return type="bool" />
<argument index="0" name="right" type="Color" />
<description>
+ Returns [code]true[/code] if the colors are not equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
<operator name="operator *">
<return type="Color" />
<argument index="0" name="right" type="Color" />
<description>
+ Multiplies each component of the [Color] by the components of the given [Color].
</description>
</operator>
<operator name="operator *">
<return type="Color" />
<argument index="0" name="right" type="float" />
<description>
+ Multiplies each component of the [Color] by the given [float].
</description>
</operator>
<operator name="operator *">
<return type="Color" />
<argument index="0" name="right" type="int" />
<description>
+ Multiplies each component of the [Color] by the given [int].
</description>
</operator>
<operator name="operator +">
<return type="Color" />
<argument index="0" name="right" type="Color" />
<description>
+ Adds each component of the [Color] with the components of the given [Color].
</description>
</operator>
<operator name="operator -">
<return type="Color" />
<argument index="0" name="right" type="Color" />
<description>
+ Subtracts each component of the [Color] by the components of the given [Color].
</description>
</operator>
<operator name="operator /">
<return type="Color" />
<argument index="0" name="right" type="Color" />
<description>
+ Divides each component of the [Color] by the components of the given [Color].
</description>
</operator>
<operator name="operator /">
<return type="Color" />
<argument index="0" name="right" type="float" />
<description>
+ Divides each component of the [Color] by the given [float].
</description>
</operator>
<operator name="operator /">
<return type="Color" />
<argument index="0" name="right" type="int" />
<description>
+ Divides each component of the [Color] by the given [int].
</description>
</operator>
<operator name="operator ==">
@@ -940,22 +950,27 @@
<return type="bool" />
<argument index="0" name="right" type="Color" />
<description>
+ Returns [code]true[/code] if the colors are exactly equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
<operator name="operator []">
<return type="float" />
<argument index="0" name="index" type="int" />
<description>
+ Access color components using their index. [code]c[0][/code] is equivalent to [code]c.r[/code], [code]c[1][/code] is equivalent to [code]c.g[/code], [code]c[2][/code] is equivalent to [code]c.b[/code], and [code]c[3][/code] is equivalent to [code]c.a[/code].
</description>
</operator>
<operator name="operator unary+">
<return type="Color" />
<description>
+ Returns the same value as if the [code]+[/code] was not there. Unary [code]+[/code] does nothing, but sometimes it can make your code more readable.
</description>
</operator>
<operator name="operator unary-">
<return type="Color" />
<description>
+ Inverts the given color. This is equivalent to [code]Color.WHITE - c[/code] or [code]Color(1 - c.r, 1 - c.g, 1 - c.b, 1 - c.a)[/code].
</description>
</operator>
</operators>
diff --git a/doc/classes/Control.xml b/doc/classes/Control.xml
index 63e3eb7a5f..8739e0157d 100644
--- a/doc/classes/Control.xml
+++ b/doc/classes/Control.xml
@@ -16,9 +16,9 @@
[b]Note:[/b] Theme items are [i]not[/i] [Object] properties. This means you can't access their values using [method Object.get] and [method Object.set]. Instead, use the [code]get_theme_*[/code] and [code]add_theme_*_override[/code] methods provided by this class.
</description>
<tutorials>
- <link title="GUI documentation index">https://docs.godotengine.org/en/latest/tutorials/ui/index.html</link>
- <link title="Custom drawing in 2D">https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html</link>
- <link title="Control node gallery">https://docs.godotengine.org/en/latest/tutorials/ui/control_node_gallery.html</link>
+ <link title="GUI documentation index">$DOCS_URL/tutorials/ui/index.html</link>
+ <link title="Custom drawing in 2D">$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html</link>
+ <link title="Control node gallery">$DOCS_URL/tutorials/ui/control_node_gallery.html</link>
<link title="All GUI Demos">https://github.com/godotengine/godot-demo-projects/tree/master/gui</link>
</tutorials>
<methods>
@@ -654,6 +654,12 @@
See [method add_theme_stylebox_override].
</description>
</method>
+ <method name="is_drag_successful" qualifiers="const">
+ <return type="bool" />
+ <description>
+ Returns [code]true[/code] if drag operation is successful.
+ </description>
+ </method>
<method name="is_layout_rtl" qualifiers="const">
<return type="bool" />
<description>
@@ -714,6 +720,12 @@
Removes a local override for a theme [StyleBox] with the specified [code]name[/code] previously added by [method add_theme_stylebox_override] or via the Inspector dock.
</description>
</method>
+ <method name="reset_size">
+ <return type="void" />
+ <description>
+ Resets the size to [method get_combined_minimum_size]. This is equivalent to calling [code]set_size(Vector2())[/code] (or any size below the minimum).
+ </description>
+ </method>
<method name="set_anchor">
<return type="void" />
<argument index="0" name="side" type="int" enum="Side" />
@@ -1043,7 +1055,7 @@
</member>
<member name="rect_scale" type="Vector2" setter="set_scale" getter="get_scale" default="Vector2(1, 1)">
The node's scale, relative to its [member rect_size]. Change this property to scale the node around its [member rect_pivot_offset]. The Control's [member hint_tooltip] will also scale according to this value.
- [b]Note:[/b] This property is mainly intended to be used for animation purposes. Text inside the Control will look pixelated or blurry when the Control is scaled. To support multiple resolutions in your project, use an appropriate viewport stretch mode as described in the [url=https://docs.godotengine.org/en/latest/tutorials/viewports/multiple_resolutions.html]documentation[/url] instead of scaling Controls individually.
+ [b]Note:[/b] This property is mainly intended to be used for animation purposes. Text inside the Control will look pixelated or blurry when the Control is scaled. To support multiple resolutions in your project, use an appropriate viewport stretch mode as described in the [url=$DOCS_URL/tutorials/viewports/multiple_resolutions.html]documentation[/url] instead of scaling Controls individually.
[b]Note:[/b] If the Control node is a child of a [Container] node, the scale will be reset to [code]Vector2(1, 1)[/code] when the scene is instantiated. To set the Control's scale when it's instantiated, wait for one frame using [code]await get_tree().process_frame[/code] then set its [member rect_scale] property.
</member>
<member name="rect_size" type="Vector2" setter="_set_size" getter="get_size" default="Vector2(0, 0)">
diff --git a/doc/classes/Dictionary.xml b/doc/classes/Dictionary.xml
index d661da5dd0..7218e3bcb0 100644
--- a/doc/classes/Dictionary.xml
+++ b/doc/classes/Dictionary.xml
@@ -177,7 +177,7 @@
[b]Note:[/b] When declaring a dictionary with [code]const[/code], the dictionary itself can still be mutated by defining the values of individual keys. Using [code]const[/code] will only prevent assigning the constant with another value after it was initialized.
</description>
<tutorials>
- <link title="GDScript basics: Dictionary">https://docs.godotengine.org/en/latest/tutorials/scripting/gdscript/gdscript_basics.html#dictionary</link>
+ <link title="GDScript basics: Dictionary">$DOCS_URL/tutorials/scripting/gdscript/gdscript_basics.html#dictionary</link>
<link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link>
<link title="OS Test Demo">https://godotengine.org/asset-library/asset/677</link>
</tutorials>
diff --git a/doc/classes/DirectionalLight3D.xml b/doc/classes/DirectionalLight3D.xml
index 44d982cbcc..661dbef07c 100644
--- a/doc/classes/DirectionalLight3D.xml
+++ b/doc/classes/DirectionalLight3D.xml
@@ -7,7 +7,7 @@
A directional light is a type of [Light3D] node that models an infinite number of parallel rays covering the entire scene. It is used for lights with strong intensity that are located far away from the scene to model sunlight or moonlight. The worldspace location of the DirectionalLight3D transform (origin) is ignored. Only the basis is used to determine light direction.
</description>
<tutorials>
- <link title="Lights and shadows">https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html</link>
+ <link title="Lights and shadows">$DOCS_URL/tutorials/3d/lights_and_shadows.html</link>
</tutorials>
<members>
<member name="directional_shadow_blend_splits" type="bool" setter="set_blend_splits" getter="is_blend_splits_enabled" default="false">
diff --git a/doc/classes/Directory.xml b/doc/classes/Directory.xml
index 93f04ff2a2..cd4b8fde1e 100644
--- a/doc/classes/Directory.xml
+++ b/doc/classes/Directory.xml
@@ -54,7 +54,7 @@
[/codeblocks]
</description>
<tutorials>
- <link title="File system">https://docs.godotengine.org/en/latest/tutorials/scripting/filesystem.html</link>
+ <link title="File system">$DOCS_URL/tutorials/scripting/filesystem.html</link>
</tutorials>
<methods>
<method name="change_dir">
diff --git a/doc/classes/DisplayServer.xml b/doc/classes/DisplayServer.xml
index 92d6a220d2..1ca69057b4 100644
--- a/doc/classes/DisplayServer.xml
+++ b/doc/classes/DisplayServer.xml
@@ -901,7 +901,7 @@
</constant>
<constant name="WINDOW_MODE_FULLSCREEN" value="3" enum="WindowMode">
Fullscreen window mode. Note that this is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless window is used to emulate fullscreen. On macOS, a new desktop is used to display the running project.
- Regardless of the platform, enabling fullscreen will change the window size to match the monitor's size. Therefore, make sure your project supports [url=https://docs.godotengine.org/en/latest/tutorials/rendering/multiple_resolutions.html]multiple resolutions[/url] when enabling fullscreen mode.
+ Regardless of the platform, enabling fullscreen will change the window size to match the monitor's size. Therefore, make sure your project supports [url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple resolutions[/url] when enabling fullscreen mode.
</constant>
<constant name="WINDOW_FLAG_RESIZE_DISABLED" value="0" enum="WindowFlags">
</constant>
diff --git a/doc/classes/EditorImportPlugin.xml b/doc/classes/EditorImportPlugin.xml
index cb33f159ef..1f98781bbd 100644
--- a/doc/classes/EditorImportPlugin.xml
+++ b/doc/classes/EditorImportPlugin.xml
@@ -111,12 +111,13 @@
To use [EditorImportPlugin], register it using the [method EditorPlugin.add_import_plugin] method first.
</description>
<tutorials>
- <link title="Import plugins">https://docs.godotengine.org/en/latest/tutorials/plugins/editor/import_plugins.html</link>
+ <link title="Import plugins">$DOCS_URL/tutorials/plugins/editor/import_plugins.html</link>
</tutorials>
<methods>
<method name="_get_import_options" qualifiers="virtual const">
<return type="Array" />
- <argument index="0" name="preset_index" type="int" />
+ <argument index="0" name="path" type="String" />
+ <argument index="1" name="preset_index" type="int" />
<description>
Gets the options and default values for the preset at this index. Returns an Array of Dictionaries with the following keys: [code]name[/code], [code]default_value[/code], [code]property_hint[/code] (optional), [code]hint_string[/code] (optional), [code]usage[/code] (optional).
</description>
@@ -135,8 +136,9 @@
</method>
<method name="_get_option_visibility" qualifiers="virtual const">
<return type="bool" />
- <argument index="0" name="option_name" type="StringName" />
- <argument index="1" name="options" type="Dictionary" />
+ <argument index="0" name="path" type="String" />
+ <argument index="1" name="option_name" type="StringName" />
+ <argument index="2" name="options" type="Dictionary" />
<description>
This method can be overridden to hide specific import options if conditions are met. This is mainly useful for hiding options that depend on others if one of them is disabled. For example:
[codeblocks]
diff --git a/doc/classes/EditorInspectorPlugin.xml b/doc/classes/EditorInspectorPlugin.xml
index bc5df47d57..08f17cc5b2 100644
--- a/doc/classes/EditorInspectorPlugin.xml
+++ b/doc/classes/EditorInspectorPlugin.xml
@@ -13,7 +13,7 @@
To use [EditorInspectorPlugin], register it using the [method EditorPlugin.add_inspector_plugin] method first.
</description>
<tutorials>
- <link title="Inspector plugins">https://docs.godotengine.org/en/latest/tutorials/plugins/editor/inspector_plugins.html</link>
+ <link title="Inspector plugins">$DOCS_URL/tutorials/plugins/editor/inspector_plugins.html</link>
</tutorials>
<methods>
<method name="_can_handle" qualifiers="virtual const">
diff --git a/doc/classes/EditorNode3DGizmoPlugin.xml b/doc/classes/EditorNode3DGizmoPlugin.xml
index 08423c4577..3bcd9e7764 100644
--- a/doc/classes/EditorNode3DGizmoPlugin.xml
+++ b/doc/classes/EditorNode3DGizmoPlugin.xml
@@ -8,7 +8,7 @@
To use [EditorNode3DGizmoPlugin], register it using the [method EditorPlugin.add_spatial_gizmo_plugin] method first.
</description>
<tutorials>
- <link title="Spatial gizmo plugins">https://docs.godotengine.org/en/latest/tutorials/plugins/editor/spatial_gizmos.html</link>
+ <link title="Spatial gizmo plugins">$DOCS_URL/tutorials/plugins/editor/spatial_gizmos.html</link>
</tutorials>
<methods>
<method name="_can_be_hidden" qualifiers="virtual const">
diff --git a/doc/classes/EditorPaths.xml b/doc/classes/EditorPaths.xml
index 92a2cff27f..c4d4c92afe 100644
--- a/doc/classes/EditorPaths.xml
+++ b/doc/classes/EditorPaths.xml
@@ -1,35 +1,65 @@
<?xml version="1.0" encoding="UTF-8" ?>
<class name="EditorPaths" inherits="Object" version="4.0">
<brief_description>
+ Editor-only singleton that returns paths to various OS-specific data folders and files.
</brief_description>
<description>
+ This editor-only singleton returns OS-specific paths to various data folders and files. It can be used in editor plugins to ensure files are saved in the correct location on each operating system.
+ [b]Note:[/b] This singleton is not accessible in exported projects. Attempting to access it in an exported project will result in a script error as the singleton won't be declared. To prevent script errors in exported projects, use [method Engine.has_singleton] to check whether the singleton is available before using it.
+ [b]Note:[/b] Godot complies with the [url=https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html]XDG Base Directory Specification[/url] on [i]all[/i] platforms. You can override environment variables following the specification to change the editor and project data paths.
</description>
<tutorials>
+ <link title="File paths in Godot projects">https://docs.godotengine.org/en/latest/tutorials/io/data_paths.html</link>
</tutorials>
<methods>
<method name="get_cache_dir" qualifiers="const">
<return type="String" />
<description>
+ Returns the absolute path to the user's cache folder. This folder should be used for temporary data that can be removed safely whenever the editor is closed (such as generated resource thumbnails).
+ [b]Default paths per platform:[/b]
+ [codeblock]
+ - Windows: %LOCALAPPDATA%\Godot\
+ - macOS: ~/Library/Caches/Godot/
+ - Linux: ~/.cache/godot/
+ [/codeblock]
</description>
</method>
<method name="get_config_dir" qualifiers="const">
<return type="String" />
<description>
+ Returns the absolute path to the user's configuration folder. This folder should be used for [i]persistent[/i] user configuration files.
+ [b]Default paths per platform:[/b]
+ [codeblock]
+ - Windows: %APPDATA%\Godot\ (same as `get_data_dir()`)
+ - macOS: ~/Library/Application Support/Godot/ (same as `get_data_dir()`)
+ - Linux: ~/.config/godot/
+ [/codeblock]
</description>
</method>
<method name="get_data_dir" qualifiers="const">
<return type="String" />
<description>
+ Returns the absolute path to the user's data folder. This folder should be used for [i]persistent[/i] user data files such as installed export templates.
+ [b]Default paths per platform:[/b]
+ [codeblock]
+ - Windows: %APPDATA%\Godot\ (same as `get_config_dir()`)
+ - macOS: ~/Library/Application Support/Godot/ (same as `get_config_dir()`)
+ - Linux: ~/.local/share/godot/
+ [/codeblock]
</description>
</method>
<method name="get_self_contained_file" qualifiers="const">
<return type="String" />
<description>
+ Returns the absolute path to the self-contained file that makes the current Godot editor instance be considered as self-contained. Returns an empty string if the current Godot editor instance isn't self-contained. See also [method is_self_contained].
</description>
</method>
<method name="is_self_contained" qualifiers="const">
<return type="bool" />
<description>
+ Returns [code]true[/code] if the editor is marked as self-contained, [code]false[/code] otherwise. When self-contained mode is enabled, user configuration, data and cache files are saved in an [code]editor_data/[/code] folder next to the editor binary. This makes portable usage easier and ensures the Godot editor minimizes file writes outside its own folder. Self-contained mode is not available for exported projects.
+ Self-contained mode can be enabled by creating a file named [code]._sc_[/code] or [code]_sc_[/code] in the same folder as the editor binary while the editor is not running. See also [method get_self_contained_file].
+ [b]Note:[/b] The Steam release of Godot uses self-contained mode by default.
</description>
</method>
</methods>
diff --git a/doc/classes/EditorPlugin.xml b/doc/classes/EditorPlugin.xml
index 8df6d721d4..7b0a300782 100644
--- a/doc/classes/EditorPlugin.xml
+++ b/doc/classes/EditorPlugin.xml
@@ -7,7 +7,7 @@
Plugins are used by the editor to extend functionality. The most common types of plugins are those which edit a given node or resource type, import plugins and export plugins. See also [EditorScript] to add functions to the editor.
</description>
<tutorials>
- <link title="Editor plugins documentation index">https://docs.godotengine.org/en/latest/tutorials/plugins/editor/index.html</link>
+ <link title="Editor plugins documentation index">$DOCS_URL/tutorials/plugins/editor/index.html</link>
</tutorials>
<methods>
<method name="_apply_changes" qualifiers="virtual">
diff --git a/doc/classes/EditorSceneFormatImporter.xml b/doc/classes/EditorSceneFormatImporter.xml
index 6dbd80604e..5b5d6c4598 100644
--- a/doc/classes/EditorSceneFormatImporter.xml
+++ b/doc/classes/EditorSceneFormatImporter.xml
@@ -20,6 +20,19 @@
<description>
</description>
</method>
+ <method name="_get_import_options" qualifiers="virtual">
+ <return type="void" />
+ <argument index="0" name="path" type="String" />
+ <description>
+ </description>
+ </method>
+ <method name="_get_option_visibility" qualifiers="virtual const">
+ <return type="Variant" />
+ <argument index="0" name="path" type="String" />
+ <argument index="1" name="option" type="String" />
+ <description>
+ </description>
+ </method>
<method name="_import_animation" qualifiers="virtual">
<return type="Animation" />
<argument index="0" name="path" type="String" />
diff --git a/doc/classes/EditorScenePostImport.xml b/doc/classes/EditorScenePostImport.xml
index 8a731a6d1d..d90af6ed9e 100644
--- a/doc/classes/EditorScenePostImport.xml
+++ b/doc/classes/EditorScenePostImport.xml
@@ -52,7 +52,7 @@
[/codeblocks]
</description>
<tutorials>
- <link title="Importing 3D scenes: Custom script">https://docs.godotengine.org/en/latest/tutorials/assets_pipeline/importing_scenes.html#custom-script</link>
+ <link title="Importing 3D scenes: Custom script">$DOCS_URL/tutorials/assets_pipeline/importing_scenes.html#custom-script</link>
</tutorials>
<methods>
<method name="_post_import" qualifiers="virtual">
diff --git a/doc/classes/EditorScenePostImportPlugin.xml b/doc/classes/EditorScenePostImportPlugin.xml
index 07d8fa28b9..904b22d9d3 100644
--- a/doc/classes/EditorScenePostImportPlugin.xml
+++ b/doc/classes/EditorScenePostImportPlugin.xml
@@ -11,6 +11,7 @@
<methods>
<method name="_get_import_options" qualifiers="virtual">
<return type="void" />
+ <argument index="0" name="path" type="String" />
<description>
Override to add general import options. These will appear in the main import dock on the editor. Add options via [method add_import_option] and [method add_import_option_advanced].
</description>
@@ -40,7 +41,8 @@
</method>
<method name="_get_option_visibility" qualifiers="virtual const">
<return type="Variant" />
- <argument index="0" name="option" type="String" />
+ <argument index="0" name="path" type="String" />
+ <argument index="1" name="option" type="String" />
<description>
Return true or false whether a given option should be visible. Return null to ignore.
</description>
diff --git a/doc/classes/Engine.xml b/doc/classes/Engine.xml
index f05a216301..9756b26dee 100644
--- a/doc/classes/Engine.xml
+++ b/doc/classes/Engine.xml
@@ -157,7 +157,7 @@
else:
simulate_physics()
[/codeblock]
- See [url=https://docs.godotengine.org/en/latest/tutorials/plugins/running_code_in_the_editor.html]Running code in the editor[/url] in the documentation for more information.
+ See [url=$DOCS_URL/tutorials/plugins/running_code_in_the_editor.html]Running code in the editor[/url] in the documentation for more information.
[b]Note:[/b] To detect whether the script is run from an editor [i]build[/i] (e.g. when pressing [kbd]F5[/kbd]), use [method OS.has_feature] with the [code]"editor"[/code] argument instead. [code]OS.has_feature("editor")[/code] will evaluate to [code]true[/code] both when the code is running in the editor and when running the project from the editor, but it will evaluate to [code]false[/code] when the code is run from an exported project.
</description>
</method>
diff --git a/doc/classes/Environment.xml b/doc/classes/Environment.xml
index 4ea7f67eed..c3d1dc4ab6 100644
--- a/doc/classes/Environment.xml
+++ b/doc/classes/Environment.xml
@@ -11,8 +11,8 @@
- Adjustments
</description>
<tutorials>
- <link title="Environment and post-processing">https://docs.godotengine.org/en/latest/tutorials/3d/environment_and_post_processing.html</link>
- <link title="Light transport in game engines">https://docs.godotengine.org/en/latest/tutorials/3d/high_dynamic_range.html</link>
+ <link title="Environment and post-processing">$DOCS_URL/tutorials/3d/environment_and_post_processing.html</link>
+ <link title="Light transport in game engines">$DOCS_URL/tutorials/3d/high_dynamic_range.html</link>
<link title="3D Material Testers Demo">https://godotengine.org/asset-library/asset/123</link>
<link title="2D HDR Demo">https://godotengine.org/asset-library/asset/110</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
@@ -171,7 +171,8 @@
<member name="sdfgi_cascades" type="int" setter="set_sdfgi_cascades" getter="get_sdfgi_cascades" enum="Environment.SDFGICascades" default="1">
</member>
<member name="sdfgi_enabled" type="bool" setter="set_sdfgi_enabled" getter="is_sdfgi_enabled" default="false">
- If [code]true[/code], enables signed distance field global illumination.
+ If [code]true[/code], enables signed distance field global illumination for meshes that have their [member GeometryInstance3D.gi_mode] set to [constant GeometryInstance3D.GI_MODE_BAKED]. SDFGI is a real-time global illumination technique that works well with procedurally generated and user-built levels, including in situations where geometry is created during gameplay. The signed distance field is automatically generated around the camera as it moves. Dynamic lights are supported, but dynamic occluders and emissive surfaces are not.
+ [b]Performance:[/b] SDFGI is relatively demanding on the GPU and is not suited to low-end hardware such as integrated graphics (consider [LightmapGI] instead). To improve SDFGI performance, enable [member ProjectSettings.rendering/global_illumination/gi/use_half_resolution] in the Project Settings.
[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light leaks (avoid one-sided walls). For interior levels, enclose your level geometry in a sufficiently large box and bridge the loops to close the mesh.
</member>
<member name="sdfgi_energy" type="float" setter="set_sdfgi_energy" getter="get_sdfgi_energy" default="1.0">
diff --git a/doc/classes/File.xml b/doc/classes/File.xml
index 811aeb8aab..276c1f0223 100644
--- a/doc/classes/File.xml
+++ b/doc/classes/File.xml
@@ -40,12 +40,12 @@
}
[/csharp]
[/codeblocks]
- In the example above, the file will be saved in the user data folder as specified in the [url=https://docs.godotengine.org/en/latest/tutorials/io/data_paths.html]Data paths[/url] documentation.
+ In the example above, the file will be saved in the user data folder as specified in the [url=$DOCS_URL/tutorials/io/data_paths.html]Data paths[/url] documentation.
[b]Note:[/b] To access project resources once exported, it is recommended to use [ResourceLoader] instead of the [File] API, as some files are converted to engine-specific formats and their original source files might not be present in the exported PCK package.
[b]Note:[/b] Files are automatically closed only if the process exits "normally" (such as by clicking the window manager's close button or pressing [b]Alt + F4[/b]). If you stop the project execution by pressing [b]F8[/b] while the project is running, the file won't be closed as the game process will be killed. You can work around this by calling [method flush] at regular intervals.
</description>
<tutorials>
- <link title="File system">https://docs.godotengine.org/en/latest/tutorials/scripting/filesystem.html</link>
+ <link title="File system">$DOCS_URL/tutorials/scripting/filesystem.html</link>
<link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link>
</tutorials>
<methods>
diff --git a/doc/classes/FontData.xml b/doc/classes/FontData.xml
index ccfe861c92..c403d238c5 100644
--- a/doc/classes/FontData.xml
+++ b/doc/classes/FontData.xml
@@ -93,6 +93,12 @@
Returns font descent (number of pixels below the baseline).
</description>
</method>
+ <method name="get_fixed_size" qualifiers="const">
+ <return type="int" />
+ <description>
+ Returns font fixed size.
+ </description>
+ </method>
<method name="get_font_name" qualifiers="const">
<return type="String" />
<description>
@@ -481,6 +487,13 @@
Sets the font descent (number of pixels below the baseline).
</description>
</method>
+ <method name="set_fixed_size">
+ <return type="void" />
+ <argument index="0" name="fixed_size" type="int" />
+ <description>
+ Sets the fixed size for the font.
+ </description>
+ </method>
<method name="set_font_name">
<return type="void" />
<argument index="0" name="name" type="String" />
diff --git a/doc/classes/GPUParticles2D.xml b/doc/classes/GPUParticles2D.xml
index 72bd6a6411..72adc49742 100644
--- a/doc/classes/GPUParticles2D.xml
+++ b/doc/classes/GPUParticles2D.xml
@@ -8,7 +8,7 @@
Use the [code]process_material[/code] property to add a [ParticlesMaterial] to configure particle appearance and behavior. Alternatively, you can add a [ShaderMaterial] which will be applied to all particles.
</description>
<tutorials>
- <link title="Particle systems (2D)">https://docs.godotengine.org/en/latest/tutorials/2d/particle_systems_2d.html</link>
+ <link title="Particle systems (2D)">$DOCS_URL/tutorials/2d/particle_systems_2d.html</link>
<link title="2D Dodge The Creeps Demo">https://godotengine.org/asset-library/asset/515</link>
</tutorials>
<methods>
diff --git a/doc/classes/GPUParticles3D.xml b/doc/classes/GPUParticles3D.xml
index 0bed561de3..771056cb93 100644
--- a/doc/classes/GPUParticles3D.xml
+++ b/doc/classes/GPUParticles3D.xml
@@ -8,7 +8,7 @@
Use the [code]process_material[/code] property to add a [ParticlesMaterial] to configure particle appearance and behavior. Alternatively, you can add a [ShaderMaterial] which will be applied to all particles.
</description>
<tutorials>
- <link title="Controlling thousands of fish with Particles">https://docs.godotengine.org/en/latest/tutorials/performance/vertex_animation/controlling_thousands_of_fish.html</link>
+ <link title="Controlling thousands of fish with Particles">$DOCS_URL/tutorials/performance/vertex_animation/controlling_thousands_of_fish.html</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
</tutorials>
<methods>
diff --git a/doc/classes/GeometryInstance3D.xml b/doc/classes/GeometryInstance3D.xml
index 0a2c0fbe81..b8514c67b8 100644
--- a/doc/classes/GeometryInstance3D.xml
+++ b/doc/classes/GeometryInstance3D.xml
@@ -38,8 +38,10 @@
The extra distance added to the GeometryInstance3D's bounding box ([AABB]) to increase its cull box.
</member>
<member name="gi_lightmap_scale" type="int" setter="set_lightmap_scale" getter="get_lightmap_scale" enum="GeometryInstance3D.LightmapScale" default="0">
+ The texel density to use for lightmapping in [LightmapGI]. Greater scale values provide higher resolution in the lightmap, which can result in sharper shadows for lights that have both direct and indirect light baked. However, greater scale values will also increase the space taken by the mesh in the lightmap texture, which increases the memory, storage, and bake time requirements. When using a single mesh at different scales, consider adjusting this value to keep the lightmap texel density consistent across meshes.
</member>
<member name="gi_mode" type="int" setter="set_gi_mode" getter="get_gi_mode" enum="GeometryInstance3D.GIMode" default="0">
+ The global illumination mode to use for the whole geometry. Use a mode that matches the purpose
</member>
<member name="ignore_occlusion_culling" type="bool" setter="set_ignore_occlusion_culling" getter="is_ignoring_occlusion_culling" default="false">
</member>
@@ -70,7 +72,7 @@
</members>
<constants>
<constant name="SHADOW_CASTING_SETTING_OFF" value="0" enum="ShadowCastingSetting">
- Will not cast any shadows.
+ Will not cast any shadows. Use this to improve performance for small geometry that is unlikely to cast noticeable shadows (such as debris).
</constant>
<constant name="SHADOW_CASTING_SETTING_ON" value="1" enum="ShadowCastingSetting">
Will cast shadows from all visible faces in the GeometryInstance3D.
@@ -85,20 +87,28 @@
In other words, the actual mesh will not be visible, only the shadows casted from the mesh will be.
</constant>
<constant name="GI_MODE_DISABLED" value="0" enum="GIMode">
+ Disabled global illumination mode. Use for dynamic objects that do not contribute to global illumination (such as characters). When using [VoxelGI] and SDFGI, the geometry will [i]receive[/i] indirect lighting and reflections but will not be considered in GI baking. When using [LightmapGI], the object will receive indirect lighting using lightmap probes instead of using the lightmap texture.
</constant>
<constant name="GI_MODE_BAKED" value="1" enum="GIMode">
+ Baked global illumination mode. Use for static objects that contribute to global illumination (such as level geometry). This GI mode is effective when using [VoxelGI], SDFGI and [LightmapGI].
</constant>
<constant name="GI_MODE_DYNAMIC" value="2" enum="GIMode">
+ Dynamic global illumination mode. Use for dynamic objects that contribute to global illumination. This GI mode is only effective when using [VoxelGI], but it has a higher performance impact than [constant GI_MODE_BAKED].
</constant>
<constant name="LIGHTMAP_SCALE_1X" value="0" enum="LightmapScale">
+ The standard texel density for lightmapping with [LightmapGI].
</constant>
<constant name="LIGHTMAP_SCALE_2X" value="1" enum="LightmapScale">
+ Multiplies texel density by 2× for lightmapping with [LightmapGI]. To ensure consistency in texel density, use this when scaling a mesh by a factor between 1.5 and 3.0.
</constant>
<constant name="LIGHTMAP_SCALE_4X" value="2" enum="LightmapScale">
+ Multiplies texel density by 4× for lightmapping with [LightmapGI]. To ensure consistency in texel density, use this when scaling a mesh by a factor between 3.0 and 6.0.
</constant>
<constant name="LIGHTMAP_SCALE_8X" value="3" enum="LightmapScale">
+ Multiplies texel density by 8× for lightmapping with [LightmapGI]. To ensure consistency in texel density, use this when scaling a mesh by a factor greater than 6.0.
</constant>
<constant name="LIGHTMAP_SCALE_MAX" value="4" enum="LightmapScale">
+ Represents the size of the [enum LightmapScale] enum.
</constant>
<constant name="VISIBILITY_RANGE_FADE_DISABLED" value="0" enum="VisibilityRangeFadeMode">
Will not fade itself nor its visibility dependencies, hysteresis will be used instead. See [member visibility_range_begin] and [member Node3D.visibility_parent] for more information.
diff --git a/doc/classes/GraphEdit.xml b/doc/classes/GraphEdit.xml
index 673bf19122..e962992491 100644
--- a/doc/classes/GraphEdit.xml
+++ b/doc/classes/GraphEdit.xml
@@ -141,7 +141,7 @@
<argument index="3" name="to_port" type="int" />
<argument index="4" name="amount" type="float" />
<description>
- Sets the coloration of the connection between [code]from[/code]'s [code]from_port[/code] and [code]to[/code]'s [code]to_port[/code] with the color provided in the [code]activity[/code] theme property.
+ Sets the coloration of the connection between [code]from[/code]'s [code]from_port[/code] and [code]to[/code]'s [code]to_port[/code] with the color provided in the [theme_item activity] theme property.
</description>
</method>
<method name="set_selected">
diff --git a/doc/classes/GraphNode.xml b/doc/classes/GraphNode.xml
index ff6271d2aa..e9226f7c1d 100644
--- a/doc/classes/GraphNode.xml
+++ b/doc/classes/GraphNode.xml
@@ -285,10 +285,10 @@
No overlay is shown.
</constant>
<constant name="OVERLAY_BREAKPOINT" value="1" enum="Overlay">
- Show overlay set in the [code]breakpoint[/code] theme property.
+ Show overlay set in the [theme_item breakpoint] theme property.
</constant>
<constant name="OVERLAY_POSITION" value="2" enum="Overlay">
- Show overlay set in the [code]position[/code] theme property.
+ Show overlay set in the [theme_item position] theme property.
</constant>
</constants>
<theme_items>
diff --git a/doc/classes/HTTPClient.xml b/doc/classes/HTTPClient.xml
index 9f33c400f4..a50983853d 100644
--- a/doc/classes/HTTPClient.xml
+++ b/doc/classes/HTTPClient.xml
@@ -15,8 +15,8 @@
[b]Warning:[/b] SSL/TLS certificate revocation and certificate pinning are currently not supported. Revoked certificates are accepted as long as they are otherwise valid. If this is a concern, you may want to use automatically managed certificates with a short validity period.
</description>
<tutorials>
- <link title="HTTP client class">https://docs.godotengine.org/en/latest/tutorials/networking/http_client_class.html</link>
- <link title="SSL certificates">https://docs.godotengine.org/en/latest/tutorials/networking/ssl_certificates.html</link>
+ <link title="HTTP client class">$DOCS_URL/tutorials/networking/http_client_class.html</link>
+ <link title="SSL certificates">$DOCS_URL/tutorials/networking/ssl_certificates.html</link>
</tutorials>
<methods>
<method name="close">
diff --git a/doc/classes/HTTPRequest.xml b/doc/classes/HTTPRequest.xml
index 558e51aefe..aaaf863c69 100644
--- a/doc/classes/HTTPRequest.xml
+++ b/doc/classes/HTTPRequest.xml
@@ -153,8 +153,8 @@
[b]Gzipped response bodies[/b]: HTTPRequest will automatically handle decompression of response bodies. A [code]Accept-Encoding[/code] header will be automatically added to each of your requests, unless one is already specified. Any response with a [code]Content-Encoding: gzip[/code] header will automatically be decompressed and delivered to you as uncompressed bytes.
</description>
<tutorials>
- <link title="Making HTTP requests">https://docs.godotengine.org/en/latest/tutorials/networking/http_request_class.html</link>
- <link title="SSL certificates">https://docs.godotengine.org/en/latest/tutorials/networking/ssl_certificates.html</link>
+ <link title="Making HTTP requests">$DOCS_URL/tutorials/networking/http_request_class.html</link>
+ <link title="SSL certificates">$DOCS_URL/tutorials/networking/ssl_certificates.html</link>
</tutorials>
<methods>
<method name="cancel_request">
diff --git a/doc/classes/Image.xml b/doc/classes/Image.xml
index 492bddca1f..d2b1b5c004 100644
--- a/doc/classes/Image.xml
+++ b/doc/classes/Image.xml
@@ -9,7 +9,7 @@
[b]Note:[/b] The maximum image size is 16384×16384 pixels due to graphics hardware limitations. Larger images may fail to import.
</description>
<tutorials>
- <link title="Importing images">https://docs.godotengine.org/en/latest/tutorials/assets_pipeline/importing_images.html</link>
+ <link title="Importing images">$DOCS_URL/tutorials/assets_pipeline/importing_images.html</link>
</tutorials>
<methods>
<method name="adjust_bcs">
@@ -278,7 +278,7 @@
<return type="int" enum="Error" />
<argument index="0" name="path" type="String" />
<description>
- Loads an image from file [code]path[/code]. See [url=https://docs.godotengine.org/en/latest/getting_started/workflow/assets/importing_images.html#supported-image-formats]Supported image formats[/url] for a list of supported image formats and limitations.
+ Loads an image from file [code]path[/code]. See [url=$DOCS_URL/getting_started/workflow/assets/importing_images.html#supported-image-formats]Supported image formats[/url] for a list of supported image formats and limitations.
[b]Warning:[/b] This method should only be used in the editor or in cases when you need to load external images at run-time, such as images located at the [code]user://[/code] directory, and may not work in exported projects.
See also [ImageTexture] description for usage examples.
</description>
diff --git a/doc/classes/ImageTexture.xml b/doc/classes/ImageTexture.xml
index af7178db95..3f96d357b6 100644
--- a/doc/classes/ImageTexture.xml
+++ b/doc/classes/ImageTexture.xml
@@ -28,7 +28,7 @@
[b]Note:[/b] The maximum texture size is 16384×16384 pixels due to graphics hardware limitations.
</description>
<tutorials>
- <link title="Importing images">https://docs.godotengine.org/en/latest/tutorials/assets_pipeline/importing_images.html</link>
+ <link title="Importing images">$DOCS_URL/tutorials/assets_pipeline/importing_images.html</link>
</tutorials>
<methods>
<method name="create_from_image">
diff --git a/doc/classes/Input.xml b/doc/classes/Input.xml
index 684207e9bd..cd5ba2e17f 100644
--- a/doc/classes/Input.xml
+++ b/doc/classes/Input.xml
@@ -7,7 +7,7 @@
A singleton that deals with inputs. This includes key presses, mouse buttons and movement, joypads, and input actions. Actions and their events can be set in the [b]Input Map[/b] tab in the [b]Project &gt; Project Settings[/b], or with the [InputMap] class.
</description>
<tutorials>
- <link title="Inputs documentation index">https://docs.godotengine.org/en/latest/tutorials/inputs/index.html</link>
+ <link title="Inputs documentation index">$DOCS_URL/tutorials/inputs/index.html</link>
<link title="2D Dodge The Creeps Demo">https://godotengine.org/asset-library/asset/515</link>
<link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link>
</tutorials>
@@ -236,6 +236,13 @@
Returns [code]true[/code] if you are pressing the mouse button specified with [enum MouseButton].
</description>
</method>
+ <method name="is_physical_key_pressed" qualifiers="const">
+ <return type="bool" />
+ <argument index="0" name="keycode" type="int" enum="Key" />
+ <description>
+ Returns [code]true[/code] if you are pressing the key in the physical location on the 101/102-key US QWERTY keyboard. You can pass a [enum Key] constant.
+ </description>
+ </method>
<method name="joy_connection_changed">
<return type="void" />
<argument index="0" name="device" type="int" />
diff --git a/doc/classes/InputEvent.xml b/doc/classes/InputEvent.xml
index 9dc8fbeffa..09fbe776bf 100644
--- a/doc/classes/InputEvent.xml
+++ b/doc/classes/InputEvent.xml
@@ -7,8 +7,8 @@
Base class of all sort of input event. See [method Node._input].
</description>
<tutorials>
- <link title="InputEvent">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link>
- <link title="Viewport and canvas transforms">https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html</link>
+ <link title="InputEvent">$DOCS_URL/tutorials/inputs/inputevent.html</link>
+ <link title="Viewport and canvas transforms">$DOCS_URL/tutorials/2d/2d_transforms.html</link>
<link title="2D Dodge The Creeps Demo">https://godotengine.org/asset-library/asset/515</link>
<link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link>
</tutorials>
diff --git a/doc/classes/InputEventAction.xml b/doc/classes/InputEventAction.xml
index f09af1a34d..e9c280732a 100644
--- a/doc/classes/InputEventAction.xml
+++ b/doc/classes/InputEventAction.xml
@@ -7,7 +7,7 @@
Contains a generic action which can be targeted from several types of inputs. Actions can be created from the [b]Input Map[/b] tab in the [b]Project &gt; Project Settings[/b] menu. See [method Node._input].
</description>
<tutorials>
- <link title="InputEvent: Actions">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html#actions</link>
+ <link title="InputEvent: Actions">$DOCS_URL/tutorials/inputs/inputevent.html#actions</link>
<link title="2D Dodge The Creeps Demo">https://godotengine.org/asset-library/asset/515</link>
<link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link>
</tutorials>
diff --git a/doc/classes/InputEventJoypadButton.xml b/doc/classes/InputEventJoypadButton.xml
index ff82913385..3e625c1003 100644
--- a/doc/classes/InputEventJoypadButton.xml
+++ b/doc/classes/InputEventJoypadButton.xml
@@ -7,7 +7,7 @@
Input event type for gamepad buttons. For gamepad analog sticks and joysticks, see [InputEventJoypadMotion].
</description>
<tutorials>
- <link title="InputEvent">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link>
+ <link title="InputEvent">$DOCS_URL/tutorials/inputs/inputevent.html</link>
</tutorials>
<members>
<member name="button_index" type="int" setter="set_button_index" getter="get_button_index" enum="JoyButton" default="0">
diff --git a/doc/classes/InputEventJoypadMotion.xml b/doc/classes/InputEventJoypadMotion.xml
index 92161974ba..b3f9013553 100644
--- a/doc/classes/InputEventJoypadMotion.xml
+++ b/doc/classes/InputEventJoypadMotion.xml
@@ -7,7 +7,7 @@
Stores information about joystick motions. One [InputEventJoypadMotion] represents one axis at a time.
</description>
<tutorials>
- <link title="InputEvent">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link>
+ <link title="InputEvent">$DOCS_URL/tutorials/inputs/inputevent.html</link>
</tutorials>
<members>
<member name="axis" type="int" setter="set_axis" getter="get_axis" enum="JoyAxis" default="0">
diff --git a/doc/classes/InputEventKey.xml b/doc/classes/InputEventKey.xml
index 0353c5f0e0..8044bf5b99 100644
--- a/doc/classes/InputEventKey.xml
+++ b/doc/classes/InputEventKey.xml
@@ -7,7 +7,7 @@
Stores key presses on the keyboard. Supports key presses, key releases and [member echo] events.
</description>
<tutorials>
- <link title="InputEvent">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link>
+ <link title="InputEvent">$DOCS_URL/tutorials/inputs/inputevent.html</link>
</tutorials>
<methods>
<method name="get_keycode_with_modifiers" qualifiers="const">
diff --git a/doc/classes/InputEventMouse.xml b/doc/classes/InputEventMouse.xml
index a248f1abd9..4878090996 100644
--- a/doc/classes/InputEventMouse.xml
+++ b/doc/classes/InputEventMouse.xml
@@ -7,7 +7,7 @@
Stores general mouse events information.
</description>
<tutorials>
- <link title="InputEvent">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link>
+ <link title="InputEvent">$DOCS_URL/tutorials/inputs/inputevent.html</link>
</tutorials>
<members>
<member name="button_mask" type="int" setter="set_button_mask" getter="get_button_mask" enum="MouseButton" default="0">
diff --git a/doc/classes/InputEventMouseButton.xml b/doc/classes/InputEventMouseButton.xml
index dcfe0d6c71..699217525e 100644
--- a/doc/classes/InputEventMouseButton.xml
+++ b/doc/classes/InputEventMouseButton.xml
@@ -7,7 +7,7 @@
Contains mouse click information. See [method Node._input].
</description>
<tutorials>
- <link title="Mouse and input coordinates">https://docs.godotengine.org/en/latest/tutorials/inputs/mouse_and_input_coordinates.html</link>
+ <link title="Mouse and input coordinates">$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html</link>
</tutorials>
<members>
<member name="button_index" type="int" setter="set_button_index" getter="get_button_index" enum="MouseButton" default="0">
diff --git a/doc/classes/InputEventMouseMotion.xml b/doc/classes/InputEventMouseMotion.xml
index 9a0156510e..bd1ae367c2 100644
--- a/doc/classes/InputEventMouseMotion.xml
+++ b/doc/classes/InputEventMouseMotion.xml
@@ -8,7 +8,7 @@
[b]Note:[/b] By default, this event is only emitted once per frame rendered at most. If you need more precise input reporting, call [method Input.set_use_accumulated_input] with [code]false[/code] to make events emitted as often as possible. If you use InputEventMouseMotion to draw lines, consider implementing [url=https://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm]Bresenham's line algorithm[/url] as well to avoid visible gaps in lines if the user is moving the mouse quickly.
</description>
<tutorials>
- <link title="Mouse and input coordinates">https://docs.godotengine.org/en/latest/tutorials/inputs/mouse_and_input_coordinates.html</link>
+ <link title="Mouse and input coordinates">$DOCS_URL/tutorials/inputs/mouse_and_input_coordinates.html</link>
<link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link>
</tutorials>
<members>
diff --git a/doc/classes/InputEventScreenDrag.xml b/doc/classes/InputEventScreenDrag.xml
index f86b5f3b4d..19c26e3a98 100644
--- a/doc/classes/InputEventScreenDrag.xml
+++ b/doc/classes/InputEventScreenDrag.xml
@@ -7,7 +7,7 @@
Contains screen drag information. See [method Node._input].
</description>
<tutorials>
- <link title="InputEvent">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link>
+ <link title="InputEvent">$DOCS_URL/tutorials/inputs/inputevent.html</link>
</tutorials>
<members>
<member name="index" type="int" setter="set_index" getter="get_index" default="0">
diff --git a/doc/classes/InputEventScreenTouch.xml b/doc/classes/InputEventScreenTouch.xml
index c731044c98..0694b2eabc 100644
--- a/doc/classes/InputEventScreenTouch.xml
+++ b/doc/classes/InputEventScreenTouch.xml
@@ -8,7 +8,7 @@
Stores multi-touch press/release information. Supports touch press, touch release and [member index] for multi-touch count and order.
</description>
<tutorials>
- <link title="InputEvent">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link>
+ <link title="InputEvent">$DOCS_URL/tutorials/inputs/inputevent.html</link>
</tutorials>
<members>
<member name="index" type="int" setter="set_index" getter="get_index" default="0">
diff --git a/doc/classes/InputEventWithModifiers.xml b/doc/classes/InputEventWithModifiers.xml
index 1b9212bf65..cd4a8aecd0 100644
--- a/doc/classes/InputEventWithModifiers.xml
+++ b/doc/classes/InputEventWithModifiers.xml
@@ -7,7 +7,7 @@
Contains keys events information with modifiers support like [kbd]Shift[/kbd] or [kbd]Alt[/kbd]. See [method Node._input].
</description>
<tutorials>
- <link title="InputEvent">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html</link>
+ <link title="InputEvent">$DOCS_URL/tutorials/inputs/inputevent.html</link>
</tutorials>
<members>
<member name="alt_pressed" type="bool" setter="set_alt_pressed" getter="is_alt_pressed" default="false">
diff --git a/doc/classes/InputMap.xml b/doc/classes/InputMap.xml
index 855d5b5d71..24f220e892 100644
--- a/doc/classes/InputMap.xml
+++ b/doc/classes/InputMap.xml
@@ -7,7 +7,7 @@
Manages all [InputEventAction] which can be created/modified from the project settings menu [b]Project &gt; Project Settings &gt; Input Map[/b] or in code with [method add_action] and [method action_add_event]. See [method Node._input].
</description>
<tutorials>
- <link title="InputEvent: InputMap">https://docs.godotengine.org/en/latest/tutorials/inputs/inputevent.html#inputmap</link>
+ <link title="InputEvent: InputMap">$DOCS_URL/tutorials/inputs/inputevent.html#inputmap</link>
</tutorials>
<methods>
<method name="action_add_event">
diff --git a/doc/classes/JNISingleton.xml b/doc/classes/JNISingleton.xml
index ce39e1f567..c887f72767 100644
--- a/doc/classes/JNISingleton.xml
+++ b/doc/classes/JNISingleton.xml
@@ -7,6 +7,6 @@
The JNISingleton is implemented only in the Android export. It's used to call methods and connect signals from an Android plugin written in Java or Kotlin. Methods and signals can be called and connected to the JNISingleton as if it is a Node. See [url=https://en.wikipedia.org/wiki/Java_Native_Interface]Java Native Interface - Wikipedia[/url] for more information.
</description>
<tutorials>
- <link title="Creating Android plugins">https://docs.godotengine.org/en/latest/tutorials/platform/android/android_plugin.html#doc-android-plugin</link>
+ <link title="Creating Android plugins">$DOCS_URL/tutorials/platform/android/android_plugin.html#doc-android-plugin</link>
</tutorials>
</class>
diff --git a/doc/classes/JavaScript.xml b/doc/classes/JavaScript.xml
index 2bb2666df4..aeaf8ac1f5 100644
--- a/doc/classes/JavaScript.xml
+++ b/doc/classes/JavaScript.xml
@@ -5,10 +5,10 @@
</brief_description>
<description>
The JavaScript singleton is implemented only in the HTML5 export. It's used to access the browser's JavaScript context. This allows interaction with embedding pages or calling third-party JavaScript APIs.
- [b]Note:[/b] This singleton can be disabled at build-time to improve security. By default, the JavaScript singleton is enabled. Official export templates also have the JavaScript singleton enabled. See [url=https://docs.godotengine.org/en/latest/development/compiling/compiling_for_web.html]Compiling for the Web[/url] in the documentation for more information.
+ [b]Note:[/b] This singleton can be disabled at build-time to improve security. By default, the JavaScript singleton is enabled. Official export templates also have the JavaScript singleton enabled. See [url=$DOCS_URL/development/compiling/compiling_for_web.html]Compiling for the Web[/url] in the documentation for more information.
</description>
<tutorials>
- <link title="Exporting for the Web: Calling JavaScript from script">https://docs.godotengine.org/en/latest/tutorials/export/exporting_for_web.html#calling-javascript-from-script</link>
+ <link title="Exporting for the Web: Calling JavaScript from script">$DOCS_URL/tutorials/export/exporting_for_web.html#calling-javascript-from-script</link>
</tutorials>
<methods>
<method name="create_callback">
diff --git a/doc/classes/Light2D.xml b/doc/classes/Light2D.xml
index 918e8a5c8a..039425b15f 100644
--- a/doc/classes/Light2D.xml
+++ b/doc/classes/Light2D.xml
@@ -8,7 +8,7 @@
[b]Note:[/b] Light2D can also be used as a mask.
</description>
<tutorials>
- <link title="2D lights and shadows">https://docs.godotengine.org/en/latest/tutorials/2d/2d_lights_and_shadows.html</link>
+ <link title="2D lights and shadows">$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html</link>
</tutorials>
<methods>
<method name="get_height" qualifiers="const">
diff --git a/doc/classes/Light3D.xml b/doc/classes/Light3D.xml
index dbda22d618..009ad1f609 100644
--- a/doc/classes/Light3D.xml
+++ b/doc/classes/Light3D.xml
@@ -7,7 +7,7 @@
Light3D is the [i]abstract[/i] base class for light nodes. As it can't be instantiated, it shouldn't be used directly. Other types of light nodes inherit from it. Light3D contains the common variables and parameters used for lighting.
</description>
<tutorials>
- <link title="3D lights and shadows">https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html</link>
+ <link title="3D lights and shadows">$DOCS_URL/tutorials/3d/lights_and_shadows.html</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
</tutorials>
<methods>
diff --git a/doc/classes/LightOccluder2D.xml b/doc/classes/LightOccluder2D.xml
index ba795a29a1..d883128ac3 100644
--- a/doc/classes/LightOccluder2D.xml
+++ b/doc/classes/LightOccluder2D.xml
@@ -7,7 +7,7 @@
Occludes light cast by a Light2D, casting shadows. The LightOccluder2D must be provided with an [OccluderPolygon2D] in order for the shadow to be computed.
</description>
<tutorials>
- <link title="2D lights and shadows">https://docs.godotengine.org/en/latest/tutorials/2d/2d_lights_and_shadows.html</link>
+ <link title="2D lights and shadows">$DOCS_URL/tutorials/2d/2d_lights_and_shadows.html</link>
</tutorials>
<members>
<member name="occluder" type="OccluderPolygon2D" setter="set_occluder_polygon" getter="get_occluder_polygon">
diff --git a/doc/classes/LightmapGI.xml b/doc/classes/LightmapGI.xml
index 0cdf9f820f..b7d4c93fd5 100644
--- a/doc/classes/LightmapGI.xml
+++ b/doc/classes/LightmapGI.xml
@@ -1,8 +1,12 @@
<?xml version="1.0" encoding="UTF-8" ?>
<class name="LightmapGI" inherits="VisualInstance3D" version="4.0">
<brief_description>
+ Computes and stores baked lightmaps for fast global illumination.
</brief_description>
<description>
+ The [LightmapGI] node is used to compute and store baked lightmaps. Lightmaps are used to provide high-quality indirect lighting with very little light leaking. [LightmapGI] can also provide rough reflections using spherical harmonics if [member directional] is enabled. Dynamic objects can receive indirect lighting thanks to [i]light probes[/i], which can be automatically placed by setting [member generate_probes_subdiv]. Additional lightmap probes can also be added by creating [LightmapProbe] nodes. The downside is that lightmaps are fully static and cannot be baked in an exported project. Baking a [LightmapGI] node is also slower compared to [VoxelGI].
+ [b]Procedural generation:[/b] Lightmap baking functionality is only available in the editor. This means [LightmapGI] is not suited to procedurally generated or user-built levels. For procedurally generated or user-built levels, use [VoxelGI] or SDFGI instead (see [member Environment.sdfgi_enabled]).
+ [b]Performance:[/b] [LightmapGI] provides the best possible run-time performance for global illumination. It is suitable for low-end hardware including integrated graphics and mobile devices.
</description>
<tutorials>
</tutorials>
diff --git a/doc/classes/MeshInstance2D.xml b/doc/classes/MeshInstance2D.xml
index c7b66c8ea3..6873edb3ae 100644
--- a/doc/classes/MeshInstance2D.xml
+++ b/doc/classes/MeshInstance2D.xml
@@ -7,7 +7,7 @@
Node used for displaying a [Mesh] in 2D. Can be constructed from an existing [Sprite2D] via a tool in the editor toolbar. Select "Sprite2D" then "Convert to Mesh2D", select settings in popup and press "Create Mesh2D".
</description>
<tutorials>
- <link title="2D meshes">https://docs.godotengine.org/en/latest/tutorials/2d/2d_meshes.html</link>
+ <link title="2D meshes">$DOCS_URL/tutorials/2d/2d_meshes.html</link>
</tutorials>
<members>
<member name="mesh" type="Mesh" setter="set_mesh" getter="get_mesh">
diff --git a/doc/classes/MultiMesh.xml b/doc/classes/MultiMesh.xml
index 7890bbcc33..cf3b395b7b 100644
--- a/doc/classes/MultiMesh.xml
+++ b/doc/classes/MultiMesh.xml
@@ -10,8 +10,8 @@
Since instances may have any behavior, the AABB used for visibility must be provided by the user.
</description>
<tutorials>
- <link title="Animating thousands of fish with MultiMeshInstance">https://docs.godotengine.org/en/latest/tutorials/performance/vertex_animation/animating_thousands_of_fish.html</link>
- <link title="Optimization using MultiMeshes">https://docs.godotengine.org/en/latest/tutorials/performance/using_multimesh.html</link>
+ <link title="Animating thousands of fish with MultiMeshInstance">$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish.html</link>
+ <link title="Optimization using MultiMeshes">$DOCS_URL/tutorials/performance/using_multimesh.html</link>
</tutorials>
<methods>
<method name="get_aabb" qualifiers="const">
diff --git a/doc/classes/MultiMeshInstance3D.xml b/doc/classes/MultiMeshInstance3D.xml
index 158579e952..d78a045aca 100644
--- a/doc/classes/MultiMeshInstance3D.xml
+++ b/doc/classes/MultiMeshInstance3D.xml
@@ -8,9 +8,9 @@
This is useful to optimize the rendering of a high amount of instances of a given mesh (for example trees in a forest or grass strands).
</description>
<tutorials>
- <link title="Animating thousands of fish with MultiMeshInstance">https://docs.godotengine.org/en/latest/tutorials/performance/vertex_animation/animating_thousands_of_fish.html</link>
- <link title="Using MultiMeshInstance">https://docs.godotengine.org/en/latest/tutorials/3d/using_multi_mesh_instance.html</link>
- <link title="Optimization using MultiMeshes">https://docs.godotengine.org/en/latest/tutorials/performance/using_multimesh.html</link>
+ <link title="Animating thousands of fish with MultiMeshInstance">$DOCS_URL/tutorials/performance/vertex_animation/animating_thousands_of_fish.html</link>
+ <link title="Using MultiMeshInstance">$DOCS_URL/tutorials/3d/using_multi_mesh_instance.html</link>
+ <link title="Optimization using MultiMeshes">$DOCS_URL/tutorials/performance/using_multimesh.html</link>
</tutorials>
<members>
<member name="multimesh" type="MultiMesh" setter="set_multimesh" getter="get_multimesh">
diff --git a/doc/classes/MultiplayerPeer.xml b/doc/classes/MultiplayerPeer.xml
index 67d3161aba..b7bd7bef36 100644
--- a/doc/classes/MultiplayerPeer.xml
+++ b/doc/classes/MultiplayerPeer.xml
@@ -9,7 +9,7 @@
[b]Note:[/b] When exporting to Android, make sure to enable the [code]INTERNET[/code] permission in the Android export preset before exporting the project or using one-click deploy. Otherwise, network communication of any kind will be blocked by Android.
</description>
<tutorials>
- <link title="High-level multiplayer">https://docs.godotengine.org/en/latest/tutorials/networking/high_level_multiplayer.html</link>
+ <link title="High-level multiplayer">$DOCS_URL/tutorials/networking/high_level_multiplayer.html</link>
<link title="WebRTC Signaling Demo">https://godotengine.org/asset-library/asset/537</link>
</tutorials>
<methods>
diff --git a/doc/classes/Mutex.xml b/doc/classes/Mutex.xml
index a840cb2ec7..90c81686b1 100644
--- a/doc/classes/Mutex.xml
+++ b/doc/classes/Mutex.xml
@@ -7,7 +7,7 @@
A synchronization mutex (mutual exclusion). This is used to synchronize multiple [Thread]s, and is equivalent to a binary [Semaphore]. It guarantees that only one thread can ever acquire the lock at a time. A mutex can be used to protect a critical section; however, be careful to avoid deadlocks.
</description>
<tutorials>
- <link title="Using multiple threads">https://docs.godotengine.org/en/latest/tutorials/performance/using_multiple_threads.html</link>
+ <link title="Using multiple threads">$DOCS_URL/tutorials/performance/using_multiple_threads.html</link>
</tutorials>
<methods>
<method name="lock">
diff --git a/doc/classes/Node.xml b/doc/classes/Node.xml
index 3745b394e0..8a12314ba8 100644
--- a/doc/classes/Node.xml
+++ b/doc/classes/Node.xml
@@ -17,7 +17,7 @@
[b]Networking with nodes:[/b] After connecting to a server (or making one, see [ENetMultiplayerPeer]), it is possible to use the built-in RPC (remote procedure call) system to communicate over the network. By calling [method rpc] with a method name, it will be called locally and in all connected peers (peers = clients and the server that accepts connections). To identify which node receives the RPC call, Godot will use its [NodePath] (make sure node names are the same on all peers). Also, take a look at the high-level networking tutorial and corresponding demos.
</description>
<tutorials>
- <link title="Nodes and scenes">https://docs.godotengine.org/en/latest/getting_started/step_by_step/nodes_and_scenes.htmltml</link>
+ <link title="Nodes and scenes">$DOCS_URL/getting_started/step_by_step/nodes_and_scenes.html</link>
<link title="All Demos">https://github.com/godotengine/godot-demo-projects/</link>
</tutorials>
<methods>
@@ -233,6 +233,14 @@
<description>
Returns an array listing the groups that the node is a member of.
[b]Note:[/b] For performance reasons, the order of node groups is [i]not[/i] guaranteed. The order of node groups should not be relied upon as it can vary across project runs.
+ [b]Note:[/b] The engine uses some group names internally (all starting with an underscore). To avoid conflicts with internal groups, do not add custom groups whose name starts with an underscore. To exclude internal groups while looping over [method get_groups], use the following snippet:
+ [codeblock]
+ # Stores the node's non-internal groups only (as an array of Strings).
+ var non_internal_groups = []
+ for group in get_groups():
+ if not group.begins_with("_"):
+ non_internal_groups.push_back(group)
+ [/codeblock]
</description>
</method>
<method name="get_index" qualifiers="const">
@@ -563,6 +571,7 @@
<description>
Replaces a node in a scene by the given one. Subscriptions that pass through this node will be lost.
If [code]keep_groups[/code] is [code]true[/code], the [code]node[/code] is added to the same groups that the replaced node is in.
+ Note that the replaced node is not automatically freed, so you either need to keep it in a variable for later use or free it using [method Object.free].
</description>
</method>
<method name="request_ready">
diff --git a/doc/classes/Node2D.xml b/doc/classes/Node2D.xml
index ef5f9ee5c9..b8bf342680 100644
--- a/doc/classes/Node2D.xml
+++ b/doc/classes/Node2D.xml
@@ -7,7 +7,7 @@
A 2D game object, with a transform (position, rotation, and scale). All 2D nodes, including physics objects and sprites, inherit from Node2D. Use Node2D as a parent node to move, scale and rotate children in a 2D project. Also gives control of the node's render order.
</description>
<tutorials>
- <link title="Custom drawing in 2D">https://docs.godotengine.org/en/latest/tutorials/2d/custom_drawing_in_2d.html</link>
+ <link title="Custom drawing in 2D">$DOCS_URL/tutorials/2d/custom_drawing_in_2d.html</link>
<link title="All 2D Demos">https://github.com/godotengine/godot-demo-projects/tree/master/2d</link>
</tutorials>
<methods>
diff --git a/doc/classes/Node3D.xml b/doc/classes/Node3D.xml
index 2ca664e2b5..1036c1fbcf 100644
--- a/doc/classes/Node3D.xml
+++ b/doc/classes/Node3D.xml
@@ -9,7 +9,7 @@
[b]Note:[/b] Unless otherwise specified, all methods that have angle parameters must have angles specified as [i]radians[/i]. To convert degrees to radians, use [method @GlobalScope.deg2rad].
</description>
<tutorials>
- <link title="Introduction to 3D">https://docs.godotengine.org/en/latest/tutorials/3d/introduction_to_3d.html</link>
+ <link title="Introduction to 3D">$DOCS_URL/tutorials/3d/introduction_to_3d.html</link>
<link title="All 3D Demos">https://github.com/godotengine/godot-demo-projects/tree/master/3d</link>
</tutorials>
<methods>
diff --git a/doc/classes/OS.xml b/doc/classes/OS.xml
index dcd41e46f0..7088844547 100644
--- a/doc/classes/OS.xml
+++ b/doc/classes/OS.xml
@@ -142,7 +142,7 @@
<method name="get_cache_dir" qualifiers="const">
<return type="String" />
<description>
- Returns the [i]global[/i] cache data directory according to the operating system's standards. On desktop platforms, this path can be overridden by setting the [code]XDG_CACHE_HOME[/code] environment variable before starting the project. See [url=https://docs.godotengine.org/en/latest/tutorials/io/data_paths.html]File paths in Godot projects[/url] in the documentation for more information. See also [method get_config_dir] and [method get_data_dir].
+ Returns the [i]global[/i] cache data directory according to the operating system's standards. On desktop platforms, this path can be overridden by setting the [code]XDG_CACHE_HOME[/code] environment variable before starting the project. See [url=$DOCS_URL/tutorials/io/data_paths.html]File paths in Godot projects[/url] in the documentation for more information. See also [method get_config_dir] and [method get_data_dir].
Not to be confused with [method get_user_data_dir], which returns the [i]project-specific[/i] user data path.
</description>
</method>
@@ -179,7 +179,7 @@
<method name="get_config_dir" qualifiers="const">
<return type="String" />
<description>
- Returns the [i]global[/i] user configuration directory according to the operating system's standards. On desktop platforms, this path can be overridden by setting the [code]XDG_CONFIG_HOME[/code] environment variable before starting the project. See [url=https://docs.godotengine.org/en/latest/tutorials/io/data_paths.html]File paths in Godot projects[/url] in the documentation for more information. See also [method get_cache_dir] and [method get_data_dir].
+ Returns the [i]global[/i] user configuration directory according to the operating system's standards. On desktop platforms, this path can be overridden by setting the [code]XDG_CONFIG_HOME[/code] environment variable before starting the project. See [url=$DOCS_URL/tutorials/io/data_paths.html]File paths in Godot projects[/url] in the documentation for more information. See also [method get_cache_dir] and [method get_data_dir].
Not to be confused with [method get_user_data_dir], which returns the [i]project-specific[/i] user data path.
</description>
</method>
@@ -194,7 +194,7 @@
<method name="get_data_dir" qualifiers="const">
<return type="String" />
<description>
- Returns the [i]global[/i] user data directory according to the operating system's standards. On desktop platforms, this path can be overridden by setting the [code]XDG_DATA_HOME[/code] environment variable before starting the project. See [url=https://docs.godotengine.org/en/latest/tutorials/io/data_paths.html]File paths in Godot projects[/url] in the documentation for more information. See also [method get_cache_dir] and [method get_config_dir].
+ Returns the [i]global[/i] user data directory according to the operating system's standards. On desktop platforms, this path can be overridden by setting the [code]XDG_DATA_HOME[/code] environment variable before starting the project. See [url=$DOCS_URL/tutorials/io/data_paths.html]File paths in Godot projects[/url] in the documentation for more information. See also [method get_cache_dir] and [method get_config_dir].
Not to be confused with [method get_user_data_dir], which returns the [i]project-specific[/i] user data path.
</description>
</method>
@@ -246,6 +246,13 @@
This can be used to narrow down fully specified locale strings to only the "common" language code, when you don't need the additional information about country code or variants. For example, for a French Canadian user with [code]fr_CA[/code] locale, this would return [code]fr[/code].
</description>
</method>
+ <method name="get_main_thread_id" qualifiers="const">
+ <return type="int" />
+ <description>
+ Returns the ID of the main thread. See [method get_thread_caller_id].
+ [b]Note:[/b] Thread IDs are not deterministic and may be reused across application restarts.
+ </description>
+ </method>
<method name="get_model_name" qualifiers="const">
<return type="String" />
<description>
@@ -332,7 +339,7 @@
<return type="bool" />
<argument index="0" name="tag_name" type="String" />
<description>
- Returns [code]true[/code] if the feature for the given feature tag is supported in the currently running instance, depending on the platform, build, etc. Can be used to check whether you're currently running a debug build, on a certain platform or arch, etc. Refer to the [url=https://docs.godotengine.org/en/latest/getting_started/workflow/export/feature_tags.html]Feature Tags[/url] documentation for more details.
+ Returns [code]true[/code] if the feature for the given feature tag is supported in the currently running instance, depending on the platform, build, etc. Can be used to check whether you're currently running a debug build, on a certain platform or arch, etc. Refer to the [url=$DOCS_URL/getting_started/workflow/export/feature_tags.html]Feature Tags[/url] documentation for more details.
[b]Note:[/b] Tag names are case-sensitive.
</description>
</method>
diff --git a/doc/classes/Object.xml b/doc/classes/Object.xml
index 5a84364b92..860e252805 100644
--- a/doc/classes/Object.xml
+++ b/doc/classes/Object.xml
@@ -29,7 +29,7 @@
[b]Note:[/b] Unlike references to a [RefCounted], references to an Object stored in a variable can become invalid without warning. Therefore, it's recommended to use [RefCounted] for data classes instead of [Object].
</description>
<tutorials>
- <link title="When and how to avoid using nodes for everything">https://docs.godotengine.org/en/latest/tutorials/best_practices/node_alternatives.html</link>
+ <link title="When and how to avoid using nodes for everything">$DOCS_URL/tutorials/best_practices/node_alternatives.html</link>
</tutorials>
<methods>
<method name="_get" qualifiers="virtual">
@@ -350,6 +350,7 @@
<argument index="0" name="property" type="NodePath" />
<description>
Gets the object's property indexed by the given [NodePath]. The node path should be relative to the current object and can use the colon character ([code]:[/code]) to access nested properties. Examples: [code]"position:x"[/code] or [code]"material:next_pass:blend_mode"[/code].
+ [b]Note:[/b] Even though the method takes [NodePath] argument, it doesn't support actual paths to [Node]s in the scene tree, only colon-separated sub-property paths. For the purpose of nodes, use [method Node.get_node_and_resource] instead.
</description>
</method>
<method name="get_instance_id" qualifiers="const">
@@ -567,7 +568,7 @@
<description>
Translates a message using translation catalogs configured in the Project Settings. An additional context could be used to specify the translation context.
Only works if message translation is enabled (which it is by default), otherwise it returns the [code]message[/code] unchanged. See [method set_message_translation].
- See [url=https://docs.godotengine.org/en/latest/tutorials/i18n/internationalizing_games.html]Internationalizing games[/url] for examples of the usage of this method.
+ See [url=$DOCS_URL/tutorials/i18n/internationalizing_games.html]Internationalizing games[/url] for examples of the usage of this method.
</description>
</method>
<method name="tr_n" qualifiers="const">
@@ -581,7 +582,7 @@
Only works if message translation is enabled (which it is by default), otherwise it returns the [code]message[/code] or [code]plural_message[/code] unchanged. See [method set_message_translation].
The number [code]n[/code] is the number or quantity of the plural object. It will be used to guide the translation system to fetch the correct plural form for the selected language.
[b]Note:[/b] Negative and floating-point values usually represent physical entities for which singular and plural don't clearly apply. In such cases, use [method tr].
- See [url=https://docs.godotengine.org/en/latest/tutorials/i18n/localization_using_gettext.html]Localization using gettext[/url] for examples of the usage of this method.
+ See [url=$DOCS_URL/tutorials/i18n/localization_using_gettext.html]Localization using gettext[/url] for examples of the usage of this method.
</description>
</method>
</methods>
diff --git a/doc/classes/OmniLight3D.xml b/doc/classes/OmniLight3D.xml
index e8d5977199..013ad0cc42 100644
--- a/doc/classes/OmniLight3D.xml
+++ b/doc/classes/OmniLight3D.xml
@@ -7,7 +7,7 @@
An Omnidirectional light is a type of [Light3D] that emits light in all directions. The light is attenuated by distance and this attenuation can be configured by changing its energy, radius, and attenuation parameters.
</description>
<tutorials>
- <link title="3D lights and shadows">https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html</link>
+ <link title="3D lights and shadows">$DOCS_URL/tutorials/3d/lights_and_shadows.html</link>
</tutorials>
<members>
<member name="omni_attenuation" type="float" setter="set_param" getter="get_param" default="1.0">
diff --git a/doc/classes/PCKPacker.xml b/doc/classes/PCKPacker.xml
index 28508c85e0..b5e7b32225 100644
--- a/doc/classes/PCKPacker.xml
+++ b/doc/classes/PCKPacker.xml
@@ -43,8 +43,8 @@
<method name="pck_start">
<return type="int" enum="Error" />
<argument index="0" name="pck_name" type="String" />
- <argument index="1" name="alignment" type="int" default="0" />
- <argument index="2" name="key" type="String" default="&quot;&quot;" />
+ <argument index="1" name="alignment" type="int" default="32" />
+ <argument index="2" name="key" type="String" default="&quot;0000000000000000000000000000000000000000000000000000000000000000&quot;" />
<argument index="3" name="encrypt_directory" type="bool" default="false" />
<description>
Creates a new PCK file with the name [code]pck_name[/code]. The [code].pck[/code] file extension isn't added automatically, so it should be part of [code]pck_name[/code] (even though it's not required).
diff --git a/doc/classes/PackedScene.xml b/doc/classes/PackedScene.xml
index d0579c6f6f..d3a770b35b 100644
--- a/doc/classes/PackedScene.xml
+++ b/doc/classes/PackedScene.xml
@@ -5,7 +5,7 @@
</brief_description>
<description>
A simplified interface to a scene file. Provides access to operations and checks that can be performed on the scene resource itself.
- Can be used to save a node to a file. When saving, the node as well as all the nodes it owns get saved (see [code]owner[/code] property on [Node]).
+ Can be used to save a node to a file. When saving, the node as well as all the nodes it owns get saved (see [member Node.owner] property).
[b]Note:[/b] The node doesn't need to own itself.
[b]Example of loading a saved scene:[/b]
[codeblocks]
@@ -22,7 +22,7 @@
AddChild(scene);
[/csharp]
[/codeblocks]
- [b]Example of saving a node with different owners:[/b] The following example creates 3 objects: [code]Node2D[/code] ([code]node[/code]), [code]RigidDynamicBody2D[/code] ([code]body[/code]) and [code]CollisionObject2D[/code] ([code]collision[/code]). [code]collision[/code] is a child of [code]body[/code] which is a child of [code]node[/code]. Only [code]body[/code] is owned by [code]node[/code] and [code]pack[/code] will therefore only save those two nodes, but not [code]collision[/code].
+ [b]Example of saving a node with different owners:[/b] The following example creates 3 objects: [Node2D] ([code]node[/code]), [RigidDynamicBody2D] ([code]body[/code]) and [CollisionObject2D] ([code]collision[/code]). [code]collision[/code] is a child of [code]body[/code] which is a child of [code]node[/code]. Only [code]body[/code] is owned by [code]node[/code] and [code]pack[/code] will therefore only save those two nodes, but not [code]collision[/code].
[codeblocks]
[gdscript]
# Create the objects.
diff --git a/doc/classes/PhysicalSkyMaterial.xml b/doc/classes/PhysicalSkyMaterial.xml
index b90f52a70d..e1e50a2b51 100644
--- a/doc/classes/PhysicalSkyMaterial.xml
+++ b/doc/classes/PhysicalSkyMaterial.xml
@@ -23,7 +23,7 @@
<member name="mie_coefficient" type="float" setter="set_mie_coefficient" getter="get_mie_coefficient" default="0.005">
Controls the strength of mie scattering for the sky. Mie scattering results from light colliding with larger particles (like water). On earth, mie scattering results in a whitish color around the sun and horizon.
</member>
- <member name="mie_color" type="Color" setter="set_mie_color" getter="get_mie_color" default="Color(0.36, 0.56, 0.82, 1)">
+ <member name="mie_color" type="Color" setter="set_mie_color" getter="get_mie_color" default="Color(0.63, 0.77, 0.92, 1)">
Controls the [Color] of the mie scattering effect. While not physically accurate, this allows for the creation of alien looking planets.
</member>
<member name="mie_eccentricity" type="float" setter="set_mie_eccentricity" getter="get_mie_eccentricity" default="0.8">
@@ -35,7 +35,7 @@
<member name="rayleigh_coefficient" type="float" setter="set_rayleigh_coefficient" getter="get_rayleigh_coefficient" default="2.0">
Controls the strength of the Rayleigh scattering. Rayleigh scattering results from light colliding with small particles. It is responsible for the blue color of the sky.
</member>
- <member name="rayleigh_color" type="Color" setter="set_rayleigh_color" getter="get_rayleigh_color" default="Color(0.056, 0.14, 0.3, 1)">
+ <member name="rayleigh_color" type="Color" setter="set_rayleigh_color" getter="get_rayleigh_color" default="Color(0.26, 0.41, 0.58, 1)">
Controls the [Color] of the Rayleigh scattering. While not physically accurate, this allows for the creation of alien looking planets. For example, setting this to a red [Color] results in a Mars looking atmosphere with a corresponding blue sunset.
</member>
<member name="sun_disk_scale" type="float" setter="set_sun_disk_scale" getter="get_sun_disk_scale" default="1.0">
diff --git a/doc/classes/PhysicsBody2D.xml b/doc/classes/PhysicsBody2D.xml
index 7775cfb2f9..08f9de53ca 100644
--- a/doc/classes/PhysicsBody2D.xml
+++ b/doc/classes/PhysicsBody2D.xml
@@ -7,7 +7,7 @@
PhysicsBody2D is an abstract base class for implementing a physics body. All *Body2D types inherit from it.
</description>
<tutorials>
- <link title="Physics introduction">https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link>
+ <link title="Physics introduction">$DOCS_URL/tutorials/physics/physics_introduction.html</link>
</tutorials>
<methods>
<method name="add_collision_exception_with">
diff --git a/doc/classes/PhysicsBody3D.xml b/doc/classes/PhysicsBody3D.xml
index 9cf587f2e0..3c52850eec 100644
--- a/doc/classes/PhysicsBody3D.xml
+++ b/doc/classes/PhysicsBody3D.xml
@@ -7,7 +7,7 @@
PhysicsBody3D is an abstract base class for implementing a physics body. All *Body types inherit from it.
</description>
<tutorials>
- <link title="Physics introduction">https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link>
+ <link title="Physics introduction">$DOCS_URL/tutorials/physics/physics_introduction.html</link>
</tutorials>
<methods>
<method name="add_collision_exception_with">
diff --git a/doc/classes/PhysicsDirectBodyState2D.xml b/doc/classes/PhysicsDirectBodyState2D.xml
index 3fe9cd776c..c33bd930be 100644
--- a/doc/classes/PhysicsDirectBodyState2D.xml
+++ b/doc/classes/PhysicsDirectBodyState2D.xml
@@ -7,8 +7,8 @@
Provides direct access to a physics body in the [PhysicsServer2D], allowing safe changes to physics properties. This object is passed via the direct state callback of dynamic bodies, and is intended for changing the direct state of that body. See [method RigidDynamicBody2D._integrate_forces].
</description>
<tutorials>
- <link title="Physics introduction">https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link>
- <link title="Ray-casting">https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html</link>
+ <link title="Physics introduction">$DOCS_URL/tutorials/physics/physics_introduction.html</link>
+ <link title="Ray-casting">$DOCS_URL/tutorials/physics/ray-casting.html</link>
</tutorials>
<methods>
<method name="add_central_force">
diff --git a/doc/classes/PhysicsDirectBodyState3D.xml b/doc/classes/PhysicsDirectBodyState3D.xml
index efa9eb9cd6..7aa46dec2f 100644
--- a/doc/classes/PhysicsDirectBodyState3D.xml
+++ b/doc/classes/PhysicsDirectBodyState3D.xml
@@ -7,8 +7,8 @@
Provides direct access to a physics body in the [PhysicsServer3D], allowing safe changes to physics properties. This object is passed via the direct state callback of dynamic bodies, and is intended for changing the direct state of that body. See [method RigidDynamicBody3D._integrate_forces].
</description>
<tutorials>
- <link title="Physics introduction">https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link>
- <link title="Ray-casting">https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html</link>
+ <link title="Physics introduction">$DOCS_URL/tutorials/physics/physics_introduction.html</link>
+ <link title="Ray-casting">$DOCS_URL/tutorials/physics/ray-casting.html</link>
</tutorials>
<methods>
<method name="add_central_force">
diff --git a/doc/classes/PhysicsDirectSpaceState2D.xml b/doc/classes/PhysicsDirectSpaceState2D.xml
index 107d276df2..fb82aaf36a 100644
--- a/doc/classes/PhysicsDirectSpaceState2D.xml
+++ b/doc/classes/PhysicsDirectSpaceState2D.xml
@@ -7,8 +7,8 @@
Direct access object to a space in the [PhysicsServer2D]. It's used mainly to do queries against objects and areas residing in a given space.
</description>
<tutorials>
- <link title="Physics introduction">https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link>
- <link title="Ray-casting">https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html</link>
+ <link title="Physics introduction">$DOCS_URL/tutorials/physics/physics_introduction.html</link>
+ <link title="Ray-casting">$DOCS_URL/tutorials/physics/ray-casting.html</link>
</tutorials>
<methods>
<method name="cast_motion">
diff --git a/doc/classes/PhysicsDirectSpaceState3D.xml b/doc/classes/PhysicsDirectSpaceState3D.xml
index 349ce31ab4..177fca9ce3 100644
--- a/doc/classes/PhysicsDirectSpaceState3D.xml
+++ b/doc/classes/PhysicsDirectSpaceState3D.xml
@@ -7,8 +7,8 @@
Direct access object to a space in the [PhysicsServer3D]. It's used mainly to do queries against objects and areas residing in a given space.
</description>
<tutorials>
- <link title="Physics introduction">https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link>
- <link title="Ray-casting">https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html</link>
+ <link title="Physics introduction">$DOCS_URL/tutorials/physics/physics_introduction.html</link>
+ <link title="Ray-casting">$DOCS_URL/tutorials/physics/ray-casting.html</link>
</tutorials>
<methods>
<method name="cast_motion">
diff --git a/doc/classes/PhysicsPointQueryParameters2D.xml b/doc/classes/PhysicsPointQueryParameters2D.xml
index 6acd83b101..b4cb2145cf 100644
--- a/doc/classes/PhysicsPointQueryParameters2D.xml
+++ b/doc/classes/PhysicsPointQueryParameters2D.xml
@@ -19,7 +19,7 @@
If [code]true[/code], the query will take [PhysicsBody2D]s into account.
</member>
<member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="4294967295">
- The physics layers the query will detect (as a bitmask). By default, all collision layers are detected. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
+ The physics layers the query will detect (as a bitmask). By default, all collision layers are detected. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
</member>
<member name="exclude" type="Array" setter="set_exclude" getter="get_exclude" default="[]">
The list of objects or object [RID]s that will be excluded from collisions.
diff --git a/doc/classes/PhysicsPointQueryParameters3D.xml b/doc/classes/PhysicsPointQueryParameters3D.xml
index 488f56872d..51e8f8c5b4 100644
--- a/doc/classes/PhysicsPointQueryParameters3D.xml
+++ b/doc/classes/PhysicsPointQueryParameters3D.xml
@@ -16,7 +16,7 @@
If [code]true[/code], the query will take [PhysicsBody3D]s into account.
</member>
<member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="4294967295">
- The physics layers the query will detect (as a bitmask). By default, all collision layers are detected. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
+ The physics layers the query will detect (as a bitmask). By default, all collision layers are detected. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
</member>
<member name="exclude" type="Array" setter="set_exclude" getter="get_exclude" default="[]">
The list of objects or object [RID]s that will be excluded from collisions.
diff --git a/doc/classes/PhysicsRayQueryParameters2D.xml b/doc/classes/PhysicsRayQueryParameters2D.xml
index b71b48f223..7e317c18bf 100644
--- a/doc/classes/PhysicsRayQueryParameters2D.xml
+++ b/doc/classes/PhysicsRayQueryParameters2D.xml
@@ -16,7 +16,7 @@
If [code]true[/code], the query will take [PhysicsBody2D]s into account.
</member>
<member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="4294967295">
- The physics layers the query will detect (as a bitmask). By default, all collision layers are detected. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
+ The physics layers the query will detect (as a bitmask). By default, all collision layers are detected. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
</member>
<member name="exclude" type="Array" setter="set_exclude" getter="get_exclude" default="[]">
The list of objects or object [RID]s that will be excluded from collisions.
diff --git a/doc/classes/PhysicsRayQueryParameters3D.xml b/doc/classes/PhysicsRayQueryParameters3D.xml
index 3085ff3b35..c378325a3c 100644
--- a/doc/classes/PhysicsRayQueryParameters3D.xml
+++ b/doc/classes/PhysicsRayQueryParameters3D.xml
@@ -16,7 +16,7 @@
If [code]true[/code], the query will take [PhysicsBody3D]s into account.
</member>
<member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="4294967295">
- The physics layers the query will detect (as a bitmask). By default, all collision layers are detected. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
+ The physics layers the query will detect (as a bitmask). By default, all collision layers are detected. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
</member>
<member name="exclude" type="Array" setter="set_exclude" getter="get_exclude" default="[]">
The list of objects or object [RID]s that will be excluded from collisions.
diff --git a/doc/classes/PhysicsShapeQueryParameters2D.xml b/doc/classes/PhysicsShapeQueryParameters2D.xml
index abd19f1326..455f0b67dc 100644
--- a/doc/classes/PhysicsShapeQueryParameters2D.xml
+++ b/doc/classes/PhysicsShapeQueryParameters2D.xml
@@ -16,7 +16,7 @@
If [code]true[/code], the query will take [PhysicsBody2D]s into account.
</member>
<member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="4294967295">
- The physics layers the query will detect (as a bitmask). By default, all collision layers are detected. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
+ The physics layers the query will detect (as a bitmask). By default, all collision layers are detected. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
</member>
<member name="exclude" type="Array" setter="set_exclude" getter="get_exclude" default="[]">
The list of objects or object [RID]s that will be excluded from collisions.
diff --git a/doc/classes/PhysicsShapeQueryParameters3D.xml b/doc/classes/PhysicsShapeQueryParameters3D.xml
index 2dffd5347a..789ce0a6c3 100644
--- a/doc/classes/PhysicsShapeQueryParameters3D.xml
+++ b/doc/classes/PhysicsShapeQueryParameters3D.xml
@@ -16,7 +16,7 @@
If [code]true[/code], the query will take [PhysicsBody3D]s into account.
</member>
<member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="4294967295">
- The physics layers the query will detect (as a bitmask). By default, all collision layers are detected. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
+ The physics layers the query will detect (as a bitmask). By default, all collision layers are detected. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
</member>
<member name="exclude" type="Array" setter="set_exclude" getter="get_exclude" default="[]">
The list of objects or object [RID]s that will be excluded from collisions.
diff --git a/doc/classes/Plane.xml b/doc/classes/Plane.xml
index a20607d0a7..37a8e00b49 100644
--- a/doc/classes/Plane.xml
+++ b/doc/classes/Plane.xml
@@ -7,7 +7,7 @@
Plane represents a normalized plane equation. Basically, "normal" is the normal of the plane (a,b,c normalized), and "d" is the distance from the origin to the plane (in the direction of "normal"). "Over" or "Above" the plane is considered the side of the plane towards where the normal is pointing.
</description>
<tutorials>
- <link title="Math documentation index">https://docs.godotengine.org/en/latest/tutorials/math/index.html</link>
+ <link title="Math documentation index">$DOCS_URL/tutorials/math/index.html</link>
</tutorials>
<constructors>
<constructor name="Plane">
@@ -180,6 +180,8 @@
<return type="bool" />
<argument index="0" name="right" type="Plane" />
<description>
+ Returns [code]true[/code] if the planes are not equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
<operator name="operator ==">
@@ -191,16 +193,20 @@
<return type="bool" />
<argument index="0" name="right" type="Plane" />
<description>
+ Returns [code]true[/code] if the planes are exactly equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
<operator name="operator unary+">
<return type="Plane" />
<description>
+ Returns the same value as if the [code]+[/code] was not there. Unary [code]+[/code] does nothing, but sometimes it can make your code more readable.
</description>
</operator>
<operator name="operator unary-">
<return type="Plane" />
<description>
+ Returns the negative value of the [Plane]. This is the same as writing [code]Plane(-p.normal, -p.d)[/code]. This operation flips the direction of the normal vector and also flips the distance value, resulting in a Plane that is in the same place, but facing the opposite direction.
</description>
</operator>
</operators>
diff --git a/doc/classes/ProjectSettings.xml b/doc/classes/ProjectSettings.xml
index 05a9608a55..69ee51ca99 100644
--- a/doc/classes/ProjectSettings.xml
+++ b/doc/classes/ProjectSettings.xml
@@ -6,8 +6,8 @@
<description>
Contains global variables accessible from everywhere. Use [method get_setting], [method set_setting] or [method has_setting] to access them. Variables stored in [code]project.godot[/code] are also loaded into ProjectSettings, making this object very useful for reading custom game configuration options.
When naming a Project Settings property, use the full path to the setting including the category. For example, [code]"application/config/name"[/code] for the project name. Category and property names can be viewed in the Project Settings dialog.
- [b]Feature tags:[/b] Project settings can be overridden for specific platforms and configurations (debug, release, ...) using [url=https://docs.godotengine.org/en/latest/tutorials/export/feature_tags.html]feature tags[/url].
- [b]Overriding:[/b] Any project setting can be overridden by creating a file named [code]override.cfg[/code] in the project's root directory. This can also be used in exported projects by placing this file in the same directory as the project binary. Overriding will still take the base project settings' [url=https://docs.godotengine.org/en/latest/tutorials/export/feature_tags.html]feature tags[/url] in account. Therefore, make sure to [i]also[/i] override the setting with the desired feature tags if you want them to override base project settings on all platforms and configurations.
+ [b]Feature tags:[/b] Project settings can be overridden for specific platforms and configurations (debug, release, ...) using [url=$DOCS_URL/tutorials/export/feature_tags.html]feature tags[/url].
+ [b]Overriding:[/b] Any project setting can be overridden by creating a file named [code]override.cfg[/code] in the project's root directory. This can also be used in exported projects by placing this file in the same directory as the project binary. Overriding will still take the base project settings' [url=$DOCS_URL/tutorials/export/feature_tags.html]feature tags[/url] in account. Therefore, make sure to [i]also[/i] override the setting with the desired feature tags if you want them to override base project settings on all platforms and configurations.
</description>
<tutorials>
<link title="3D Physics Tests Demo">https://godotengine.org/asset-library/asset/675</link>
@@ -87,7 +87,7 @@
<return type="String" />
<argument index="0" name="path" type="String" />
<description>
- Returns the absolute, native OS path corresponding to the localized [code]path[/code] (starting with [code]res://[/code] or [code]user://[/code]). The returned path will vary depending on the operating system and user preferences. See [url=https://docs.godotengine.org/en/latest/tutorials/io/data_paths.html]File paths in Godot projects[/url] to see what those paths convert to. See also [method localize_path].
+ Returns the absolute, native OS path corresponding to the localized [code]path[/code] (starting with [code]res://[/code] or [code]user://[/code]). The returned path will vary depending on the operating system and user preferences. See [url=$DOCS_URL/tutorials/io/data_paths.html]File paths in Godot projects[/url] to see what those paths convert to. See also [method localize_path].
[b]Note:[/b] [method globalize_path] with [code]res://[/code] will not work in an exported project. Instead, prepend the executable's base directory to the path when running from an exported project:
[codeblock]
var path = ""
@@ -196,13 +196,17 @@
Background color for the boot splash.
</member>
<member name="application/boot_splash/fullsize" type="bool" setter="" getter="" default="true">
- If [code]true[/code], scale the boot splash image to the full window length when engine starts. If [code]false[/code], the engine will leave it at the default pixel size.
+ If [code]true[/code], scale the boot splash image to the full window size (preserving the aspect ratio) when the engine starts. If [code]false[/code], the engine will leave it at the default pixel size.
</member>
<member name="application/boot_splash/image" type="String" setter="" getter="" default="&quot;&quot;">
- Path to an image used as the boot splash.
+ Path to an image used as the boot splash. If left empty, the default Godot Engine splash will be displayed instead.
+ [b]Note:[/b] Only effective if [member application/boot_splash/show_image] is [code]true[/code].
+ </member>
+ <member name="application/boot_splash/show_image" type="bool" setter="" getter="" default="true">
+ If [code]true[/code], displays the image specified in [member application/boot_splash/image] when the engine starts. If [code]false[/code], only displays the plain color specified in [member application/boot_splash/bg_color].
</member>
<member name="application/boot_splash/use_filter" type="bool" setter="" getter="" default="true">
- If [code]true[/code], applies linear filtering when scaling the image (recommended for high resolution artwork). If [code]false[/code], uses nearest-neighbor interpolation (recommended for pixel art).
+ If [code]true[/code], applies linear filtering when scaling the image (recommended for high-resolution artwork). If [code]false[/code], uses nearest-neighbor interpolation (recommended for pixel art).
</member>
<member name="application/config/custom_user_dir_name" type="String" setter="" getter="" default="&quot;&quot;">
This user directory is used for storing persistent data ([code]user://[/code] filesystem). If left empty, [code]user://[/code] resolves to a project-specific folder in Godot's own configuration folder (see [method OS.get_user_data_dir]). If a custom directory name is defined, this name will be used instead and appended to the system-specific user data directory (same parent folder as the Godot configuration folder documented in [method OS.get_user_data_dir]).
@@ -219,7 +223,7 @@
</member>
<member name="application/config/name" type="String" setter="" getter="" default="&quot;&quot;">
The project's name. It is used both by the Project Manager and by exporters. The project name can be translated by translating its value in localization files. The window title will be set to match the project name automatically on startup.
- [b]Note:[/b] Changing this value will also change the user data folder's path if [member application/config/use_custom_user_dir] is [code]false[/code]. After renaming the project, you will no longer be able to access existing data in [code]user://[/code] unless you rename the old folder to match the new project name. See [url=https://docs.godotengine.org/en/latest/tutorials/io/data_paths.html]Data paths[/url] in the documentation for more information.
+ [b]Note:[/b] Changing this value will also change the user data folder's path if [member application/config/use_custom_user_dir] is [code]false[/code]. After renaming the project, you will no longer be able to access existing data in [code]user://[/code] unless you rename the old folder to match the new project name. See [url=$DOCS_URL/tutorials/io/data_paths.html]Data paths[/url] in the documentation for more information.
</member>
<member name="application/config/project_settings_override" type="String" setter="" getter="" default="&quot;&quot;">
Specifies a file to override project settings. For example: [code]user://custom_settings.cfg[/code]. See "Overriding" in the [ProjectSettings] class description at the top for more information.
@@ -498,7 +502,7 @@
</member>
<member name="display/window/size/fullscreen" type="bool" setter="" getter="" default="false">
Sets the main window to full screen when the project starts. Note that this is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless window is used to emulate fullscreen. On macOS, a new desktop is used to display the running project.
- Regardless of the platform, enabling fullscreen will change the window size to match the monitor's size. Therefore, make sure your project supports [url=https://docs.godotengine.org/en/latest/tutorials/rendering/multiple_resolutions.html]multiple resolutions[/url] when enabling fullscreen mode.
+ Regardless of the platform, enabling fullscreen will change the window size to match the monitor's size. Therefore, make sure your project supports [url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple resolutions[/url] when enabling fullscreen mode.
[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5.
</member>
<member name="display/window/size/height" type="int" setter="" getter="" default="600">
diff --git a/doc/classes/Quaternion.xml b/doc/classes/Quaternion.xml
index 95b2316bf3..9fa2d9b60b 100644
--- a/doc/classes/Quaternion.xml
+++ b/doc/classes/Quaternion.xml
@@ -9,7 +9,7 @@
Due to its compactness and the way it is stored in memory, certain operations (obtaining axis-angle and performing SLERP, in particular) are more efficient and robust against floating-point errors.
</description>
<tutorials>
- <link title="Using 3D transforms">https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html#interpolating-with-quaternions</link>
+ <link title="Using 3D transforms">$DOCS_URL/tutorials/3d/using_transforms.html#interpolating-with-quaternions</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
</tutorials>
<constructors>
@@ -195,54 +195,64 @@
<return type="bool" />
<argument index="0" name="right" type="Quaternion" />
<description>
+ Returns [code]true[/code] if the quaternions are not equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
<operator name="operator *">
<return type="Quaternion" />
<argument index="0" name="right" type="Quaternion" />
<description>
+ Composes these two quaternions by multiplying them together. This has the effect of rotating the second quaternion (the child) by the first quaternion (the parent).
</description>
</operator>
<operator name="operator *">
<return type="Vector3" />
<argument index="0" name="right" type="Vector3" />
<description>
+ Rotates (multiplies) the [Vector3] by the given [Quaternion].
</description>
</operator>
<operator name="operator *">
<return type="Quaternion" />
<argument index="0" name="right" type="float" />
<description>
+ Multiplies each component of the [Quaternion] by the given value. This operation is not meaningful on its own, but it can be used as a part of a larger expression.
</description>
</operator>
<operator name="operator *">
<return type="Quaternion" />
<argument index="0" name="right" type="int" />
<description>
+ Multiplies each component of the [Quaternion] by the given value. This operation is not meaningful on its own, but it can be used as a part of a larger expression.
</description>
</operator>
<operator name="operator +">
<return type="Quaternion" />
<argument index="0" name="right" type="Quaternion" />
<description>
+ Adds each component of the left [Quaternion] to the right [Quaternion]. This operation is not meaningful on its own, but it can be used as a part of a larger expression, such as approximating an intermediate rotation between two nearby rotations.
</description>
</operator>
<operator name="operator -">
<return type="Quaternion" />
<argument index="0" name="right" type="Quaternion" />
<description>
+ Subtracts each component of the left [Quaternion] by the right [Quaternion]. This operation is not meaningful on its own, but it can be used as a part of a larger expression.
</description>
</operator>
<operator name="operator /">
<return type="Quaternion" />
<argument index="0" name="right" type="float" />
<description>
+ Divides each component of the [Quaternion] by the given value. This operation is not meaningful on its own, but it can be used as a part of a larger expression.
</description>
</operator>
<operator name="operator /">
<return type="Quaternion" />
<argument index="0" name="right" type="int" />
<description>
+ Divides each component of the [Quaternion] by the given value. This operation is not meaningful on its own, but it can be used as a part of a larger expression.
</description>
</operator>
<operator name="operator ==">
@@ -254,22 +264,27 @@
<return type="bool" />
<argument index="0" name="right" type="Quaternion" />
<description>
+ Returns [code]true[/code] if the quaternions are exactly equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
<operator name="operator []">
<return type="float" />
<argument index="0" name="index" type="int" />
<description>
+ Access quaternion components using their index. [code]q[0][/code] is equivalent to [code]q.x[/code], [code]q[1][/code] is equivalent to [code]q.y[/code], [code]q[2][/code] is equivalent to [code]q.z[/code], and [code]q[3][/code] is equivalent to [code]q.w[/code].
</description>
</operator>
<operator name="operator unary+">
<return type="Quaternion" />
<description>
+ Returns the same value as if the [code]+[/code] was not there. Unary [code]+[/code] does nothing, but sometimes it can make your code more readable.
</description>
</operator>
<operator name="operator unary-">
<return type="Quaternion" />
<description>
+ Returns the negative value of the [Quaternion]. This is the same as writing [code]Quaternion(-q.x, -q.y, -q.z, -q.w)[/code]. This operation results in a quaternion that represents the same rotation.
</description>
</operator>
</operators>
diff --git a/doc/classes/RandomNumberGenerator.xml b/doc/classes/RandomNumberGenerator.xml
index c011755df1..53d1554272 100644
--- a/doc/classes/RandomNumberGenerator.xml
+++ b/doc/classes/RandomNumberGenerator.xml
@@ -16,7 +16,7 @@
[b]Note:[/b] The default values of [member seed] and [member state] properties are pseudo-random, and changes when calling [method randomize]. The [code]0[/code] value documented here is a placeholder, and not the actual default seed.
</description>
<tutorials>
- <link title="Random number generation">https://docs.godotengine.org/en/latest/tutorials/math/random_number_generation.html</link>
+ <link title="Random number generation">$DOCS_URL/tutorials/math/random_number_generation.html</link>
</tutorials>
<methods>
<method name="randf">
diff --git a/doc/classes/RayCast2D.xml b/doc/classes/RayCast2D.xml
index d7540ef206..fe2885378a 100644
--- a/doc/classes/RayCast2D.xml
+++ b/doc/classes/RayCast2D.xml
@@ -11,7 +11,7 @@
RayCast2D calculates intersection every physics frame (see [Node]), and the result is cached so it can be used later until the next frame. If multiple queries are required between physics frames (or during the same frame) use [method force_raycast_update] after adjusting the raycast.
</description>
<tutorials>
- <link title="Ray-casting">https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html</link>
+ <link title="Ray-casting">$DOCS_URL/tutorials/physics/ray-casting.html</link>
</tutorials>
<methods>
<method name="add_exception">
@@ -110,7 +110,7 @@
If [code]true[/code], collision with [PhysicsBody2D]s will be reported.
</member>
<member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="1">
- The ray's collision mask. Only objects in at least one collision layer enabled in the mask will be detected. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
+ The ray's collision mask. Only objects in at least one collision layer enabled in the mask will be detected. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
</member>
<member name="enabled" type="bool" setter="set_enabled" getter="is_enabled" default="true">
If [code]true[/code], collisions will be reported.
diff --git a/doc/classes/RayCast3D.xml b/doc/classes/RayCast3D.xml
index f15643c93f..8abd3f84b1 100644
--- a/doc/classes/RayCast3D.xml
+++ b/doc/classes/RayCast3D.xml
@@ -11,7 +11,7 @@
RayCast3D calculates intersection every physics frame (see [Node]), and the result is cached so it can be used later until the next frame. If multiple queries are required between physics frames (or during the same frame), use [method force_raycast_update] after adjusting the raycast.
</description>
<tutorials>
- <link title="Ray-casting">https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html</link>
+ <link title="Ray-casting">$DOCS_URL/tutorials/physics/ray-casting.html</link>
<link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link>
</tutorials>
<methods>
@@ -112,7 +112,7 @@
If [code]true[/code], collision with [PhysicsBody3D]s will be reported.
</member>
<member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="1">
- The ray's collision mask. Only objects in at least one collision layer enabled in the mask will be detected. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
+ The ray's collision mask. Only objects in at least one collision layer enabled in the mask will be detected. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
</member>
<member name="debug_shape_custom_color" type="Color" setter="set_debug_shape_custom_color" getter="get_debug_shape_custom_color" default="Color(0, 0, 0, 1)">
The custom color to use to draw the shape in the editor and at run-time if [b]Visible Collision Shapes[/b] is enabled in the [b]Debug[/b] menu. This color will be highlighted at run-time if the [RayCast3D] is colliding with something.
diff --git a/doc/classes/Rect2.xml b/doc/classes/Rect2.xml
index ad88551d9d..4dc3859ca5 100644
--- a/doc/classes/Rect2.xml
+++ b/doc/classes/Rect2.xml
@@ -9,9 +9,9 @@
The 3D counterpart to [Rect2] is [AABB].
</description>
<tutorials>
- <link title="Math documentation index">https://docs.godotengine.org/en/latest/tutorials/math/index.html</link>
- <link title="Vector math">https://docs.godotengine.org/en/latest/tutorials/math/vector_math.html</link>
- <link title="Advanced vector math">https://docs.godotengine.org/en/latest/tutorials/math/vectors_advanced.html</link>
+ <link title="Math documentation index">$DOCS_URL/tutorials/math/index.html</link>
+ <link title="Vector math">$DOCS_URL/tutorials/math/vector_math.html</link>
+ <link title="Advanced vector math">$DOCS_URL/tutorials/math/vectors_advanced.html</link>
</tutorials>
<constructors>
<constructor name="Rect2">
@@ -194,12 +194,15 @@
<return type="bool" />
<argument index="0" name="right" type="Rect2" />
<description>
+ Returns [code]true[/code] if the rectangles are not equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
<operator name="operator *">
<return type="Rect2" />
<argument index="0" name="right" type="Transform2D" />
<description>
+ Inversely transforms (multiplies) the [Rect2] by the given [Transform2D] transformation matrix.
</description>
</operator>
<operator name="operator ==">
@@ -211,6 +214,8 @@
<return type="bool" />
<argument index="0" name="right" type="Rect2" />
<description>
+ Returns [code]true[/code] if the rectangles are exactly equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
</operators>
diff --git a/doc/classes/Rect2i.xml b/doc/classes/Rect2i.xml
index f5ea6a6c87..d66b589ec1 100644
--- a/doc/classes/Rect2i.xml
+++ b/doc/classes/Rect2i.xml
@@ -8,8 +8,8 @@
It uses integer coordinates. If you need floating-point coordinates, use [Rect2] instead.
</description>
<tutorials>
- <link title="Math documentation index">https://docs.godotengine.org/en/latest/tutorials/math/index.html</link>
- <link title="Vector math">https://docs.godotengine.org/en/latest/tutorials/math/vector_math.html</link>
+ <link title="Math documentation index">$DOCS_URL/tutorials/math/index.html</link>
+ <link title="Vector math">$DOCS_URL/tutorials/math/vector_math.html</link>
</tutorials>
<constructors>
<constructor name="Rect2i">
@@ -184,6 +184,7 @@
<return type="bool" />
<argument index="0" name="right" type="Rect2i" />
<description>
+ Returns [code]true[/code] if the rectangles are not equal.
</description>
</operator>
<operator name="operator ==">
@@ -195,6 +196,7 @@
<return type="bool" />
<argument index="0" name="right" type="Rect2i" />
<description>
+ Returns [code]true[/code] if the rectangles are equal.
</description>
</operator>
</operators>
diff --git a/doc/classes/RefCounted.xml b/doc/classes/RefCounted.xml
index de314fbcb7..378df6f155 100644
--- a/doc/classes/RefCounted.xml
+++ b/doc/classes/RefCounted.xml
@@ -10,7 +10,7 @@
[b]Note:[/b] In C#, reference-counted objects will not be freed instantly after they are no longer in use. Instead, garbage collection will run periodically and will free reference-counted objects that are no longer in use. This means that unused ones will linger on for a while before being removed.
</description>
<tutorials>
- <link title="When and how to avoid using nodes for everything">https://docs.godotengine.org/en/latest/tutorials/best_practices/node_alternatives.html</link>
+ <link title="When and how to avoid using nodes for everything">$DOCS_URL/tutorials/best_practices/node_alternatives.html</link>
</tutorials>
<methods>
<method name="init_ref">
diff --git a/doc/classes/ReferenceRect.xml b/doc/classes/ReferenceRect.xml
index 1db6879b45..99ad067469 100644
--- a/doc/classes/ReferenceRect.xml
+++ b/doc/classes/ReferenceRect.xml
@@ -16,7 +16,7 @@
Sets the border width of the [ReferenceRect]. The border grows both inwards and outwards with respect to the rectangle box.
</member>
<member name="editor_only" type="bool" setter="set_editor_only" getter="get_editor_only" default="true">
- If set to [code]true[/code], the [ReferenceRect] will only be visible while in editor. Otherwise, [ReferenceRect] will be visible in game.
+ If [code]true[/code], the [ReferenceRect] will only be visible while in editor. Otherwise, [ReferenceRect] will be visible in the running project.
</member>
</members>
</class>
diff --git a/doc/classes/ReflectionProbe.xml b/doc/classes/ReflectionProbe.xml
index 7f2bd118d6..8bf8534334 100644
--- a/doc/classes/ReflectionProbe.xml
+++ b/doc/classes/ReflectionProbe.xml
@@ -8,7 +8,7 @@
The [ReflectionProbe] is used to create high-quality reflections at the cost of performance. It can be combined with [VoxelGI]s and Screen Space Reflections to achieve high quality reflections. [ReflectionProbe]s render all objects within their [member cull_mask], so updating them can be quite expensive. It is best to update them once with the important static objects and then leave them.
</description>
<tutorials>
- <link title="Reflection probes">https://docs.godotengine.org/en/latest/tutorials/3d/reflection_probes.html</link>
+ <link title="Reflection probes">$DOCS_URL/tutorials/3d/reflection_probes.html</link>
</tutorials>
<members>
<member name="ambient_color" type="Color" setter="set_ambient_color" getter="get_ambient_color" default="Color(0, 0, 0, 1)">
diff --git a/doc/classes/RenderingServer.xml b/doc/classes/RenderingServer.xml
index ddb25788c8..7f4d5cf1cd 100644
--- a/doc/classes/RenderingServer.xml
+++ b/doc/classes/RenderingServer.xml
@@ -15,7 +15,7 @@
In 2D, all visible objects are some form of canvas item. In order to be visible, a canvas item needs to be the child of a canvas attached to a viewport, or it needs to be the child of another canvas item that is eventually attached to the canvas.
</description>
<tutorials>
- <link title="Optimization using Servers">https://docs.godotengine.org/en/latest/tutorials/performance/using_servers.html</link>
+ <link title="Optimization using Servers">$DOCS_URL/tutorials/performance/using_servers.html</link>
</tutorials>
<methods>
<method name="bake_render_uv2">
diff --git a/doc/classes/Resource.xml b/doc/classes/Resource.xml
index 327183893b..02d1c7e97d 100644
--- a/doc/classes/Resource.xml
+++ b/doc/classes/Resource.xml
@@ -8,8 +8,8 @@
[b]Note:[/b] In C#, resources will not be freed instantly after they are no longer in use. Instead, garbage collection will run periodically and will free resources that are no longer in use. This means that unused resources will linger on for a while before being removed.
</description>
<tutorials>
- <link title="Resources">https://docs.godotengine.org/en/latest/tutorials/scripting/resources.html</link>
- <link title="When and how to avoid using nodes for everything">https://docs.godotengine.org/en/latest/tutorials/best_practices/node_alternatives.html</link>
+ <link title="Resources">$DOCS_URL/tutorials/scripting/resources.html</link>
+ <link title="When and how to avoid using nodes for everything">$DOCS_URL/tutorials/best_practices/node_alternatives.html</link>
</tutorials>
<methods>
<method name="duplicate" qualifiers="const">
diff --git a/doc/classes/ResourceImporter.xml b/doc/classes/ResourceImporter.xml
index 9f551ad1d2..f20b55fbc8 100644
--- a/doc/classes/ResourceImporter.xml
+++ b/doc/classes/ResourceImporter.xml
@@ -7,7 +7,7 @@
This is the base class for the resource importers implemented in core. To implement your own resource importers using editor plugins, see [EditorImportPlugin].
</description>
<tutorials>
- <link title="Import plugins">https://docs.godotengine.org/en/latest/tutorials/plugins/editor/import_plugins.html</link>
+ <link title="Import plugins">$DOCS_URL/tutorials/plugins/editor/import_plugins.html</link>
</tutorials>
<constants>
<constant name="IMPORT_ORDER_DEFAULT" value="0" enum="ImportOrder">
diff --git a/doc/classes/RichTextEffect.xml b/doc/classes/RichTextEffect.xml
index 62323722f7..4329ccfdf5 100644
--- a/doc/classes/RichTextEffect.xml
+++ b/doc/classes/RichTextEffect.xml
@@ -19,7 +19,7 @@
[b]Note:[/b] As soon as a [RichTextLabel] contains at least one [RichTextEffect], it will continuously process the effect unless the project is paused. This may impact battery life negatively.
</description>
<tutorials>
- <link title="BBCode in RichTextLabel">https://docs.godotengine.org/en/latest/tutorials/ui/bbcode_in_richtextlabel.html</link>
+ <link title="BBCode in RichTextLabel">$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html</link>
<link title="RichTextEffect test project (third-party)">https://github.com/Eoin-ONeill-Yokai/Godot-Rich-Text-Effect-Test-Project</link>
</tutorials>
<methods>
diff --git a/doc/classes/RichTextLabel.xml b/doc/classes/RichTextLabel.xml
index 3255c748b7..6bfaca8928 100644
--- a/doc/classes/RichTextLabel.xml
+++ b/doc/classes/RichTextLabel.xml
@@ -11,7 +11,7 @@
[b]Note:[/b] Unlike [Label], RichTextLabel doesn't have a [i]property[/i] to horizontally align text to the center. Instead, enable [member bbcode_enabled] and surround the text in a [code][center][/code] tag as follows: [code][center]Example[/center][/code]. There is currently no built-in way to vertically align text either, but this can be emulated by relying on anchors/containers and the [member fit_content_height] property.
</description>
<tutorials>
- <link title="BBCode in RichTextLabel">https://docs.godotengine.org/en/latest/tutorials/ui/bbcode_in_richtextlabel.html</link>
+ <link title="BBCode in RichTextLabel">$DOCS_URL/tutorials/ui/bbcode_in_richtextlabel.html</link>
<link title="GUI Rich Text/BBcode Demo">https://godotengine.org/asset-library/asset/132</link>
<link title="OS Test Demo">https://godotengine.org/asset-library/asset/677</link>
</tutorials>
diff --git a/doc/classes/RigidDynamicBody3D.xml b/doc/classes/RigidDynamicBody3D.xml
index ba9acdf4bf..c75055e0df 100644
--- a/doc/classes/RigidDynamicBody3D.xml
+++ b/doc/classes/RigidDynamicBody3D.xml
@@ -10,7 +10,7 @@
If you need to override the default physics behavior, you can write a custom force integration function. See [member custom_integrator].
</description>
<tutorials>
- <link title="Physics introduction">https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link>
+ <link title="Physics introduction">$DOCS_URL/tutorials/physics/physics_introduction.html</link>
<link title="3D Truck Town Demo">https://godotengine.org/asset-library/asset/524</link>
<link title="3D Physics Tests Demo">https://godotengine.org/asset-library/asset/675</link>
</tutorials>
diff --git a/doc/classes/RootMotionView.xml b/doc/classes/RootMotionView.xml
index 5db13de44f..203a48996f 100644
--- a/doc/classes/RootMotionView.xml
+++ b/doc/classes/RootMotionView.xml
@@ -8,7 +8,7 @@
[b]Note:[/b] [RootMotionView] is only visible in the editor. It will be hidden automatically in the running project, and will also be converted to a plain [Node] in the running project. This means a script attached to a [RootMotionView] node [i]must[/i] have [code]extends Node[/code] instead of [code]extends RootMotionView[/code]. Additionally, it must not be a [code]@tool[/code] script.
</description>
<tutorials>
- <link title="Using AnimationTree - Root motion">https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree.html#root-motion</link>
+ <link title="Using AnimationTree - Root motion">$DOCS_URL/tutorials/animation/animation_tree.html#root-motion</link>
</tutorials>
<members>
<member name="animation_path" type="NodePath" setter="set_animation_path" getter="get_animation_path">
diff --git a/doc/classes/SceneTree.xml b/doc/classes/SceneTree.xml
index 6d0ec44b69..c1dca44896 100644
--- a/doc/classes/SceneTree.xml
+++ b/doc/classes/SceneTree.xml
@@ -9,8 +9,8 @@
[SceneTree] is the default [MainLoop] implementation used by scenes, and is thus in charge of the game loop.
</description>
<tutorials>
- <link title="SceneTree">https://docs.godotengine.org/en/latest/tutorials/scripting/scene_tree.html</link>
- <link title="Multiple resolutions">https://docs.godotengine.org/en/latest/tutorials/rendering/multiple_resolutions.html</link>
+ <link title="SceneTree">$DOCS_URL/tutorials/scripting/scene_tree.html</link>
+ <link title="Multiple resolutions">$DOCS_URL/tutorials/rendering/multiple_resolutions.html</link>
</tutorials>
<methods>
<method name="call_group" qualifiers="vararg">
diff --git a/doc/classes/Script.xml b/doc/classes/Script.xml
index 7c59e87848..ab88bdaa73 100644
--- a/doc/classes/Script.xml
+++ b/doc/classes/Script.xml
@@ -8,7 +8,7 @@
The [code]new[/code] method of a script subclass creates a new instance. [method Object.set_script] extends an existing object, if that object's class matches one of the script's base classes.
</description>
<tutorials>
- <link title="Scripting documentation index">https://docs.godotengine.org/en/latest/tutorials/scripting/index.html</link>
+ <link title="Scripting documentation index">$DOCS_URL/tutorials/scripting/index.html</link>
</tutorials>
<methods>
<method name="can_instantiate" qualifiers="const">
diff --git a/doc/classes/Semaphore.xml b/doc/classes/Semaphore.xml
index 9ff9cc0c87..9e1d8012b7 100644
--- a/doc/classes/Semaphore.xml
+++ b/doc/classes/Semaphore.xml
@@ -7,7 +7,7 @@
A synchronization semaphore which can be used to synchronize multiple [Thread]s. Initialized to zero on creation. Be careful to avoid deadlocks. For a binary version, see [Mutex].
</description>
<tutorials>
- <link title="Using multiple threads">https://docs.godotengine.org/en/latest/tutorials/performance/using_multiple_threads.html</link>
+ <link title="Using multiple threads">$DOCS_URL/tutorials/performance/using_multiple_threads.html</link>
</tutorials>
<methods>
<method name="post">
diff --git a/doc/classes/Shader.xml b/doc/classes/Shader.xml
index 751afb9b65..d81b4bc372 100644
--- a/doc/classes/Shader.xml
+++ b/doc/classes/Shader.xml
@@ -7,7 +7,7 @@
This class allows you to define a custom shader program that can be used by a [ShaderMaterial]. Shaders allow you to write your own custom behavior for rendering objects or updating particle information. For a detailed explanation and usage, please see the tutorials linked below.
</description>
<tutorials>
- <link title="Shaders documentation index">https://docs.godotengine.org/en/latest/tutorials/shaders/index.html</link>
+ <link title="Shaders documentation index">$DOCS_URL/tutorials/shaders/index.html</link>
</tutorials>
<methods>
<method name="get_default_texture_param" qualifiers="const">
diff --git a/doc/classes/ShaderMaterial.xml b/doc/classes/ShaderMaterial.xml
index d5fc3fd210..04f0fac104 100644
--- a/doc/classes/ShaderMaterial.xml
+++ b/doc/classes/ShaderMaterial.xml
@@ -7,7 +7,7 @@
A material that uses a custom [Shader] program to render either items to screen or process particles. You can create multiple materials for the same shader but configure different values for the uniforms defined in the shader.
</description>
<tutorials>
- <link title="Shaders documentation index">https://docs.godotengine.org/en/latest/tutorials/shaders/index.html</link>
+ <link title="Shaders documentation index">$DOCS_URL/tutorials/shaders/index.html</link>
</tutorials>
<methods>
<method name="get_shader_param" qualifiers="const">
diff --git a/doc/classes/Shape2D.xml b/doc/classes/Shape2D.xml
index 04f91d19da..9746519173 100644
--- a/doc/classes/Shape2D.xml
+++ b/doc/classes/Shape2D.xml
@@ -7,7 +7,7 @@
Base class for all 2D shapes. All 2D shape types inherit from this.
</description>
<tutorials>
- <link title="Physics introduction">https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link>
+ <link title="Physics introduction">$DOCS_URL/tutorials/physics/physics_introduction.html</link>
</tutorials>
<methods>
<method name="collide">
diff --git a/doc/classes/Shape3D.xml b/doc/classes/Shape3D.xml
index 96f8833486..67af52768f 100644
--- a/doc/classes/Shape3D.xml
+++ b/doc/classes/Shape3D.xml
@@ -7,7 +7,7 @@
Base class for all 3D shape resources. Nodes that inherit from this can be used as shapes for a [PhysicsBody3D] or [Area3D] objects.
</description>
<tutorials>
- <link title="Physics introduction">https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html</link>
+ <link title="Physics introduction">$DOCS_URL/tutorials/physics/physics_introduction.html</link>
</tutorials>
<methods>
<method name="get_debug_mesh">
diff --git a/doc/classes/Skeleton2D.xml b/doc/classes/Skeleton2D.xml
index 7aa06985bf..20bec14795 100644
--- a/doc/classes/Skeleton2D.xml
+++ b/doc/classes/Skeleton2D.xml
@@ -8,7 +8,7 @@
To setup different types of inverse kinematics for the given Skeleton2D, a [SkeletonModificationStack2D] should be created. They can be applied by creating the desired number of modifications, which can be done by increasing [member SkeletonModificationStack2D.modification_count].
</description>
<tutorials>
- <link title="2D skeletons">https://docs.godotengine.org/en/latest/tutorials/animation/2d_skeletons.html</link>
+ <link title="2D skeletons">$DOCS_URL/tutorials/animation/2d_skeletons.html</link>
</tutorials>
<methods>
<method name="execute_modifications">
diff --git a/doc/classes/SoftDynamicBody3D.xml b/doc/classes/SoftDynamicBody3D.xml
index f999f77e78..fceebddf35 100644
--- a/doc/classes/SoftDynamicBody3D.xml
+++ b/doc/classes/SoftDynamicBody3D.xml
@@ -7,7 +7,7 @@
A deformable physics body. Used to create elastic or deformable objects such as cloth, rubber, or other flexible materials.
</description>
<tutorials>
- <link title="SoftBody">https://docs.godotengine.org/en/latest/tutorials/physics/soft_body.html</link>
+ <link title="SoftBody">$DOCS_URL/tutorials/physics/soft_body.html</link>
</tutorials>
<methods>
<method name="add_collision_exception_with">
@@ -92,11 +92,11 @@
<members>
<member name="collision_layer" type="int" setter="set_collision_layer" getter="get_collision_layer" default="1">
The physics layers this SoftDynamicBody3D [b]is in[/b]. Collision objects can exist in one or more of 32 different layers. See also [member collision_mask].
- [b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
+ [b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
</member>
<member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="1">
The physics layers this SoftDynamicBody3D [b]scans[/b]. Collision objects can scan one or more of 32 different layers. See also [member collision_layer].
- [b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
+ [b]Note:[/b] Object A can detect a contact with object B only if object B is in any of the layers that object A scans. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
</member>
<member name="damping_coefficient" type="float" setter="set_damping_coefficient" getter="get_damping_coefficient" default="0.01">
</member>
diff --git a/doc/classes/SpotLight3D.xml b/doc/classes/SpotLight3D.xml
index 8c10ec36a8..f9f9a62baa 100644
--- a/doc/classes/SpotLight3D.xml
+++ b/doc/classes/SpotLight3D.xml
@@ -7,7 +7,7 @@
A Spotlight is a type of [Light3D] node that emits lights in a specific direction, in the shape of a cone. The light is attenuated through the distance. This attenuation can be configured by changing the energy, radius and attenuation parameters of [Light3D].
</description>
<tutorials>
- <link title="3D lights and shadows">https://docs.godotengine.org/en/latest/tutorials/3d/lights_and_shadows.html</link>
+ <link title="3D lights and shadows">$DOCS_URL/tutorials/3d/lights_and_shadows.html</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
</tutorials>
<members>
diff --git a/doc/classes/SpringArm3D.xml b/doc/classes/SpringArm3D.xml
index 2cd8fa71cf..a54578cff4 100644
--- a/doc/classes/SpringArm3D.xml
+++ b/doc/classes/SpringArm3D.xml
@@ -41,7 +41,7 @@
</methods>
<members>
<member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="1">
- The layers against which the collision check shall be done. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
+ The layers against which the collision check shall be done. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
</member>
<member name="margin" type="float" setter="set_margin" getter="get_margin" default="0.01">
When the collision check is made, a candidate length for the SpringArm3D is given.
diff --git a/doc/classes/StandardMaterial3D.xml b/doc/classes/StandardMaterial3D.xml
index 43ba95e345..1a8bf0e202 100644
--- a/doc/classes/StandardMaterial3D.xml
+++ b/doc/classes/StandardMaterial3D.xml
@@ -5,6 +5,6 @@
<description>
</description>
<tutorials>
- <link title="Standard Material 3D">https://docs.godotengine.org/en/latest/tutorials/3d/standard_material_3d.html</link>
+ <link title="Standard Material 3D">$DOCS_URL/tutorials/3d/standard_material_3d.html</link>
</tutorials>
</class>
diff --git a/doc/classes/StreamPeerSSL.xml b/doc/classes/StreamPeerSSL.xml
index 50389f912d..5e6e07fe36 100644
--- a/doc/classes/StreamPeerSSL.xml
+++ b/doc/classes/StreamPeerSSL.xml
@@ -8,7 +8,7 @@
[b]Note:[/b] When exporting to Android, make sure to enable the [code]INTERNET[/code] permission in the Android export preset before exporting the project or using one-click deploy. Otherwise, network communication of any kind will be blocked by Android.
</description>
<tutorials>
- <link title="SSL certificates">https://docs.godotengine.org/en/latest/tutorials/networking/ssl_certificates.html</link>
+ <link title="SSL certificates">$DOCS_URL/tutorials/networking/ssl_certificates.html</link>
</tutorials>
<methods>
<method name="accept_stream">
diff --git a/doc/classes/String.xml b/doc/classes/String.xml
index a58bfd5c15..ce902c1216 100644
--- a/doc/classes/String.xml
+++ b/doc/classes/String.xml
@@ -7,7 +7,7 @@
This is the built-in string class (and the one used by GDScript). It supports Unicode and provides all necessary means for string handling. Strings are reference-counted and use a copy-on-write approach, so passing them around is cheap in resources.
</description>
<tutorials>
- <link title="GDScript format strings">https://docs.godotengine.org/en/latest/tutorials/scripting/gdscript/gdscript_format_string.html</link>
+ <link title="GDScript format strings">$DOCS_URL/tutorials/scripting/gdscript/gdscript_format_string.html</link>
</tutorials>
<constructors>
<constructor name="String">
diff --git a/doc/classes/SubViewport.xml b/doc/classes/SubViewport.xml
index c2a76b587f..f0b85cdad5 100644
--- a/doc/classes/SubViewport.xml
+++ b/doc/classes/SubViewport.xml
@@ -6,8 +6,8 @@
<description>
</description>
<tutorials>
- <link title="Using Viewports">https://docs.godotengine.org/en/latest/tutorials/rendering/viewports.html</link>
- <link title="Viewport and canvas transforms">https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html</link>
+ <link title="Using Viewports">$DOCS_URL/tutorials/rendering/viewports.html</link>
+ <link title="Viewport and canvas transforms">$DOCS_URL/tutorials/2d/2d_transforms.html</link>
<link title="GUI in 3D Demo">https://godotengine.org/asset-library/asset/127</link>
<link title="3D in 2D Demo">https://godotengine.org/asset-library/asset/128</link>
<link title="2D in 3D Demo">https://godotengine.org/asset-library/asset/129</link>
diff --git a/doc/classes/TextEdit.xml b/doc/classes/TextEdit.xml
index b8e2f7f03c..16d8595b4e 100644
--- a/doc/classes/TextEdit.xml
+++ b/doc/classes/TextEdit.xml
@@ -233,8 +233,9 @@
<method name="get_line_column_at_pos" qualifiers="const">
<return type="Vector2i" />
<argument index="0" name="position" type="Vector2i" />
+ <argument index="1" name="allow_out_of_bounds" type="bool" default="true" />
<description>
- Returns the line and column at the given position. In the returned vector, [code]x[/code] is the column, [code]y[/code] is the line.
+ Returns the line and column at the given position. In the returned vector, [code]x[/code] is the column, [code]y[/code] is the line. If [code]allow_out_of_bounds[/code] is [code]false[/code] and the position is not over the text, both vector values will be set to [code]-1[/code].
</description>
</method>
<method name="get_line_count" qualifiers="const">
@@ -361,6 +362,24 @@
Returns OpenType feature [code]tag[/code].
</description>
</method>
+ <method name="get_pos_at_line_column" qualifiers="const">
+ <return type="Vector2i" />
+ <argument index="0" name="line" type="int" />
+ <argument index="1" name="column" type="int" />
+ <description>
+ Returns the local position for the given [code]line[/code] and [code]column[/code]. If [code]x[/code] or [code]y[/code] of the returned vector equal [code]-1[/code], the position is outside of the viewable area of the control.
+ [b]Note:[/b] The Y position corresponds to the bottom side of the line. Use [method get_rect_at_line_column] to get the top side position.
+ </description>
+ </method>
+ <method name="get_rect_at_line_column" qualifiers="const">
+ <return type="Rect2i" />
+ <argument index="0" name="line" type="int" />
+ <argument index="1" name="column" type="int" />
+ <description>
+ Returns the local position and size for the grapheme at the given [code]line[/code] and [code]column[/code]. If [code]x[/code] or [code]y[/code] position of the returned rect equal [code]-1[/code], the position is outside of the viewable area of the control.
+ [b]Note:[/b] The Y position of the returned rect corresponds to the top side of the line, unlike [method get_pos_at_line_column] which returns the bottom side.
+ </description>
+ </method>
<method name="get_saved_version" qualifiers="const">
<return type="int" />
<description>
@@ -453,6 +472,14 @@
Returns the number of visible lines, including wrapped text.
</description>
</method>
+ <method name="get_visible_line_count_in_range" qualifiers="const">
+ <return type="int" />
+ <argument index="0" name="from_line" type="int" />
+ <argument index="1" name="to_line" type="int" />
+ <description>
+ Returns the total number of visible + wrapped lines between the two lines.
+ </description>
+ </method>
<method name="get_word_at_pos" qualifiers="const">
<return type="String" />
<argument index="0" name="position" type="Vector2" />
diff --git a/doc/classes/TextServer.xml b/doc/classes/TextServer.xml
index e1c05165de..512078c56c 100644
--- a/doc/classes/TextServer.xml
+++ b/doc/classes/TextServer.xml
@@ -1028,6 +1028,14 @@
Returns text glyphs in the visual order.
</description>
</method>
+ <method name="shaped_text_get_grapheme_bounds" qualifiers="const">
+ <return type="Vector2" />
+ <argument index="0" name="shaped" type="RID" />
+ <argument index="1" name="pos" type="int" />
+ <description>
+ Returns composite character's bounds as offsets from the start of the line.
+ </description>
+ </method>
<method name="shaped_text_get_line_breaks" qualifiers="const">
<return type="PackedInt32Array" />
<argument index="0" name="shaped" type="RID" />
diff --git a/doc/classes/TextServerExtension.xml b/doc/classes/TextServerExtension.xml
index 684a1aa755..32f8107e0a 100644
--- a/doc/classes/TextServerExtension.xml
+++ b/doc/classes/TextServerExtension.xml
@@ -1037,6 +1037,14 @@
Copies text glyphs in the visual order, into preallocated array of the size returned by [method _shaped_text_get_glyph_count].
</description>
</method>
+ <method name="_shaped_text_get_grapheme_bounds" qualifiers="virtual const">
+ <return type="Vector2" />
+ <argument index="0" name="shaped" type="RID" />
+ <argument index="1" name="pos" type="int" />
+ <description>
+ Returns composite character's bounds as offsets from the start of the line.
+ </description>
+ </method>
<method name="_shaped_text_get_line_breaks" qualifiers="virtual const">
<return type="PackedInt32Array" />
<argument index="0" name="shaped" type="RID" />
diff --git a/doc/classes/Theme.xml b/doc/classes/Theme.xml
index 52a419ce0f..d1a48fda55 100644
--- a/doc/classes/Theme.xml
+++ b/doc/classes/Theme.xml
@@ -8,7 +8,7 @@
Theme resources can alternatively be loaded by writing them in a [code].theme[/code] file, see the documentation for more information.
</description>
<tutorials>
- <link title="GUI skinning">https://docs.godotengine.org/en/latest/tutorials/ui/gui_skinning.html</link>
+ <link title="GUI skinning">$DOCS_URL/tutorials/ui/gui_skinning.html</link>
</tutorials>
<methods>
<method name="clear">
diff --git a/doc/classes/Thread.xml b/doc/classes/Thread.xml
index eb2df8a4f9..bd9a6c865a 100644
--- a/doc/classes/Thread.xml
+++ b/doc/classes/Thread.xml
@@ -8,8 +8,8 @@
[b]Note:[/b] Breakpoints won't break on code if it's running in a thread. This is a current limitation of the GDScript debugger.
</description>
<tutorials>
- <link title="Using multiple threads">https://docs.godotengine.org/en/latest/tutorials/performance/using_multiple_threads.html</link>
- <link title="Thread-safe APIs">https://docs.godotengine.org/en/latest/tutorials/performance/thread_safe_apis.html</link>
+ <link title="Using multiple threads">$DOCS_URL/tutorials/performance/using_multiple_threads.html</link>
+ <link title="Thread-safe APIs">$DOCS_URL/tutorials/performance/thread_safe_apis.html</link>
<link title="3D Voxel Demo">https://godotengine.org/asset-library/asset/676</link>
</tutorials>
<methods>
diff --git a/doc/classes/TileMap.xml b/doc/classes/TileMap.xml
index 22d61c7285..6e552e3649 100644
--- a/doc/classes/TileMap.xml
+++ b/doc/classes/TileMap.xml
@@ -7,7 +7,7 @@
Node for 2D tile-based maps. Tilemaps use a [TileSet] which contain a list of tiles which are used to create grid-based maps. A TileMap may have several layers, layouting tiles on top of each other.
</description>
<tutorials>
- <link title="Using Tilemaps">https://docs.godotengine.org/en/latest/tutorials/2d/using_tilemaps.html</link>
+ <link title="Using Tilemaps">$DOCS_URL/tutorials/2d/using_tilemaps.html</link>
<link title="2D Platformer Demo">https://godotengine.org/asset-library/asset/120</link>
<link title="2D Isometric Demo">https://godotengine.org/asset-library/asset/112</link>
<link title="2D Hexagonal Demo">https://godotengine.org/asset-library/asset/111</link>
diff --git a/doc/classes/TileSet.xml b/doc/classes/TileSet.xml
index 45d6f9ca6c..5d9065f823 100644
--- a/doc/classes/TileSet.xml
+++ b/doc/classes/TileSet.xml
@@ -13,7 +13,7 @@
See the functions to add new layers for more information.
</description>
<tutorials>
- <link title="Using Tilemaps">https://docs.godotengine.org/en/latest/tutorials/2d/using_tilemaps.html</link>
+ <link title="Using Tilemaps">$DOCS_URL/tutorials/2d/using_tilemaps.html</link>
<link title="2D Platformer Demo">https://godotengine.org/asset-library/asset/120</link>
<link title="2D Isometric Demo">https://godotengine.org/asset-library/asset/112</link>
<link title="2D Hexagonal Demo">https://godotengine.org/asset-library/asset/111</link>
diff --git a/doc/classes/Transform2D.xml b/doc/classes/Transform2D.xml
index ab7632e08e..be41cdde99 100644
--- a/doc/classes/Transform2D.xml
+++ b/doc/classes/Transform2D.xml
@@ -8,8 +8,8 @@
For more information, read the "Matrices and transforms" documentation article.
</description>
<tutorials>
- <link title="Math documentation index">https://docs.godotengine.org/en/latest/tutorials/math/index.html</link>
- <link title="Matrices and transforms">https://docs.godotengine.org/en/latest/tutorials/math/matrices_and_transforms.html</link>
+ <link title="Math documentation index">$DOCS_URL/tutorials/math/index.html</link>
+ <link title="Matrices and transforms">$DOCS_URL/tutorials/math/matrices_and_transforms.html</link>
<link title="Matrix Transform Demo">https://godotengine.org/asset-library/asset/584</link>
<link title="2.5D Demo">https://godotengine.org/asset-library/asset/583</link>
</tutorials>
@@ -213,30 +213,36 @@
<return type="bool" />
<argument index="0" name="right" type="Transform2D" />
<description>
+ Returns [code]true[/code] if the transforms are not equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
<operator name="operator *">
<return type="PackedVector2Array" />
<argument index="0" name="right" type="PackedVector2Array" />
<description>
+ Transforms (multiplies) each element of the [Vector2] array by the given [Transform2D] matrix.
</description>
</operator>
<operator name="operator *">
<return type="Transform2D" />
<argument index="0" name="right" type="Transform2D" />
<description>
+ Composes these two transformation matrices by multiplying them together. This has the effect of transforming the second transform (the child) by the first transform (the parent).
</description>
</operator>
<operator name="operator *">
<return type="Rect2" />
<argument index="0" name="right" type="Rect2" />
<description>
+ Transforms (multiplies) the [Rect2] by the given [Transform2D] matrix.
</description>
</operator>
<operator name="operator *">
<return type="Vector2" />
<argument index="0" name="right" type="Vector2" />
<description>
+ Transforms (multiplies) the [Vector2] by the given [Transform2D] matrix.
</description>
</operator>
<operator name="operator *">
@@ -262,12 +268,15 @@
<return type="bool" />
<argument index="0" name="right" type="Transform2D" />
<description>
+ Returns [code]true[/code] if the transforms are exactly equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
<operator name="operator []">
<return type="Vector2" />
<argument index="0" name="index" type="int" />
<description>
+ Access transform components using their index. [code]t[0][/code] is equivalent to [code]t.x[/code], [code]t[1][/code] is equivalent to [code]t.y[/code], and [code]t[2][/code] is equivalent to [code]t.origin[/code].
</description>
</operator>
</operators>
diff --git a/doc/classes/Transform3D.xml b/doc/classes/Transform3D.xml
index 8c4965abb4..511574f6aa 100644
--- a/doc/classes/Transform3D.xml
+++ b/doc/classes/Transform3D.xml
@@ -8,9 +8,9 @@
For more information, read the "Matrices and transforms" documentation article.
</description>
<tutorials>
- <link title="Math documentation index">https://docs.godotengine.org/en/latest/tutorials/math/index.html</link>
- <link title="Matrices and transforms">https://docs.godotengine.org/en/latest/tutorials/math/matrices_and_transforms.html</link>
- <link title="Using 3D transforms">https://docs.godotengine.org/en/latest/tutorials/3d/using_transforms.html</link>
+ <link title="Math documentation index">$DOCS_URL/tutorials/math/index.html</link>
+ <link title="Matrices and transforms">$DOCS_URL/tutorials/math/matrices_and_transforms.html</link>
+ <link title="Using 3D transforms">$DOCS_URL/tutorials/3d/using_transforms.html</link>
<link title="Matrix Transform Demo">https://godotengine.org/asset-library/asset/584</link>
<link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link>
<link title="2.5D Demo">https://godotengine.org/asset-library/asset/583</link>
@@ -147,30 +147,36 @@
<return type="bool" />
<argument index="0" name="right" type="Transform3D" />
<description>
+ Returns [code]true[/code] if the transforms are not equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
<operator name="operator *">
<return type="PackedVector3Array" />
<argument index="0" name="right" type="PackedVector3Array" />
<description>
+ Transforms (multiplies) each element of the [Vector3] array by the given [Transform3D] matrix.
</description>
</operator>
<operator name="operator *">
<return type="Transform3D" />
<argument index="0" name="right" type="Transform3D" />
<description>
+ Composes these two transformation matrices by multiplying them together. This has the effect of transforming the second transform (the child) by the first transform (the parent).
</description>
</operator>
<operator name="operator *">
<return type="AABB" />
<argument index="0" name="right" type="AABB" />
<description>
+ Transforms (multiplies) the [AABB] by the given [Transform3D] matrix.
</description>
</operator>
<operator name="operator *">
<return type="Vector3" />
<argument index="0" name="right" type="Vector3" />
<description>
+ Transforms (multiplies) the [Vector3] by the given [Transform3D] matrix.
</description>
</operator>
<operator name="operator *">
@@ -196,6 +202,8 @@
<return type="bool" />
<argument index="0" name="right" type="Transform3D" />
<description>
+ Returns [code]true[/code] if the transforms are exactly equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
</operators>
diff --git a/doc/classes/Translation.xml b/doc/classes/Translation.xml
index 2a0695d42e..defebf7ab4 100644
--- a/doc/classes/Translation.xml
+++ b/doc/classes/Translation.xml
@@ -7,8 +7,8 @@
Translations are resources that can be loaded and unloaded on demand. They map a string to another string.
</description>
<tutorials>
- <link title="Internationalizing games">https://docs.godotengine.org/en/latest/tutorials/i18n/internationalizing_games.html</link>
- <link title="Locales">https://docs.godotengine.org/en/latest/tutorials/i18n/locales.html</link>
+ <link title="Internationalizing games">$DOCS_URL/tutorials/i18n/internationalizing_games.html</link>
+ <link title="Locales">$DOCS_URL/tutorials/i18n/locales.html</link>
</tutorials>
<methods>
<method name="_get_message" qualifiers="virtual const">
diff --git a/doc/classes/TranslationServer.xml b/doc/classes/TranslationServer.xml
index 8a6fa3571a..519e1cb041 100644
--- a/doc/classes/TranslationServer.xml
+++ b/doc/classes/TranslationServer.xml
@@ -7,8 +7,8 @@
Server that manages all translations. Translations can be set to it and removed from it.
</description>
<tutorials>
- <link title="Internationalizing games">https://docs.godotengine.org/en/latest/tutorials/i18n/internationalizing_games.html</link>
- <link title="Locales">https://docs.godotengine.org/en/latest/tutorials/i18n/locales.html</link>
+ <link title="Internationalizing games">$DOCS_URL/tutorials/i18n/internationalizing_games.html</link>
+ <link title="Locales">$DOCS_URL/tutorials/i18n/locales.html</link>
</tutorials>
<methods>
<method name="add_translation">
diff --git a/doc/classes/Variant.xml b/doc/classes/Variant.xml
index 88644e2f8a..b8649a2836 100644
--- a/doc/classes/Variant.xml
+++ b/doc/classes/Variant.xml
@@ -72,6 +72,6 @@
Modifications to a container will modify all references to it. A [Mutex] should be created to lock it if multi-threaded access is desired.
</description>
<tutorials>
- <link title="Variant class">https://docs.godotengine.org/en/latest/development/cpp/variant_class.html</link>
+ <link title="Variant class">$DOCS_URL/development/cpp/variant_class.html</link>
</tutorials>
</class>
diff --git a/doc/classes/Vector2.xml b/doc/classes/Vector2.xml
index eaaf41561a..595af6222c 100644
--- a/doc/classes/Vector2.xml
+++ b/doc/classes/Vector2.xml
@@ -9,9 +9,9 @@
[b]Note:[/b] In a boolean context, a Vector2 will evaluate to [code]false[/code] if it's equal to [code]Vector2(0, 0)[/code]. Otherwise, a Vector2 will always evaluate to [code]true[/code].
</description>
<tutorials>
- <link title="Math documentation index">https://docs.godotengine.org/en/latest/tutorials/math/index.html</link>
- <link title="Vector math">https://docs.godotengine.org/en/latest/tutorials/math/vector_math.html</link>
- <link title="Advanced vector math">https://docs.godotengine.org/en/latest/tutorials/math/vectors_advanced.html</link>
+ <link title="Math documentation index">$DOCS_URL/tutorials/math/index.html</link>
+ <link title="Vector math">$DOCS_URL/tutorials/math/vector_math.html</link>
+ <link title="Advanced vector math">$DOCS_URL/tutorials/math/vectors_advanced.html</link>
<link title="3Blue1Brown Essence of Linear Algebra">https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab</link>
<link title="Matrix Transform Demo">https://godotengine.org/asset-library/asset/584</link>
<link title="All 2D Demos">https://github.com/godotengine/godot-demo-projects/tree/master/2d</link>
@@ -75,6 +75,7 @@
<argument index="0" name="to" type="Vector2" />
<description>
Returns the angle between the line connecting the two points and the X axis, in radians.
+ [code]a.angle_to_point(b)[/code] is equivalent of doing [code](b - a).angle()[/code].
[url=https://raw.githubusercontent.com/godotengine/godot-docs/master/img/vector2_angle_to_point.png]Illustration of the returned angle.[/url]
</description>
</method>
@@ -351,72 +352,97 @@
<return type="bool" />
<argument index="0" name="right" type="Vector2" />
<description>
+ Returns [code]true[/code] if the vectors are not equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
<operator name="operator *">
<return type="Vector2" />
<argument index="0" name="right" type="Vector2" />
<description>
+ Multiplies each component of the [Vector2] by the components of the given [Vector2].
+ [codeblock]
+ print(Vector2(10, 20) * Vector2(3, 4)) # Prints "(30, 80)"
+ [/codeblock]
</description>
</operator>
<operator name="operator *">
<return type="Vector2" />
<argument index="0" name="right" type="Transform2D" />
<description>
+ Inversely transforms (multiplies) the [Vector2] by the given [Transform2D] transformation matrix.
</description>
</operator>
<operator name="operator *">
<return type="Vector2" />
<argument index="0" name="right" type="float" />
<description>
+ Multiplies each component of the [Vector2] by the given [float].
</description>
</operator>
<operator name="operator *">
<return type="Vector2" />
<argument index="0" name="right" type="int" />
<description>
+ Multiplies each component of the [Vector2] by the given [int].
</description>
</operator>
<operator name="operator +">
<return type="Vector2" />
<argument index="0" name="right" type="Vector2" />
<description>
+ Adds each component of the [Vector2] by the components of the given [Vector2].
+ [codeblock]
+ print(Vector2(10, 20) + Vector2(3, 4)) # Prints "(13, 24)"
+ [/codeblock]
</description>
</operator>
<operator name="operator -">
<return type="Vector2" />
<argument index="0" name="right" type="Vector2" />
<description>
+ Subtracts each component of the [Vector2] by the components of the given [Vector2].
+ [codeblock]
+ print(Vector2(10, 20) - Vector2(3, 4)) # Prints "(7, 16)"
+ [/codeblock]
</description>
</operator>
<operator name="operator /">
<return type="Vector2" />
<argument index="0" name="right" type="Vector2" />
<description>
+ Divides each component of the [Vector2] by the components of the given [Vector2].
+ [codeblock]
+ print(Vector2(10, 20) / Vector2(2, 5)) # Prints "(5, 4)"
+ [/codeblock]
</description>
</operator>
<operator name="operator /">
<return type="Vector2" />
<argument index="0" name="right" type="float" />
<description>
+ Divides each component of the [Vector2] by the given [float].
</description>
</operator>
<operator name="operator /">
<return type="Vector2" />
<argument index="0" name="right" type="int" />
<description>
+ Divides each component of the [Vector2] by the given [int].
</description>
</operator>
<operator name="operator &lt;">
<return type="bool" />
<argument index="0" name="right" type="Vector2" />
<description>
+ Compares two [Vector2] vectors by first checking if the X value of the left vector is less than the X value of the [code]right[/code] vector. If the X values are exactly equal, then it repeats this check with the Y values of the two vectors. This operator is useful for sorting vectors.
</description>
</operator>
<operator name="operator &lt;=">
<return type="bool" />
<argument index="0" name="right" type="Vector2" />
<description>
+ Compares two [Vector2] vectors by first checking if the X value of the left vector is less than or equal to the X value of the [code]right[/code] vector. If the X values are exactly equal, then it repeats this check with the Y values of the two vectors. This operator is useful for sorting vectors.
</description>
</operator>
<operator name="operator ==">
@@ -428,34 +454,41 @@
<return type="bool" />
<argument index="0" name="right" type="Vector2" />
<description>
+ Returns [code]true[/code] if the vectors are exactly equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
<operator name="operator &gt;">
<return type="bool" />
<argument index="0" name="right" type="Vector2" />
<description>
+ Compares two [Vector2] vectors by first checking if the X value of the left vector is greater than the X value of the [code]right[/code] vector. If the X values are exactly equal, then it repeats this check with the Y values of the two vectors. This operator is useful for sorting vectors.
</description>
</operator>
<operator name="operator &gt;=">
<return type="bool" />
<argument index="0" name="right" type="Vector2" />
<description>
+ Compares two [Vector2] vectors by first checking if the X value of the left vector is greater than or equal to the X value of the [code]right[/code] vector. If the X values are exactly equal, then it repeats this check with the Y values of the two vectors. This operator is useful for sorting vectors.
</description>
</operator>
<operator name="operator []">
<return type="float" />
<argument index="0" name="index" type="int" />
<description>
+ Access vector components using their index. [code]v[0][/code] is equivalent to [code]v.x[/code], and [code]v[1][/code] is equivalent to [code]v.y[/code].
</description>
</operator>
<operator name="operator unary+">
<return type="Vector2" />
<description>
+ Returns the same value as if the [code]+[/code] was not there. Unary [code]+[/code] does nothing, but sometimes it can make your code more readable.
</description>
</operator>
<operator name="operator unary-">
<return type="Vector2" />
<description>
+ Returns the negative value of the [Vector2]. This is the same as writing [code]Vector2(-v.x, -v.y)[/code]. This operation flips the direction of the vector while keeping the same magnitude. With floats, the number zero can be either positive or negative.
</description>
</operator>
</operators>
diff --git a/doc/classes/Vector2i.xml b/doc/classes/Vector2i.xml
index 71882e5b0c..62362409a5 100644
--- a/doc/classes/Vector2i.xml
+++ b/doc/classes/Vector2i.xml
@@ -9,8 +9,8 @@
[b]Note:[/b] In a boolean context, a Vector2i will evaluate to [code]false[/code] if it's equal to [code]Vector2i(0, 0)[/code]. Otherwise, a Vector2i will always evaluate to [code]true[/code].
</description>
<tutorials>
- <link title="Math documentation index">https://docs.godotengine.org/en/latest/tutorials/math/index.html</link>
- <link title="Vector math">https://docs.godotengine.org/en/latest/tutorials/math/vector_math.html</link>
+ <link title="Math documentation index">$DOCS_URL/tutorials/math/index.html</link>
+ <link title="Vector math">$DOCS_URL/tutorials/math/vector_math.html</link>
<link title="3Blue1Brown Essence of Linear Algebra">https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab</link>
</tutorials>
<constructors>
@@ -115,78 +115,115 @@
<return type="bool" />
<argument index="0" name="right" type="Vector2i" />
<description>
+ Returns [code]true[/code] if the vectors are not equal.
</description>
</operator>
<operator name="operator %">
<return type="Vector2i" />
<argument index="0" name="right" type="Vector2i" />
<description>
+ Gets the remainder of each component of the [Vector2i] with the components of the given [Vector2i]. This operation uses truncated division, which is often not desired as it does not work well with negative numbers. Consider using [method @GlobalScope.posmod] instead if you want to handle negative numbers.
+ [codeblock]
+ print(Vector2i(10, -20) % Vector2i(7, 8)) # Prints "(3, -4)"
+ [/codeblock]
</description>
</operator>
<operator name="operator %">
<return type="Vector2i" />
<argument index="0" name="right" type="int" />
<description>
+ Gets the remainder of each component of the [Vector2i] with the the given [int]. This operation uses truncated division, which is often not desired as it does not work well with negative numbers. Consider using [method @GlobalScope.posmod] instead if you want to handle negative numbers.
+ [codeblock]
+ print(Vector2i(10, -20) % 7) # Prints "(3, -6)"
+ [/codeblock]
</description>
</operator>
<operator name="operator *">
<return type="Vector2i" />
<argument index="0" name="right" type="Vector2i" />
<description>
+ Multiplies each component of the [Vector2i] by the components of the given [Vector2i].
+ [codeblock]
+ print(Vector2i(10, 20) * Vector2i(3, 4)) # Prints "(30, 80)"
+ [/codeblock]
</description>
</operator>
<operator name="operator *">
<return type="Vector2i" />
<argument index="0" name="right" type="float" />
<description>
+ Multiplies each component of the [Vector2i] by the given [float] truncated to an integer.
+ [codeblock]
+ print(Vector2i(10, 20) * 0.9) # Prints "(0, 0)"
+ [/codeblock]
</description>
</operator>
<operator name="operator *">
<return type="Vector2i" />
<argument index="0" name="right" type="int" />
<description>
+ Multiplies each component of the [Vector2i] by the given [int].
</description>
</operator>
<operator name="operator +">
<return type="Vector2i" />
<argument index="0" name="right" type="Vector2i" />
<description>
+ Adds each component of the [Vector2i] by the components of the given [Vector2i].
+ [codeblock]
+ print(Vector2i(10, 20) + Vector2i(3, 4)) # Prints "(13, 24)"
+ [/codeblock]
</description>
</operator>
<operator name="operator -">
<return type="Vector2i" />
<argument index="0" name="right" type="Vector2i" />
<description>
+ Subtracts each component of the [Vector2i] by the components of the given [Vector2i].
+ [codeblock]
+ print(Vector2i(10, 20) - Vector2i(3, 4)) # Prints "(7, 16)"
+ [/codeblock]
</description>
</operator>
<operator name="operator /">
<return type="Vector2i" />
<argument index="0" name="right" type="Vector2i" />
<description>
+ Divides each component of the [Vector2i] by the components of the given [Vector2i].
+ [codeblock]
+ print(Vector2i(10, 20) / Vector2i(2, 5)) # Prints "(5, 4)"
+ [/codeblock]
</description>
</operator>
<operator name="operator /">
<return type="Vector2i" />
<argument index="0" name="right" type="float" />
<description>
+ Divides each component of the [Vector2i] by the given [float] truncated to an integer.
+ [codeblock]
+ print(Vector2i(10, 20) / 2.9) # Prints "(5, 10)"
+ [/codeblock]
</description>
</operator>
<operator name="operator /">
<return type="Vector2i" />
<argument index="0" name="right" type="int" />
<description>
+ Divides each component of the [Vector2i] by the given [int].
</description>
</operator>
<operator name="operator &lt;">
<return type="bool" />
<argument index="0" name="right" type="Vector2i" />
<description>
+ Compares two [Vector2i] vectors by first checking if the X value of the left vector is less than the X value of the [code]right[/code] vector. If the X values are exactly equal, then it repeats this check with the Y values of the two vectors. This operator is useful for sorting vectors.
</description>
</operator>
<operator name="operator &lt;=">
<return type="bool" />
<argument index="0" name="right" type="Vector2i" />
<description>
+ Compares two [Vector2i] vectors by first checking if the X value of the left vector is less than or equal to the X value of the [code]right[/code] vector. If the X values are exactly equal, then it repeats this check with the Y values of the two vectors. This operator is useful for sorting vectors.
</description>
</operator>
<operator name="operator ==">
@@ -198,34 +235,40 @@
<return type="bool" />
<argument index="0" name="right" type="Vector2i" />
<description>
+ Returns [code]true[/code] if the vectors are equal.
</description>
</operator>
<operator name="operator &gt;">
<return type="bool" />
<argument index="0" name="right" type="Vector2i" />
<description>
+ Compares two [Vector2i] vectors by first checking if the X value of the left vector is greater than the X value of the [code]right[/code] vector. If the X values are exactly equal, then it repeats this check with the Y values of the two vectors. This operator is useful for sorting vectors.
</description>
</operator>
<operator name="operator &gt;=">
<return type="bool" />
<argument index="0" name="right" type="Vector2i" />
<description>
+ Compares two [Vector2i] vectors by first checking if the X value of the left vector is greater than or equal to the X value of the [code]right[/code] vector. If the X values are exactly equal, then it repeats this check with the Y values of the two vectors. This operator is useful for sorting vectors.
</description>
</operator>
<operator name="operator []">
<return type="int" />
<argument index="0" name="index" type="int" />
<description>
+ Access vector components using their index. [code]v[0][/code] is equivalent to [code]v.x[/code], and [code]v[1][/code] is equivalent to [code]v.y[/code].
</description>
</operator>
<operator name="operator unary+">
<return type="Vector2i" />
<description>
+ Returns the same value as if the [code]+[/code] was not there. Unary [code]+[/code] does nothing, but sometimes it can make your code more readable.
</description>
</operator>
<operator name="operator unary-">
<return type="Vector2i" />
<description>
+ Returns the negative value of the [Vector2i]. This is the same as writing [code]Vector2i(-v.x, -v.y)[/code]. This operation flips the direction of the vector while keeping the same magnitude.
</description>
</operator>
</operators>
diff --git a/doc/classes/Vector3.xml b/doc/classes/Vector3.xml
index a94cc0086f..62d467c505 100644
--- a/doc/classes/Vector3.xml
+++ b/doc/classes/Vector3.xml
@@ -9,9 +9,9 @@
[b]Note:[/b] In a boolean context, a Vector3 will evaluate to [code]false[/code] if it's equal to [code]Vector3(0, 0, 0)[/code]. Otherwise, a Vector3 will always evaluate to [code]true[/code].
</description>
<tutorials>
- <link title="Math documentation index">https://docs.godotengine.org/en/latest/tutorials/math/index.html</link>
- <link title="Vector math">https://docs.godotengine.org/en/latest/tutorials/math/vector_math.html</link>
- <link title="Advanced vector math">https://docs.godotengine.org/en/latest/tutorials/math/vectors_advanced.html</link>
+ <link title="Math documentation index">$DOCS_URL/tutorials/math/index.html</link>
+ <link title="Vector math">$DOCS_URL/tutorials/math/vector_math.html</link>
+ <link title="Advanced vector math">$DOCS_URL/tutorials/math/vectors_advanced.html</link>
<link title="3Blue1Brown Essence of Linear Algebra">https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab</link>
<link title="Matrix Transform Demo">https://godotengine.org/asset-library/asset/584</link>
<link title="All 3D Demos">https://github.com/godotengine/godot-demo-projects/tree/master/3d</link>
@@ -367,84 +367,111 @@
<return type="bool" />
<argument index="0" name="right" type="Vector3" />
<description>
+ Returns [code]true[/code] if the vectors are not equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
<operator name="operator *">
<return type="Vector3" />
<argument index="0" name="right" type="Vector3" />
<description>
+ Multiplies each component of the [Vector3] by the components of the given [Vector3].
+ [codeblock]
+ print(Vector3(10, 20, 30) * Vector3(3, 4, 5)) # Prints "(30, 80, 150)"
+ [/codeblock]
</description>
</operator>
<operator name="operator *">
<return type="Vector3" />
<argument index="0" name="right" type="Basis" />
<description>
+ Inversely transforms (multiplies) the [Vector3] by the given [Basis] matrix.
</description>
</operator>
<operator name="operator *">
<return type="Vector3" />
<argument index="0" name="right" type="Quaternion" />
<description>
+ Inversely transforms (multiplies) the [Vector3] by the given [Quaternion].
</description>
</operator>
<operator name="operator *">
<return type="Vector3" />
<argument index="0" name="right" type="Transform3D" />
<description>
+ Inversely transforms (multiplies) the [Vector3] by the given [Transform3D] transformation matrix.
</description>
</operator>
<operator name="operator *">
<return type="Vector3" />
<argument index="0" name="right" type="float" />
<description>
+ Multiplies each component of the [Vector3] by the given [float].
</description>
</operator>
<operator name="operator *">
<return type="Vector3" />
<argument index="0" name="right" type="int" />
<description>
+ Multiplies each component of the [Vector3] by the given [int].
</description>
</operator>
<operator name="operator +">
<return type="Vector3" />
<argument index="0" name="right" type="Vector3" />
<description>
+ Adds each component of the [Vector3] by the components of the given [Vector3].
+ [codeblock]
+ print(Vector3(10, 20, 30) + Vector3(3, 4, 5)) # Prints "(13, 24, 35)"
+ [/codeblock]
</description>
</operator>
<operator name="operator -">
<return type="Vector3" />
<argument index="0" name="right" type="Vector3" />
<description>
+ Subtracts each component of the [Vector3] by the components of the given [Vector3].
+ [codeblock]
+ print(Vector3(10, 20, 30) - Vector3(3, 4, 5)) # Prints "(7, 16, 25)"
+ [/codeblock]
</description>
</operator>
<operator name="operator /">
<return type="Vector3" />
<argument index="0" name="right" type="Vector3" />
<description>
+ Divides each component of the [Vector3] by the components of the given [Vector3].
+ [codeblock]
+ print(Vector3(10, 20, 30) / Vector3(2, 5, 3)) # Prints "(5, 4, 10)"
+ [/codeblock]
</description>
</operator>
<operator name="operator /">
<return type="Vector3" />
<argument index="0" name="right" type="float" />
<description>
+ Divides each component of the [Vector3] by the given [float].
</description>
</operator>
<operator name="operator /">
<return type="Vector3" />
<argument index="0" name="right" type="int" />
<description>
+ Divides each component of the [Vector3] by the given [int].
</description>
</operator>
<operator name="operator &lt;">
<return type="bool" />
<argument index="0" name="right" type="Vector3" />
<description>
+ Compares two [Vector3] vectors by first checking if the X value of the left vector is less than the X value of the [code]right[/code] vector. If the X values are exactly equal, then it repeats this check with the Y values of the two vectors, and then with the Z values. This operator is useful for sorting vectors.
</description>
</operator>
<operator name="operator &lt;=">
<return type="bool" />
<argument index="0" name="right" type="Vector3" />
<description>
+ Compares two [Vector3] vectors by first checking if the X value of the left vector is less than or equal to the X value of the [code]right[/code] vector. If the X values are exactly equal, then it repeats this check with the Y values of the two vectors, and then with the Z values. This operator is useful for sorting vectors.
</description>
</operator>
<operator name="operator ==">
@@ -456,34 +483,41 @@
<return type="bool" />
<argument index="0" name="right" type="Vector3" />
<description>
+ Returns [code]true[/code] if the vectors are exactly equal.
+ [b]Note:[/b] Due to floating-point precision errors, consider using [method is_equal_approx] instead, which is more reliable.
</description>
</operator>
<operator name="operator &gt;">
<return type="bool" />
<argument index="0" name="right" type="Vector3" />
<description>
+ Compares two [Vector3] vectors by first checking if the X value of the left vector is greater than the X value of the [code]right[/code] vector. If the X values are exactly equal, then it repeats this check with the Y values of the two vectors, and then with the Z values. This operator is useful for sorting vectors.
</description>
</operator>
<operator name="operator &gt;=">
<return type="bool" />
<argument index="0" name="right" type="Vector3" />
<description>
+ Compares two [Vector3] vectors by first checking if the X value of the left vector is greater than or equal to the X value of the [code]right[/code] vector. If the X values are exactly equal, then it repeats this check with the Y values of the two vectors, and then with the Z values. This operator is useful for sorting vectors.
</description>
</operator>
<operator name="operator []">
<return type="float" />
<argument index="0" name="index" type="int" />
<description>
+ Access vector components using their index. [code]v[0][/code] is equivalent to [code]v.x[/code], [code]v[1][/code] is equivalent to [code]v.y[/code], and [code]v[2][/code] is equivalent to [code]v.z[/code].
</description>
</operator>
<operator name="operator unary+">
<return type="Vector3" />
<description>
+ Returns the same value as if the [code]+[/code] was not there. Unary [code]+[/code] does nothing, but sometimes it can make your code more readable.
</description>
</operator>
<operator name="operator unary-">
<return type="Vector3" />
<description>
+ Returns the negative value of the [Vector3]. This is the same as writing [code]Vector3(-v.x, -v.y, -v.z)[/code]. This operation flips the direction of the vector while keeping the same magnitude. With floats, the number zero can be either positive or negative.
</description>
</operator>
</operators>
diff --git a/doc/classes/Vector3i.xml b/doc/classes/Vector3i.xml
index 5cd458a2be..17febdea83 100644
--- a/doc/classes/Vector3i.xml
+++ b/doc/classes/Vector3i.xml
@@ -9,8 +9,8 @@
[b]Note:[/b] In a boolean context, a Vector3i will evaluate to [code]false[/code] if it's equal to [code]Vector3i(0, 0, 0)[/code]. Otherwise, a Vector3i will always evaluate to [code]true[/code].
</description>
<tutorials>
- <link title="Math documentation index">https://docs.godotengine.org/en/latest/tutorials/math/index.html</link>
- <link title="Vector math">https://docs.godotengine.org/en/latest/tutorials/math/vector_math.html</link>
+ <link title="Math documentation index">$DOCS_URL/tutorials/math/index.html</link>
+ <link title="Vector math">$DOCS_URL/tutorials/math/vector_math.html</link>
<link title="3Blue1Brown Essence of Linear Algebra">https://www.youtube.com/playlist?list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab</link>
</tutorials>
<constructors>
@@ -133,78 +133,115 @@
<return type="bool" />
<argument index="0" name="right" type="Vector3i" />
<description>
+ Returns [code]true[/code] if the vectors are not equal.
</description>
</operator>
<operator name="operator %">
<return type="Vector3i" />
<argument index="0" name="right" type="Vector3i" />
<description>
+ Gets the remainder of each component of the [Vector3i] with the components of the given [Vector3i]. This operation uses truncated division, which is often not desired as it does not work well with negative numbers. Consider using [method @GlobalScope.posmod] instead if you want to handle negative numbers.
+ [codeblock]
+ print(Vector3i(10, -20, 30) % Vector3i(7, 8, 9)) # Prints "(3, -4, 3)"
+ [/codeblock]
</description>
</operator>
<operator name="operator %">
<return type="Vector3i" />
<argument index="0" name="right" type="int" />
<description>
+ Gets the remainder of each component of the [Vector3i] with the the given [int]. This operation uses truncated division, which is often not desired as it does not work well with negative numbers. Consider using [method @GlobalScope.posmod] instead if you want to handle negative numbers.
+ [codeblock]
+ print(Vector2i(10, -20, 30) % 7) # Prints "(3, -6, 2)"
+ [/codeblock]
</description>
</operator>
<operator name="operator *">
<return type="Vector3i" />
<argument index="0" name="right" type="Vector3i" />
<description>
+ Multiplies each component of the [Vector3i] by the components of the given [Vector3i].
+ [codeblock]
+ print(Vector3i(10, 20, 30) * Vector3i(3, 4, 5)) # Prints "(30, 80, 150)"
+ [/codeblock]
</description>
</operator>
<operator name="operator *">
<return type="Vector3i" />
<argument index="0" name="right" type="float" />
<description>
+ Multiplies each component of the [Vector3i] by the given [float] truncated to an integer.
+ [codeblock]
+ print(Vector3i(10, 20, 30) * 0.9) # Prints "(0, 0, 0)"
+ [/codeblock]
</description>
</operator>
<operator name="operator *">
<return type="Vector3i" />
<argument index="0" name="right" type="int" />
<description>
+ Multiplies each component of the [Vector3i] by the given [int].
</description>
</operator>
<operator name="operator +">
<return type="Vector3i" />
<argument index="0" name="right" type="Vector3i" />
<description>
+ Adds each component of the [Vector3i] by the components of the given [Vector3i].
+ [codeblock]
+ print(Vector3i(10, 20, 30) + Vector3i(3, 4, 5)) # Prints "(13, 24, 35)"
+ [/codeblock]
</description>
</operator>
<operator name="operator -">
<return type="Vector3i" />
<argument index="0" name="right" type="Vector3i" />
<description>
+ Subtracts each component of the [Vector3i] by the components of the given [Vector3i].
+ [codeblock]
+ print(Vector3i(10, 20, 30) - Vector3i(3, 4, 5)) # Prints "(7, 16, 25)"
+ [/codeblock]
</description>
</operator>
<operator name="operator /">
<return type="Vector3i" />
<argument index="0" name="right" type="Vector3i" />
<description>
+ Divides each component of the [Vector3i] by the components of the given [Vector3i].
+ [codeblock]
+ print(Vector3i(10, 20, 30) / Vector3i(2, 5, 3)) # Prints "(5, 4, 10)"
+ [/codeblock]
</description>
</operator>
<operator name="operator /">
<return type="Vector3i" />
<argument index="0" name="right" type="float" />
<description>
+ Divides each component of the [Vector3i] by the given [float] truncated to an integer.
+ [codeblock]
+ print(Vector3i(10, 20, 30) / 2.9) # Prints "(5, 10, 15)"
+ [/codeblock]
</description>
</operator>
<operator name="operator /">
<return type="Vector3i" />
<argument index="0" name="right" type="int" />
<description>
+ Divides each component of the [Vector3i] by the given [int].
</description>
</operator>
<operator name="operator &lt;">
<return type="bool" />
<argument index="0" name="right" type="Vector3i" />
<description>
+ Compares two [Vector3i] vectors by first checking if the X value of the left vector is less than the X value of the [code]right[/code] vector. If the X values are exactly equal, then it repeats this check with the Y values of the two vectors, and then with the Z values. This operator is useful for sorting vectors.
</description>
</operator>
<operator name="operator &lt;=">
<return type="bool" />
<argument index="0" name="right" type="Vector3i" />
<description>
+ Compares two [Vector3i] vectors by first checking if the X value of the left vector is less than or equal to the X value of the [code]right[/code] vector. If the X values are exactly equal, then it repeats this check with the Y values of the two vectors, and then with the Z values. This operator is useful for sorting vectors.
</description>
</operator>
<operator name="operator ==">
@@ -216,34 +253,40 @@
<return type="bool" />
<argument index="0" name="right" type="Vector3i" />
<description>
+ Returns [code]true[/code] if the vectors are equal.
</description>
</operator>
<operator name="operator &gt;">
<return type="bool" />
<argument index="0" name="right" type="Vector3i" />
<description>
+ Compares two [Vector3i] vectors by first checking if the X value of the left vector is greater than the X value of the [code]right[/code] vector. If the X values are exactly equal, then it repeats this check with the Y values of the two vectors, and then with the Z values. This operator is useful for sorting vectors.
</description>
</operator>
<operator name="operator &gt;=">
<return type="bool" />
<argument index="0" name="right" type="Vector3i" />
<description>
+ Compares two [Vector3i] vectors by first checking if the X value of the left vector is greater than or equal to the X value of the [code]right[/code] vector. If the X values are exactly equal, then it repeats this check with the Y values of the two vectors, and then with the Z values. This operator is useful for sorting vectors.
</description>
</operator>
<operator name="operator []">
<return type="int" />
<argument index="0" name="index" type="int" />
<description>
+ Access vector components using their index. [code]v[0][/code] is equivalent to [code]v.x[/code], [code]v[1][/code] is equivalent to [code]v.y[/code], and [code]v[2][/code] is equivalent to [code]v.z[/code].
</description>
</operator>
<operator name="operator unary+">
<return type="Vector3i" />
<description>
+ Returns the same value as if the [code]+[/code] was not there. Unary [code]+[/code] does nothing, but sometimes it can make your code more readable.
</description>
</operator>
<operator name="operator unary-">
<return type="Vector3i" />
<description>
+ Returns the negative value of the [Vector3i]. This is the same as writing [code]Vector3i(-v.x, -v.y, -v.z)[/code]. This operation flips the direction of the vector while keeping the same magnitude.
</description>
</operator>
</operators>
diff --git a/doc/classes/Viewport.xml b/doc/classes/Viewport.xml
index e79cf0d233..d83645a8af 100644
--- a/doc/classes/Viewport.xml
+++ b/doc/classes/Viewport.xml
@@ -12,8 +12,8 @@
Finally, viewports can also behave as render targets, in which case they will not be visible unless the associated texture is used to draw.
</description>
<tutorials>
- <link title="Using Viewports">https://docs.godotengine.org/en/latest/tutorials/rendering/viewports.html</link>
- <link title="Viewport and canvas transforms">https://docs.godotengine.org/en/latest/tutorials/2d/2d_transforms.html</link>
+ <link title="Using Viewports">$DOCS_URL/tutorials/rendering/viewports.html</link>
+ <link title="Viewport and canvas transforms">$DOCS_URL/tutorials/2d/2d_transforms.html</link>
<link title="GUI in 3D Demo">https://godotengine.org/asset-library/asset/127</link>
<link title="3D in 2D Demo">https://godotengine.org/asset-library/asset/128</link>
<link title="2D in 3D Demo">https://godotengine.org/asset-library/asset/129</link>
@@ -107,6 +107,12 @@
Returns the drag data from the GUI, that was previously returned by [method Control._get_drag_data].
</description>
</method>
+ <method name="gui_is_drag_successful" qualifiers="const">
+ <return type="bool" />
+ <description>
+ Returns [code]true[/code] if the drag operation is successful.
+ </description>
+ </method>
<method name="gui_is_dragging" qualifiers="const">
<return type="bool" />
<description>
diff --git a/doc/classes/VisualShaderNode.xml b/doc/classes/VisualShaderNode.xml
index b752e94490..cebe7f215f 100644
--- a/doc/classes/VisualShaderNode.xml
+++ b/doc/classes/VisualShaderNode.xml
@@ -7,7 +7,7 @@
Visual shader graphs consist of various nodes. Each node in the graph is a separate object and they are represented as a rectangular boxes with title and a set of properties. Each node has also connection ports that allow to connect it to another nodes and control the flow of the shader.
</description>
<tutorials>
- <link title="VisualShaders">https://docs.godotengine.org/en/latest/tutorials/shaders/visual_shaders.html</link>
+ <link title="VisualShaders">$DOCS_URL/tutorials/shaders/visual_shaders.html</link>
</tutorials>
<methods>
<method name="clear_default_input_values">
diff --git a/doc/classes/VisualShaderNodeCustom.xml b/doc/classes/VisualShaderNodeCustom.xml
index 58f345b8f9..995f2796dd 100644
--- a/doc/classes/VisualShaderNodeCustom.xml
+++ b/doc/classes/VisualShaderNodeCustom.xml
@@ -13,7 +13,7 @@
[/codeblock]
</description>
<tutorials>
- <link title="Visual Shader plugins">https://docs.godotengine.org/en/latest/tutorials/plugins/editor/visual_shader_plugins.html</link>
+ <link title="Visual Shader plugins">$DOCS_URL/tutorials/plugins/editor/visual_shader_plugins.html</link>
</tutorials>
<methods>
<method name="_get_category" qualifiers="virtual const">
diff --git a/doc/classes/VisualShaderNodeInput.xml b/doc/classes/VisualShaderNodeInput.xml
index 46d7dd6322..a7b501c6a0 100644
--- a/doc/classes/VisualShaderNodeInput.xml
+++ b/doc/classes/VisualShaderNodeInput.xml
@@ -7,7 +7,7 @@
Gives access to input variables (built-ins) available for the shader. See the shading reference for the list of available built-ins for each shader type (check [code]Tutorials[/code] section for link).
</description>
<tutorials>
- <link title="Shading reference index">https://docs.godotengine.org/en/latest/tutorials/shaders/shader_reference/index.html</link>
+ <link title="Shading reference index">$DOCS_URL/tutorials/shaders/shader_reference/index.html</link>
</tutorials>
<methods>
<method name="get_input_real_name" qualifiers="const">
diff --git a/doc/classes/VoxelGI.xml b/doc/classes/VoxelGI.xml
index f6470782ee..2c3605aa1c 100644
--- a/doc/classes/VoxelGI.xml
+++ b/doc/classes/VoxelGI.xml
@@ -4,12 +4,13 @@
Real-time global illumination (GI) probe.
</brief_description>
<description>
- [VoxelGI]s are used to provide high-quality real-time indirect light to scenes. They precompute the effect of objects that emit light and the effect of static geometry to simulate the behavior of complex light in real-time. [VoxelGI]s need to be baked before using, however, once baked, dynamic objects will receive light from them. Further, lights can be fully dynamic or baked.
- Having [VoxelGI]s in a scene can be expensive, the quality of the probe can be turned down in exchange for better performance in the [ProjectSettings] using [member ProjectSettings.rendering/global_illumination/voxel_gi/quality].
- [b]Note:[/b] Meshes should have sufficiently thick walls to avoid light leaks (avoid one-sided walls). For interior levels, enclose your level geometry in a sufficiently large box and bridge the loops to close the mesh.
+ [VoxelGI]s are used to provide high-quality real-time indirect light and reflections to scenes. They precompute the effect of objects that emit light and the effect of static geometry to simulate the behavior of complex light in real-time. [VoxelGI]s need to be baked before having a visible effect. However, once baked, dynamic objects will receive light from them. Furthermore, lights can be fully dynamic or baked.
+ [b]Procedural generation:[/b] [VoxelGI] can be baked in an exported project, which makes it suitable for procedurally generated or user-built levels as long as all the geometry is generated in advance. For games where geometry is generated at any time during gameplay, SDFGI is more suitable (see [member Environment.sdfgi_enabled]).
+ [b]Performance:[/b] [VoxelGI] is relatively demanding on the GPU and is not suited to low-end hardware such as integrated graphics (consider [LightmapGI] instead). To improve performance, adjust [member ProjectSettings.rendering/global_illumination/voxel_gi/quality] and enable [member ProjectSettings.rendering/global_illumination/gi/use_half_resolution] in the Project Settings. To provide a fallback for low-end hardware, consider adding an option to disable [VoxelGI] in your project's options menus. A [VoxelGI] node can be disabled by hiding it.
+ [b]Note:[/b] Meshes should have sufficiently thick walls to avoid light leaks (avoid one-sided walls). For interior levels, enclose your level geometry in a sufficiently large box and bridge the loops to close the mesh. To further prevent light leaks, you can also strategically place temporary [MeshInstance3D] nodes with their [member GeometryInstance3D.gi_mode] set to [constant GeometryInstance3D.GI_MODE_BAKED]. These temporary nodes can then be hidden after baking the [VoxelGI] node.
</description>
<tutorials>
- <link title="GI probes">https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html</link>
+ <link title="GI probes">$DOCS_URL/tutorials/3d/gi_probes.html</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
</tutorials>
<methods>
@@ -19,6 +20,7 @@
<argument index="1" name="create_visual_debug" type="bool" default="false" />
<description>
Bakes the effect from all [GeometryInstance3D]s marked with [constant GeometryInstance3D.GI_MODE_BAKED] and [Light3D]s marked with either [constant Light3D.BAKE_DYNAMIC] or [constant Light3D.BAKE_STATIC]. If [code]create_visual_debug[/code] is [code]true[/code], after baking the light, this will generate a [MultiMesh] that has a cube representing each solid cell with each cube colored to the cell's albedo color. This can be used to visualize the [VoxelGI]'s data and debug any issues that may be occurring.
+ [b]Note:[/b] [method bake] works from the editor and in exported projects. This makes it suitable for procedurally generated or user-built levels. Baking a [VoxelGI] node generally takes from 5 to 20 seconds in most scenes. Reducing [member subdiv] can speed up baking.
</description>
</method>
<method name="debug_bake">
@@ -50,7 +52,7 @@
Use 256 subdivisions.
</constant>
<constant name="SUBDIV_512" value="3" enum="Subdiv">
- Use 512 subdivisions. This is the highest quality setting, but the slowest. On lower-end hardware this could cause the GPU to stall.
+ Use 512 subdivisions. This is the highest quality setting, but the slowest. On lower-end hardware, this could cause the GPU to stall.
</constant>
<constant name="SUBDIV_MAX" value="4" enum="Subdiv">
Represents the size of the [enum Subdiv] enum.
diff --git a/doc/classes/Window.xml b/doc/classes/Window.xml
index 0653c8b453..3fee1feae8 100644
--- a/doc/classes/Window.xml
+++ b/doc/classes/Window.xml
@@ -230,6 +230,12 @@
<description>
</description>
</method>
+ <method name="reset_size">
+ <return type="void" />
+ <description>
+ Resets the size to the minimum size, which is the max of [member min_size] and (if [member wrap_controls] is enabled) [method get_contents_minimum_size]. This is equivalent to calling [code]set_size(Vector2i())[/code] (or any size below the minimum).
+ </description>
+ </method>
<method name="set_flag">
<return type="void" />
<argument index="0" name="flag" type="int" enum="Window.Flags" />
@@ -384,7 +390,7 @@
</constant>
<constant name="MODE_FULLSCREEN" value="3" enum="Mode">
Fullscreen window mode. Note that this is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless window is used to emulate fullscreen. On macOS, a new desktop is used to display the running project.
- Regardless of the platform, enabling fullscreen will change the window size to match the monitor's size. Therefore, make sure your project supports [url=https://docs.godotengine.org/en/latest/tutorials/rendering/multiple_resolutions.html]multiple resolutions[/url] when enabling fullscreen mode.
+ Regardless of the platform, enabling fullscreen will change the window size to match the monitor's size. Therefore, make sure your project supports [url=$DOCS_URL/tutorials/rendering/multiple_resolutions.html]multiple resolutions[/url] when enabling fullscreen mode.
</constant>
<constant name="FLAG_RESIZE_DISABLED" value="0" enum="Flags">
The window's ability to be resized.
diff --git a/doc/classes/World2D.xml b/doc/classes/World2D.xml
index a6a4701dd4..47ab4b3612 100644
--- a/doc/classes/World2D.xml
+++ b/doc/classes/World2D.xml
@@ -7,7 +7,7 @@
Class that has everything pertaining to a 2D world. A physics space, a visual scenario and a sound space. 2D nodes register their resources into the current 2D world.
</description>
<tutorials>
- <link title="Ray-casting">https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html</link>
+ <link title="Ray-casting">$DOCS_URL/tutorials/physics/ray-casting.html</link>
</tutorials>
<members>
<member name="canvas" type="RID" setter="" getter="get_canvas">
diff --git a/doc/classes/World3D.xml b/doc/classes/World3D.xml
index 136ca2c598..fd2f96985c 100644
--- a/doc/classes/World3D.xml
+++ b/doc/classes/World3D.xml
@@ -7,7 +7,7 @@
Class that has everything pertaining to a world. A physics space, a visual scenario and a sound space. Node3D nodes register their resources into the current world.
</description>
<tutorials>
- <link title="Ray-casting">https://docs.godotengine.org/en/latest/tutorials/physics/ray-casting.html</link>
+ <link title="Ray-casting">$DOCS_URL/tutorials/physics/ray-casting.html</link>
</tutorials>
<members>
<member name="camera_effects" type="CameraEffects" setter="set_camera_effects" getter="get_camera_effects">
diff --git a/doc/classes/WorldEnvironment.xml b/doc/classes/WorldEnvironment.xml
index bd25a74c5b..793479e074 100644
--- a/doc/classes/WorldEnvironment.xml
+++ b/doc/classes/WorldEnvironment.xml
@@ -9,7 +9,7 @@
The [WorldEnvironment] allows the user to specify default lighting parameters (e.g. ambient lighting), various post-processing effects (e.g. SSAO, DOF, Tonemapping), and how to draw the background (e.g. solid color, skybox). Usually, these are added in order to improve the realism/color balance of the scene.
</description>
<tutorials>
- <link title="Environment and post-processing">https://docs.godotengine.org/en/latest/tutorials/3d/environment_and_post_processing.html</link>
+ <link title="Environment and post-processing">$DOCS_URL/tutorials/3d/environment_and_post_processing.html</link>
<link title="3D Material Testers Demo">https://godotengine.org/asset-library/asset/123</link>
<link title="2D HDR Demo">https://godotengine.org/asset-library/asset/110</link>
<link title="Third Person Shooter Demo">https://godotengine.org/asset-library/asset/678</link>
diff --git a/doc/classes/XRCamera3D.xml b/doc/classes/XRCamera3D.xml
index 31f05ca06c..ca81f5b169 100644
--- a/doc/classes/XRCamera3D.xml
+++ b/doc/classes/XRCamera3D.xml
@@ -8,6 +8,6 @@
The position and orientation of this node is automatically updated by the XR Server to represent the location of the HMD if such tracking is available and can thus be used by game logic. Note that, in contrast to the XR Controller, the render thread has access to the most up-to-date tracking data of the HMD and the location of the XRCamera3D can lag a few milliseconds behind what is used for rendering as a result.
</description>
<tutorials>
- <link title="VR documentation index">https://docs.godotengine.org/en/latest/tutorials/vr/index.html</link>
+ <link title="VR documentation index">$DOCS_URL/tutorials/vr/index.html</link>
</tutorials>
</class>
diff --git a/doc/classes/XRController3D.xml b/doc/classes/XRController3D.xml
index eb91196e00..0e2785f246 100644
--- a/doc/classes/XRController3D.xml
+++ b/doc/classes/XRController3D.xml
@@ -10,7 +10,7 @@
As many XR runtimes now use a configurable action map all inputs are named.
</description>
<tutorials>
- <link title="VR documentation index">https://docs.godotengine.org/en/latest/tutorials/vr/index.html</link>
+ <link title="VR documentation index">$DOCS_URL/tutorials/vr/index.html</link>
</tutorials>
<methods>
<method name="get_axis" qualifiers="const">
diff --git a/doc/classes/XRInterface.xml b/doc/classes/XRInterface.xml
index 7ae70f97a2..3b03447ed1 100644
--- a/doc/classes/XRInterface.xml
+++ b/doc/classes/XRInterface.xml
@@ -8,7 +8,7 @@
Interfaces should be written in such a way that simply enabling them will give us a working setup. You can query the available interfaces through [XRServer].
</description>
<tutorials>
- <link title="VR documentation index">https://docs.godotengine.org/en/latest/tutorials/vr/index.html</link>
+ <link title="VR documentation index">$DOCS_URL/tutorials/vr/index.html</link>
</tutorials>
<methods>
<method name="get_camera_feed_id">
diff --git a/doc/classes/XROrigin3D.xml b/doc/classes/XROrigin3D.xml
index 0d8acfeb1b..fc15102976 100644
--- a/doc/classes/XROrigin3D.xml
+++ b/doc/classes/XROrigin3D.xml
@@ -10,7 +10,7 @@
For example, if your character is driving a car, the XROrigin3D node should be a child node of this car. Or, if you're implementing a teleport system to move your character, you should change the position of this node.
</description>
<tutorials>
- <link title="VR documentation index">https://docs.godotengine.org/en/latest/tutorials/vr/index.html</link>
+ <link title="VR documentation index">$DOCS_URL/tutorials/vr/index.html</link>
</tutorials>
<members>
<member name="world_scale" type="float" setter="set_world_scale" getter="get_world_scale" default="1.0">
diff --git a/doc/classes/XRPositionalTracker.xml b/doc/classes/XRPositionalTracker.xml
index bd6a518835..439bcfc382 100644
--- a/doc/classes/XRPositionalTracker.xml
+++ b/doc/classes/XRPositionalTracker.xml
@@ -9,7 +9,7 @@
The [XRController3D] and [XRAnchor3D] both consume objects of this type and should be used in your project. The positional trackers are just under-the-hood objects that make this all work. These are mostly exposed so that GDExtension-based interfaces can interact with them.
</description>
<tutorials>
- <link title="VR documentation index">https://docs.godotengine.org/en/latest/tutorials/vr/index.html</link>
+ <link title="VR documentation index">$DOCS_URL/tutorials/vr/index.html</link>
</tutorials>
<methods>
<method name="get_input" qualifiers="const">
diff --git a/doc/classes/XRServer.xml b/doc/classes/XRServer.xml
index 87164ebb52..3a7fdea8d0 100644
--- a/doc/classes/XRServer.xml
+++ b/doc/classes/XRServer.xml
@@ -7,7 +7,7 @@
The AR/VR server is the heart of our Advanced and Virtual Reality solution and handles all the processing.
</description>
<tutorials>
- <link title="VR documentation index">https://docs.godotengine.org/en/latest/tutorials/vr/index.html</link>
+ <link title="VR documentation index">$DOCS_URL/tutorials/vr/index.html</link>
</tutorials>
<methods>
<method name="add_interface">
diff --git a/doc/classes/float.xml b/doc/classes/float.xml
index 8231173bac..c96360e6ba 100644
--- a/doc/classes/float.xml
+++ b/doc/classes/float.xml
@@ -72,7 +72,7 @@
<return type="Quaternion" />
<argument index="0" name="right" type="Quaternion" />
<description>
- Multiplies each component of the [Quaternion] by the given [float].
+ Multiplies each component of the [Quaternion] by the given [float]. This operation is not meaningful on its own, but it can be used as a part of a larger expression.
</description>
</operator>
<operator name="operator *">
@@ -81,7 +81,7 @@
<description>
Multiplies each component of the [Vector2] by the given [float].
[codeblock]
- print(2.5 * Vector2(1, 1)) # Vector2(2.5, 2.5)
+ print(2.5 * Vector2(1, 3)) # Prints "(2.5, 7.5)"
[/codeblock]
</description>
</operator>
@@ -89,9 +89,9 @@
<return type="Vector2i" />
<argument index="0" name="right" type="Vector2i" />
<description>
- Multiplies each component of the [Vector2i] by the given [float].
+ Multiplies each component of the [Vector2i] by the given [float] truncated to an integer.
[codeblock]
- print(2.0 * Vector2i(1, 1)) # Vector2i(2.0, 2.0)
+ print(0.9 * Vector2i(10, 20)) # Prints "(0, 0)"
[/codeblock]
</description>
</operator>
@@ -106,7 +106,10 @@
<return type="Vector3i" />
<argument index="0" name="right" type="Vector3i" />
<description>
- Multiplies each component of the [Vector3i] by the given [float].
+ Multiplies each component of the [Vector3i] by the given [float] truncated to an integer.
+ [codeblock]
+ print(0.9 * Vector3i(10, 20, 30)) # Prints "(0, 0, 0)"
+ [/codeblock]
</description>
</operator>
<operator name="operator *">
diff --git a/doc/classes/int.xml b/doc/classes/int.xml
index 94c2601e4a..bb36d83741 100644
--- a/doc/classes/int.xml
+++ b/doc/classes/int.xml
@@ -91,11 +91,11 @@
<return type="int" />
<argument index="0" name="right" type="int" />
<description>
- Returns the result of the modulo operator for two integers, i.e. the remainder after dividing both numbers.
+ Returns the remainder after dividing two integers. This operation uses truncated division, which is often not desired as it does not work well with negative numbers. Consider using [method @GlobalScope.posmod] instead if you want to handle negative numbers.
[codeblock]
print(5 % 2) # 1
print(12 % 4) # 0
- print(12 % 2) # 2
+ print(-5 % 3) # -2
[/codeblock]
</description>
</operator>
@@ -121,12 +121,14 @@
<return type="Color" />
<argument index="0" name="right" type="Color" />
<description>
+ Multiplies each component of the [Color] by the given [int].
</description>
</operator>
<operator name="operator *">
<return type="Quaternion" />
<argument index="0" name="right" type="Quaternion" />
<description>
+ Multiplies each component of the [Quaternion] by the given [int]. This operation is not meaningful on its own, but it can be used as a part of a larger expression.
</description>
</operator>
<operator name="operator *">
diff --git a/doc/tools/make_rst.py b/doc/tools/make_rst.py
index fe8083f218..b5e5cf8fa7 100755
--- a/doc/tools/make_rst.py
+++ b/doc/tools/make_rst.py
@@ -11,10 +11,8 @@ from collections import OrderedDict
# Uncomment to do type checks. I have it commented out so it works below Python 3.5
# from typing import List, Dict, TextIO, Tuple, Iterable, Optional, DefaultDict, Any, Union
-# http(s)://docs.godotengine.org/<langcode>/<tag>/path/to/page.html(#fragment-tag)
-GODOT_DOCS_PATTERN = re.compile(
- r"^http(?:s)?://docs\.godotengine\.org/(?:[a-zA-Z0-9.\-_]*)/(?:[a-zA-Z0-9.\-_]*)/(.*)\.html(#.*)?$"
-)
+# $DOCS_URL/path/to/page.html(#fragment-tag)
+GODOT_DOCS_PATTERN = re.compile(r"^\$DOCS_URL/(.*)\.html(#.*)?$")
def print_error(error, state): # type: (str, State) -> None
@@ -330,7 +328,7 @@ class State:
theme_item.text,
default_value,
)
- class_def.theme_items[theme_item_id] = theme_item_def
+ class_def.theme_items[theme_item_name] = theme_item_def
tutorials = class_root.find("tutorials")
if tutorials is not None:
@@ -857,16 +855,11 @@ def rstize_text(text, state): # type: (str, State) -> str
# Handle [tags]
inside_code = False
- inside_url = False
- url_has_name = False
- url_link = ""
pos = 0
tag_depth = 0
previous_pos = 0
while True:
pos = text.find("[", pos)
- if inside_url and (pos > previous_pos):
- url_has_name = True
if pos == -1:
break
@@ -912,6 +905,7 @@ def rstize_text(text, state): # type: (str, State) -> str
or cmd.startswith("member")
or cmd.startswith("signal")
or cmd.startswith("constant")
+ or cmd.startswith("theme_item")
):
param = tag_text[space_pos + 1 :]
@@ -948,6 +942,13 @@ def rstize_text(text, state): # type: (str, State) -> str
print_error("Unresolved member '{}', file: {}".format(param, state.current_class), state)
ref_type = "_property"
+ elif cmd.startswith("theme_item"):
+ if method_param not in class_def.theme_items:
+ print_error(
+ "Unresolved theme item '{}', file: {}".format(param, state.current_class), state
+ )
+ ref_type = "_theme_{}".format(class_def.theme_items[method_param].data_name)
+
elif cmd.startswith("signal"):
if method_param not in class_def.signals:
print_error("Unresolved signal '{}', file: {}".format(param, state.current_class), state)
@@ -995,17 +996,23 @@ def rstize_text(text, state): # type: (str, State) -> str
elif cmd.find("image=") == 0:
tag_text = "" # '![](' + cmd[6:] + ')'
elif cmd.find("url=") == 0:
- url_link = cmd[4:]
- tag_text = "`"
- tag_depth += 1
- inside_url = True
- url_has_name = False
- elif cmd == "/url":
- tag_text = ("" if url_has_name else url_link) + " <" + url_link + ">`__"
- tag_depth -= 1
- escape_post = True
- inside_url = False
- url_has_name = False
+ # URLs are handled in full here as we need to extract the optional link
+ # title to use `make_link`.
+ link_url = cmd[4:]
+ endurl_pos = text.find("[/url]", endq_pos + 1)
+ if endurl_pos == -1:
+ print_error(
+ "Tag depth mismatch for [url]: no closing [/url], file: {}".format(state.current_class), state
+ )
+ break
+ link_title = text[endq_pos + 1 : endurl_pos]
+ tag_text = make_link(link_url, link_title)
+
+ pre_text = text[:pos]
+ text = pre_text + tag_text + text[endurl_pos + 6 :]
+ pos = len(pre_text) + len(tag_text)
+ previous_pos = pos
+ continue
elif cmd == "center":
tag_depth += 1
tag_text = ""
@@ -1252,21 +1259,22 @@ def make_link(url, title): # type: (str, str) -> str
if match.lastindex == 2:
# Doc reference with fragment identifier: emit direct link to section with reference to page, for example:
# `#calling-javascript-from-script in Exporting For Web`
- return "`" + groups[1] + " <../" + groups[0] + ".html" + groups[1] + ">`_ in :doc:`../" + groups[0] + "`"
- # Commented out alternative: Instead just emit:
- # `Subsection in Exporting For Web`
- # return "`Subsection <../" + groups[0] + ".html" + groups[1] + ">`__ in :doc:`../" + groups[0] + "`"
+ # Or use the title if provided.
+ if title != "":
+ return "`" + title + " <../" + groups[0] + ".html" + groups[1] + ">`__"
+ return "`" + groups[1] + " <../" + groups[0] + ".html" + groups[1] + ">`__ in :doc:`../" + groups[0] + "`"
elif match.lastindex == 1:
# Doc reference, for example:
# `Math`
+ if title != "":
+ return ":doc:`" + title + " <../" + groups[0] + ">`"
return ":doc:`../" + groups[0] + "`"
else:
# External link, for example:
# `http://enet.bespin.org/usergroup0.html`
if title != "":
return "`" + title + " <" + url + ">`__"
- else:
- return "`" + url + " <" + url + ">`__"
+ return "`" + url + " <" + url + ">`__"
def sanitize_operator_name(dirty_name, state): # type: (str, State) -> str
diff --git a/doc/translations/ar.po b/doc/translations/ar.po
index 851d1f9b1a..c6dd82902f 100644
--- a/doc/translations/ar.po
+++ b/doc/translations/ar.po
@@ -3674,112 +3674,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4858,7 +4867,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -10258,17 +10267,21 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10277,24 +10290,24 @@ msgid ""
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10308,62 +10321,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10371,35 +10384,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10407,13 +10420,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10425,78 +10438,78 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
#, fuzzy
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr "ÙŠÙØ±Ø¬Ø¹ قيمة ظل الزاوية العكسي للمَعالم."
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:131
+#: doc/classes/BakedLightmap.xml:132
msgid ""
"Returns if lightmapper can't be created. Unless you are using a custom "
"lightmapper, please report this as bug."
msgstr ""
-#: doc/classes/BakedLightmap.xml:134
+#: doc/classes/BakedLightmap.xml:135
msgid ""
"There is no root node to start baking from. Either provide [code]from_node[/"
"code] argument or attach this node to a parent that should be used as root."
msgstr ""
-#: doc/classes/BakedLightmap.xml:137
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:140
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:143
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:146
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10952,8 +10965,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -24974,21 +24990,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -24997,14 +25024,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -25014,80 +25045,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -29306,7 +29337,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30619,7 +30652,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30684,22 +30718,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30714,7 +30750,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30722,19 +30758,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30805,7 +30841,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30863,7 +30900,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -34416,7 +34455,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37732,7 +37771,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37762,14 +37801,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37779,7 +37818,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40280,17 +40319,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40308,11 +40373,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40507,7 +40572,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41310,6 +41377,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41327,7 +41412,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41441,7 +41526,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -43986,24 +44073,30 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:282
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:285
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:288
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44013,7 +44106,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:291
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44023,27 +44116,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:294
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:297
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:300
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:303
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -44051,81 +44144,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:306
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:309
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:312
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:315
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:318
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:321
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:324
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:327
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:330
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:333
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:336
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:339
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:342
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -44133,109 +44226,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:345
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:348
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:351
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:354
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:357
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:360
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:363
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:366
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:369
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:372
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:375
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:378
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:381
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:384
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:387
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:390
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:393
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:396
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:399
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44246,91 +44339,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:404
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:407
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:410
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:413
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:416
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:419
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:422
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:425
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:428
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:431
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:434
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:437
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:440
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:443
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:446
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:449
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:452
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44339,13 +44432,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:456
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:459
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44355,7 +44448,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:464
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44363,19 +44456,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:469
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:473
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:477
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44389,45 +44482,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:482
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:485
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:489
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:492
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:495
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:498
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:501
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44436,7 +44529,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:504
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44447,7 +44540,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:508
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44463,14 +44556,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:516
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:519
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44478,49 +44571,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:522
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:525
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:530
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:533
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:536
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:539
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:542
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:545
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:548
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44529,7 +44622,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:552
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44537,7 +44630,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:556
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44545,7 +44638,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:560
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44555,7 +44648,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:564
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44564,7 +44657,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:568
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44573,7 +44666,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:572
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44583,7 +44676,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:576
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44591,7 +44684,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:580
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44601,7 +44694,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:584
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44611,7 +44704,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:588
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44619,7 +44712,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:592
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44628,7 +44721,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:596
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44636,7 +44729,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:600
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44648,477 +44741,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:606
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:609
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:612
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:615
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:618
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:621
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:624
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:627
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:630
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:633
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:636
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:639
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:642
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:645
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:648
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:651
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:654
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:657
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:660
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:663
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:666
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:669
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:672
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:675
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:678
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:681
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:684
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:687
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:690
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:693
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:696
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:699
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:702
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:705
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:708
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:711
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:714
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:717
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:720
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:723
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:726
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:729
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:732
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:735
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:738
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:741
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:744
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:747
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:750
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:753
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:756
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:759
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:762
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:765
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:768
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:771
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:774
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:777
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:780
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:783
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:786
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:789
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:792
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:795
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:798
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:801
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:804
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:807
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:810
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:813
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:816
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:819
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:822
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:825
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:828
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:831
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:834
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:837
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:840
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:843
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:846
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:849
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:852
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:855
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:858
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:861
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:864
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:867
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:870
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:873
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:876
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:879
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:882
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:885
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:888
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:891
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:894
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:897
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:900
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:903
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:906
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:909
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:912
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:915
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:918
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:921
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:924
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:927
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:930
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:933
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:936
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:939
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:942
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:947
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:950
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -45126,92 +45219,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:953
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:956
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:959
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:962
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:965
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:968
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:971
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:974
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:977
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:980
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:983
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:986
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:989
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:992
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:995
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:998
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1001
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1004
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -45221,33 +45314,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1008
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1011
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1014
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1018
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1022
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45260,7 +45353,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1026
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45272,7 +45365,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1034
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45284,7 +45377,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1042
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45297,7 +45390,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1046
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45305,28 +45398,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1050
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1054
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1057
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1060
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45336,25 +45429,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1064
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1067
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1070
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1073
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45367,7 +45460,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1077
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45379,7 +45472,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1085
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45391,7 +45484,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1093
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45404,13 +45497,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1097
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1100
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45418,11 +45511,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1104
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1107
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45436,7 +45529,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1113
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45445,7 +45538,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1117
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45461,7 +45554,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1122
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45471,7 +45564,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1126
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45481,7 +45574,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1130
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45492,7 +45585,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1134
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45502,7 +45595,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1138
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45510,7 +45603,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1142
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45521,7 +45614,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1146
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45536,7 +45629,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1152
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45545,13 +45638,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1157
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1160
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45560,7 +45653,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1163
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45570,7 +45663,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1166
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45582,7 +45675,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1169
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45592,24 +45685,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1172
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1175
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1178
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1181
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45618,7 +45711,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1184
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45626,7 +45719,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1187
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45635,7 +45728,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1190
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45645,7 +45738,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1194
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45653,31 +45746,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1198
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1201
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1204
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1207
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1210
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45685,7 +45778,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1213
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45695,21 +45788,21 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1216
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1219
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
"iOS specific override for [member rendering/gles2/compatibility/"
"disable_half_float], due to poor support for half-float vertex compression "
"on many devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
"If [code]true[/code] and available on the target Android device, enables "
"high floating point precision for all shader computations in GLES2.\n"
@@ -45717,31 +45810,31 @@ msgid ""
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1226
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1229
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1232
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1235
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1238
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45749,7 +45842,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1241
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45759,7 +45852,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1244
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45768,7 +45861,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1247
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45777,20 +45870,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1250
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1253
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1256
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45799,7 +45892,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1259
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45807,7 +45900,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45816,7 +45909,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1266
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45826,20 +45919,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1275
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45848,13 +45941,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45864,46 +45957,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1294
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1297
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1300
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1303
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1306
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45913,7 +46006,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45925,7 +46018,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1317
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45933,7 +46026,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45941,7 +46034,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1324
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45950,7 +46043,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1327
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45964,7 +46057,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1332
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45974,7 +46067,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1335
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45983,7 +46076,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1338
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45993,54 +46086,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1341
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1344
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1347
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1350
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1353
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1356
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1359
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -46051,61 +46144,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1366
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1369
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1372
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1375
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1378
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1381
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1384
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1387
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -46116,7 +46209,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1394
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -46125,26 +46218,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400
-#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1409
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1412
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -46155,20 +46248,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1419
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1426
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -46180,52 +46273,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1436
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1439
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1442
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1445
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1448
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1451
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1454
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -46233,7 +46326,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -46246,7 +46339,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46258,7 +46351,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46270,7 +46363,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46282,7 +46375,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46294,7 +46387,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1481
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46958,40 +47051,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46999,14 +47106,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49341,6 +49448,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49358,7 +49481,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49366,11 +49489,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49380,19 +49503,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54807,20 +54930,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54831,28 +54959,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54864,19 +54992,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
diff --git a/doc/translations/ca.po b/doc/translations/ca.po
index b8cdfc18a0..02a0705fef 100644
--- a/doc/translations/ca.po
+++ b/doc/translations/ca.po
@@ -3701,112 +3701,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4882,7 +4891,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -10264,15 +10273,19 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10281,24 +10294,24 @@ msgid ""
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10312,62 +10325,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10375,35 +10388,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10411,13 +10424,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10429,77 +10442,77 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr ""
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:131
+#: doc/classes/BakedLightmap.xml:132
msgid ""
"Returns if lightmapper can't be created. Unless you are using a custom "
"lightmapper, please report this as bug."
msgstr ""
-#: doc/classes/BakedLightmap.xml:134
+#: doc/classes/BakedLightmap.xml:135
msgid ""
"There is no root node to start baking from. Either provide [code]from_node[/"
"code] argument or attach this node to a parent that should be used as root."
msgstr ""
-#: doc/classes/BakedLightmap.xml:137
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:140
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:143
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:146
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10949,8 +10962,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -24928,20 +24944,31 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -24950,14 +24977,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -24967,80 +24998,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -29244,7 +29275,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30550,7 +30583,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30615,22 +30649,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30645,7 +30681,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30653,19 +30689,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30735,7 +30771,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30793,7 +30830,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -34327,7 +34366,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37630,7 +37669,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37660,14 +37699,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37677,7 +37716,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40157,17 +40196,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40185,11 +40250,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40384,7 +40449,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41186,6 +41253,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41203,7 +41288,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41317,7 +41402,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -43857,24 +43944,30 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:282
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:285
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:288
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43884,7 +43977,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:291
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43894,27 +43987,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:294
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:297
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:300
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:303
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -43922,81 +44015,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:306
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:309
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:312
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:315
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:318
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:321
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:324
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:327
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:330
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:333
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:336
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:339
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:342
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -44004,109 +44097,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:345
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:348
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:351
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:354
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:357
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:360
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:363
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:366
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:369
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:372
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:375
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:378
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:381
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:384
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:387
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:390
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:393
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:396
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:399
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44117,91 +44210,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:404
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:407
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:410
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:413
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:416
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:419
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:422
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:425
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:428
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:431
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:434
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:437
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:440
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:443
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:446
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:449
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:452
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44210,13 +44303,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:456
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:459
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44226,7 +44319,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:464
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44234,19 +44327,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:469
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:473
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:477
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44260,45 +44353,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:482
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:485
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:489
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:492
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:495
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:498
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:501
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44307,7 +44400,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:504
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44318,7 +44411,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:508
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44334,14 +44427,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:516
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:519
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44349,49 +44442,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:522
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:525
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:530
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:533
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:536
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:539
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:542
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:545
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:548
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44400,7 +44493,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:552
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44408,7 +44501,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:556
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44416,7 +44509,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:560
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44426,7 +44519,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:564
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44435,7 +44528,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:568
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44444,7 +44537,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:572
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44454,7 +44547,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:576
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44462,7 +44555,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:580
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44472,7 +44565,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:584
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44482,7 +44575,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:588
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44490,7 +44583,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:592
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44499,7 +44592,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:596
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44507,7 +44600,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:600
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44519,477 +44612,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:606
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:609
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:612
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:615
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:618
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:621
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:624
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:627
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:630
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:633
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:636
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:639
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:642
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:645
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:648
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:651
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:654
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:657
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:660
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:663
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:666
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:669
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:672
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:675
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:678
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:681
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:684
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:687
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:690
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:693
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:696
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:699
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:702
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:705
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:708
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:711
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:714
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:717
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:720
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:723
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:726
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:729
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:732
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:735
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:738
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:741
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:744
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:747
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:750
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:753
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:756
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:759
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:762
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:765
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:768
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:771
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:774
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:777
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:780
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:783
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:786
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:789
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:792
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:795
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:798
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:801
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:804
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:807
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:810
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:813
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:816
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:819
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:822
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:825
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:828
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:831
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:834
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:837
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:840
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:843
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:846
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:849
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:852
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:855
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:858
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:861
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:864
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:867
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:870
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:873
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:876
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:879
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:882
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:885
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:888
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:891
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:894
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:897
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:900
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:903
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:906
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:909
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:912
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:915
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:918
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:921
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:924
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:927
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:930
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:933
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:936
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:939
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:942
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:947
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:950
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -44997,92 +45090,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:953
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:956
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:959
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:962
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:965
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:968
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:971
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:974
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:977
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:980
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:983
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:986
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:989
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:992
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:995
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:998
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1001
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1004
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -45092,33 +45185,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1008
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1011
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1014
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1018
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1022
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45131,7 +45224,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1026
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45143,7 +45236,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1034
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45155,7 +45248,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1042
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45168,7 +45261,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1046
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45176,28 +45269,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1050
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1054
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1057
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1060
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45207,25 +45300,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1064
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1067
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1070
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1073
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45238,7 +45331,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1077
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45250,7 +45343,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1085
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45262,7 +45355,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1093
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45275,13 +45368,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1097
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1100
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45289,11 +45382,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1104
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1107
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45307,7 +45400,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1113
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45316,7 +45409,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1117
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45332,7 +45425,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1122
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45342,7 +45435,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1126
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45352,7 +45445,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1130
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45363,7 +45456,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1134
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45373,7 +45466,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1138
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45381,7 +45474,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1142
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45392,7 +45485,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1146
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45407,7 +45500,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1152
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45416,13 +45509,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1157
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1160
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45431,7 +45524,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1163
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45441,7 +45534,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1166
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45453,7 +45546,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1169
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45463,24 +45556,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1172
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1175
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1178
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1181
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45489,7 +45582,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1184
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45497,7 +45590,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1187
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45506,7 +45599,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1190
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45516,7 +45609,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1194
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45524,31 +45617,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1198
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1201
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1204
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1207
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1210
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45556,7 +45649,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1213
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45566,21 +45659,21 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1216
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1219
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
"iOS specific override for [member rendering/gles2/compatibility/"
"disable_half_float], due to poor support for half-float vertex compression "
"on many devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
"If [code]true[/code] and available on the target Android device, enables "
"high floating point precision for all shader computations in GLES2.\n"
@@ -45588,31 +45681,31 @@ msgid ""
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1226
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1229
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1232
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1235
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1238
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45620,7 +45713,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1241
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45630,7 +45723,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1244
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45639,7 +45732,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1247
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45648,20 +45741,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1250
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1253
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1256
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45670,7 +45763,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1259
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45678,7 +45771,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45687,7 +45780,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1266
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45697,20 +45790,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1275
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45719,13 +45812,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45735,46 +45828,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1294
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1297
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1300
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1303
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1306
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45784,7 +45877,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45796,7 +45889,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1317
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45804,7 +45897,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45812,7 +45905,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1324
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45821,7 +45914,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1327
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45835,7 +45928,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1332
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45845,7 +45938,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1335
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45854,7 +45947,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1338
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45864,54 +45957,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1341
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1344
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1347
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1350
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1353
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1356
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1359
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -45922,61 +46015,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1366
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1369
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1372
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1375
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1378
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1381
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1384
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1387
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -45987,7 +46080,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1394
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -45996,26 +46089,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400
-#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1409
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1412
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -46026,20 +46119,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1419
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1426
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -46051,52 +46144,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1436
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1439
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1442
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1445
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1448
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1451
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1454
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -46104,7 +46197,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -46117,7 +46210,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46129,7 +46222,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46141,7 +46234,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46153,7 +46246,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46165,7 +46258,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1481
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46828,40 +46921,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46869,14 +46976,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49206,6 +49313,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49223,7 +49346,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49231,11 +49354,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49245,19 +49368,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54656,20 +54779,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54680,28 +54808,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54713,19 +54841,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
diff --git a/doc/translations/classes.pot b/doc/translations/classes.pot
index 1a3b510515..337c57fe7c 100644
--- a/doc/translations/classes.pot
+++ b/doc/translations/classes.pot
@@ -3581,112 +3581,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4758,7 +4767,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -10135,15 +10144,19 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10152,24 +10165,24 @@ msgid ""
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10183,62 +10196,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10246,35 +10259,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10282,13 +10295,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10300,77 +10313,77 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr ""
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:131
+#: doc/classes/BakedLightmap.xml:132
msgid ""
"Returns if lightmapper can't be created. Unless you are using a custom "
"lightmapper, please report this as bug."
msgstr ""
-#: doc/classes/BakedLightmap.xml:134
+#: doc/classes/BakedLightmap.xml:135
msgid ""
"There is no root node to start baking from. Either provide [code]from_node[/"
"code] argument or attach this node to a parent that should be used as root."
msgstr ""
-#: doc/classes/BakedLightmap.xml:137
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:140
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:143
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:146
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10818,8 +10831,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -24764,20 +24780,31 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr ""
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -24786,14 +24813,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -24803,80 +24834,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -29069,7 +29100,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30368,7 +30401,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30433,22 +30467,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30463,7 +30499,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30471,19 +30507,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30551,7 +30587,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30609,7 +30646,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -34134,7 +34173,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37429,7 +37468,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37459,14 +37498,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37476,7 +37515,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -39954,17 +39993,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -39982,11 +40047,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40181,7 +40246,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -40983,6 +41050,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41000,7 +41085,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41114,7 +41199,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -43654,24 +43741,30 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:282
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:285
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:288
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43681,7 +43774,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:291
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43691,27 +43784,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:294
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:297
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:300
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:303
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -43719,81 +43812,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:306
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:309
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:312
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:315
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:318
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:321
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:324
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:327
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:330
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:333
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:336
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:339
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:342
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -43801,109 +43894,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:345
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:348
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:351
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:354
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:357
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:360
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:363
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:366
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:369
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:372
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:375
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:378
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:381
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:384
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:387
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:390
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:393
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:396
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:399
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -43914,91 +44007,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:404
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:407
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:410
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:413
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:416
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:419
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:422
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:425
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:428
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:431
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:434
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:437
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:440
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:443
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:446
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:449
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:452
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44007,13 +44100,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:456
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:459
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44023,7 +44116,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:464
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44031,19 +44124,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:469
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:473
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:477
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44057,45 +44150,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:482
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:485
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:489
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:492
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:495
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:498
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:501
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44104,7 +44197,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:504
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44115,7 +44208,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:508
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44131,14 +44224,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:516
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:519
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44146,49 +44239,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:522
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:525
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:530
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:533
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:536
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:539
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:542
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:545
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:548
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44197,7 +44290,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:552
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44205,7 +44298,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:556
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44213,7 +44306,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:560
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44223,7 +44316,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:564
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44232,7 +44325,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:568
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44241,7 +44334,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:572
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44251,7 +44344,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:576
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44259,7 +44352,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:580
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44269,7 +44362,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:584
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44279,7 +44372,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:588
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44287,7 +44380,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:592
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44296,7 +44389,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:596
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44304,7 +44397,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:600
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44316,477 +44409,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:606
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:609
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:612
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:615
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:618
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:621
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:624
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:627
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:630
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:633
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:636
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:639
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:642
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:645
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:648
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:651
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:654
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:657
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:660
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:663
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:666
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:669
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:672
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:675
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:678
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:681
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:684
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:687
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:690
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:693
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:696
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:699
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:702
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:705
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:708
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:711
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:714
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:717
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:720
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:723
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:726
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:729
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:732
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:735
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:738
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:741
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:744
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:747
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:750
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:753
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:756
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:759
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:762
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:765
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:768
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:771
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:774
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:777
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:780
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:783
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:786
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:789
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:792
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:795
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:798
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:801
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:804
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:807
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:810
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:813
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:816
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:819
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:822
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:825
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:828
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:831
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:834
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:837
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:840
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:843
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:846
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:849
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:852
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:855
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:858
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:861
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:864
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:867
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:870
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:873
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:876
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:879
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:882
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:885
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:888
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:891
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:894
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:897
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:900
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:903
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:906
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:909
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:912
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:915
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:918
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:921
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:924
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:927
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:930
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:933
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:936
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:939
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:942
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:947
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:950
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -44794,92 +44887,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:953
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:956
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:959
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:962
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:965
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:968
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:971
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:974
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:977
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:980
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:983
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:986
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:989
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:992
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:995
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:998
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1001
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1004
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -44889,33 +44982,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1008
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1011
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1014
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1018
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1022
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44928,7 +45021,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1026
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44940,7 +45033,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1034
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44952,7 +45045,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1042
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44965,7 +45058,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1046
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -44973,28 +45066,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1050
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1054
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1057
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1060
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45004,25 +45097,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1064
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1067
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1070
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1073
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45035,7 +45128,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1077
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45047,7 +45140,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1085
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45059,7 +45152,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1093
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45072,13 +45165,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1097
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1100
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45086,11 +45179,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1104
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1107
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45104,7 +45197,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1113
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45113,7 +45206,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1117
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45129,7 +45222,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1122
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45139,7 +45232,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1126
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45149,7 +45242,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1130
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45160,7 +45253,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1134
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45170,7 +45263,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1138
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45178,7 +45271,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1142
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45189,7 +45282,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1146
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45204,7 +45297,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1152
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45213,13 +45306,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1157
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1160
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45228,7 +45321,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1163
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45238,7 +45331,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1166
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45250,7 +45343,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1169
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45260,24 +45353,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1172
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1175
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1178
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1181
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45286,7 +45379,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1184
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45294,7 +45387,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1187
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45303,7 +45396,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1190
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45313,7 +45406,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1194
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45321,31 +45414,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1198
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1201
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1204
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1207
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1210
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45353,7 +45446,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1213
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45363,21 +45456,21 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1216
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1219
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
"iOS specific override for [member rendering/gles2/compatibility/"
"disable_half_float], due to poor support for half-float vertex compression "
"on many devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
"If [code]true[/code] and available on the target Android device, enables "
"high floating point precision for all shader computations in GLES2.\n"
@@ -45385,31 +45478,31 @@ msgid ""
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1226
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1229
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1232
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1235
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1238
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45417,7 +45510,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1241
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45427,7 +45520,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1244
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45436,7 +45529,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1247
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45445,20 +45538,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1250
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1253
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1256
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45467,7 +45560,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1259
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45475,7 +45568,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45484,7 +45577,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1266
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45494,20 +45587,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1275
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45516,13 +45609,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45532,46 +45625,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1294
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1297
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1300
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1303
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1306
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45581,7 +45674,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45593,7 +45686,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1317
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45601,7 +45694,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45609,7 +45702,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1324
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45618,7 +45711,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1327
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45632,7 +45725,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1332
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45642,7 +45735,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1335
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45651,7 +45744,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1338
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45661,54 +45754,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1341
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1344
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1347
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1350
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1353
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1356
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1359
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -45719,61 +45812,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1366
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1369
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1372
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1375
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1378
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1381
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1384
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1387
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -45784,7 +45877,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1394
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -45793,26 +45886,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400
-#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1409
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1412
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -45823,20 +45916,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1419
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1426
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -45848,52 +45941,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1436
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1439
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1442
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1445
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1448
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1451
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1454
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -45901,7 +45994,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -45914,7 +46007,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -45926,7 +46019,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -45938,7 +46031,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -45950,7 +46043,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -45962,7 +46055,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1481
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46621,40 +46714,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46662,14 +46769,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -48996,6 +49103,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49013,7 +49136,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49021,11 +49144,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49035,19 +49158,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54432,20 +54555,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54456,28 +54584,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54489,19 +54617,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
diff --git a/doc/translations/cs.po b/doc/translations/cs.po
index b8efd526d8..f8a912bf24 100644
--- a/doc/translations/cs.po
+++ b/doc/translations/cs.po
@@ -4093,112 +4093,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -5276,7 +5285,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -10676,17 +10685,21 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10695,24 +10708,24 @@ msgid ""
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10726,62 +10739,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10789,35 +10802,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10825,13 +10838,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10843,78 +10856,78 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
#, fuzzy
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr "Vrátí arkus tangent parametrů."
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:131
+#: doc/classes/BakedLightmap.xml:132
msgid ""
"Returns if lightmapper can't be created. Unless you are using a custom "
"lightmapper, please report this as bug."
msgstr ""
-#: doc/classes/BakedLightmap.xml:134
+#: doc/classes/BakedLightmap.xml:135
msgid ""
"There is no root node to start baking from. Either provide [code]from_node[/"
"code] argument or attach this node to a parent that should be used as root."
msgstr ""
-#: doc/classes/BakedLightmap.xml:137
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:140
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:143
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:146
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -11365,8 +11378,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -25408,21 +25424,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -25431,14 +25458,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -25448,80 +25479,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -29744,7 +29775,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -31057,7 +31090,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -31122,22 +31156,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -31152,7 +31188,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -31160,19 +31196,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -31243,7 +31279,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -31301,7 +31338,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -34854,7 +34893,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -38172,7 +38211,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -38202,14 +38241,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -38219,7 +38258,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40726,17 +40765,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40754,11 +40819,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40953,7 +41018,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41756,6 +41823,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41773,7 +41858,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41887,7 +41972,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -44433,24 +44520,30 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:282
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:285
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:288
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44460,7 +44553,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:291
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44470,27 +44563,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:294
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:297
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:300
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:303
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -44498,81 +44591,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:306
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:309
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:312
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:315
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:318
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:321
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:324
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:327
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:330
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:333
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:336
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:339
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:342
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -44580,109 +44673,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:345
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:348
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:351
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:354
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:357
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:360
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:363
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:366
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:369
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:372
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:375
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:378
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:381
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:384
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:387
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:390
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:393
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:396
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:399
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44693,91 +44786,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:404
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:407
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:410
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:413
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:416
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:419
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:422
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:425
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:428
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:431
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:434
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:437
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:440
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:443
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:446
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:449
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:452
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44786,13 +44879,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:456
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:459
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44802,7 +44895,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:464
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44810,19 +44903,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:469
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:473
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:477
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44836,45 +44929,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:482
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:485
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:489
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:492
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:495
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:498
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:501
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44883,7 +44976,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:504
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44894,7 +44987,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:508
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44910,14 +45003,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:516
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:519
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44925,49 +45018,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:522
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:525
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:530
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:533
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:536
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:539
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:542
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:545
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:548
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44976,7 +45069,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:552
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44984,7 +45077,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:556
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44992,7 +45085,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:560
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -45002,7 +45095,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:564
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -45011,7 +45104,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:568
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -45020,7 +45113,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:572
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -45030,7 +45123,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:576
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45038,7 +45131,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:580
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -45048,7 +45141,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:584
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -45058,7 +45151,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:588
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45066,7 +45159,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:592
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -45075,7 +45168,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:596
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45083,7 +45176,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:600
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -45095,477 +45188,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:606
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:609
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:612
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:615
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:618
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:621
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:624
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:627
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:630
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:633
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:636
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:639
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:642
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:645
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:648
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:651
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:654
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:657
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:660
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:663
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:666
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:669
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:672
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:675
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:678
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:681
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:684
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:687
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:690
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:693
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:696
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:699
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:702
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:705
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:708
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:711
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:714
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:717
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:720
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:723
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:726
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:729
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:732
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:735
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:738
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:741
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:744
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:747
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:750
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:753
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:756
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:759
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:762
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:765
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:768
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:771
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:774
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:777
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:780
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:783
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:786
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:789
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:792
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:795
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:798
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:801
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:804
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:807
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:810
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:813
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:816
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:819
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:822
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:825
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:828
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:831
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:834
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:837
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:840
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:843
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:846
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:849
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:852
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:855
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:858
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:861
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:864
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:867
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:870
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:873
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:876
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:879
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:882
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:885
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:888
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:891
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:894
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:897
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:900
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:903
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:906
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:909
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:912
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:915
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:918
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:921
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:924
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:927
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:930
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:933
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:936
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:939
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:942
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:947
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:950
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -45573,92 +45666,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:953
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:956
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:959
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:962
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:965
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:968
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:971
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:974
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:977
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:980
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:983
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:986
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:989
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:992
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:995
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:998
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1001
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1004
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -45668,33 +45761,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1008
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1011
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1014
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1018
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1022
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45707,7 +45800,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1026
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45719,7 +45812,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1034
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45731,7 +45824,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1042
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45744,7 +45837,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1046
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45752,28 +45845,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1050
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1054
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1057
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1060
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45783,25 +45876,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1064
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1067
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1070
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1073
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45814,7 +45907,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1077
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45826,7 +45919,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1085
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45838,7 +45931,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1093
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45851,13 +45944,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1097
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1100
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45865,11 +45958,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1104
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1107
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45883,7 +45976,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1113
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45892,7 +45985,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1117
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45908,7 +46001,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1122
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45918,7 +46011,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1126
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45928,7 +46021,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1130
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45939,7 +46032,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1134
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45949,7 +46042,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1138
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45957,7 +46050,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1142
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45968,7 +46061,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1146
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45983,7 +46076,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1152
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45992,13 +46085,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1157
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1160
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -46007,7 +46100,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1163
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -46017,7 +46110,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1166
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -46029,7 +46122,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1169
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -46039,24 +46132,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1172
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1175
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1178
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1181
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -46065,7 +46158,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1184
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -46073,7 +46166,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1187
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -46082,7 +46175,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1190
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -46092,7 +46185,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1194
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -46100,31 +46193,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1198
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1201
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1204
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1207
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1210
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -46132,7 +46225,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1213
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -46142,21 +46235,21 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1216
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1219
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
"iOS specific override for [member rendering/gles2/compatibility/"
"disable_half_float], due to poor support for half-float vertex compression "
"on many devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
"If [code]true[/code] and available on the target Android device, enables "
"high floating point precision for all shader computations in GLES2.\n"
@@ -46164,31 +46257,31 @@ msgid ""
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1226
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1229
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1232
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1235
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1238
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -46196,7 +46289,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1241
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -46206,7 +46299,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1244
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -46215,7 +46308,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1247
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -46224,20 +46317,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1250
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1253
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1256
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -46246,7 +46339,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1259
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -46254,7 +46347,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -46263,7 +46356,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1266
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -46273,20 +46366,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1275
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -46295,13 +46388,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -46311,46 +46404,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1294
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1297
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1300
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1303
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1306
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -46360,7 +46453,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -46372,7 +46465,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1317
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -46380,7 +46473,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -46388,7 +46481,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1324
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -46397,7 +46490,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1327
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -46411,7 +46504,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1332
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -46421,7 +46514,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1335
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -46430,7 +46523,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1338
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -46440,54 +46533,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1341
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1344
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1347
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1350
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1353
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1356
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1359
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -46498,61 +46591,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1366
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1369
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1372
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1375
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1378
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1381
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1384
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1387
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -46563,7 +46656,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1394
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -46572,26 +46665,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400
-#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1409
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1412
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -46602,20 +46695,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1419
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1426
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -46627,52 +46720,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1436
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1439
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1442
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1445
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1448
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1451
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1454
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -46680,7 +46773,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -46693,7 +46786,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46705,7 +46798,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46717,7 +46810,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46729,7 +46822,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46741,7 +46834,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1481
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -47407,40 +47500,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -47448,14 +47555,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49789,6 +49896,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49806,7 +49929,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49814,11 +49937,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49828,19 +49951,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -55262,20 +55385,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -55286,28 +55414,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -55319,19 +55447,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
diff --git a/doc/translations/de.po b/doc/translations/de.po
index a1c3b07d23..61fe8213cc 100644
--- a/doc/translations/de.po
+++ b/doc/translations/de.po
@@ -34,12 +34,16 @@
# jmih03 <joerni@mail.de>, 2021.
# spoadr <spoadr@gmx.ch>, 2021.
# Tim <tim14speckenwirth@gmail.com>, 2021.
+# user <online141@gmx.de>, 2021.
+# Jummit <jummit@web.de>, 2021.
+# Bastian <bastian.ike@gmail.com>, 2021.
+# KuhnChris <kuhnchris@kuhnchris.eu>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-10-31 22:17+0000\n"
-"Last-Translator: Tim <tim14speckenwirth@gmail.com>\n"
+"PO-Revision-Date: 2021-11-18 13:37+0000\n"
+"Last-Translator: KuhnChris <kuhnchris@kuhnchris.eu>\n"
"Language-Team: German <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/de/>\n"
"Language: de\n"
@@ -47,7 +51,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -55,7 +59,7 @@ msgstr "Beschreibung"
#: doc/tools/make_rst.py
msgid "Tutorials"
-msgstr "Tutorials"
+msgstr "Anleitungen"
#: doc/tools/make_rst.py
msgid "Properties"
@@ -153,14 +157,13 @@ msgid ""
"a = abs(-1) # a is 1\n"
"[/codeblock]"
msgstr ""
-"Gibt den absoluten Wert des Parameters [code]s[/code] zurück (d.h. positiver "
-"Wert).\n"
+"Gibt den absoluten Wert des Parameters [code]s[/code] zurück (d.h. "
+"vorzeichenloser Wert).\n"
"[codeblock]\n"
"a = abs(-1) # a ist 1\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:55
-#, fuzzy
msgid ""
"Returns the arc cosine of [code]s[/code] in radians. Use to get the angle of "
"cosine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and "
@@ -171,15 +174,16 @@ msgid ""
"c = acos(0.866025)\n"
"[/codeblock]"
msgstr ""
-"Gibt den Bogenkosinus von [code]s[/code] in Bogenmaß zurück. Verwenden Sie "
-"diese Funktion, um den Winkel des Kosinus [code]s[/code] zu erhalten.\n"
+"Gibt den Arkuskosinus von [code]s[/code] in Bogenmaß zurück. Verwenden Sie "
+"diese Funktion, um den Winkel des Kosinus [code]s[/code] zu erhalten. "
+"[code]s[/code] muss zwischen [code]-1.0[/code] und [code]1.0[/code] "
+"(inklusiv) liegen, sonst wird [method acos] [constant NAN] zurückgeben.\n"
"[Codeblock]\n"
"# c ist 0,523599 oder 30 Grad, wenn mit rad2deg(s) umgerechnet\n"
"c = acos(0,866025)\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:66
-#, fuzzy
msgid ""
"Returns the arc sine of [code]s[/code] in radians. Use to get the angle of "
"sine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and "
@@ -190,15 +194,16 @@ msgid ""
"s = asin(0.5)\n"
"[/codeblock]"
msgstr ""
-"Gibt den Arcussinus von [code]s[/code] in Bogenmaß zurück. Verwenden Sie "
-"diese Funktion, um den Sinuswinkel [code]s[/code] zu erhalten.\n"
+"Gibt den Arkussinus von [code]s[/code] in Bogenmaß zurück. Verwenden Sie "
+"diese Funktion, um den Sinuswinkel [code]s[/code] zu erhalten. [code]s[/"
+"code] muss zwischen [code]-1.0[/code] und [code]1.0[/code] (inklusiv) "
+"liegen, sonst wird [method asin] [constant NAN] zurückgeben.\n"
"[Codeblock]\n"
"# s ist 0,523599 oder 30 Grad, wenn mit rad2deg(s) umgerechnet\n"
"s = asin(0,5)\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:78
-#, fuzzy
msgid ""
"Asserts that the [code]condition[/code] is [code]true[/code]. If the "
"[code]condition[/code] is [code]false[/code], an error is generated. When "
@@ -224,25 +229,27 @@ msgid ""
"a message with clarifying details\n"
"[/codeblock]"
msgstr ""
-"Stellt sicher, dass [code]Bedingung[/code] ist [code]true[/code]. Wenn "
-"[code]condition[/code] ist [code]false[/code], wird ein Fehler erzeugt, und "
-"das Programm wird angehalten, bis Sie es wieder aufnehmen. Wird nur in Debug-"
-"Builds oder beim Ausführen des Spiels vom Editor aus ausgeführt. Verwenden "
-"Sie sie für Debugging-Zwecke, um sicherzustellen, dass eine Aussage während "
-"der Entwicklung [code]true[/code] ist.\n"
-"Das optionale Argument [code]message[/code] wird, falls angegeben, "
-"zusätzlich zu der allgemeinen Meldung \"Zusicherung fehlgeschlagen\" "
-"angezeigt. Sie können dies verwenden, um zusätzliche Einzelheiten darüber "
-"anzugeben, warum die Zusicherung fehlgeschlagen ist.\n"
+"Stellt sicher, dass [code]condition[/code] [code]true[/code] ist. Wenn "
+"[code]condition[/code] [code]false[/code] ist wird ein Fehler erzeugt. Wenn "
+"das Spiel vom Editor aus gestartet wurde wird es außerdem pausiert. Zum "
+"Fortfahren muss es vom Editor aus fortgesetzt werden.\n"
+"[b]Hinweis:[/b] Der Code innerhalb von [method assert] wird nur in Debug-"
+"Builds oder beim Ausführen des Spiels vom Editor ausgeführt. Desswegen "
+"sollte kein Code mit Nebeneffekten (z.B.: ändern von Variablen) innerhalb "
+"der Argumente von [method assert] genutzt werden. Sonst wird sich das Spiel "
+"in exportierten Versionen anders verhalten als im Editor.\n"
+"Das optionale Argument [code]message[/code] wird, zusätzlich zu der "
+"allgemeinen Fehlermeldung angezeigt. Das kann verwendet werden um genauere "
+"Informationen zum Grund des Fehlers zu geben.\n"
"[codeblock]\n"
"# Angenommen, wir wollen immer eine Geschwindigkeit zwischen 0 und 20\n"
-"Geschwindigkeit = -10\n"
-"assert(Geschwindigkeit < 20) # Wahr, das Programm wird fortgesetzt\n"
-"assert(speed >= 0) # Falsch, das Programm wird gestoppt\n"
-"assert(speed >= 0 && speed < 20) # Sie können die beiden bedingten "
-"Anweisungen auch in einer Prüfung kombinieren\n"
-"assert(Geschwindigkeit < 20, \"Geschwindigkeit = %f, aber die "
-"Geschwindigkeitsbegrenzung beträgt 20\" % Geschwindigkeit) # Zeigt eine "
+"var geschwindigkeit = -10\n"
+"assert(geschwindigkeit < 20) # Wahr, das Programm wird fortgesetzt\n"
+"assert(geschwindigkeit >= 0) # Falsch, das Programm wird gestoppt\n"
+"assert(geschwindigkeit >= 0 and geschwindigkeit < 20) # Zwei Aussagen können "
+"in einer Prüfung zusammengefasst werden\n"
+"assert(geschwindigkeit < 20, \"Geschwindigkeit = %f, aber die "
+"Geschwindigkeitsbegrenzung beträgt 20\" % geschwindigkeit) # Zeigt eine "
"Nachricht mit klärenden Details\n"
"[/codeblock]"
@@ -351,7 +358,6 @@ msgstr ""
"Dies ist die Umkehrung von [method ord]."
#: modules/gdscript/doc_classes/@GDScript.xml:162
-#, fuzzy
msgid ""
"Clamps [code]value[/code] and returns a value not less than [code]min[/code] "
"and not more than [code]max[/code].\n"
@@ -364,13 +370,9 @@ msgstr ""
"Klammert [code]Wert[/code] und gibt einen Wert von nicht weniger als "
"[code]min[/code] und nicht mehr als [code]max[/code] zurück.\n"
"[codeblock]\n"
-"speed = 1000\n"
-"# a is 20\n"
-"a = clamp(speed, 1, 20)\n"
-"\n"
-"speed = -10\n"
-"# a is 1\n"
-"a = clamp(speed, 1, 20)\n"
+"a = clamp(1000, 1, 20) # a ist 20\n"
+"a = clamp(-10, 1, 20) # a ist 1\n"
+"a = clamp(15, 1, 20) # a ist 15\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:175
@@ -398,7 +400,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:190
-#, fuzzy
msgid ""
"Returns the cosine of angle [code]s[/code] in radians.\n"
"[codeblock]\n"
@@ -406,13 +407,13 @@ msgid ""
"a = cos(PI) # a is -1.0\n"
"[/codeblock]"
msgstr ""
-"Gibt den Sinus des Winkels [code]s[/code] in Radiant zurück.\n"
+"Gibt den Cosinus des Winkels [code]s[/code] in Radiant zurück.\n"
"[codeblock]\n"
-"sin(0.523599) # Returns 0.5\n"
+"a = cos(TAU) # a ist 1.0\n"
+"a = cos(PI) # a ist -1.0\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:201
-#, fuzzy
msgid ""
"Returns the hyperbolic cosine of [code]s[/code] in radians.\n"
"[codeblock]\n"
@@ -421,8 +422,7 @@ msgid ""
msgstr ""
"Gibt den hyperbolischen Kosinus von [code]s[/code] in Bogenmaß zurück.\n"
"[codeblock]\n"
-"# Prints 1.543081\n"
-"print(cosh(1))\n"
+"print(cosh(1)) # Gibt 1.543081 aus\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:211
@@ -434,7 +434,6 @@ msgid "Deprecated alias for [method step_decimals]."
msgstr "Veralteter Alias für [method step_decimals]."
#: modules/gdscript/doc_classes/@GDScript.xml:227
-#, fuzzy
msgid ""
"[b]Note:[/b] [code]dectime[/code] has been deprecated and will be removed in "
"Godot 4.0, please use [method move_toward] instead.\n"
@@ -444,15 +443,15 @@ msgid ""
"a = dectime(60, 10, 0.1)) # a is 59.0\n"
"[/codeblock]"
msgstr ""
-"Gibt das Ergebnis von [code]Wert[/code] vermindert um [code]Schritt[/code] * "
-"[code]Betrag[/code] zurück.\n"
+"[b]Hinweis:[/b] [code]dectime[/code] ist veraltet und wird in Godot 4.0 "
+"entfernt. [method move_toward] kann stattdessen verwendet werden.\n"
+"Gibt das Ergebnis von [code]value[/code] vermindert um [code]step[/code] * "
+"[code]amount[/code] zurück.\n"
"[codeblock]\n"
-"# a = 59\n"
-"a = dectime(60, 10, 0.1))\n"
+"a = dectime(60, 10, 0.1)) # a ist 59.0\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:238
-#, fuzzy
msgid ""
"Converts an angle expressed in degrees to radians.\n"
"[codeblock]\n"
@@ -462,20 +461,19 @@ msgstr ""
"Rechnet einen im Gradmaß vorliegenden Winkel ins Bogenmaß um und gibt das "
"Ergebnis zurück.\n"
"[codeblock]\n"
-"# r is 3.141593\n"
-"r = deg2rad(180)\n"
+"r = deg2rad(180) # r ist 3.141593\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:248
-#, fuzzy
msgid ""
"Converts a dictionary (previously created with [method inst2dict]) back to "
"an instance. Useful for deserializing."
msgstr ""
-"Konvertiert eine zuvor konvertierte Instanz in ein Wörterbuch, zurück in "
-"eine Instanz. Nützlich für die Deserialisierung."
+"Konvertiert ein Wörterbuch (das zuvor mit [method inst2dict] erstellt wurde) "
+"zurück in eine Instanz. Nützlich für die Deserialisierung."
#: modules/gdscript/doc_classes/@GDScript.xml:256
+#, fuzzy
msgid ""
"Returns an \"eased\" value of [code]x[/code] based on an easing function "
"defined with [code]curve[/code]. This easing function is based on an "
@@ -495,6 +493,23 @@ msgid ""
"See also [method smoothstep]. If you need to perform more advanced "
"transitions, use [Tween] or [AnimationPlayer]."
msgstr ""
+"Gibt einen interpolierten Wert von [code]x[/code] basiert auf einer Funktion "
+"die durch [code]curve[/code] definiert wird. Die Funktion basiert auf einem "
+"Exponent. Die [code]curve[/code] kann jegliche Gleitkommazahl sein, von "
+"welchen diese spezifische Werte zu folgendem Verhalten führen:\n"
+"[codeblock]\n"
+"- Weniger als -1.0 (exclusiv): Beschleunige in-out\n"
+"- 1.0: Linear\n"
+"- Zwischen -1.0 und 0.0 (exclusiv): Beschleunige out-in\n"
+"- 0.0: Konstant\n"
+"- Zwischen 0.0 und 1.0 (exclusiv): Beschleunige in\n"
+"- 1.0: Linear\n"
+"- Mehr als 1.0 (exclusive): Beschleunige out\n"
+"[/codeblock]\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"ease_cheatsheet.png]ease() curve values cheatsheet[/url]\n"
+"Siehe auch [method smoothstep]. Falls du fortgeschrittene Übergänge "
+"erstellen möchtest, benutze [Tween] oder [AnimationPlayer]."
#: modules/gdscript/doc_classes/@GDScript.xml:274
msgid ""
@@ -517,7 +532,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:286
-#, fuzzy
msgid ""
"Rounds [code]s[/code] downward (towards negative infinity), returning the "
"largest whole number that is not more than [code]s[/code].\n"
@@ -535,16 +549,16 @@ msgstr ""
"Richtung negativ unendlich) und gibt die größte ganze Zahl zurück, die nicht "
"größer als [code]s[/code] ist.\n"
"[codeblock]\n"
-"# a is 2.0\n"
-"a = floor(2.99)\n"
-"# a is -3.0\n"
-"a = floor(-2.99)\n"
+"a = floor(2.45) # a ist 2.0\n"
+"a = floor(2.99) # a ist 2.0\n"
+"a = floor(-2.99) # a ist -3.0\n"
"[/codeblock]\n"
+"Siehe auch [method ceil], [method round], [method stepify], und [int].\n"
"[b]Hinweis:[/b] Diese Methode gibt eine Fließkommazahl zurück. Wenn Sie eine "
-"Ganzzahl benötigen, können Sie [code]int(s)[/code] direkt verwenden."
+"Ganzzahl benötigen und [code]s[/code] nicht negativ ist, können Sie "
+"[code]int(s)[/code] direkt verwenden."
#: modules/gdscript/doc_classes/@GDScript.xml:301
-#, fuzzy
msgid ""
"Returns the floating-point remainder of [code]a/b[/code], keeping the sign "
"of [code]a[/code].\n"
@@ -556,13 +570,11 @@ msgstr ""
"Gibt den Divisionsrest von [code]a/b[/code] mit Nachkommastellen zurück und "
"behält das Vorzeichen von [code]a[/code].\n"
"[codeblock]\n"
-"# Rest ist 1.5\n"
-"var rest = fmod(7, 5.5)\n"
+"var rest = fmod(7, 5.5) # rest ist 1.5\n"
"[/codeblock]\n"
"Für den Integer-Divisionsrest, den % Operator benutzen."
#: modules/gdscript/doc_classes/@GDScript.xml:313
-#, fuzzy
msgid ""
"Returns the floating-point modulus of [code]a/b[/code] that wraps equally in "
"positive and negative.\n"
@@ -585,24 +597,19 @@ msgstr ""
"Gibt den Fließkommamodulo von [code]a/b[/code] zurück, der gleichermaßen in "
"positiv und negativ umschlägt.\n"
"[codeblock]\n"
-"var i = -6\n"
-"while i < 5:\n"
-" prints(i, fposmod(i, 3))\n"
-" i += 1\n"
+"for i in 7:\n"
+" var x = 0.5 * i - 1.5\n"
+" print(\"%4.1f %4.1f %4.1f\" % [x, fmod(x, 1.5), fposmod(x, 1.5)])\n"
"[/codeblock]\n"
-"Produziert:\n"
+"Gibt aus:\n"
"[codeblock]\n"
-"-6 0\n"
-"-5 1\n"
-"-4 2\n"
-"-3 0\n"
-"-2 1\n"
-"-1 2\n"
-"0 0\n"
-"1 1\n"
-"2 2\n"
-"3 0\n"
-"4 1\n"
+"-1.5 -0.0 0.0\n"
+"-1.0 -1.0 0.5\n"
+"-0.5 -0.5 1.0\n"
+" 0.0 0.0 0.0\n"
+" 0.5 0.5 0.5\n"
+" 1.0 1.0 1.0\n"
+" 1.5 0.0 0.0\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:336
@@ -1229,6 +1236,16 @@ msgid ""
"distinguishes them from print messages used for debugging purposes, while "
"also displaying a stack trace when an error or warning is printed."
msgstr ""
+"Wandelt ein oder mehrere Argumente aller Typen bestmöglich in Zeichenketten "
+"um und gibt sie in der Konsole aus.\n"
+"[codeblock]\n"
+"var a = [1,2,3]\n"
+"print(\"a\",\"=\",a) # Schreibt \"a=[1,2,3]\n"
+"[/codeblock]\n"
+"[b]Hinweis:[/b] Benutze [method push_error] und [method push_warning] statt "
+"[method print] um Fehlermeldungen und Warnungen auszugeben. Sie "
+"unterscheiden sich von normalen Ausgaben und geben zusätzlich einen Stack-"
+"Trace aus."
#: modules/gdscript/doc_classes/@GDScript.xml:702
msgid "Like [method print], but prints only when used in debug mode."
@@ -1357,7 +1374,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:779
-#, fuzzy
msgid ""
"Converts an angle expressed in radians to degrees.\n"
"[codeblock]\n"
@@ -1741,7 +1757,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:1030
-#, fuzzy
msgid ""
"Returns the hyperbolic tangent of [code]s[/code].\n"
"[codeblock]\n"
@@ -1749,7 +1764,7 @@ msgid ""
"b = tanh(a) # b is 0.6\n"
"[/codeblock]"
msgstr ""
-"Gibt den Hyperbeltangens von [code]s[/code] zurück.\n"
+"Gibt den hyperbolischen Tangens von [code]s[/code] zurück.\n"
"[codeblock]\n"
"a = log(2.0) # Returns 0.693147\n"
"tanh(a) # Returns 0.6\n"
@@ -2061,6 +2076,16 @@ msgid ""
"code] will not result in [constant INF] and will result in a run-time error "
"instead."
msgstr ""
+"Gleitkomma Darstellung von Unendlich. Diese ist das Ergebnis wenn bei einer "
+"Gleitkomma-Division durch [code]0[/code] geteilt wird. Benutze [code]-INF[/"
+"code] um minus Unendlich zu erhalten. Wird eine positive Gleitkommazahl "
+"durch [code]-0.0[/code] geteilt, so entsteht minus Unendlich. Also ist "
+"teilen durch [code]0.0[/code] nicht das gleiche wie teilen durch [code]-0.0[/"
+"code] (obwohl [code]0.0 == -0.0[/code] [code]true[/code] zurückgibt).\n"
+"[b]Bemerkung:[/b] Numerische Unendlichkeit existiert nur für "
+"gleitkommazahlen, es gibt kein Äquivalent für Ganzzahlen. Wird eine Ganzzahl "
+"durch [code]0[/code] geteilt, so resultiert das nicht in [constant INF], "
+"sondern produziert stattdessen einen Laufzeitfehler."
#: modules/gdscript/doc_classes/@GDScript.xml:1217
msgid ""
@@ -2074,6 +2099,16 @@ msgid ""
"[code]0[/code] will not result in [constant NAN] and will result in a run-"
"time error instead."
msgstr ""
+"Steht für \"Not a Number\" (\"keine Zahl\"). Der Wert stellt eine nicht "
+"zulässige Kommazahl dar. [constant NAN] hat spezielle EIgenschaften, zum "
+"Beispiel ist der Wert sich selbst nicht glich ([code]NAN==NAN[/code] gibt "
+"[code]false[/code] zurück). [constant NAN] ist die Ausgabe einiger "
+"ungültiger Operationen wie zum Beispiel die Division von [code]0.0[/code] "
+"mit [code]0.0[/code].\n"
+"[b]Hinweis:[/b] \"Not a Number\" ist ein Konzept, dass exklusiv für "
+"Kommazahlen gilt, und kein Gegenstück für Ganzzahlen besitzt. Die Ganzzahl "
+"[code]0[/code] durch [code]0[/code] zu teilen wird nicht [constant NAN] "
+"zurückgeben sondern einen Fehler auslösen."
#: doc/classes/@GlobalScope.xml:4
msgid "Global scope constants and variables."
@@ -3532,8 +3567,9 @@ msgid "Nintendo controller Y button."
msgstr "Game-Controller SDL-Taste A."
#: doc/classes/@GlobalScope.xml:1049
+#, fuzzy
msgid "Grip (side) buttons on a VR controller."
-msgstr ""
+msgstr "Grip (Seiten) Knopf an einem VR-Controller"
#: doc/classes/@GlobalScope.xml:1052
msgid "Push down on the touchpad or main joystick on a VR controller."
@@ -4141,16 +4177,16 @@ msgstr ""
"Dateidialog zum Auswählen des Pfades angezeigt."
#: doc/classes/@GlobalScope.xml:1415
-#, fuzzy
msgid ""
"Hints that a property is an instance of a [Resource]-derived type, "
"optionally specified via the hint string (e.g. [code]\"Texture\"[/code]). "
"Editing it will show a popup menu of valid resource types to instantiate."
msgstr ""
-"Weist darauf hin, dass eine Eigenschaft eine Instanz eines von [Ressource] "
-"abgeleiteten Typs ist, der optional über die Hinweiszeichenfolge angegeben "
-"wird (z. B. [code]\"Texture2D\"[/code]). Bei der Bearbeitung wird ein Popup-"
-"Menü mit gültigen Ressourcentypen zum Instanziieren angezeigt."
+"Weist darauf hin, dass es sich bei einer Eigenschaft um eine Instanz eines "
+"von [Ressource] abgeleiteten Typs handelt, der optional über die "
+"Hinweiszeichenkette angegeben wird (z. B. [code]\"Textur\"[/code]). Bei der "
+"Bearbeitung wird ein Popup-Menü mit gültigen Ressourcentypen zum "
+"Instanziieren angezeigt."
#: doc/classes/@GlobalScope.xml:1418
msgid ""
@@ -4525,6 +4561,12 @@ msgid ""
"[b]Note:[/b] Unlike [Rect2], [AABB] does not have a variant that uses "
"integer coordinates."
msgstr ""
+"[AABB] besteht aus einer Position, einer Größe und mehreren Hilfsfunktionen. "
+"Es wird für schnelle Überlappungstest genutzt.\n"
+"Es benutzt Kommazahlen für die Koordinaten. Das Gegenstück in 2D zu [AABB] "
+"ist [Rect2].\n"
+"[b]Hinweis:[/b] Im Gegensatz zu [Rect2] hat [AABB] keine Variante die "
+"Ganzzahlen statt Kommazahlen nutzt."
#: doc/classes/AABB.xml:12 doc/classes/Basis.xml:13 doc/classes/Plane.xml:10
#: doc/classes/Rect2.xml:12 doc/classes/Transform.xml:11
@@ -4568,22 +4610,31 @@ msgstr ""
"umschließt."
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
-msgstr "Gibt diesen [AABB] erweitert um einen gegebenen Punkt zurück."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
+msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr "Gibt die Lautstärke des [AABB] zurück."
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr "Liefert die Position der 8 Endpunkte des [AABB] im Raum."
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr "Liefert die normierte längste Achse des [AABB]."
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
@@ -4591,15 +4642,15 @@ msgstr ""
"Liefert den Index der längsten Achse des [AABB] (gemäß den [code]AXIS_*[/"
"code]-Konstanten von [Vector3])."
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr "Liefert die skalare Länge der längsten Achse des [AABB]."
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr "Liefert die normierte kürzeste Achse des [AABB]."
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
@@ -4607,11 +4658,11 @@ msgstr ""
"Liefert den Index der kürzesten Achse des [AABB] (gemäß [Vector3]::AXIS* "
"enum)."
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr "Liefert die skalare Länge der kürzesten Achse des [AABB]."
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
@@ -4619,7 +4670,7 @@ msgstr ""
"Gibt den Stützpunkt in einer bestimmten Richtung zurück. Dies ist nützlich "
"für Algorithmen zur Kollisionserkennung."
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
@@ -4627,19 +4678,19 @@ msgstr ""
"Gibt eine Kopie des [AABB] zurück, die um eine bestimmte Anzahl von "
"Einheiten nach allen Seiten gewachsen ist."
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr "Gibt [code]true[/code] zurück, wenn der [AABB] flach oder leer ist."
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr "Gibt [code]true[/code] zurück, wenn der [AABB] leer ist."
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr "Gibt [code]true[/code] zurück, wenn der [AABB] einen Punkt enthält."
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
@@ -4647,19 +4698,19 @@ msgstr ""
"Liefert die Schnittmenge zwischen zwei [AABB]. Bei einem Fehler wird ein "
"leerer AABB (Größe 0,0,0) zurückgegeben."
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
"Gibt [code]true[/code] zurück, wenn sich das [AABB] mit einem anderen "
"überschneidet."
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
"Gibt [code]true[/code] zurück, wenn der [AABB] auf beiden Seiten einer Ebene "
"liegt."
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
@@ -4667,7 +4718,7 @@ msgstr ""
"Gibt [code]true[/code] zurück, wenn der [AABB] das Liniensegment zwischen "
"[code]from[/code] und [code]to[/code] schneidet."
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
@@ -4677,14 +4728,14 @@ msgstr ""
"annähernd gleich sind, indem die [Methode @GDScript.is_equal_approx] für "
"jede Komponente aufgerufen wird."
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
"Gibt ein größeres [AABB] zurück, das sowohl dieses [AABB] als auch "
"[code]mit[/code] enthält."
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
@@ -4692,11 +4743,11 @@ msgstr ""
"Endende Ecke. Dies wird berechnet als [code]Position + Größe[/code]. Wenn "
"Sie diesen Wert einstellen, wird die Größe geändert."
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr "Beginnende Ecke. Hat typischerweise niedrigere Werte als [Stabende]."
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
#, fuzzy
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
@@ -6188,7 +6239,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -8197,6 +8248,8 @@ msgid ""
"Override mode for gravity and damping calculations within this area. See "
"[enum SpaceOverride] for possible values."
msgstr ""
+"Überschreibungsmodus für Schwerkraft- und Dämpfungsberechnungen innerhalb "
+"dieses Bereichs. Siehe [enum SpaceOverride] für mögliche Werte."
#: doc/classes/Area.xml:102
msgid ""
@@ -8264,7 +8317,7 @@ msgstr ""
#: doc/classes/Area.xml:182 doc/classes/Area2D.xml:172
msgid "This area does not affect gravity/damping."
-msgstr "Diese Area hat keinen Einfluss auf die Gravitation oder die Dämpfung."
+msgstr "Diese Area hat keinen Einfluss auf die Gravitation/Dämpfung."
#: doc/classes/Area.xml:185 doc/classes/Area2D.xml:175
msgid ""
@@ -12105,17 +12158,21 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/de/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -12124,24 +12181,24 @@ msgid ""
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -12155,63 +12212,63 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
#, fuzzy
msgid "The rotation of the baked custom sky."
msgstr "Der Name des Audiobusses des Bereichs."
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -12219,35 +12276,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -12255,13 +12312,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -12273,79 +12330,79 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
#, fuzzy
msgid "Baking was successful."
msgstr "Die Verbindung war erfolgreich."
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr "zu Zeit ungenutzt."
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
#, fuzzy
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr "Gibt den Arkuskosinus2 der Parameter zurück."
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:131
+#: doc/classes/BakedLightmap.xml:132
msgid ""
"Returns if lightmapper can't be created. Unless you are using a custom "
"lightmapper, please report this as bug."
msgstr ""
-#: doc/classes/BakedLightmap.xml:134
+#: doc/classes/BakedLightmap.xml:135
msgid ""
"There is no root node to start baking from. Either provide [code]from_node[/"
"code] argument or attach this node to a parent that should be used as root."
msgstr ""
-#: doc/classes/BakedLightmap.xml:137
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:140
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:143
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:146
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -12805,8 +12862,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -14911,7 +14971,7 @@ msgstr ""
#: doc/classes/CircleShape2D.xml:15
msgid "The circle's radius."
-msgstr "Der Radius des Kreises."
+msgstr "Radius des Kreises."
#: doc/classes/ClassDB.xml:4
msgid "Class information repository."
@@ -15900,6 +15960,8 @@ msgstr ""
#: doc/classes/Color.xml:245
msgid "Wrapper for [member a] that uses the range 0 to 255 instead of 0 to 1."
msgstr ""
+"Wrapper für [member a], der den Bereich 0 bis 255 anstelle von 0 bis 1 "
+"verwendet."
#: doc/classes/Color.xml:248
msgid "The color's blue component, typically on the range of 0 to 1."
@@ -15908,6 +15970,8 @@ msgstr "Der Blauanteil der Farbe, normalerweise im Bereich von 0 bis 1."
#: doc/classes/Color.xml:251
msgid "Wrapper for [member b] that uses the range 0 to 255 instead of 0 to 1."
msgstr ""
+"Wrapper für [member b], der den Bereich 0 bis 255 anstelle von 0 bis 1 "
+"verwendet."
#: doc/classes/Color.xml:254
msgid "The color's green component, typically on the range of 0 to 1."
@@ -15916,6 +15980,8 @@ msgstr "Der Grünanteil der Farbe, normalerweise im Bereich von 0 bis 1."
#: doc/classes/Color.xml:257
msgid "Wrapper for [member g] that uses the range 0 to 255 instead of 0 to 1."
msgstr ""
+"Wrapper für [member g], der den Bereich 0 bis 255 anstelle von 0 bis 1 "
+"verwendet."
#: doc/classes/Color.xml:260
msgid "The HSV hue of this color, on the range 0 to 1."
@@ -15928,6 +15994,8 @@ msgstr "Der Rotanteil der Farbe, normalerweise im Bereich von 0 bis 1."
#: doc/classes/Color.xml:266
msgid "Wrapper for [member r] that uses the range 0 to 255 instead of 0 to 1."
msgstr ""
+"Wrapper für [member r], der den Bereich 0 bis 255 anstelle von 0 bis 1 "
+"verwendet."
#: doc/classes/Color.xml:269
msgid "The HSV saturation of this color, on the range 0 to 1."
@@ -27013,21 +27081,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/de/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -27036,14 +27115,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -27053,36 +27136,36 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
#, fuzzy
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
@@ -27090,46 +27173,46 @@ msgstr ""
"Wenn [code]true[/code], wird die Sub-Animation nach Beendigung automatisch "
"neu gestartet."
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -31392,7 +31475,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -32712,7 +32797,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -32777,22 +32863,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -32807,7 +32895,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -32815,19 +32903,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -32898,7 +32986,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -32956,7 +33045,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -36530,7 +36621,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -39852,7 +39943,7 @@ msgstr "Gibt die Anzahl der Punkte im Überblendungsbereich zurück."
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -39882,14 +39973,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -39899,7 +39990,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -42429,17 +42520,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -42457,11 +42574,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -42656,9 +42773,10 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-#, fuzzy
-msgid "Returns the [Physics2DDirectBodyState] of the body."
-msgstr "Gibt die Größe des Arrays zurück."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
+msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
msgid ""
@@ -43460,6 +43578,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -43477,7 +43613,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -43591,9 +43727,10 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-#, fuzzy
-msgid "Returns the [PhysicsDirectBodyState] of the body."
-msgstr "Gibt die Größe des Arrays zurück."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
+msgstr ""
#: doc/classes/PhysicsServer.xml:370
msgid ""
@@ -46228,24 +46365,30 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:282
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:285
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:288
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -46255,7 +46398,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:291
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -46265,14 +46408,14 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:294
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:297
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
@@ -46280,14 +46423,14 @@ msgstr ""
"Aktiviert [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
-#: doc/classes/ProjectSettings.xml:300
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:303
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -46295,81 +46438,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:306
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:309
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:312
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:315
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:318
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:321
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:324
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:327
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:330
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:333
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:336
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:339
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:342
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -46377,74 +46520,74 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:345
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:348
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:351
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:354
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:357
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:360
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:363
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:366
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:369
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:372
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:375
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:378
+#: doc/classes/ProjectSettings.xml:380
#, fuzzy
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
@@ -46452,38 +46595,38 @@ msgstr ""
"Wenn [code]true[/code], können andere Überwachungsbereiche diesen Bereich "
"erkennen."
-#: doc/classes/ProjectSettings.xml:381
+#: doc/classes/ProjectSettings.xml:383
#, fuzzy
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr "Wenn [code]true[/code], ist die Filterung aktiviert."
-#: doc/classes/ProjectSettings.xml:384
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:387
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:390
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:393
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:396
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:399
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -46494,91 +46637,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:404
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:407
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:410
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:413
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:416
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:419
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:422
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:425
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:428
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:431
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:434
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:437
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:440
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:443
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:446
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:449
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:452
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -46587,13 +46730,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:456
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:459
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -46603,7 +46746,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:464
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -46611,19 +46754,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:469
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:473
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:477
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -46637,45 +46780,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:482
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:485
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:489
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:492
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:495
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:498
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:501
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -46684,7 +46827,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:504
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -46695,7 +46838,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:508
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -46711,14 +46854,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:516
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:519
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -46726,49 +46869,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:522
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:525
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:530
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:533
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:536
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:539
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:542
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:545
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:548
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -46777,7 +46920,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:552
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -46785,7 +46928,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:556
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -46793,7 +46936,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:560
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -46803,7 +46946,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:564
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -46812,7 +46955,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:568
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -46821,7 +46964,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:572
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -46831,7 +46974,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:576
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -46839,7 +46982,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:580
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -46849,7 +46992,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:584
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -46859,7 +47002,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:588
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -46867,7 +47010,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:592
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -46876,7 +47019,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:596
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -46884,7 +47027,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:600
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -46896,477 +47039,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:606
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:609
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:612
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:615
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:618
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:621
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:624
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:627
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:630
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:633
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:636
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:639
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:642
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:645
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:648
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:651
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:654
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:657
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:660
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:663
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:666
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:669
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:672
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:675
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:678
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:681
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:684
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:687
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:690
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:693
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:696
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:699
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:702
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:705
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:708
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:711
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:714
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:717
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:720
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:723
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:726
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:729
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:732
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:735
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:738
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:741
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:744
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:747
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:750
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:753
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:756
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:759
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:762
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:765
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:768
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:771
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:774
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:777
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:780
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:783
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:786
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:789
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:792
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:795
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:798
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:801
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:804
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:807
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:810
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:813
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:816
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:819
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:822
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:825
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:828
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:831
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:834
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:837
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:840
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:843
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:846
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:849
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:852
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:855
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:858
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:861
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:864
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:867
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:870
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:873
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:876
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:879
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:882
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:885
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:888
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:891
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:894
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:897
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:900
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:903
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:906
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:909
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:912
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:915
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:918
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:921
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:924
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:927
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:930
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:933
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:936
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:939
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:942
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:947
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:950
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -47374,92 +47517,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:953
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:956
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:959
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:962
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:965
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:968
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:971
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:974
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:977
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:980
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:983
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:986
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:989
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:992
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:995
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:998
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1001
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1004
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -47469,33 +47612,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1008
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1011
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1014
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1018
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1022
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -47508,7 +47651,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1026
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -47520,7 +47663,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1034
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -47532,7 +47675,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1042
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -47545,7 +47688,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1046
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -47553,28 +47696,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1050
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1054
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1057
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1060
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -47584,25 +47727,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1064
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1067
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1070
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1073
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -47615,7 +47758,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1077
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -47627,7 +47770,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1085
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -47639,7 +47782,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1093
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -47652,13 +47795,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1097
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1100
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -47666,11 +47809,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1104
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1107
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -47684,7 +47827,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1113
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -47693,7 +47836,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1117
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -47709,7 +47852,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1122
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -47719,7 +47862,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1126
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -47729,7 +47872,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1130
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -47740,7 +47883,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1134
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -47750,7 +47893,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1138
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -47758,7 +47901,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1142
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -47769,7 +47912,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1146
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -47784,7 +47927,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1152
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -47793,13 +47936,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1157
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1160
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -47808,7 +47951,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1163
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -47818,7 +47961,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1166
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -47830,7 +47973,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1169
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -47840,24 +47983,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1172
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1175
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1178
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1181
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -47866,7 +48009,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1184
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -47874,7 +48017,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1187
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -47883,7 +48026,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1190
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -47893,7 +48036,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1194
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -47901,31 +48044,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1198
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1201
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1204
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1207
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1210
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -47933,7 +48076,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1213
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -47943,21 +48086,21 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1216
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1219
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
"iOS specific override for [member rendering/gles2/compatibility/"
"disable_half_float], due to poor support for half-float vertex compression "
"on many devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
"If [code]true[/code] and available on the target Android device, enables "
"high floating point precision for all shader computations in GLES2.\n"
@@ -47965,31 +48108,31 @@ msgid ""
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1226
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1229
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1232
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1235
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1238
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -47997,7 +48140,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1241
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -48007,7 +48150,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1244
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -48016,7 +48159,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1247
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -48025,20 +48168,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1250
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1253
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1256
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -48047,7 +48190,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1259
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -48055,7 +48198,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -48064,7 +48207,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1266
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -48074,20 +48217,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1275
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -48096,13 +48239,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -48112,46 +48255,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1294
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1297
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1300
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1303
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1306
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -48161,7 +48304,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -48173,7 +48316,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1317
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -48181,7 +48324,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -48189,7 +48332,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1324
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -48198,7 +48341,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1327
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -48212,7 +48355,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1332
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -48222,7 +48365,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1335
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -48231,7 +48374,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1338
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -48241,54 +48384,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1341
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1344
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1347
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1350
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1353
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1356
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1359
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -48299,61 +48442,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1366
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1369
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1372
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1375
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1378
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1381
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1384
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1387
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -48364,7 +48507,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1394
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -48373,26 +48516,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400
-#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1409
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1412
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -48403,20 +48546,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1419
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1426
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -48428,52 +48571,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1436
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1439
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1442
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1445
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1448
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1451
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1454
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -48481,7 +48624,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -48494,7 +48637,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -48506,7 +48649,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -48518,7 +48661,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -48530,7 +48673,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -48542,7 +48685,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1481
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -48576,7 +48719,7 @@ msgstr ""
#: doc/classes/QuadMesh.xml:20
msgid "Size on the X and Y axes."
-msgstr ""
+msgstr "Größe auf der X- und Y-Achse."
#: doc/classes/Quat.xml:4
msgid "Quaternion."
@@ -48605,7 +48748,7 @@ msgstr ""
#: doc/classes/Quat.xml:20
msgid "Constructs a quaternion from the given [Basis]."
-msgstr ""
+msgstr "Konstruiert ein Quaternion aus der gegebenen [Basis]."
#: doc/classes/Quat.xml:27
msgid ""
@@ -48613,12 +48756,18 @@ msgid ""
"angles (in the YXZ convention: when decomposing, first Z, then X, and Y "
"last), given in the vector format as (X angle, Y angle, Z angle)."
msgstr ""
+"Konstruiert ein Quaternion, das eine Drehung ausführt, die durch Euler-"
+"Winkel (in der YXZ-Konvention: bei der Zerlegung zuerst Z, dann X und Y "
+"zuletzt) angegeben wird, die im Vektorformat als (X-Winkel, Y-Winkel, Z-"
+"Winkel) angegeben wird."
#: doc/classes/Quat.xml:35
msgid ""
"Constructs a quaternion that will rotate around the given axis by the "
"specified angle. The axis must be a normalized vector."
msgstr ""
+"Konstruiert ein Quaternion, das sich um die angegebene Achse um den "
+"angegebenen Winkel dreht. Die Achse muss ein normalisierter Vektor sein."
#: doc/classes/Quat.xml:45
msgid "Constructs a quaternion defined by the given values."
@@ -49229,40 +49378,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -49270,14 +49433,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -51624,6 +51787,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -51641,7 +51820,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -51649,11 +51828,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -51663,19 +51842,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -57154,20 +57333,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -57178,28 +57362,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -57211,19 +57395,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -72435,6 +72619,17 @@ msgstr ""
"Wenn [code]true[/code], dann werden untergeordnete Nodes sortiert, "
"anderenfalls wird die Sortierung deaktiviert."
+#~ msgid "Returns this [AABB] expanded to include a given point."
+#~ msgstr "Gibt diesen [AABB] erweitert um einen gegebenen Punkt zurück."
+
+#, fuzzy
+#~ msgid "Returns the [Physics2DDirectBodyState] of the body."
+#~ msgstr "Gibt die Größe des Arrays zurück."
+
+#, fuzzy
+#~ msgid "Returns the [PhysicsDirectBodyState] of the body."
+#~ msgstr "Gibt die Größe des Arrays zurück."
+
#, fuzzy
#~ msgid ""
#~ "Returns a list of intersecting [Area]s. For performance reasons "
diff --git a/doc/translations/el.po b/doc/translations/el.po
index 83ef618560..55ac6a723e 100644
--- a/doc/translations/el.po
+++ b/doc/translations/el.po
@@ -3596,112 +3596,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4780,7 +4789,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -10180,17 +10189,21 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10199,24 +10212,24 @@ msgid ""
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10230,62 +10243,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10293,35 +10306,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10329,13 +10342,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10347,78 +10360,78 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
#, fuzzy
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr "ΕπιστÏέφει το τόξο εφαπτομένης των παÏαμέτÏων."
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:131
+#: doc/classes/BakedLightmap.xml:132
msgid ""
"Returns if lightmapper can't be created. Unless you are using a custom "
"lightmapper, please report this as bug."
msgstr ""
-#: doc/classes/BakedLightmap.xml:134
+#: doc/classes/BakedLightmap.xml:135
msgid ""
"There is no root node to start baking from. Either provide [code]from_node[/"
"code] argument or attach this node to a parent that should be used as root."
msgstr ""
-#: doc/classes/BakedLightmap.xml:137
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:140
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:143
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:146
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10874,8 +10887,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -24896,21 +24912,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -24919,14 +24946,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -24936,80 +24967,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -29228,7 +29259,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30541,7 +30574,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30606,22 +30640,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30636,7 +30672,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30644,19 +30680,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30727,7 +30763,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30785,7 +30822,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -34332,7 +34371,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37648,7 +37687,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37678,14 +37717,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37695,7 +37734,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40184,17 +40223,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40212,11 +40277,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40411,7 +40476,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41214,6 +41281,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41231,7 +41316,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41345,7 +41430,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -43890,24 +43977,30 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:282
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:285
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:288
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43917,7 +44010,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:291
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43927,27 +44020,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:294
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:297
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:300
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:303
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -43955,81 +44048,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:306
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:309
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:312
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:315
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:318
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:321
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:324
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:327
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:330
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:333
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:336
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:339
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:342
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -44037,109 +44130,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:345
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:348
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:351
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:354
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:357
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:360
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:363
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:366
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:369
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:372
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:375
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:378
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:381
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:384
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:387
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:390
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:393
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:396
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:399
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44150,91 +44243,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:404
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:407
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:410
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:413
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:416
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:419
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:422
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:425
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:428
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:431
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:434
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:437
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:440
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:443
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:446
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:449
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:452
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44243,13 +44336,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:456
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:459
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44259,7 +44352,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:464
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44267,19 +44360,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:469
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:473
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:477
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44293,45 +44386,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:482
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:485
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:489
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:492
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:495
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:498
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:501
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44340,7 +44433,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:504
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44351,7 +44444,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:508
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44367,14 +44460,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:516
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:519
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44382,49 +44475,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:522
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:525
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:530
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:533
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:536
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:539
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:542
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:545
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:548
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44433,7 +44526,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:552
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44441,7 +44534,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:556
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44449,7 +44542,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:560
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44459,7 +44552,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:564
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44468,7 +44561,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:568
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44477,7 +44570,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:572
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44487,7 +44580,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:576
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44495,7 +44588,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:580
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44505,7 +44598,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:584
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44515,7 +44608,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:588
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44523,7 +44616,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:592
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44532,7 +44625,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:596
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44540,7 +44633,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:600
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44552,477 +44645,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:606
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:609
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:612
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:615
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:618
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:621
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:624
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:627
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:630
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:633
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:636
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:639
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:642
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:645
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:648
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:651
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:654
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:657
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:660
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:663
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:666
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:669
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:672
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:675
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:678
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:681
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:684
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:687
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:690
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:693
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:696
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:699
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:702
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:705
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:708
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:711
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:714
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:717
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:720
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:723
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:726
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:729
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:732
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:735
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:738
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:741
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:744
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:747
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:750
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:753
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:756
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:759
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:762
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:765
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:768
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:771
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:774
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:777
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:780
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:783
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:786
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:789
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:792
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:795
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:798
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:801
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:804
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:807
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:810
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:813
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:816
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:819
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:822
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:825
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:828
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:831
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:834
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:837
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:840
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:843
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:846
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:849
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:852
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:855
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:858
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:861
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:864
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:867
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:870
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:873
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:876
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:879
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:882
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:885
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:888
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:891
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:894
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:897
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:900
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:903
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:906
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:909
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:912
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:915
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:918
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:921
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:924
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:927
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:930
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:933
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:936
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:939
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:942
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:947
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:950
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -45030,92 +45123,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:953
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:956
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:959
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:962
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:965
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:968
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:971
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:974
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:977
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:980
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:983
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:986
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:989
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:992
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:995
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:998
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1001
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1004
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -45125,33 +45218,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1008
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1011
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1014
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1018
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1022
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45164,7 +45257,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1026
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45176,7 +45269,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1034
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45188,7 +45281,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1042
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45201,7 +45294,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1046
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45209,28 +45302,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1050
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1054
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1057
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1060
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45240,25 +45333,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1064
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1067
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1070
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1073
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45271,7 +45364,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1077
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45283,7 +45376,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1085
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45295,7 +45388,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1093
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45308,13 +45401,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1097
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1100
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45322,11 +45415,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1104
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1107
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45340,7 +45433,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1113
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45349,7 +45442,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1117
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45365,7 +45458,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1122
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45375,7 +45468,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1126
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45385,7 +45478,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1130
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45396,7 +45489,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1134
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45406,7 +45499,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1138
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45414,7 +45507,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1142
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45425,7 +45518,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1146
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45440,7 +45533,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1152
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45449,13 +45542,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1157
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1160
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45464,7 +45557,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1163
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45474,7 +45567,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1166
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45486,7 +45579,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1169
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45496,24 +45589,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1172
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1175
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1178
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1181
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45522,7 +45615,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1184
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45530,7 +45623,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1187
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45539,7 +45632,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1190
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45549,7 +45642,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1194
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45557,31 +45650,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1198
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1201
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1204
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1207
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1210
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45589,7 +45682,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1213
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45599,21 +45692,21 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1216
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1219
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
"iOS specific override for [member rendering/gles2/compatibility/"
"disable_half_float], due to poor support for half-float vertex compression "
"on many devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
"If [code]true[/code] and available on the target Android device, enables "
"high floating point precision for all shader computations in GLES2.\n"
@@ -45621,31 +45714,31 @@ msgid ""
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1226
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1229
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1232
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1235
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1238
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45653,7 +45746,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1241
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45663,7 +45756,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1244
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45672,7 +45765,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1247
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45681,20 +45774,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1250
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1253
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1256
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45703,7 +45796,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1259
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45711,7 +45804,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45720,7 +45813,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1266
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45730,20 +45823,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1275
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45752,13 +45845,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45768,46 +45861,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1294
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1297
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1300
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1303
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1306
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45817,7 +45910,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45829,7 +45922,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1317
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45837,7 +45930,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45845,7 +45938,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1324
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45854,7 +45947,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1327
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45868,7 +45961,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1332
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45878,7 +45971,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1335
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45887,7 +45980,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1338
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45897,54 +45990,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1341
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1344
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1347
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1350
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1353
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1356
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1359
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -45955,61 +46048,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1366
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1369
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1372
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1375
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1378
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1381
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1384
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1387
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -46020,7 +46113,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1394
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -46029,26 +46122,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400
-#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1409
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1412
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -46059,20 +46152,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1419
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1426
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -46084,52 +46177,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1436
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1439
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1442
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1445
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1448
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1451
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1454
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -46137,7 +46230,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -46150,7 +46243,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46162,7 +46255,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46174,7 +46267,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46186,7 +46279,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46198,7 +46291,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1481
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46862,40 +46955,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46903,14 +47010,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49245,6 +49352,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49262,7 +49385,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49270,11 +49393,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49284,19 +49407,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54711,20 +54834,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54735,28 +54863,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54768,19 +54896,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
diff --git a/doc/translations/es.po b/doc/translations/es.po
index cc5a950431..34325a7c1d 100644
--- a/doc/translations/es.po
+++ b/doc/translations/es.po
@@ -4582,22 +4582,31 @@ msgstr ""
"Devuelve [code]true[/code] si este [AABB] contiene completamente a otro."
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
-msgstr "Devuelve este [AABB] ampliado para incluir un punto dado."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
+msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr "Devuelve el volumen del [AABB]."
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr "Obtiene la posición de los 8 puntos finales del [AABB] en el espacio."
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr "Devuelve el eje más largo normalizado del [AABB]."
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
@@ -4605,15 +4614,15 @@ msgstr ""
"Devuelve el indice del eje mas grande de [AABB] (segun la constante "
"[Vector3] [code]AXIS_*[/code])."
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr "Devuelve la longitud escalar del eje más largo del [AABB]."
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr "Devuelve el eje más corto normalizado de la [AABB]."
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
@@ -4621,11 +4630,11 @@ msgstr ""
"Devuelve el índice del eje más corto del [AABB] (según el enumerado "
"[Vector3]::AXIS* )."
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr "Devuelve la longitud escalar del eje más corto del [AABB]."
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
@@ -4633,7 +4642,7 @@ msgstr ""
"Devuelve el punto de apoyo en una dirección determinada. Esto es útil para "
"los algoritmos de detección de colisiones."
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
@@ -4641,19 +4650,19 @@ msgstr ""
"Devuelve una copia de la [AABB] crecida una cantidad dada de unidades hacia "
"todos los lados."
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr "Devuelve [code]true[/code] si el [AABB] es plano o vacío."
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr "Devuelve [code]true[/code] si el [AABB] está vacío."
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr "Devuelve [code]true[/code] si el [AABB] contiene un punto."
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
@@ -4661,16 +4670,16 @@ msgstr ""
"Devuelve la intersección entre dos [AABB]. Un AABB vacío (tamaño 0,0,0) se "
"devuelve al fallar."
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr "Devuelve [code]true[/code] si el [AABB] se solapa con otro."
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
"Devuelve [code]true[/code] si el [AABB] está a ambos lados de un plano."
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
@@ -4678,7 +4687,7 @@ msgstr ""
"Devuelve [code]true[/code] si el [AABB] intersecta el segmento de línea "
"entre [code]from[/code] y [code]to[/code]."
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
@@ -4688,14 +4697,14 @@ msgstr ""
"aproximadamente iguales, llamando al [método @GDScript.is_equal_aprox] en "
"cada componente."
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
"Devuelve un [AABB] más grande que contiene tanto este [AABB] como el "
"[code]with[/code]."
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
@@ -4703,12 +4712,12 @@ msgstr ""
"Esquina final. Esto se calcula como [code]position + size[/code]. Cambiar "
"esta propiedad cambia el tamaño."
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
"Esquina de inicio. Normalmente tiene valores inferiores a [member end]."
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
#, fuzzy
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
@@ -6178,7 +6187,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -13271,17 +13280,21 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/es/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -13290,24 +13303,24 @@ msgid ""
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -13321,52 +13334,52 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
#, fuzzy
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
@@ -13375,12 +13388,12 @@ msgstr ""
"El fondo utilizado cuando [member overlay] se establece en [constant "
"OVERLAY_POSITION]."
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
#, fuzzy
msgid "The rotation of the baked custom sky."
msgstr "La raíz de la escena editada."
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -13388,36 +13401,36 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
#, fuzzy
msgid "The calculated light data."
msgstr "La altura de la cápsula."
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -13425,13 +13438,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -13443,82 +13456,82 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
#, fuzzy
msgid "The default bake quality mode."
msgstr "La fuente por defecto."
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
#, fuzzy
msgid "Baking was successful."
msgstr "La conexion tuvo éxito."
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr "Actualmente sin uso."
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
#, fuzzy
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr "Devuelve el número de formas asignadas a un tile."
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
#, fuzzy
msgid "The size of the generated lightmaps is too large."
msgstr "El tamaño del plano generado."
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
#, fuzzy
msgid "Returns if user cancels baking."
msgstr "Devuelve el botón de cancelación."
-#: doc/classes/BakedLightmap.xml:131
+#: doc/classes/BakedLightmap.xml:132
msgid ""
"Returns if lightmapper can't be created. Unless you are using a custom "
"lightmapper, please report this as bug."
msgstr ""
-#: doc/classes/BakedLightmap.xml:134
+#: doc/classes/BakedLightmap.xml:135
msgid ""
"There is no root node to start baking from. Either provide [code]from_node[/"
"code] argument or attach this node to a parent that should be used as root."
msgstr ""
-#: doc/classes/BakedLightmap.xml:137
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:140
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:143
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:146
+#: doc/classes/BakedLightmap.xml:147
#, fuzzy
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -14106,8 +14119,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -33062,10 +33078,21 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
@@ -33081,12 +33108,12 @@ msgstr ""
"puede ser rechazada a cambio de un mejor rendimiento en el [ProjectSettings] "
"usando [member ProjectSettings.rendering/quality/gi_probes/quality]."
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/es/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
#, fuzzy
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
@@ -33096,7 +33123,11 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
"Cocina el efecto para todas las [GeometryInstance3D]s marcadas con [constant "
"GeometryInstance3D.GI_MODE_BAKED] y [Light3D]s marcadas con [constant "
@@ -33107,11 +33138,11 @@ msgstr ""
"puede ser usado para visualizar los datos del [GIProbe] y depurar cualquier "
"problema que pueda estar ocurriendo."
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr "Llama a [method bake] con [code]create_visual_debug[/code] activado."
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -33121,29 +33152,29 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr "El recurso [GIProbeData] que contiene los datos para este [GIProbe]."
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
@@ -33153,13 +33184,13 @@ msgstr ""
"grandes sin aumentar las subdivisiones con [member subdivisión], el tamaño "
"de cada celda aumentará y resultará en una menor iluminación detallada."
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
#, fuzzy
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr "Si [code]true[/code], se resalta la línea que contiene el cursor."
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
#, fuzzy
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
@@ -33168,13 +33199,13 @@ msgstr ""
"Sesgo normal usado para compensar la búsqueda de sombras por el objeto "
"normal. Puede ser usado para arreglar artefactos de auto-sombra."
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
@@ -33184,7 +33215,7 @@ msgstr ""
"número mayor resulta en un detalle más fino y por lo tanto en una mayor "
"calidad visual, mientras que un número menor resulta en un mejor rendimiento."
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
@@ -33193,24 +33224,25 @@ msgstr ""
"más rápido. Úsalo si puedes, pero sobre todo úsalo en el hardware de gama "
"baja."
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
"Utiliza 128 subdivisiones. Este es el ajuste de calidad predeterminado."
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr "Utilice 256 subdivisiones."
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
+#, fuzzy
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
"Use las subdivisiones 512. Este es el ajuste de mayor calidad, pero el más "
"lento. En el hardware de gama baja esto podría causar que la GPU se atasque."
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr "Representa el tamaño del enum [enum Subdiv]."
@@ -38906,7 +38938,10 @@ msgid "The drag position."
msgstr "La posición de arrastre."
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+#, fuzzy
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr "La posición de arrastre relativa a su posición inicial."
#: doc/classes/InputEventScreenDrag.xml:25
@@ -40617,7 +40652,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -40728,30 +40764,33 @@ msgstr ""
"axis_lock_motion_y] y [member axis_lock_motion_z]."
#: doc/classes/KinematicBody.xml:142
+#, fuzzy
msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
"Comprueba si hay colisiones sin mover el cuerpo. Virtualmente establece la "
"posición, escala y rotación del nodo a la de la [Transform] dada, luego "
"intenta mover el cuerpo a lo largo del vector [code]rel_vec[/code]. Devuelve "
"[code]true[/code] si se produce una colisión."
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr "Bloquea el movimiento del eje X del cuerpo."
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr "Bloquea el movimiento del eje X del cuerpo."
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr "Bloquea el movimiento del eje Z del cuerpo."
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -40766,7 +40805,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -40778,19 +40817,19 @@ msgstr ""
"[AnimationPlayer], por ejemplo en plataformas móviles. No uses [b]not[/b] "
"junto con las funciones [method move_and_slide] o [method move_and_collide]."
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -40895,10 +40934,12 @@ msgstr ""
"[/codeblock]"
#: doc/classes/KinematicBody2D.xml:87
+#, fuzzy
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -40998,11 +41039,14 @@ msgstr ""
"su lugar."
#: doc/classes/KinematicBody2D.xml:132
+#, fuzzy
msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
"Comprueba si hay colisiones sin mover el cuerpo. Virtualmente establece la "
"posición, escala y rotación del nodo a la de la [Transform2D] dada, luego "
@@ -45564,7 +45608,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -50342,7 +50386,7 @@ msgstr "Devuelve el número de hilos disponibles en el host."
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -50375,17 +50419,22 @@ msgstr ""
"[b]Nota:[/b] Este método está implementado en el MacOS."
#: doc/classes/OS.xml:379
+#, fuzzy
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
+"Devuelve el factor de escala de la pantalla especificada por índice.\n"
+"[b]Nota:[/b] En macOS el valor devuelto es [code]2.0[/code] para la pantalla "
+"hiDPI (Retina), y [code]1.0[/code] para todos los demás casos.\n"
+"[b]Nota:[/b] Este método está implementado en macOS."
#: doc/classes/OS.xml:386
#, fuzzy
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -50399,7 +50448,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -53716,10 +53765,12 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
@@ -53741,7 +53792,47 @@ msgstr ""
"comprobar, o booleanos para determinar si el rayo debe colisionar con "
"[PhysicsBody2D]s o [Area2D]s, respectivamente."
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+#, fuzzy
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+"Comprueba si un punto está dentro de alguna forma. Las formas en las que el "
+"punto está dentro se devuelven en un array que contiene diccionarios con los "
+"siguientes campos:\n"
+"[code]collider[/code]: El objeto que colisiona.\n"
+"[code]collider_id[/code]: El ID del objeto que colisiona.\n"
+"[code]metadata[/code]: Los metadatos de la forma que se intersecta. Estos "
+"metadatos son diferentes de [method Object.get_meta], y se establecen con "
+"[method PhysicsServer2D.shape_set_data].\n"
+"[code]rid[/code]: El objeto que se intersecta es [RID].\n"
+"[code]shape[/code]: El índice de la forma de la forma que colisiona.\n"
+"Además, el método puede tomar un array [code]exclude[/code] de objetos o "
+"[RID]s que deben ser excluidos de las colisiones, una máscara de bits "
+"[code]collision_mask[/code] que representa las capas de física para "
+"comprobar, o booleanos para determinar si el rayo debe colisionar con "
+"[PhysicsBody2D]s o [Area2D]s, respectivamente."
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
#, fuzzy
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
@@ -53760,7 +53851,7 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
"Intersecta un rayo en un espacio determinado. El objeto devuelto es un "
@@ -53783,7 +53874,7 @@ msgstr ""
"comprobar, o booleanos para determinar si el rayo debe colisionar con "
"[PhysicsBody2D]s o [Area2D]s, respectivamente."
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
#, fuzzy
msgid ""
"Checks the intersections of a shape, given through a "
@@ -54033,9 +54124,10 @@ msgid "Returns the continuous collision detection mode."
msgstr "Devuelve el modo de detección de colisión continua."
#: doc/classes/Physics2DServer.xml:351
-#, fuzzy
-msgid "Returns the [Physics2DDirectBodyState] of the body."
-msgstr "Devuelve el [PhysicsDirectBodyState2D] del cuerpo."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
+msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
msgid ""
@@ -55085,6 +55177,41 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
#, fuzzy
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+"Intersecta un rayo en un espacio determinado. El objeto devuelto es un "
+"diccionario con los siguientes campos:\n"
+"[code]collider[/code]: El objeto que colisiona.\n"
+"[code]collider_id[/code]: El ID del objeto que colisiona.\n"
+"[code]normal[/code]: La normalidad de la superficie del objeto en el punto "
+"de intersección.\n"
+"[code]position[/code]: El punto de intersección.\n"
+"[code]rid[/code]: El objeto que intersecta [RID].\n"
+"[code]shape[/code]: El índice de la forma de la forma en colisión.\n"
+"Si el rayo no intersectó nada, entonces se devuelve un diccionario vacío en "
+"su lugar.\n"
+"Además, el método puede tomar un array [code]exclude[/code] de objetos o "
+"[RID]s que deben ser excluidos de las colisiones, una máscara de bits "
+"[code]collision_mask[/code] que representa las capas de física para "
+"comprobar, o booleanos para determinar si el rayo debe colisionar con "
+"[PhysicsBody3D]s o [Area3D]s, respectivamente."
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+#, fuzzy
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -55118,7 +55245,7 @@ msgstr ""
"comprobar, o booleanos para determinar si el rayo debe colisionar con "
"[PhysicsBody3D]s o [Area3D]s, respectivamente."
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
#, fuzzy
msgid ""
"Checks the intersections of a shape, given through a "
@@ -55276,8 +55403,12 @@ msgstr ""
#: doc/classes/PhysicsServer.xml:335
#, fuzzy
-msgid "Returns the [PhysicsDirectBodyState] of the body."
-msgstr "Devuelve el [PhysicsDirectBodyState2D] del cuerpo."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
+msgstr ""
+"Devuelve el valor inicial de la propiedad especificada. Devuelve [code]null[/"
+"code] si la propiedad no existe."
#: doc/classes/PhysicsServer.xml:370
msgid ""
@@ -58635,16 +58766,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-"La latencia de salida en milisegundos para el audio. Valores más bajos "
-"resultarán en una menor latencia de audio a costa de un mayor uso de la CPU. "
-"Valores bajos pueden resultar en un cracking audible en un hardware más "
-"lento."
-#: doc/classes/ProjectSettings.xml:282
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
@@ -58653,7 +58786,7 @@ msgstr ""
"plataforma web, para evitar problemas de audio especialmente en los "
"dispositivos móviles."
-#: doc/classes/ProjectSettings.xml:285
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
@@ -58661,7 +58794,7 @@ msgstr ""
"Ajustar el retardo de audio hardcode cuando se reproduce el video. Es mejor "
"dejar esto intacto a menos que sepas lo que estás haciendo."
-#: doc/classes/ProjectSettings.xml:288
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -58678,7 +58811,7 @@ msgstr ""
"[code]6[/code] pero podría cambiar en el futuro debido a las actualizaciones "
"subyacentes de zlib."
-#: doc/classes/ProjectSettings.xml:291
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -58695,7 +58828,7 @@ msgstr ""
"[code]6[/code] pero podría cambiar en el futuro debido a las actualizaciones "
"subyacentes de zlib."
-#: doc/classes/ProjectSettings.xml:294
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -58706,7 +58839,7 @@ msgstr ""
"pequeños a costa de la velocidad de compresión. La velocidad de "
"descompresión no se ve afectada por el nivel de compresión."
-#: doc/classes/ProjectSettings.xml:297
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
@@ -58714,7 +58847,7 @@ msgstr ""
"Habilita [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]la "
"coincidencia a larga distancia[/url] en Zstandard."
-#: doc/classes/ProjectSettings.xml:300
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
@@ -58725,7 +58858,7 @@ msgstr ""
"pueden resultar en una mejor compresión, pero requerirán más memoria al "
"comprimir y descomprimir."
-#: doc/classes/ProjectSettings.xml:303
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -58737,14 +58870,14 @@ msgstr ""
"ser usada cuando se portan proyectos antiguos (Godot 2), ya que el uso de "
"variables de miembros es el estilo preferido a partir de Godot 3."
-#: doc/classes/ProjectSettings.xml:306
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
"Si [code]true[/code], habilita las advertencias cuando se utiliza una "
"constante como función."
-#: doc/classes/ProjectSettings.xml:309
+#: doc/classes/ProjectSettings.xml:311
#, fuzzy
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
@@ -58753,7 +58886,7 @@ msgstr ""
"Si [code]true[/code], activa las advertencias cuando se utilizan palabras "
"clave obsoletas."
-#: doc/classes/ProjectSettings.xml:312
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
@@ -58763,7 +58896,7 @@ msgstr ""
"la configuración de [code]debug/gdscript/warnings/*[/code]). Si [code]false[/"
"code], desactiva todas las advertencias de GDScript."
-#: doc/classes/ProjectSettings.xml:315
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
@@ -58771,7 +58904,7 @@ msgstr ""
"Si [code]true[/code], los scripts de la carpeta [code]res://addons[/code] no "
"generarán advertencias."
-#: doc/classes/ProjectSettings.xml:318
+#: doc/classes/ProjectSettings.xml:320
#, fuzzy
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
@@ -58780,14 +58913,14 @@ msgstr ""
"Si [code]true[/code], habilita las advertencias cuando se utiliza una "
"función como si fuera una propiedad."
-#: doc/classes/ProjectSettings.xml:321
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:324
+#: doc/classes/ProjectSettings.xml:326
#, fuzzy
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
@@ -58796,7 +58929,7 @@ msgstr ""
"Si [code]true[/code], habilita las advertencias al asignar el resultado de "
"una función que devuelve [code]void[/code] a una variable."
-#: doc/classes/ProjectSettings.xml:327
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
@@ -58804,7 +58937,7 @@ msgstr ""
"Si [code]true[/code], habilita las advertencias cuando se utiliza una "
"función como si fuera una propiedad."
-#: doc/classes/ProjectSettings.xml:330
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
@@ -58812,7 +58945,7 @@ msgstr ""
"Si [code]true[/code], habilita advertencias cuando un operador ternario "
"puede emitir valores con tipos incompatibles."
-#: doc/classes/ProjectSettings.xml:333
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
@@ -58820,7 +58953,7 @@ msgstr ""
"Si [code]true[/code], habilita las advertencias al dividir un entero por "
"otro entero (la parte decimal será descartada)."
-#: doc/classes/ProjectSettings.xml:336
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
@@ -58829,7 +58962,7 @@ msgstr ""
"Si [code]true[/code], habilita las advertencias al pasar un valor de real a "
"una función que espera un número entero (se convertirá y perderá precisión)."
-#: doc/classes/ProjectSettings.xml:339
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
@@ -58837,7 +58970,7 @@ msgstr ""
"Si [code]true[/code], habilita las advertencias cuando se utiliza una "
"propiedad como si fuera una función."
-#: doc/classes/ProjectSettings.xml:342
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -58849,7 +58982,7 @@ msgstr ""
"como argumento de la función). Esos valores de retorno se utilizan a veces "
"para denotar posibles errores mediante el uso de enum [enum Error]."
-#: doc/classes/ProjectSettings.xml:345
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
@@ -58859,7 +58992,7 @@ msgstr ""
"miembro local o de subclase que ensombrecería una variable en un nivel "
"superior (como una variable miembro)."
-#: doc/classes/ProjectSettings.xml:348
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
@@ -58869,7 +59002,7 @@ msgstr ""
"que no tiene efecto en el código circundante, como escribir [code]2 + 2[/"
"code] como una declaración."
-#: doc/classes/ProjectSettings.xml:351
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
@@ -58879,14 +59012,14 @@ msgstr ""
"ternaria que no tiene efecto en el código circundante, como escribir "
"[code]42 si está activo o 0[/code] como una declaración."
-#: doc/classes/ProjectSettings.xml:354
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
"Si [code]true[/code], todas las advertencias serán reportadas como si fueran "
"errores."
-#: doc/classes/ProjectSettings.xml:357
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
@@ -58894,7 +59027,7 @@ msgstr ""
"Si [code]true[/code], habilita las advertencias cuando se utiliza una "
"variable que no fue asignada previamente."
-#: doc/classes/ProjectSettings.xml:360
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
@@ -58904,7 +59037,7 @@ msgstr ""
"utilizando un operador de asignación como [code]+=[/code] si la variable no "
"fue asignada previamente."
-#: doc/classes/ProjectSettings.xml:363
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
@@ -58913,7 +59046,7 @@ msgstr ""
"inalcanzable (como después de una declaración de [code]return[/code] que "
"siempre se ejecutará)."
-#: doc/classes/ProjectSettings.xml:366
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
@@ -58922,13 +59055,13 @@ msgstr ""
"expresión cuyo tipo puede no ser compatible con el parámetro de función "
"esperado."
-#: doc/classes/ProjectSettings.xml:369
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
"Si [code]true[/code], habilita las advertencias cuando se realiza un "
"lanzamiento inseguro."
-#: doc/classes/ProjectSettings.xml:372
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
@@ -58936,7 +59069,7 @@ msgstr ""
"Si [code]true[/code], habilita las advertencias al llamar a un método cuya "
"presencia no está garantizada en tiempo de compilación en la clase."
-#: doc/classes/ProjectSettings.xml:375
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
@@ -58945,7 +59078,7 @@ msgstr ""
"propiedad cuya presencia no está garantizada en tiempo de compilación en la "
"clase."
-#: doc/classes/ProjectSettings.xml:378
+#: doc/classes/ProjectSettings.xml:380
#, fuzzy
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
@@ -58953,7 +59086,7 @@ msgstr ""
"Si [code]true[/code], habilita las advertencias cuando una señal no es "
"utilizada."
-#: doc/classes/ProjectSettings.xml:381
+#: doc/classes/ProjectSettings.xml:383
#, fuzzy
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
@@ -58961,26 +59094,26 @@ msgstr ""
"Si [code]true[/code], habilita las advertencias cuando una variable local no "
"se utiliza."
-#: doc/classes/ProjectSettings.xml:384
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
"Si [code]true[/code], habilita las advertencias cuando una señal no es "
"utilizada."
-#: doc/classes/ProjectSettings.xml:387
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
"Si [code]true[/code], habilita las advertencias cuando una variable local no "
"se utiliza."
-#: doc/classes/ProjectSettings.xml:390
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:393
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
@@ -58988,12 +59121,12 @@ msgstr ""
"Si [code]true[/code], habilita las advertencias al asignar el resultado de "
"una función que devuelve [code]void[/code] a una variable."
-#: doc/classes/ProjectSettings.xml:396
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
"Mensaje que se mostrará antes del retroceso cuando el motor se crashea."
-#: doc/classes/ProjectSettings.xml:399
+#: doc/classes/ProjectSettings.xml:401
#, fuzzy
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
@@ -59015,21 +59148,21 @@ msgstr ""
"no en tiempo real de fotogramas estáticos, o para probar el proyecto en "
"condiciones de retardo."
-#: doc/classes/ProjectSettings.xml:404
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr "Máxima pila de llamadas permitida para depurar GDScript."
-#: doc/classes/ProjectSettings.xml:407
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
"Cantidad máxima de funciones por fotograma permitidas en la elaboración de "
"perfiles."
-#: doc/classes/ProjectSettings.xml:410
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr "Imprime fotogramas por segundo a una salida estándar cada segundo."
-#: doc/classes/ProjectSettings.xml:413
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
@@ -59039,13 +59172,13 @@ msgstr ""
"Muestra información como las fugas de memoria, qué escenas y recursos se "
"están cargando, etc."
-#: doc/classes/ProjectSettings.xml:416
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
"Máxima pila de llamadas en el guión visual, para evitar la recursividad "
"infinita."
-#: doc/classes/ProjectSettings.xml:419
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
@@ -59053,7 +59186,7 @@ msgstr ""
"Color de los puntos de contacto entre las formas de colisión, visible cuando "
"\"Formas de colisión visibles\" está activado en el menú de Depuración."
-#: doc/classes/ProjectSettings.xml:422
+#: doc/classes/ProjectSettings.xml:424
#, fuzzy
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
@@ -59062,7 +59195,7 @@ msgstr ""
"Color de las formas de colisión, visible cuando \"Formas de colisión visibles"
"\" está activado en el menú de Depuración."
-#: doc/classes/ProjectSettings.xml:425
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
@@ -59071,7 +59204,7 @@ msgstr ""
"cuando \"Formas de colisión visibles\" está activado en el menú de "
"Depuración."
-#: doc/classes/ProjectSettings.xml:428
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
@@ -59079,7 +59212,7 @@ msgstr ""
"Color de las formas de colisión, visible cuando \"Formas de colisión visibles"
"\" está activado en el menú de Depuración."
-#: doc/classes/ProjectSettings.xml:431
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
@@ -59087,7 +59220,7 @@ msgstr ""
"Color de la geometría de navegación desactivada, visible cuando la "
"\"Navegación visible\" está activada en el menú de depuración."
-#: doc/classes/ProjectSettings.xml:434
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
@@ -59095,21 +59228,21 @@ msgstr ""
"Color de la geometría de navegación, visible cuando la \"Navegación visible"
"\" está activada en el menú de depuración."
-#: doc/classes/ProjectSettings.xml:437
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr "Imagen personalizada para el cursor del ratón (limitada a 256×256)."
-#: doc/classes/ProjectSettings.xml:440
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr "Punto donde se encuentra la imagen personalizada del cursor del ratón."
-#: doc/classes/ProjectSettings.xml:443
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
"Desplazamiento de la posición de las sugerencias, en relación con el punto "
"donde se encuentra el cursor del ratón."
-#: doc/classes/ProjectSettings.xml:446
+#: doc/classes/ProjectSettings.xml:448
#, fuzzy
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
@@ -59120,7 +59253,7 @@ msgstr ""
"Esta configuración no tiene efecto en el escritorio de Linux, ya que los "
"fallos de conocimiento de DPI no están soportados allí."
-#: doc/classes/ProjectSettings.xml:449
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
@@ -59129,7 +59262,7 @@ msgstr ""
"inactividad), por lo que el salvapantallas no toma el control. Funciona en "
"plataformas de escritorio y móviles."
-#: doc/classes/ProjectSettings.xml:452
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -59138,7 +59271,7 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:456
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
@@ -59146,7 +59279,7 @@ msgstr ""
"Si [code]verdad[/code], el indicador de casa se oculta automáticamente. Esto "
"sólo afecta a los dispositivos iOS sin un botón de inicio físico."
-#: doc/classes/ProjectSettings.xml:459
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -59156,7 +59289,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:464
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -59164,19 +59297,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:469
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:473
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:477
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -59190,7 +59323,7 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:482
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
@@ -59200,14 +59333,14 @@ msgstr ""
"escritorio, este es el tamaño de ventana por defecto. Los ajustes del modo "
"de estiramiento también utilizan esto como referencia cuando está activado."
-#: doc/classes/ProjectSettings.xml:485
+#: doc/classes/ProjectSettings.xml:487
#, fuzzy
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr "Permite que la ventana sea redimensionada por defecto."
-#: doc/classes/ProjectSettings.xml:489
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
@@ -59215,7 +59348,7 @@ msgstr ""
"Si es mayor que cero, sobreescribe la altura de la ventana al ejecutar el "
"juego. Es útil para probar los modos de estiramiento."
-#: doc/classes/ProjectSettings.xml:492
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
@@ -59223,7 +59356,7 @@ msgstr ""
"Si es mayor que cero, anula el ancho de la ventana al ejecutar el juego. Es "
"útil para probar los modos de estiramiento."
-#: doc/classes/ProjectSettings.xml:495
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
@@ -59233,7 +59366,7 @@ msgstr ""
"escritorio, este es el tamaño de ventana por defecto. La configuración del "
"modo ampliado también utiliza esto como referencia cuando está activado."
-#: doc/classes/ProjectSettings.xml:498
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
@@ -59241,7 +59374,7 @@ msgstr ""
"Especifica el controlador de la tableta a utilizar. Si se deja vacío, se "
"utilizará el controlador predeterminado."
-#: doc/classes/ProjectSettings.xml:501
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -59256,7 +59389,7 @@ msgstr ""
"muchas plataformas la harán cumplir independientemente (como las plataformas "
"móviles y HTML5)."
-#: doc/classes/ProjectSettings.xml:504
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -59276,7 +59409,7 @@ msgstr ""
"han experimentado una reducción de la mitad de la velocidad de los cuadros "
"Vsync (por ejemplo, de 60 FPS a 30 FPS) al usarla."
-#: doc/classes/ProjectSettings.xml:508
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -59292,7 +59425,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:516
+#: doc/classes/ProjectSettings.xml:518
#, fuzzy
msgid ""
"Search path for project-specific script templates. Godot will search for "
@@ -59303,7 +59436,7 @@ msgstr ""
"plantillas de script se buscarán tanto en la ruta específica del editor como "
"en esta ruta específica del proyecto."
-#: doc/classes/ProjectSettings.xml:519
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -59316,7 +59449,7 @@ msgstr ""
"especialmente si utilizas scripts incorporados que se serializan en los "
"archivos de la escena."
-#: doc/classes/ProjectSettings.xml:522
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
@@ -59324,7 +59457,7 @@ msgstr ""
"Valor por defecto para [member ScrollContainer.scroll_deadzone], que se "
"utilizará para todos los [ScrollContainer]s a menos que se sobrescriba."
-#: doc/classes/ProjectSettings.xml:525
+#: doc/classes/ProjectSettings.xml:527
#, fuzzy
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
@@ -59333,7 +59466,7 @@ msgstr ""
"Si [code]true[/code], cambia los botones Cancelar y Aceptar en los diálogos "
"de Windows y UWP para seguir las convenciones de la interfaz."
-#: doc/classes/ProjectSettings.xml:530
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
@@ -59341,7 +59474,7 @@ msgstr ""
"Ruta a un archivo de recursos [Theme] personalizado para usar en el proyecto "
"([code]theme[/code] o genérico [code]tres[/code]/[code]res[/code] extension)."
-#: doc/classes/ProjectSettings.xml:533
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
@@ -59349,12 +59482,12 @@ msgstr ""
"Ruta a un recurso [Font] personalizado para usar como predeterminado para "
"todos los elementos de la interfaz gráfica de usuario del proyecto."
-#: doc/classes/ProjectSettings.xml:536
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
"Si [code]true[/code], se asegura de que el tema utilizado funciona con HiDPI."
-#: doc/classes/ProjectSettings.xml:539
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
@@ -59362,15 +59495,15 @@ msgstr ""
"Ajuste del temporizador para la búsqueda incremental en los controles de "
"[Tree], [ItemList], etc. (en milisegundos)."
-#: doc/classes/ProjectSettings.xml:542
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr "Temporizador para detectar la inactividad en [TextEdit] (en segundos)."
-#: doc/classes/ProjectSettings.xml:545
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr "Retraso predeterminado para las sugerencias (en segundos)."
-#: doc/classes/ProjectSettings.xml:548
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -59385,7 +59518,7 @@ msgstr ""
"[Control]s. Sin embargo, los eventos asignados a la acción pueden ser "
"modificados."
-#: doc/classes/ProjectSettings.xml:552
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -59398,7 +59531,7 @@ msgstr ""
"eliminar ya que son necesarias para la lógica interna de varios [Control]s. "
"Sin embargo, los eventos asignados a la acción pueden ser modificados."
-#: doc/classes/ProjectSettings.xml:556
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -59410,7 +59543,7 @@ msgstr ""
"eliminar ya que son necesarias para la lógica interna de varios [Control]s. "
"Sin embargo, los eventos asignados a la acción pueden ser modificados."
-#: doc/classes/ProjectSettings.xml:560
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -59427,7 +59560,7 @@ msgstr ""
"eliminar ya que son necesarias para la lógica interna de varios [Control]s. "
"Sin embargo, los eventos asignados a la acción pueden ser modificados."
-#: doc/classes/ProjectSettings.xml:564
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -59442,7 +59575,7 @@ msgstr ""
"eliminar ya que son necesarias para la lógica interna de varios [Control]s. "
"Sin embargo, los eventos asignados a la acción pueden ser modificados."
-#: doc/classes/ProjectSettings.xml:568
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -59457,7 +59590,7 @@ msgstr ""
"eliminar ya que son necesarias para la lógica interna de varios [Control]s. "
"Sin embargo, los eventos asignados a la acción pueden ser modificados."
-#: doc/classes/ProjectSettings.xml:572
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -59474,7 +59607,7 @@ msgstr ""
"eliminar ya que son necesarias para la lógica interna de varios [Control]s. "
"Sin embargo, los eventos asignados a la acción pueden ser modificados."
-#: doc/classes/ProjectSettings.xml:576
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -59486,7 +59619,7 @@ msgstr ""
"eliminar ya que son necesarias para la lógica interna de varios [Control]s. "
"Sin embargo, los eventos asignados a la acción pueden ser modificados."
-#: doc/classes/ProjectSettings.xml:580
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -59503,7 +59636,7 @@ msgstr ""
"eliminar ya que son necesarias para la lógica interna de varios [Control]s. "
"Sin embargo, los eventos asignados a la acción pueden ser modificados."
-#: doc/classes/ProjectSettings.xml:584
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -59520,7 +59653,7 @@ msgstr ""
"eliminar ya que son necesarias para la lógica interna de varios [Control]s. "
"Sin embargo, los eventos asignados a la acción pueden ser modificados."
-#: doc/classes/ProjectSettings.xml:588
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -59532,7 +59665,7 @@ msgstr ""
"eliminar ya que son necesarias para la lógica interna de varios [Control]s. "
"Sin embargo, los eventos asignados a la acción pueden ser modificados."
-#: doc/classes/ProjectSettings.xml:592
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -59546,7 +59679,7 @@ msgstr ""
"eliminar ya que son necesarias para la lógica interna de varios [Control]s. "
"Sin embargo, los eventos asignados a la acción pueden ser modificados."
-#: doc/classes/ProjectSettings.xml:596
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -59558,7 +59691,7 @@ msgstr ""
"eliminar ya que son necesarias para la lógica interna de varios [Control]s. "
"Sin embargo, los eventos asignados a la acción pueden ser modificados."
-#: doc/classes/ProjectSettings.xml:600
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -59570,7 +59703,7 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:606
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
@@ -59578,7 +59711,7 @@ msgstr ""
"Si [code]true[/code], envía eventos de entrada de ratón al tocar o deslizar "
"en la pantalla táctil."
-#: doc/classes/ProjectSettings.xml:609
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
@@ -59586,452 +59719,452 @@ msgstr ""
"Si [code]true[/code], envía eventos de entrada táctil al hacer clic o "
"arrastrar el ratón."
-#: doc/classes/ProjectSettings.xml:612
+#: doc/classes/ProjectSettings.xml:614
#, fuzzy
msgid "Default delay for touch events. This only affects iOS devices."
msgstr "Retraso predeterminado para las sugerencias (en segundos)."
-#: doc/classes/ProjectSettings.xml:615
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr "Nombre opcional para la capa 1 de la física 2D."
-#: doc/classes/ProjectSettings.xml:618
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr "Nombre opcional para la capa 10 de física 2D."
-#: doc/classes/ProjectSettings.xml:621
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr "Nombre opcional para la capa 11 de física 2D."
-#: doc/classes/ProjectSettings.xml:624
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr "Nombre opcional para la capa 12 de física 2D."
-#: doc/classes/ProjectSettings.xml:627
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr "Nombre opcional para la capa 13 de la física 2D."
-#: doc/classes/ProjectSettings.xml:630
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr "Nombre opcional para la capa 14 de la física 2D."
-#: doc/classes/ProjectSettings.xml:633
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr "Nombre opcional para la capa 15 de física 2D."
-#: doc/classes/ProjectSettings.xml:636
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr "Nombre opcional para la capa 15 de la física 2D."
-#: doc/classes/ProjectSettings.xml:639
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr "Nombre opcional para la capa 17 de la física 2D."
-#: doc/classes/ProjectSettings.xml:642
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr "Nombre opcional para la capa 18 de física 2D."
-#: doc/classes/ProjectSettings.xml:645
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr "Nombre opcional para la capa 19 de la física 2D."
-#: doc/classes/ProjectSettings.xml:648
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr "Nombre opcional para la capa 2 de física 2D."
-#: doc/classes/ProjectSettings.xml:651
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr "Nombre opcional para la capa 20 de física 2D."
-#: doc/classes/ProjectSettings.xml:654
+#: doc/classes/ProjectSettings.xml:656
#, fuzzy
msgid "Optional name for the 2D physics layer 21."
msgstr "Nombre opcional para la capa 2 de física 2D."
-#: doc/classes/ProjectSettings.xml:657
+#: doc/classes/ProjectSettings.xml:659
#, fuzzy
msgid "Optional name for the 2D physics layer 22."
msgstr "Nombre opcional para la capa 2 de física 2D."
-#: doc/classes/ProjectSettings.xml:660
+#: doc/classes/ProjectSettings.xml:662
#, fuzzy
msgid "Optional name for the 2D physics layer 23."
msgstr "Nombre opcional para la capa 2 de física 2D."
-#: doc/classes/ProjectSettings.xml:663
+#: doc/classes/ProjectSettings.xml:665
#, fuzzy
msgid "Optional name for the 2D physics layer 24."
msgstr "Nombre opcional para la capa 2 de física 2D."
-#: doc/classes/ProjectSettings.xml:666
+#: doc/classes/ProjectSettings.xml:668
#, fuzzy
msgid "Optional name for the 2D physics layer 25."
msgstr "Nombre opcional para la capa 2 de física 2D."
-#: doc/classes/ProjectSettings.xml:669
+#: doc/classes/ProjectSettings.xml:671
#, fuzzy
msgid "Optional name for the 2D physics layer 26."
msgstr "Nombre opcional para la capa 2 de física 2D."
-#: doc/classes/ProjectSettings.xml:672
+#: doc/classes/ProjectSettings.xml:674
#, fuzzy
msgid "Optional name for the 2D physics layer 27."
msgstr "Nombre opcional para la capa 2 de física 2D."
-#: doc/classes/ProjectSettings.xml:675
+#: doc/classes/ProjectSettings.xml:677
#, fuzzy
msgid "Optional name for the 2D physics layer 28."
msgstr "Nombre opcional para la capa 2 de física 2D."
-#: doc/classes/ProjectSettings.xml:678
+#: doc/classes/ProjectSettings.xml:680
#, fuzzy
msgid "Optional name for the 2D physics layer 29."
msgstr "Nombre opcional para la capa 2 de física 2D."
-#: doc/classes/ProjectSettings.xml:681
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr "Nombre opcional para la capa 3 de física 2D."
-#: doc/classes/ProjectSettings.xml:684
+#: doc/classes/ProjectSettings.xml:686
#, fuzzy
msgid "Optional name for the 2D physics layer 30."
msgstr "Nombre opcional para la capa 3 de física 2D."
-#: doc/classes/ProjectSettings.xml:687
+#: doc/classes/ProjectSettings.xml:689
#, fuzzy
msgid "Optional name for the 2D physics layer 31."
msgstr "Nombre opcional para la capa 3 de física 2D."
-#: doc/classes/ProjectSettings.xml:690
+#: doc/classes/ProjectSettings.xml:692
#, fuzzy
msgid "Optional name for the 2D physics layer 32."
msgstr "Nombre opcional para la capa 3 de física 2D."
-#: doc/classes/ProjectSettings.xml:693
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr "Nombre opcional para la capa 4 de física 2D."
-#: doc/classes/ProjectSettings.xml:696
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr "Nombre opcional para la capa 5 de física 2D."
-#: doc/classes/ProjectSettings.xml:699
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr "Nombre opcional para la capa 6 de física 2D."
-#: doc/classes/ProjectSettings.xml:702
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr "Nombre opcional para la capa 7 de física 2D."
-#: doc/classes/ProjectSettings.xml:705
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr "Nombre opcional para la capa 8 de física 2D."
-#: doc/classes/ProjectSettings.xml:708
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr "Nombre opcional para la capa 9 de física 2D."
-#: doc/classes/ProjectSettings.xml:711
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr "Nombre opcional para la capa 1 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:714
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr "Nombre opcional para la capa 10 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:717
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr "Nombre opcional para la capa 11 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:720
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr "Nombre opcional para la capa 12 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:723
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr "Nombre opcional para la capa 13 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:726
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr "Nombre opcional para la capa 14 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:729
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr "Nombre opcional para la capa 15 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:732
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr "Nombre opcional para la capa 16 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:735
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr "Nombre opcional para la capa 17 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:738
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr "Nombre opcional para la capa 18 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:741
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr "Nombre opcional para la capa 19 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:744
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr "Nombre opcional para la capa 2 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:747
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr "Nombre opcional para la capa 20 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:750
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr "Nombre opcional para la capa 3 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:753
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr "Nombre opcional para la capa 4 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:756
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr "Nombre opcional para la capa 5 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:759
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr "Nombre opcional para la capa 6 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:762
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr "Nombre opcional para la capa 7 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:765
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr "Nombre opcional para la capa 8 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:768
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr "Nombre opcional para la capa 9 del renderizado 2D."
-#: doc/classes/ProjectSettings.xml:771
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr "Nombre opcional para la capa 1 de la física 3D."
-#: doc/classes/ProjectSettings.xml:774
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr "Nombre opcional para la capa 10 de física 3D."
-#: doc/classes/ProjectSettings.xml:777
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr "Nombre opcional para la capa 11 de la física 3D."
-#: doc/classes/ProjectSettings.xml:780
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr "Nombre opcional para la capa 12 de física 3D."
-#: doc/classes/ProjectSettings.xml:783
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr "Nombre opcional para la capa 13 de la física 3D."
-#: doc/classes/ProjectSettings.xml:786
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr "Nombre opcional para la capa 14 de la física 3D."
-#: doc/classes/ProjectSettings.xml:789
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr "Nombre opcional para la capa 15 de la física 3D."
-#: doc/classes/ProjectSettings.xml:792
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr "Nombre opcional para la capa 16 de la física 3D."
-#: doc/classes/ProjectSettings.xml:795
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr "Nombre opcional para la capa 17 de la física 3D."
-#: doc/classes/ProjectSettings.xml:798
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr "Nombre opcional para la capa 18 de la física 3D."
-#: doc/classes/ProjectSettings.xml:801
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr "Nombre opcional para la capa 19 de la física 3D."
-#: doc/classes/ProjectSettings.xml:804
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr "Nombre opcional para la capa 2 de la física 3D."
-#: doc/classes/ProjectSettings.xml:807
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr "Nombre opcional para la capa 20 de física 3D."
-#: doc/classes/ProjectSettings.xml:810
+#: doc/classes/ProjectSettings.xml:812
#, fuzzy
msgid "Optional name for the 3D physics layer 21."
msgstr "Nombre opcional para la capa 2 de la física 3D."
-#: doc/classes/ProjectSettings.xml:813
+#: doc/classes/ProjectSettings.xml:815
#, fuzzy
msgid "Optional name for the 3D physics layer 22."
msgstr "Nombre opcional para la capa 2 de la física 3D."
-#: doc/classes/ProjectSettings.xml:816
+#: doc/classes/ProjectSettings.xml:818
#, fuzzy
msgid "Optional name for the 3D physics layer 23."
msgstr "Nombre opcional para la capa 2 de la física 3D."
-#: doc/classes/ProjectSettings.xml:819
+#: doc/classes/ProjectSettings.xml:821
#, fuzzy
msgid "Optional name for the 3D physics layer 24."
msgstr "Nombre opcional para la capa 2 de la física 3D."
-#: doc/classes/ProjectSettings.xml:822
+#: doc/classes/ProjectSettings.xml:824
#, fuzzy
msgid "Optional name for the 3D physics layer 25."
msgstr "Nombre opcional para la capa 2 de la física 3D."
-#: doc/classes/ProjectSettings.xml:825
+#: doc/classes/ProjectSettings.xml:827
#, fuzzy
msgid "Optional name for the 3D physics layer 26."
msgstr "Nombre opcional para la capa 2 de la física 3D."
-#: doc/classes/ProjectSettings.xml:828
+#: doc/classes/ProjectSettings.xml:830
#, fuzzy
msgid "Optional name for the 3D physics layer 27."
msgstr "Nombre opcional para la capa 2 de la física 3D."
-#: doc/classes/ProjectSettings.xml:831
+#: doc/classes/ProjectSettings.xml:833
#, fuzzy
msgid "Optional name for the 3D physics layer 28."
msgstr "Nombre opcional para la capa 2 de la física 3D."
-#: doc/classes/ProjectSettings.xml:834
+#: doc/classes/ProjectSettings.xml:836
#, fuzzy
msgid "Optional name for the 3D physics layer 29."
msgstr "Nombre opcional para la capa 2 de la física 3D."
-#: doc/classes/ProjectSettings.xml:837
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr "Nombre opcional para la capa 3 de física 3D."
-#: doc/classes/ProjectSettings.xml:840
+#: doc/classes/ProjectSettings.xml:842
#, fuzzy
msgid "Optional name for the 3D physics layer 30."
msgstr "Nombre opcional para la capa 3 de física 3D."
-#: doc/classes/ProjectSettings.xml:843
+#: doc/classes/ProjectSettings.xml:845
#, fuzzy
msgid "Optional name for the 3D physics layer 31."
msgstr "Nombre opcional para la capa 3 de física 3D."
-#: doc/classes/ProjectSettings.xml:846
+#: doc/classes/ProjectSettings.xml:848
#, fuzzy
msgid "Optional name for the 3D physics layer 32."
msgstr "Nombre opcional para la capa 3 de física 3D."
-#: doc/classes/ProjectSettings.xml:849
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr "Nombre opcional para la capa 4 de física 3D."
-#: doc/classes/ProjectSettings.xml:852
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr "Nombre opcional para la capa 5 de física 3D."
-#: doc/classes/ProjectSettings.xml:855
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr "Nombre opcional para la capa 6 de física 3D."
-#: doc/classes/ProjectSettings.xml:858
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr "Nombre opcional para la capa 7 de física 3D."
-#: doc/classes/ProjectSettings.xml:861
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr "Nombre opcional para la capa 8 de física 3D."
-#: doc/classes/ProjectSettings.xml:864
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr "Nombre opcional para la capa 9 de física 3D."
-#: doc/classes/ProjectSettings.xml:867
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr "Nombre opcional para la capa 1 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:870
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr "Nombre opcional para la capa 10 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:873
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr "Nombre opcional para la capa 11 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:876
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr "Nombre opcional para la capa 12 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:879
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr "Nombre opcional para la capa 13 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:882
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr "Nombre opcional para la capa 14 del renderizado 3D"
-#: doc/classes/ProjectSettings.xml:885
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr "Nombre opcional para la capa 15 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:888
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr "Nombre opcional para la capa 16 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:891
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr "Nombre opcional para la capa 17 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:894
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr "Nombre opcional para la capa 18 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:897
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr "Nombre opcional para la capa 19 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:900
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr "Nombre opcional para la capa 2 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:903
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr "Nombre opcional para la capa 20 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:906
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr "Nombre opcional para la capa 3 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:909
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr "Nombre opcional para la capa 4 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:912
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr "Nombre opcional para la capa 5 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:915
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr "Nombre opcional para la capa 6 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:918
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr "Nombre opcional para la capa 7 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:921
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr "Nombre opcional para la capa 8 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:924
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr "Nombre opcional para la capa 9 del renderizado 3D."
-#: doc/classes/ProjectSettings.xml:927
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
@@ -60039,7 +60172,7 @@ msgstr ""
"El lugar al que recurrir si una traducción no está disponible en un idioma "
"determinado. Si se deja vacío, se usará [code]en[/code] (inglés)."
-#: doc/classes/ProjectSettings.xml:930
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
@@ -60047,17 +60180,17 @@ msgstr ""
"Si no está vacío, este lugar se utilizará cuando se ejecute el proyecto "
"desde el editor."
-#: doc/classes/ProjectSettings.xml:933
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr "Si [code]true[/code], registra todos los resultados en archivos."
-#: doc/classes/ProjectSettings.xml:936
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:939
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
@@ -60065,13 +60198,13 @@ msgstr ""
"Camino a los registros dentro del proyecto. Se recomienda utilizar una ruta "
"[code]user://[/code]."
-#: doc/classes/ProjectSettings.xml:942
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
"Especifica la cantidad máxima de archivos de registro permitidos (utilizados "
"para la rotación)."
-#: doc/classes/ProjectSettings.xml:947
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
@@ -60080,7 +60213,7 @@ msgstr ""
"funciones. Si te quedas sin espacio en ella (verás un error), puedes "
"aumentar el tamaño aquí."
-#: doc/classes/ProjectSettings.xml:950
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -60092,7 +60225,7 @@ msgstr ""
"los solicite en los hilos. Si los servidores se paralizan con demasiada "
"frecuencia al cargar recursos en un hilo, aumente este número."
-#: doc/classes/ProjectSettings.xml:953
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
@@ -60102,7 +60235,7 @@ msgstr ""
"depurador. Por encima de este valor, el contenido se elimina. Esto ayuda a "
"no detener la conexión del depurador."
-#: doc/classes/ProjectSettings.xml:956
+#: doc/classes/ProjectSettings.xml:958
#, fuzzy
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
@@ -60113,7 +60246,7 @@ msgstr ""
"encima de este valor, el contenido se elimina. Esto ayuda a no detener la "
"conexión del depurador."
-#: doc/classes/ProjectSettings.xml:959
+#: doc/classes/ProjectSettings.xml:961
#, fuzzy
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
@@ -60124,7 +60257,7 @@ msgstr ""
"depurador. Por encima de este valor, el contenido se elimina. Esto ayuda a "
"no detener la conexión del depurador."
-#: doc/classes/ProjectSettings.xml:962
+#: doc/classes/ProjectSettings.xml:964
#, fuzzy
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
@@ -60135,7 +60268,7 @@ msgstr ""
"Por encima de este valor, el contenido se elimina. Esto ayuda a no detener "
"la conexión del depurador."
-#: doc/classes/ProjectSettings.xml:965
+#: doc/classes/ProjectSettings.xml:967
#, fuzzy
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
@@ -60145,52 +60278,52 @@ msgstr ""
"Tamaño por defecto del flujo de paquetes para deserializar los datos de "
"Godot. Por encima de este tamaño, los datos se eliminan."
-#: doc/classes/ProjectSettings.xml:968
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
"Tiempo de espera (en segundos) para los intentos de conexión usando TCP."
-#: doc/classes/ProjectSettings.xml:971
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr "Tamaño máximo (en kiB) para el buffer de entrada [WebRTCDataChannel]."
-#: doc/classes/ProjectSettings.xml:974
+#: doc/classes/ProjectSettings.xml:976
#, fuzzy
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr "Tamaño máximo (en kiB) para el buffer de entrada [WebRTCDataChannel]."
-#: doc/classes/ProjectSettings.xml:977
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:980
+#: doc/classes/ProjectSettings.xml:982
#, fuzzy
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr "Tamaño máximo (en kiB) para el buffer de entrada [WebRTCDataChannel]."
-#: doc/classes/ProjectSettings.xml:983
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:986
+#: doc/classes/ProjectSettings.xml:988
#, fuzzy
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr "Tamaño máximo (en kiB) para el buffer de entrada [WebRTCDataChannel]."
-#: doc/classes/ProjectSettings.xml:989
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:992
+#: doc/classes/ProjectSettings.xml:994
#, fuzzy
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr "Tamaño máximo (en kiB) para el buffer de entrada [WebRTCDataChannel]."
-#: doc/classes/ProjectSettings.xml:995
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:998
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
@@ -60199,12 +60332,12 @@ msgstr ""
"remoto. Los valores más altos disminuyen los efectos de la latencia a costa "
"de un mayor uso del ancho de banda."
-#: doc/classes/ProjectSettings.xml:1001
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
"Tamaño de la página utilizada por el sistema de archivos remoto (en bytes)."
-#: doc/classes/ProjectSettings.xml:1004
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -60221,7 +60354,7 @@ msgstr ""
"defecto.\n"
"En caso de duda, deje este ajuste vacío."
-#: doc/classes/ProjectSettings.xml:1008
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
@@ -60229,7 +60362,7 @@ msgstr ""
"Al crear los nombres de los nodos de forma automática, establezca el tipo de "
"carcasa en este proyecto. Esto es mayormente un ajuste de editor."
-#: doc/classes/ProjectSettings.xml:1011
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
@@ -60237,7 +60370,7 @@ msgstr ""
"Qué usar para separar el nombre del nodo del número. Esto es mayormente un "
"ajuste de editor."
-#: doc/classes/ProjectSettings.xml:1014
+#: doc/classes/ProjectSettings.xml:1016
#, fuzzy
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
@@ -60247,14 +60380,14 @@ msgstr ""
"Tamaño de la tabla hash usada para el algoritmo de la cuadrícula hash 2D de "
"fase ancha."
-#: doc/classes/ProjectSettings.xml:1018
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1022
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -60267,7 +60400,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1026
+#: doc/classes/ProjectSettings.xml:1028
#, fuzzy
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
@@ -60289,7 +60422,7 @@ msgstr ""
"PhysicsServer2D.AREA_PARAM_GRAVITY, 98)\n"
"[/codeblock]"
-#: doc/classes/ProjectSettings.xml:1034
+#: doc/classes/ProjectSettings.xml:1036
#, fuzzy
msgid ""
"The default gravity direction in 2D.\n"
@@ -60311,7 +60444,7 @@ msgstr ""
"get_space(), Servidor de Física2D.AREA_PARAM_GRAVITY_VECTOR, Vector2(0, 1))\n"
"[/codeblock]"
-#: doc/classes/ProjectSettings.xml:1042
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -60324,7 +60457,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1046
+#: doc/classes/ProjectSettings.xml:1048
#, fuzzy
msgid ""
"Threshold defining the surface size that constitutes a large object with "
@@ -60336,7 +60469,7 @@ msgstr ""
"con respecto a las células en el algoritmo de la cuadrícula hash 2D de fase "
"ancha."
-#: doc/classes/ProjectSettings.xml:1050
+#: doc/classes/ProjectSettings.xml:1052
#, fuzzy
msgid ""
"Sets which physics engine to use for 2D physics.\n"
@@ -60347,7 +60480,7 @@ msgstr ""
"\"DEFAULT\" y \"GodotPhysics2D\" son lo mismo, ya que actualmente no hay "
"ningún servidor de física 2D alternativo implementado."
-#: doc/classes/ProjectSettings.xml:1054
+#: doc/classes/ProjectSettings.xml:1056
#, fuzzy
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
@@ -60358,7 +60491,7 @@ msgstr ""
"inactivo. Ver [constant PhysicsServer2D."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
-#: doc/classes/ProjectSettings.xml:1057
+#: doc/classes/ProjectSettings.xml:1059
#, fuzzy
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
@@ -60369,7 +60502,7 @@ msgstr ""
"inactivo. Ver [constant PhysicsServer2D."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
-#: doc/classes/ProjectSettings.xml:1060
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -60385,7 +60518,7 @@ msgstr ""
"de un modelo de hilo multi-hilo para la física. Asegúrate de evaluar si te "
"da un rendimiento extra y no hay regresiones al usarlo."
-#: doc/classes/ProjectSettings.xml:1064
+#: doc/classes/ProjectSettings.xml:1066
#, fuzzy
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
@@ -60395,13 +60528,13 @@ msgstr ""
"ponga a dormir. Ver [constant PhysicsServer2D."
"SPACE_PARAM_BODY_TIME_TO_SLEEP]."
-#: doc/classes/ProjectSettings.xml:1067
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1070
+#: doc/classes/ProjectSettings.xml:1072
#, fuzzy
msgid ""
"Sets whether the 3D physics world will be created with support for "
@@ -60410,7 +60543,7 @@ msgstr ""
"Establece si el mundo de la física 3D se creará con soporte para la física "
"[SoftBody3D]. Sólo se aplica al motor de física de Bullet."
-#: doc/classes/ProjectSettings.xml:1073
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -60423,7 +60556,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1077
+#: doc/classes/ProjectSettings.xml:1079
#, fuzzy
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
@@ -60445,7 +60578,7 @@ msgstr ""
"PhysicsServer3D.AREA_PARAM_GRAVITY, 9.8)\n"
"[/codeblock]"
-#: doc/classes/ProjectSettings.xml:1085
+#: doc/classes/ProjectSettings.xml:1087
#, fuzzy
msgid ""
"The default gravity direction in 3D.\n"
@@ -60467,7 +60600,7 @@ msgstr ""
"PhysicsServer3D.AREA_PARAM_GRAVITY_VECTOR, Vector3(0, -1, 0))\n"
"[/codeblock]"
-#: doc/classes/ProjectSettings.xml:1093
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -60480,13 +60613,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1097
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1100
+#: doc/classes/ProjectSettings.xml:1102
#, fuzzy
msgid ""
"Sets which physics engine to use for 3D physics.\n"
@@ -60499,11 +60632,11 @@ msgstr ""
"org]Bullet[/url]. El motor de \"GodotPhysics3D\" sigue siendo soportado como "
"una alternativa."
-#: doc/classes/ProjectSettings.xml:1104
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr "Habilita [member Viewport.physics_object_picking] en el viewport raíz."
-#: doc/classes/ProjectSettings.xml:1107
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -60517,7 +60650,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1113
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -60532,7 +60665,7 @@ msgstr ""
"cambiar el FPS de física en tiempo de ejecución, establece [member Engine."
"iterations_per_second] en su lugar."
-#: doc/classes/ProjectSettings.xml:1117
+#: doc/classes/ProjectSettings.xml:1119
#, fuzzy
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
@@ -60557,7 +60690,7 @@ msgstr ""
"mayoría; los valores superiores a 2 podrían hacer que el juego reaccionara a "
"los fotogramas caídos con un retraso notable y no se recomiendan."
-#: doc/classes/ProjectSettings.xml:1122
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -60567,7 +60700,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1126
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -60577,7 +60710,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1130
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -60588,7 +60721,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1134
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -60598,7 +60731,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1138
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -60606,7 +60739,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1142
+#: doc/classes/ProjectSettings.xml:1144
#, fuzzy
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
@@ -60626,7 +60759,7 @@ msgstr ""
"backend de renderizado GLES2, y sólo a las plataformas de escritorio. No es "
"necesaria cuando se utiliza el backend de Vulkan."
-#: doc/classes/ProjectSettings.xml:1146
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -60641,7 +60774,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1152
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -60650,13 +60783,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1157
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1160
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -60665,7 +60798,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1163
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -60675,7 +60808,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1166
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -60687,7 +60820,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1169
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -60697,24 +60830,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1172
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1175
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1178
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1181
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -60723,7 +60856,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1184
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -60731,7 +60864,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1187
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -60740,7 +60873,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1190
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -60750,7 +60883,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1194
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -60758,31 +60891,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1198
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1201
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1204
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1207
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1210
+#: doc/classes/ProjectSettings.xml:1212
#, fuzzy
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
@@ -60796,7 +60929,7 @@ msgstr ""
"predeterminado de forma programada, utilice el [method RenderingServer."
"set_default_clear_color]."
-#: doc/classes/ProjectSettings.xml:1213
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -60812,21 +60945,21 @@ msgstr ""
"reserva, es mejor borrar [code]default_env.tres[/code], o especificar aquí "
"un entorno por defecto diferente."
-#: doc/classes/ProjectSettings.xml:1216
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1219
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
"iOS specific override for [member rendering/gles2/compatibility/"
"disable_half_float], due to poor support for half-float vertex compression "
"on many devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
"If [code]true[/code] and available on the target Android device, enables "
"high floating point precision for all shader computations in GLES2.\n"
@@ -60834,31 +60967,31 @@ msgid ""
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1226
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1229
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1232
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1235
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1238
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -60866,7 +60999,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1241
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -60876,7 +61009,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1244
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -60885,7 +61018,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1247
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -60894,14 +61027,14 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1250
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1253
+#: doc/classes/ProjectSettings.xml:1255
#, fuzzy
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
@@ -60912,7 +61045,7 @@ msgstr ""
"Este algoritmo sólo es compatible con las plataformas y consolas de "
"escritorio."
-#: doc/classes/ProjectSettings.xml:1256
+#: doc/classes/ProjectSettings.xml:1258
#, fuzzy
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
@@ -60929,7 +61062,7 @@ msgstr ""
"[code]6[/code] pero podría cambiar en el futuro debido a las actualizaciones "
"subyacentes de zlib."
-#: doc/classes/ProjectSettings.xml:1259
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -60937,7 +61070,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -60946,7 +61079,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1266
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -60956,13 +61089,13 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1275
+#: doc/classes/ProjectSettings.xml:1277
#, fuzzy
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
@@ -60973,7 +61106,7 @@ msgstr ""
"cinematico. Si [code]false[/code], las colisiones se manejarán como un "
"cuerpo estático."
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -60982,13 +61115,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -60998,14 +61131,14 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1294
+#: doc/classes/ProjectSettings.xml:1296
#, fuzzy
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
@@ -61015,7 +61148,7 @@ msgstr ""
"size] en los dispositivos móviles, debido a problemas de rendimiento o de "
"compatibilidad con el controlador."
-#: doc/classes/ProjectSettings.xml:1297
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
@@ -61023,7 +61156,7 @@ msgstr ""
"Desactiva el paso previo de profundidad para algunos fabricantes de GPU "
"(normalmente móviles), ya que su arquitectura ya lo hace."
-#: doc/classes/ProjectSettings.xml:1300
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
@@ -61033,7 +61166,7 @@ msgstr ""
"renderizar los materiales. Esto aumenta el rendimiento en escenas con alto "
"sobregiro, cuando se utilizan materiales complejos e iluminación."
-#: doc/classes/ProjectSettings.xml:1303
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
@@ -61043,7 +61176,7 @@ msgstr ""
"en sombras más nítidas, a costa del rendimiento. El valor se redondeará a la "
"potencia más cercana de 2."
-#: doc/classes/ProjectSettings.xml:1306
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
@@ -61052,7 +61185,7 @@ msgstr ""
"directional_shadow/size] en los dispositivos móviles, debido a problemas de "
"rendimiento o de apoyo al driver."
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1311
#, fuzzy
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
@@ -61070,7 +61203,7 @@ msgstr ""
"[code]OS.get_current_video_driver[/code] para consultarla en tiempo de "
"ejecución."
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -61082,7 +61215,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1317
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -61090,7 +61223,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1322
#, fuzzy
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
@@ -61105,7 +61238,7 @@ msgstr ""
"[b]Nota:[/b] La MSAA no está disponible en la exportación a HTML5 utilizando "
"el backend GLES2."
-#: doc/classes/ProjectSettings.xml:1324
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -61114,7 +61247,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1327
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -61128,7 +61261,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1332
+#: doc/classes/ProjectSettings.xml:1334
#, fuzzy
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
@@ -61143,7 +61276,7 @@ msgstr ""
"la imagen se vea borrosa, especialmente en resoluciones más bajas. Puede "
"funcionar relativamente bien en resoluciones grandes como 1440p y 4K."
-#: doc/classes/ProjectSettings.xml:1335
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -61158,7 +61291,7 @@ msgstr ""
"de memoria. Si [code]false[/code], se utiliza el filtrado lineal de mipmaps "
"(también llamado \"filtrado trilíneo\")."
-#: doc/classes/ProjectSettings.xml:1338
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -61174,7 +61307,7 @@ msgstr ""
"[code]DEPTH_TEXTURE[/code] no estarán disponibles en los shaders y los "
"efectos de post-procesamiento no estarán disponibles en el [Environment]."
-#: doc/classes/ProjectSettings.xml:1341
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
@@ -61184,14 +61317,14 @@ msgstr ""
"framebuffer_allocation] en los dispositivos móviles, debido a problemas de "
"rendimiento o de compatibilidad con el controlador."
-#: doc/classes/ProjectSettings.xml:1344
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1347
+#: doc/classes/ProjectSettings.xml:1349
#, fuzzy
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
@@ -61201,27 +61334,27 @@ msgstr ""
"force_vertex_shading] en los dispositivos móviles, debido a problemas de "
"rendimiento o de compatibilidad con el controlador."
-#: doc/classes/ProjectSettings.xml:1350
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1353
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1356
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1359
+#: doc/classes/ProjectSettings.xml:1361
#, fuzzy
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
@@ -61232,7 +61365,7 @@ msgstr ""
"reflections/ggx_samples] en dispositivos móviles, debido a problemas de "
"rendimiento o de compatibilidad con el controlador."
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -61243,7 +61376,7 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1366
+#: doc/classes/ProjectSettings.xml:1368
#, fuzzy
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
@@ -61256,7 +61389,7 @@ msgstr ""
"significativamente más lento de calcular y utiliza [member rendering/quality/"
"reflections/roughness_layers] veces más memoria."
-#: doc/classes/ProjectSettings.xml:1369
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
@@ -61266,7 +61399,7 @@ msgstr ""
"reflections/texture_array_reflections] en dispositivos móviles, debido a "
"problemas de rendimiento o compatibilidad con el controlador."
-#: doc/classes/ProjectSettings.xml:1372
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
@@ -61274,7 +61407,7 @@ msgstr ""
"Si [code]true[/code], utiliza un modelo Blinn más rápido pero de menor "
"calidad para generar reflejos borrosos en lugar del modelo GGX."
-#: doc/classes/ProjectSettings.xml:1375
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
@@ -61284,7 +61417,7 @@ msgstr ""
"shadinging/force_blinn_over_ggx] en los dispositivos móviles, debido a "
"problemas de rendimiento o de soporte de los conductores."
-#: doc/classes/ProjectSettings.xml:1378
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
@@ -61292,7 +61425,7 @@ msgstr ""
"Si [code]true[/code], utiliza un modelo de iluminación de material Lambert "
"más rápido pero de menor calidad en lugar del Burley."
-#: doc/classes/ProjectSettings.xml:1381
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
@@ -61302,7 +61435,7 @@ msgstr ""
"shadinging/force_lambert_over_burley] en los dispositivos móviles, debido a "
"problemas de rendimiento o de apoyo al conductor."
-#: doc/classes/ProjectSettings.xml:1384
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
@@ -61313,7 +61446,7 @@ msgstr ""
"la calidad enormemente. Se puede utilizar para optimizar el rendimiento en "
"dispositivos móviles de gama baja."
-#: doc/classes/ProjectSettings.xml:1387
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
@@ -61323,7 +61456,7 @@ msgstr ""
"force_vertex_shading] en los dispositivos móviles, debido a problemas de "
"rendimiento o de compatibilidad con el controlador."
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -61334,7 +61467,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1394
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -61343,8 +61476,8 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400
-#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
@@ -61352,7 +61485,7 @@ msgstr ""
"Tamaño del cuadrante de subdivisión para el mapeo de sombras. Ver la "
"documentación del mapeo de sombras."
-#: doc/classes/ProjectSettings.xml:1409
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
@@ -61360,7 +61493,7 @@ msgstr ""
"Tamaño para el atlas de sombras (usado para OmniLights y SpotLights). Vea la "
"documentación."
-#: doc/classes/ProjectSettings.xml:1412
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
@@ -61369,7 +61502,7 @@ msgstr ""
"size] en los dispositivos móviles, debido a problemas de rendimiento o de "
"compatibilidad con el controlador."
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -61380,7 +61513,7 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1419
+#: doc/classes/ProjectSettings.xml:1421
#, fuzzy
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
@@ -61390,14 +61523,14 @@ msgstr ""
"size] en los dispositivos móviles, debido a problemas de rendimiento o de "
"compatibilidad con el controlador."
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1426
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -61409,47 +61542,47 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1436
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1439
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1442
+#: doc/classes/ProjectSettings.xml:1444
#, fuzzy
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr "La fuerza del efecto de dispersión del subsuelo."
-#: doc/classes/ProjectSettings.xml:1445
+#: doc/classes/ProjectSettings.xml:1447
#, fuzzy
msgid "Max radius used for subsurface scattering samples."
msgstr "La fuerza del efecto de dispersión del subsuelo."
-#: doc/classes/ProjectSettings.xml:1448
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1451
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1454
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
@@ -61459,7 +61592,7 @@ msgstr ""
"mejorar enormemente el rendimiento, pero la sincronización con el hilo "
"principal puede causar un poco más de temblor."
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -61467,7 +61600,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1463
#, fuzzy
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
@@ -61485,7 +61618,7 @@ msgstr ""
"de texturas sólo está soportado en plataformas de escritorio, y sólo cuando "
"se utiliza el renderizador Vulkan."
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1467
#, fuzzy
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
@@ -61502,7 +61635,7 @@ msgstr ""
"de texturas sólo está soportado en plataformas de escritorio, y sólo cuando "
"se utiliza el renderizador Vulkan."
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1471
#, fuzzy
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
@@ -61519,7 +61652,7 @@ msgstr ""
"de texturas sólo está soportado en plataformas de escritorio, y sólo cuando "
"se utiliza el renderizador Vulkan."
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1475
#, fuzzy
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
@@ -61536,7 +61669,7 @@ msgstr ""
"de texturas sólo está soportado en plataformas de escritorio, y sólo cuando "
"se utiliza el renderizador Vulkan."
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1479
#, fuzzy
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
@@ -61553,7 +61686,7 @@ msgstr ""
"de texturas sólo está soportado en plataformas de escritorio, y sólo cuando "
"se utiliza el renderizador Vulkan."
-#: doc/classes/ProjectSettings.xml:1481
+#: doc/classes/ProjectSettings.xml:1483
#, fuzzy
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
@@ -62438,14 +62571,22 @@ msgstr ""
"Devuelve [code]true[/code] si este [Rect2] encierra completamente otro."
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
-msgstr "Devuelve este [Rect2] ampliado para incluir un punto determinado."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
+msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr "Devuelve el área de la [Rect2]."
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
@@ -62453,7 +62594,7 @@ msgstr ""
"Devuelve una copia del [Rect2] crecido una cantidad dada de unidades hacia "
"todos los lados."
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
@@ -62461,7 +62602,7 @@ msgstr ""
"Devuelve una copia del [Rect2] crecido una cantidad dada de unidades hacia "
"todos los lados."
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
@@ -62469,15 +62610,21 @@ msgstr ""
"Devuelve una copia del [Rect2] crecido una cantidad dada de unidades hacia "
"la dirección del [enum Margin]."
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr "Devuelve [code]true[/code] si la [Rect2] está plana o vacía."
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
-msgstr "Devuelve [code]true[/code] si la [Rect2] contiene un punto."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
+msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -62489,7 +62636,7 @@ msgstr ""
"Si [code]include_borders[/code] es [code]true[/code], también se considerará "
"que se superponen si sus bordes se tocan, incluso sin intersección."
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
@@ -62499,7 +62646,7 @@ msgstr ""
"aproximadamente iguales, llamando a [code]is_equal_approx[/code] en cada "
"componente."
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
"Devuelve un [Rect2] más grande que contiene este [Rect2] y [code]b[/code]."
@@ -65637,6 +65784,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -65654,7 +65817,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -65662,11 +65825,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -65676,19 +65839,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -72744,12 +72907,15 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-"Adición de vértices de una determinada superficie [Mesh] al array de "
-"vértices actual con la [Transform] especificada."
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
@@ -72757,13 +72923,13 @@ msgstr ""
"Llamado antes de añadir cualquier vértice. Toma el tipo primitivo como "
"argumento (por ejemplo, [constant Mesh.PRIMITIVE_TRIANGLES])."
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
"Despeja toda la información pasada a la herramienta de la superficie hasta "
"ahora."
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
#, fuzzy
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
@@ -72781,7 +72947,7 @@ msgstr ""
"constantes [code]ARRAY_COMPRESS_*[/code] en [enum Mesh.ArrayFormat] para "
"otras banderas."
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
@@ -72791,11 +72957,11 @@ msgstr ""
"add_surface_from_arrays]. De esta manera se puede seguir procesando los "
"datos de la malla usando la API [ArrayMesh]."
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr "Crea un array de vértices a partir de una [Mesh] existente."
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
@@ -72804,11 +72970,11 @@ msgstr ""
"[Mesh] existente. Esto puede ser usado para extraer una pose específica de "
"una forma de mezcla."
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr "Elimina el array de índices expandiendo el array de vértices."
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -72820,7 +72986,7 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
#, fuzzy
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
@@ -72829,7 +72995,7 @@ msgstr ""
"Genera un vector tangente para cada vértice. Requiere que cada vértice tenga "
"ya fijados los UV y los normales."
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
#, fuzzy
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
@@ -72838,7 +73004,7 @@ msgstr ""
"Encoge el array de vértices creando un array de índices (evita la "
"reutilización de los vértices)."
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
"Establece [Material] para ser usado por la [Mesh] que estás construyendo."
@@ -92249,6 +92415,40 @@ msgstr ""
"Si es [code]true[/code], los nodos hijos son ordenados, de lo contrario el "
"ordenado está deshabilitado."
+#~ msgid "Returns this [AABB] expanded to include a given point."
+#~ msgstr "Devuelve este [AABB] ampliado para incluir un punto dado."
+
+#, fuzzy
+#~ msgid "Returns the [Physics2DDirectBodyState] of the body."
+#~ msgstr "Devuelve el [PhysicsDirectBodyState2D] del cuerpo."
+
+#, fuzzy
+#~ msgid "Returns the [PhysicsDirectBodyState] of the body."
+#~ msgstr "Devuelve el [PhysicsDirectBodyState2D] del cuerpo."
+
+#~ msgid ""
+#~ "Output latency in milliseconds for audio. Lower values will result in "
+#~ "lower audio latency at the cost of increased CPU usage. Low values may "
+#~ "result in audible cracking on slower hardware."
+#~ msgstr ""
+#~ "La latencia de salida en milisegundos para el audio. Valores más bajos "
+#~ "resultarán en una menor latencia de audio a costa de un mayor uso de la "
+#~ "CPU. Valores bajos pueden resultar en un cracking audible en un hardware "
+#~ "más lento."
+
+#~ msgid "Returns this [Rect2] expanded to include a given point."
+#~ msgstr "Devuelve este [Rect2] ampliado para incluir un punto determinado."
+
+#~ msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#~ msgstr "Devuelve [code]true[/code] si la [Rect2] contiene un punto."
+
+#~ msgid ""
+#~ "Append vertices from a given [Mesh] surface onto the current vertex array "
+#~ "with specified [Transform]."
+#~ msgstr ""
+#~ "Adición de vértices de una determinada superficie [Mesh] al array de "
+#~ "vértices actual con la [Transform] especificada."
+
#, fuzzy
#~ msgid ""
#~ "Returns a list of intersecting [Area]s. For performance reasons "
diff --git a/doc/translations/fa.po b/doc/translations/fa.po
index 0ee48c3c05..b3ae3e927c 100644
--- a/doc/translations/fa.po
+++ b/doc/translations/fa.po
@@ -4030,112 +4030,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -5213,7 +5222,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -10612,17 +10621,21 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10631,24 +10644,24 @@ msgid ""
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10662,62 +10675,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10725,35 +10738,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10761,13 +10774,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10779,77 +10792,77 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr ""
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:131
+#: doc/classes/BakedLightmap.xml:132
msgid ""
"Returns if lightmapper can't be created. Unless you are using a custom "
"lightmapper, please report this as bug."
msgstr ""
-#: doc/classes/BakedLightmap.xml:134
+#: doc/classes/BakedLightmap.xml:135
msgid ""
"There is no root node to start baking from. Either provide [code]from_node[/"
"code] argument or attach this node to a parent that should be used as root."
msgstr ""
-#: doc/classes/BakedLightmap.xml:137
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:140
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:143
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:146
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -11305,8 +11318,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -25318,21 +25334,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -25341,14 +25368,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -25358,80 +25389,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -29647,7 +29678,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30959,7 +30992,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -31024,22 +31058,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -31054,7 +31090,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -31062,19 +31098,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -31145,7 +31181,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -31203,7 +31240,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -34752,7 +34791,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -38065,7 +38104,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -38095,14 +38134,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -38112,7 +38151,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40609,17 +40648,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40637,11 +40702,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40836,7 +40901,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41638,6 +41705,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41655,7 +41740,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41769,7 +41854,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -44310,24 +44397,30 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:282
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:285
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:288
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44337,7 +44430,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:291
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44347,27 +44440,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:294
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:297
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:300
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:303
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -44375,81 +44468,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:306
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:309
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:312
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:315
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:318
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:321
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:324
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:327
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:330
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:333
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:336
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:339
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:342
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -44457,109 +44550,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:345
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:348
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:351
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:354
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:357
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:360
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:363
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:366
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:369
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:372
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:375
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:378
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:381
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:384
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:387
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:390
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:393
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:396
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:399
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44570,91 +44663,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:404
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:407
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:410
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:413
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:416
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:419
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:422
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:425
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:428
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:431
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:434
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:437
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:440
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:443
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:446
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:449
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:452
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44663,13 +44756,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:456
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:459
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44679,7 +44772,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:464
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44687,19 +44780,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:469
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:473
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:477
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44713,45 +44806,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:482
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:485
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:489
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:492
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:495
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:498
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:501
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44760,7 +44853,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:504
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44771,7 +44864,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:508
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44787,14 +44880,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:516
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:519
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44802,49 +44895,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:522
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:525
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:530
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:533
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:536
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:539
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:542
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:545
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:548
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44853,7 +44946,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:552
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44861,7 +44954,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:556
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44869,7 +44962,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:560
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44879,7 +44972,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:564
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44888,7 +44981,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:568
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44897,7 +44990,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:572
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44907,7 +45000,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:576
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44915,7 +45008,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:580
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44925,7 +45018,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:584
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44935,7 +45028,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:588
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44943,7 +45036,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:592
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44952,7 +45045,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:596
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44960,7 +45053,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:600
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44972,477 +45065,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:606
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:609
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:612
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:615
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:618
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:621
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:624
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:627
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:630
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:633
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:636
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:639
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:642
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:645
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:648
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:651
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:654
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:657
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:660
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:663
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:666
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:669
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:672
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:675
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:678
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:681
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:684
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:687
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:690
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:693
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:696
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:699
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:702
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:705
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:708
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:711
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:714
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:717
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:720
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:723
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:726
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:729
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:732
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:735
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:738
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:741
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:744
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:747
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:750
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:753
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:756
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:759
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:762
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:765
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:768
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:771
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:774
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:777
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:780
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:783
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:786
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:789
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:792
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:795
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:798
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:801
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:804
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:807
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:810
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:813
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:816
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:819
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:822
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:825
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:828
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:831
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:834
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:837
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:840
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:843
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:846
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:849
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:852
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:855
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:858
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:861
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:864
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:867
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:870
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:873
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:876
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:879
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:882
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:885
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:888
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:891
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:894
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:897
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:900
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:903
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:906
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:909
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:912
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:915
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:918
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:921
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:924
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:927
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:930
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:933
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:936
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:939
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:942
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:947
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:950
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -45450,92 +45543,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:953
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:956
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:959
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:962
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:965
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:968
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:971
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:974
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:977
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:980
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:983
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:986
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:989
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:992
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:995
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:998
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1001
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1004
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -45545,33 +45638,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1008
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1011
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1014
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1018
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1022
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45584,7 +45677,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1026
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45596,7 +45689,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1034
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45608,7 +45701,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1042
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45621,7 +45714,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1046
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45629,28 +45722,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1050
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1054
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1057
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1060
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45660,25 +45753,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1064
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1067
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1070
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1073
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45691,7 +45784,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1077
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45703,7 +45796,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1085
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45715,7 +45808,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1093
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45728,13 +45821,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1097
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1100
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45742,11 +45835,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1104
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1107
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45760,7 +45853,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1113
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45769,7 +45862,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1117
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45785,7 +45878,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1122
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45795,7 +45888,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1126
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45805,7 +45898,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1130
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45816,7 +45909,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1134
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45826,7 +45919,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1138
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45834,7 +45927,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1142
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45845,7 +45938,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1146
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45860,7 +45953,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1152
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45869,13 +45962,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1157
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1160
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45884,7 +45977,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1163
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45894,7 +45987,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1166
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45906,7 +45999,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1169
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45916,24 +46009,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1172
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1175
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1178
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1181
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45942,7 +46035,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1184
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45950,7 +46043,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1187
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45959,7 +46052,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1190
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45969,7 +46062,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1194
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45977,31 +46070,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1198
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1201
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1204
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1207
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1210
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -46009,7 +46102,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1213
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -46019,21 +46112,21 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1216
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1219
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
"iOS specific override for [member rendering/gles2/compatibility/"
"disable_half_float], due to poor support for half-float vertex compression "
"on many devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
"If [code]true[/code] and available on the target Android device, enables "
"high floating point precision for all shader computations in GLES2.\n"
@@ -46041,31 +46134,31 @@ msgid ""
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1226
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1229
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1232
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1235
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1238
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -46073,7 +46166,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1241
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -46083,7 +46176,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1244
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -46092,7 +46185,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1247
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -46101,20 +46194,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1250
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1253
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1256
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -46123,7 +46216,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1259
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -46131,7 +46224,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -46140,7 +46233,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1266
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -46150,20 +46243,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1275
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -46172,13 +46265,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -46188,46 +46281,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1294
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1297
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1300
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1303
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1306
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -46237,7 +46330,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -46249,7 +46342,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1317
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -46257,7 +46350,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -46265,7 +46358,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1324
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -46274,7 +46367,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1327
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -46288,7 +46381,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1332
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -46298,7 +46391,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1335
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -46307,7 +46400,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1338
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -46317,54 +46410,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1341
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1344
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1347
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1350
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1353
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1356
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1359
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -46375,61 +46468,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1366
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1369
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1372
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1375
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1378
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1381
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1384
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1387
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -46440,7 +46533,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1394
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -46449,26 +46542,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400
-#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1409
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1412
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -46479,20 +46572,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1419
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1426
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -46504,52 +46597,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1436
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1439
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1442
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1445
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1448
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1451
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1454
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -46557,7 +46650,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -46570,7 +46663,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46582,7 +46675,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46594,7 +46687,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46606,7 +46699,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46618,7 +46711,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1481
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -47286,40 +47379,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -47327,14 +47434,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49669,6 +49776,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49686,7 +49809,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49694,11 +49817,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49708,19 +49831,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -55135,20 +55258,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -55159,28 +55287,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -55192,19 +55320,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
diff --git a/doc/translations/fi.po b/doc/translations/fi.po
index e508724a41..c28650af80 100644
--- a/doc/translations/fi.po
+++ b/doc/translations/fi.po
@@ -3609,112 +3609,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4792,7 +4801,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -10189,17 +10198,21 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10208,24 +10221,24 @@ msgid ""
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10239,62 +10252,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10302,35 +10315,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10338,13 +10351,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10356,78 +10369,78 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
#, fuzzy
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr "Palauttaa parametrien arkustangentin."
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:131
+#: doc/classes/BakedLightmap.xml:132
msgid ""
"Returns if lightmapper can't be created. Unless you are using a custom "
"lightmapper, please report this as bug."
msgstr ""
-#: doc/classes/BakedLightmap.xml:134
+#: doc/classes/BakedLightmap.xml:135
msgid ""
"There is no root node to start baking from. Either provide [code]from_node[/"
"code] argument or attach this node to a parent that should be used as root."
msgstr ""
-#: doc/classes/BakedLightmap.xml:137
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:140
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:143
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:146
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10880,8 +10893,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -24893,21 +24909,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -24916,14 +24943,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -24933,80 +24964,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -29231,7 +29262,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30543,7 +30576,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30608,22 +30642,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30638,7 +30674,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30646,19 +30682,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30729,7 +30765,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30787,7 +30824,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -34333,7 +34372,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37647,7 +37686,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37677,14 +37716,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37694,7 +37733,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40181,17 +40220,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40209,11 +40274,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40408,7 +40473,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41211,6 +41278,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41228,7 +41313,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41342,7 +41427,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -43886,24 +43973,30 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:282
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:285
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:288
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43913,7 +44006,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:291
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43923,27 +44016,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:294
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:297
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:300
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:303
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -43951,81 +44044,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:306
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:309
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:312
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:315
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:318
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:321
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:324
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:327
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:330
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:333
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:336
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:339
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:342
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -44033,109 +44126,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:345
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:348
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:351
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:354
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:357
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:360
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:363
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:366
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:369
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:372
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:375
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:378
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:381
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:384
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:387
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:390
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:393
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:396
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:399
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44146,91 +44239,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:404
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:407
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:410
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:413
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:416
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:419
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:422
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:425
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:428
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:431
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:434
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:437
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:440
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:443
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:446
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:449
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:452
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44239,13 +44332,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:456
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:459
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44255,7 +44348,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:464
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44263,19 +44356,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:469
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:473
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:477
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44289,45 +44382,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:482
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:485
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:489
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:492
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:495
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:498
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:501
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44336,7 +44429,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:504
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44347,7 +44440,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:508
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44363,14 +44456,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:516
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:519
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44378,49 +44471,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:522
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:525
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:530
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:533
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:536
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:539
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:542
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:545
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:548
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44429,7 +44522,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:552
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44437,7 +44530,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:556
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44445,7 +44538,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:560
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44455,7 +44548,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:564
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44464,7 +44557,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:568
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44473,7 +44566,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:572
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44483,7 +44576,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:576
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44491,7 +44584,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:580
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44501,7 +44594,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:584
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44511,7 +44604,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:588
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44519,7 +44612,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:592
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44528,7 +44621,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:596
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44536,7 +44629,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:600
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44548,477 +44641,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:606
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:609
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:612
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:615
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:618
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:621
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:624
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:627
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:630
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:633
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:636
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:639
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:642
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:645
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:648
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:651
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:654
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:657
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:660
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:663
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:666
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:669
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:672
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:675
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:678
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:681
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:684
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:687
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:690
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:693
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:696
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:699
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:702
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:705
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:708
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:711
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:714
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:717
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:720
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:723
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:726
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:729
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:732
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:735
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:738
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:741
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:744
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:747
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:750
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:753
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:756
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:759
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:762
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:765
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:768
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:771
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:774
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:777
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:780
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:783
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:786
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:789
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:792
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:795
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:798
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:801
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:804
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:807
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:810
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:813
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:816
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:819
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:822
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:825
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:828
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:831
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:834
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:837
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:840
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:843
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:846
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:849
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:852
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:855
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:858
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:861
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:864
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:867
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:870
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:873
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:876
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:879
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:882
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:885
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:888
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:891
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:894
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:897
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:900
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:903
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:906
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:909
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:912
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:915
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:918
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:921
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:924
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:927
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:930
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:933
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:936
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:939
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:942
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:947
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:950
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -45026,92 +45119,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:953
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:956
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:959
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:962
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:965
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:968
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:971
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:974
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:977
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:980
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:983
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:986
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:989
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:992
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:995
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:998
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1001
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1004
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -45121,33 +45214,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1008
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1011
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1014
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1018
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1022
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45160,7 +45253,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1026
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45172,7 +45265,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1034
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45184,7 +45277,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1042
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45197,7 +45290,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1046
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45205,28 +45298,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1050
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1054
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1057
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1060
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45236,25 +45329,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1064
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1067
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1070
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1073
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45267,7 +45360,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1077
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45279,7 +45372,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1085
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45291,7 +45384,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1093
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45304,13 +45397,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1097
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1100
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45318,11 +45411,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1104
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1107
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45336,7 +45429,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1113
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45345,7 +45438,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1117
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45361,7 +45454,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1122
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45371,7 +45464,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1126
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45381,7 +45474,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1130
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45392,7 +45485,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1134
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45402,7 +45495,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1138
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45410,7 +45503,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1142
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45421,7 +45514,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1146
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45436,7 +45529,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1152
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45445,13 +45538,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1157
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1160
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45460,7 +45553,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1163
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45470,7 +45563,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1166
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45482,7 +45575,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1169
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45492,24 +45585,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1172
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1175
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1178
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1181
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45518,7 +45611,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1184
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45526,7 +45619,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1187
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45535,7 +45628,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1190
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45545,7 +45638,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1194
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45553,31 +45646,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1198
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1201
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1204
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1207
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1210
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45585,7 +45678,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1213
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45595,21 +45688,21 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1216
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1219
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
"iOS specific override for [member rendering/gles2/compatibility/"
"disable_half_float], due to poor support for half-float vertex compression "
"on many devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
"If [code]true[/code] and available on the target Android device, enables "
"high floating point precision for all shader computations in GLES2.\n"
@@ -45617,31 +45710,31 @@ msgid ""
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1226
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1229
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1232
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1235
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1238
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45649,7 +45742,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1241
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45659,7 +45752,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1244
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45668,7 +45761,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1247
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45677,20 +45770,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1250
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1253
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1256
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45699,7 +45792,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1259
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45707,7 +45800,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45716,7 +45809,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1266
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45726,20 +45819,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1275
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45748,13 +45841,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45764,46 +45857,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1294
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1297
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1300
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1303
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1306
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45813,7 +45906,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45825,7 +45918,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1317
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45833,7 +45926,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45841,7 +45934,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1324
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45850,7 +45943,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1327
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45864,7 +45957,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1332
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45874,7 +45967,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1335
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45883,7 +45976,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1338
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45893,54 +45986,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1341
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1344
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1347
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1350
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1353
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1356
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1359
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -45951,61 +46044,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1366
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1369
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1372
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1375
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1378
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1381
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1384
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1387
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -46016,7 +46109,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1394
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -46025,26 +46118,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400
-#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1409
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1412
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -46055,20 +46148,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1419
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1426
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -46080,52 +46173,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1436
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1439
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1442
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1445
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1448
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1451
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1454
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -46133,7 +46226,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -46146,7 +46239,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46158,7 +46251,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46170,7 +46263,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46182,7 +46275,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46194,7 +46287,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1481
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46856,40 +46949,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46897,14 +47004,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49235,6 +49342,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49252,7 +49375,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49260,11 +49383,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49274,19 +49397,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54701,20 +54824,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54725,28 +54853,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54758,19 +54886,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
diff --git a/doc/translations/fil.po b/doc/translations/fil.po
index 002a0c3f7f..58fec62601 100644
--- a/doc/translations/fil.po
+++ b/doc/translations/fil.po
@@ -3591,112 +3591,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4774,7 +4783,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -10173,17 +10182,21 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10192,24 +10205,24 @@ msgid ""
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10223,62 +10236,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10286,35 +10299,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10322,13 +10335,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10340,77 +10353,77 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr ""
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:131
+#: doc/classes/BakedLightmap.xml:132
msgid ""
"Returns if lightmapper can't be created. Unless you are using a custom "
"lightmapper, please report this as bug."
msgstr ""
-#: doc/classes/BakedLightmap.xml:134
+#: doc/classes/BakedLightmap.xml:135
msgid ""
"There is no root node to start baking from. Either provide [code]from_node[/"
"code] argument or attach this node to a parent that should be used as root."
msgstr ""
-#: doc/classes/BakedLightmap.xml:137
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:140
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:143
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:146
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10866,8 +10879,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -24879,21 +24895,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -24902,14 +24929,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -24919,80 +24950,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -29208,7 +29239,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30520,7 +30553,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30585,22 +30619,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30615,7 +30651,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30623,19 +30659,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30706,7 +30742,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30764,7 +30801,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -34307,7 +34346,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37620,7 +37659,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37650,14 +37689,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37667,7 +37706,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40152,17 +40191,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40180,11 +40245,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40379,7 +40444,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41181,6 +41248,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41198,7 +41283,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41312,7 +41397,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -43853,24 +43940,30 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:282
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:285
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:288
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43880,7 +43973,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:291
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43890,27 +43983,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:294
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:297
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:300
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:303
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -43918,81 +44011,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:306
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:309
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:312
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:315
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:318
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:321
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:324
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:327
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:330
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:333
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:336
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:339
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:342
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -44000,109 +44093,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:345
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:348
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:351
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:354
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:357
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:360
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:363
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:366
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:369
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:372
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:375
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:378
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:381
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:384
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:387
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:390
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:393
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:396
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:399
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44113,91 +44206,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:404
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:407
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:410
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:413
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:416
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:419
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:422
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:425
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:428
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:431
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:434
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:437
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:440
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:443
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:446
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:449
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:452
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44206,13 +44299,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:456
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:459
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44222,7 +44315,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:464
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44230,19 +44323,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:469
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:473
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:477
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44256,45 +44349,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:482
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:485
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:489
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:492
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:495
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:498
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:501
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44303,7 +44396,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:504
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44314,7 +44407,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:508
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44330,14 +44423,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:516
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:519
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44345,49 +44438,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:522
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:525
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:530
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:533
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:536
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:539
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:542
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:545
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:548
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44396,7 +44489,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:552
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44404,7 +44497,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:556
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44412,7 +44505,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:560
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44422,7 +44515,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:564
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44431,7 +44524,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:568
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44440,7 +44533,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:572
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44450,7 +44543,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:576
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44458,7 +44551,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:580
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44468,7 +44561,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:584
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44478,7 +44571,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:588
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44486,7 +44579,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:592
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44495,7 +44588,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:596
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44503,7 +44596,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:600
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44515,477 +44608,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:606
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:609
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:612
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:615
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:618
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:621
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:624
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:627
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:630
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:633
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:636
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:639
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:642
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:645
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:648
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:651
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:654
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:657
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:660
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:663
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:666
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:669
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:672
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:675
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:678
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:681
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:684
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:687
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:690
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:693
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:696
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:699
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:702
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:705
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:708
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:711
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:714
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:717
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:720
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:723
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:726
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:729
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:732
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:735
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:738
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:741
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:744
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:747
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:750
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:753
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:756
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:759
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:762
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:765
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:768
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:771
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:774
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:777
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:780
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:783
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:786
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:789
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:792
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:795
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:798
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:801
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:804
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:807
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:810
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:813
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:816
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:819
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:822
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:825
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:828
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:831
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:834
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:837
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:840
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:843
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:846
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:849
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:852
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:855
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:858
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:861
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:864
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:867
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:870
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:873
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:876
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:879
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:882
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:885
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:888
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:891
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:894
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:897
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:900
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:903
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:906
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:909
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:912
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:915
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:918
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:921
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:924
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:927
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:930
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:933
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:936
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:939
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:942
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:947
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:950
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -44993,92 +45086,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:953
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:956
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:959
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:962
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:965
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:968
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:971
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:974
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:977
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:980
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:983
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:986
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:989
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:992
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:995
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:998
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1001
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1004
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -45088,33 +45181,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1008
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1011
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1014
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1018
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1022
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45127,7 +45220,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1026
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45139,7 +45232,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1034
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45151,7 +45244,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1042
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45164,7 +45257,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1046
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45172,28 +45265,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1050
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1054
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1057
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1060
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45203,25 +45296,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1064
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1067
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1070
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1073
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45234,7 +45327,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1077
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45246,7 +45339,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1085
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45258,7 +45351,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1093
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45271,13 +45364,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1097
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1100
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45285,11 +45378,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1104
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1107
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45303,7 +45396,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1113
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45312,7 +45405,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1117
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45328,7 +45421,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1122
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45338,7 +45431,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1126
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45348,7 +45441,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1130
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45359,7 +45452,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1134
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45369,7 +45462,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1138
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45377,7 +45470,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1142
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45388,7 +45481,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1146
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45403,7 +45496,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1152
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45412,13 +45505,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1157
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1160
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45427,7 +45520,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1163
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45437,7 +45530,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1166
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45449,7 +45542,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1169
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45459,24 +45552,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1172
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1175
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1178
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1181
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45485,7 +45578,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1184
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45493,7 +45586,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1187
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45502,7 +45595,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1190
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45512,7 +45605,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1194
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45520,31 +45613,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1198
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1201
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1204
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1207
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1210
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45552,7 +45645,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1213
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45562,21 +45655,21 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1216
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1219
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
"iOS specific override for [member rendering/gles2/compatibility/"
"disable_half_float], due to poor support for half-float vertex compression "
"on many devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
"If [code]true[/code] and available on the target Android device, enables "
"high floating point precision for all shader computations in GLES2.\n"
@@ -45584,31 +45677,31 @@ msgid ""
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1226
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1229
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1232
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1235
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1238
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45616,7 +45709,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1241
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45626,7 +45719,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1244
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45635,7 +45728,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1247
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45644,20 +45737,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1250
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1253
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1256
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45666,7 +45759,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1259
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45674,7 +45767,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45683,7 +45776,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1266
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45693,20 +45786,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1275
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45715,13 +45808,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45731,46 +45824,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1294
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1297
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1300
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1303
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1306
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45780,7 +45873,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45792,7 +45885,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1317
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45800,7 +45893,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45808,7 +45901,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1324
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45817,7 +45910,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1327
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45831,7 +45924,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1332
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45841,7 +45934,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1335
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45850,7 +45943,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1338
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45860,54 +45953,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1341
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1344
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1347
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1350
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1353
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1356
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1359
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -45918,61 +46011,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1366
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1369
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1372
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1375
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1378
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1381
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1384
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1387
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -45983,7 +46076,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1394
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -45992,26 +46085,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400
-#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1409
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1412
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -46022,20 +46115,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1419
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1426
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -46047,52 +46140,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1436
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1439
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1442
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1445
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1448
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1451
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1454
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -46100,7 +46193,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -46113,7 +46206,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46125,7 +46218,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46137,7 +46230,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46149,7 +46242,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46161,7 +46254,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1481
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46825,40 +46918,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46866,14 +46973,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49208,6 +49315,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49225,7 +49348,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49233,11 +49356,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49247,19 +49370,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54674,20 +54797,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54698,28 +54826,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54731,19 +54859,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
diff --git a/doc/translations/fr.po b/doc/translations/fr.po
index c576784485..843666c2c2 100644
--- a/doc/translations/fr.po
+++ b/doc/translations/fr.po
@@ -45,13 +45,15 @@
# Rémi Verschelde <akien@godotengine.org>, 2021.
# blfr <contact.blfr@gmail.com>, 2021.
# Urbain <urbain.lantres@tutanota.com>, 2021.
+# syns <jpo.drt@gmail.com>, 2021.
+# Gallonigher <meduse1500@ovh.fr>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-10-31 13:39+0000\n"
-"Last-Translator: Urbain <urbain.lantres@tutanota.com>\n"
+"PO-Revision-Date: 2021-11-12 13:49+0000\n"
+"Last-Translator: Gallonigher <meduse1500@ovh.fr>\n"
"Language-Team: French <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/fr/>\n"
"Language: fr\n"
@@ -59,7 +61,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -237,27 +239,27 @@ msgid ""
"a message with clarifying details\n"
"[/codeblock]"
msgstr ""
-"Vérifie que la [code]condition[/code] est vraie ([code]true[/code]). Si la "
+"Vérifie que la [code]condition[/code] est vraie [code]true[/code]. Si la "
"[code]condition[/code] est fausse ([code]false[/code]), une erreur est "
"générée. Si le programme est lancé via l'éditeur, son exécution sera aussi "
"interrompue jusqu'à ce que vous le redémarriez. Cela peut être utilisé comme "
"une alternative plus radicale à [method push_error] pour rapporter des "
"erreurs aux développeurs de projets ou utilisateurs de plugins.\n"
"[b]Note :[/b] Par souci de performance, le code inclus dans [method assert] "
-"n'est exécuté dans dans les builds de débogage, ou quand vous lancez votre "
-"jeu depuis l'éditeur. N'incluez pas de code qui modifie l'état du script "
-"dans un appel à [method assert]. Sinon, votre projet aura un fonctionnement "
-"différent une fois exporté en build de production ([i]release[/i]).\n"
+"n'est exécuté dans les builds de débogage, ou quand vous lancez votre jeu "
+"depuis l'éditeur. N'incluez pas de code qui modifie l'état du script dans un "
+"appel à [method assert]. Sinon, votre projet aura un fonctionnement "
+"différent une fois exporté en build de production release.\n"
"L'argument facultatif [code]message[/code], s'il est donné, est affiché en "
-"plus du message générique « [i]Assertion failed[/i] » (Échec de "
-"l'assertion). Vous pouvez l'utiliser pour fournir des détails "
-"supplémentaires sur la raison de l'échec de l'assertion.\n"
+"plus du message générique \"Assertion failed\" (Échec de l'assertion). Vous "
+"pouvez l'utiliser pour fournir des détails supplémentaires sur la raison de "
+"l'échec de l'assertion.\n"
"[codeblock]\n"
"# Imaginez que nous voulons une vitesse toujours comprise entre 0 et 20.\n"
"speed = -10\n"
"assert(speed < 20) # Vrai, le programme continue\n"
"assert(speed >= 0) # Faux, le programme s'interrompt\n"
-"assert(speed >= 0 && speed < 20) # Vous pouvez aussi combiner les deux "
+"assert(speed >= 0 and speed < 20) # Vous pouvez aussi combiner les deux "
"conditions en une seule vérification\n"
"assert(speed < 20, \"speed = %f, mais la limite de vitesse est 20\" % speed) "
"# Affiche un message avec de plus amples détails\n"
@@ -516,7 +518,7 @@ msgstr ""
"- 1.0: Linéaire\n"
"- Supérieur à 1.0 (exclusif): Ease out\n"
"[/codeblock]\n"
-"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"[url=https ://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
"ease_cheatsheet.png]ease() curve values cheatsheet[/url]\n"
"Voir également [méthode smoothstep]. Si vous avez besoin de réaliser des "
"transitions plus avancées, utilisez [Tween] ou [AnimationPlayer]."
@@ -610,7 +612,7 @@ msgstr ""
" var x = 0.5 * i - 1.5\n"
" print(\"%4.1f %4.1f %4.1f\" % [x, fmod(x, 1.5), fposmod(x, 1.5)])\n"
"[/codeblock]\n"
-"Donne :\n"
+"Donne:\n"
"[codeblock]\n"
"-1.5 -0.0 0.0\n"
"-1.0 -1.0 0.5\n"
@@ -1172,7 +1174,7 @@ msgstr ""
"for i in range(-3, 4):\n"
" print(\"%2d %2d %2d\" % [i, i % 3, posmod(i, 3)])\n"
"[/codeblock]\n"
-"Donne :\n"
+"Donne:\n"
"[codeblock]\n"
"-3 0 0\n"
"-2 -2 1\n"
@@ -3548,6 +3550,8 @@ msgid ""
"A button on the right Oculus Touch controller, X button on the left "
"controller (also when used in OpenVR)."
msgstr ""
+"Bouton A sur le contrôleur Oculus Touch de droite, bouton X sur le "
+"contrôleur de gauche (également en cas d'utilisation dans OpenVR)."
#: doc/classes/@GlobalScope.xml:1061
msgid ""
@@ -3565,7 +3569,7 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:1070
msgid "Gamepad button Select."
-msgstr ""
+msgstr "Bouton Select de la manette."
#: doc/classes/@GlobalScope.xml:1073
msgid "Gamepad button Start."
@@ -3573,19 +3577,19 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:1076
msgid "Gamepad DPad up."
-msgstr ""
+msgstr "DPad haut de la manette."
#: doc/classes/@GlobalScope.xml:1079
msgid "Gamepad DPad down."
-msgstr ""
+msgstr "DPad bas de la manette."
#: doc/classes/@GlobalScope.xml:1082
msgid "Gamepad DPad left."
-msgstr ""
+msgstr "DPad gauche de la manette."
#: doc/classes/@GlobalScope.xml:1085
msgid "Gamepad DPad right."
-msgstr ""
+msgstr "DPad droite de la manette."
#: doc/classes/@GlobalScope.xml:1088
#, fuzzy
@@ -3594,7 +3598,7 @@ msgstr "Bouton guide du contrôleur de jeu SDL."
#: doc/classes/@GlobalScope.xml:1091
msgid "Gamepad SDL miscellaneous button."
-msgstr ""
+msgstr "Bouton divers de la manette SDL."
#: doc/classes/@GlobalScope.xml:1094
#, fuzzy
@@ -3633,7 +3637,7 @@ msgstr "Axe du déclencheur gauche du contrôleur de jeu."
#: doc/classes/@GlobalScope.xml:1115
msgid "Gamepad left stick click."
-msgstr ""
+msgstr "Clic du stick gauche de la manette."
#: doc/classes/@GlobalScope.xml:1118
#, fuzzy
@@ -3647,11 +3651,11 @@ msgstr "Axe du déclencheur gauche du contrôleur de jeu."
#: doc/classes/@GlobalScope.xml:1124
msgid "Gamepad right stick click."
-msgstr ""
+msgstr "Clic du stick droit de la manette."
#: doc/classes/@GlobalScope.xml:1127 doc/classes/@GlobalScope.xml:1160
msgid "Gamepad left stick horizontal axis."
-msgstr ""
+msgstr "Axe horizontal du stick gauche de la manette."
#: doc/classes/@GlobalScope.xml:1130 doc/classes/@GlobalScope.xml:1163
#, fuzzy
@@ -3660,7 +3664,7 @@ msgstr "Axe X de la manette gauche du contrôleur de jeu."
#: doc/classes/@GlobalScope.xml:1133 doc/classes/@GlobalScope.xml:1166
msgid "Gamepad right stick horizontal axis."
-msgstr ""
+msgstr "Axe horizontal du stick droite de la manette."
#: doc/classes/@GlobalScope.xml:1136 doc/classes/@GlobalScope.xml:1169
#, fuzzy
@@ -3669,11 +3673,11 @@ msgstr "Axe X de la manette droite du contrôleur de jeu."
#: doc/classes/@GlobalScope.xml:1139
msgid "Generic gamepad axis 4."
-msgstr ""
+msgstr "Axe 4 de la manette générique."
#: doc/classes/@GlobalScope.xml:1142
msgid "Generic gamepad axis 5."
-msgstr ""
+msgstr "Axe 5 de la manette générique."
#: doc/classes/@GlobalScope.xml:1145
#, fuzzy
@@ -3687,11 +3691,11 @@ msgstr "Axe du déclencheur gauche du contrôleur de jeu."
#: doc/classes/@GlobalScope.xml:1151
msgid "Generic gamepad axis 8."
-msgstr ""
+msgstr "Axe 8 de la manette générique."
#: doc/classes/@GlobalScope.xml:1154
msgid "Generic gamepad axis 9."
-msgstr ""
+msgstr "Axe 9 de la manette générique."
#: doc/classes/@GlobalScope.xml:1157
#, fuzzy
@@ -3700,11 +3704,11 @@ msgstr "Nombre maximal de passes de tirage prises en charge."
#: doc/classes/@GlobalScope.xml:1172
msgid "Gamepad left analog trigger."
-msgstr ""
+msgstr "Gâchette analogique gauche de la manette."
#: doc/classes/@GlobalScope.xml:1175
msgid "Gamepad right analog trigger."
-msgstr ""
+msgstr "Gâchette analogique droite de la manette."
#: doc/classes/@GlobalScope.xml:1178
#, fuzzy
@@ -4134,15 +4138,14 @@ msgstr ""
"boîte de dialogue de fichier apparaîtra pour choisir le chemin."
#: doc/classes/@GlobalScope.xml:1415
-#, fuzzy
msgid ""
"Hints that a property is an instance of a [Resource]-derived type, "
"optionally specified via the hint string (e.g. [code]\"Texture\"[/code]). "
"Editing it will show a popup menu of valid resource types to instantiate."
msgstr ""
"Indice que la propriété est une instance d'un type dérivé de [Resource], "
-"spécifie optionnellement via le texte de l'indice (ex: [code]\"Texture2D\"[/"
-"code]) En l'éditant un menu contextuel apparaitra avec les types de "
+"spécifie optionnellement via le texte de l'indice (e.g. [code]\"Texture2D\"[/"
+"code]) En l'éditant un menu contextuel apparaîtra avec les types de "
"ressources valides a instancier."
#: doc/classes/@GlobalScope.xml:1418
@@ -4556,22 +4559,31 @@ msgstr ""
"autre."
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
-msgstr "Retourne cette [AABB] élargie pour inclure un point donné."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
+msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr "Retourne le volume de l'[AABB]."
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr "Récupère la position des 8 extrémités de l'[AABB] dans l'espace."
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr "Retourne normalisé l'axe le plus long de l'[AABB]."
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
@@ -4579,15 +4591,15 @@ msgstr ""
"Retourne l'index de l'axe le plus long de l'AABB] (d'après les constantes de "
"[code]AXIS_*[/code] de [Vector3])."
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr "Retourne la longueur scalaire de l'axe le plus long de l'[AABB]."
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr "Retourne l'axe le plus court normalisé de l'[AABB]."
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
@@ -4595,11 +4607,11 @@ msgstr ""
"Retourne l'index de l'axe le plus court de l'[AABB] (d'après l'énumération "
"[Vector3]::AXIS*)."
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr "Retourne la longueur scalaire de l’axe le plus court de l’[AABB]."
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
@@ -4607,7 +4619,7 @@ msgstr ""
"Retourne le point d'appui dans une direction donnée. Ceci est utile pour les "
"algorithmes de détection de collision."
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
@@ -4615,19 +4627,19 @@ msgstr ""
"Retourne une copie de l'[AABB] agrandie d'un nombre donné d'unités dans "
"toutes les directions."
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr "Retourne [code]true[/code] si l'[AABB] est plate ou vide."
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr "Retourne [code]true[/code] si l'[AABB] est vide."
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr "Retourne [code]true[/code] si l'[AABB] contient un point."
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
@@ -4635,16 +4647,16 @@ msgstr ""
"Retourne l’intersection entre deux [AABB]. Une AABB vide (taille 0,0,0) est "
"retournée en cas d’échec."
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr "Retourne [code]true[/code] si l'[AABB] chevauche une autre."
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
"Retourne [code]true[/code] si l'[AABB] est sur les deux côtés d'un plan."
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
@@ -4652,7 +4664,7 @@ msgstr ""
"Retourne [code]true[/code] si l'[AABB] coupe le segment de droite entre "
"[code]from[/code] et [code]to[/code]."
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
@@ -4662,14 +4674,14 @@ msgstr ""
"approximativement égales, en appelant [method @GDScript.is_equal_approx] sur "
"chaque composantes."
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
"retourne une [AABB] plus grande qui contient à la fois [AABB] et [code]with[/"
"code]."
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
@@ -4677,11 +4689,11 @@ msgstr ""
"Coin de fin. Calculé par [code]position + size[/code]. Changer cette valeur "
"changera aussi la taille."
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr "Coin de départ. A généralement des valeurs inférieures à [member end]."
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
#, fuzzy
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
@@ -4786,17 +4798,17 @@ msgid ""
"[FileDialog] to disable hiding the dialog when pressing OK."
msgstr ""
"Si [code]vrai[/code], la boîte de dialogue est cachée quand le bouton OK est "
-"poussé. Vous pouvez le mettre à [code]false[/code] si vous voulez, par "
+"pressé. Vous pouvez le mettre à [code]false[/code] si vous voulez, par "
"exemple, valider l'entrée quand le signal [signal confirmed] est reçu et "
"gérer la dissimulation de la boîte de dialogue dans votre propre logique.\n"
"[b]Note:[/b] Plusieurs nœuds dérivés de cette classe peuvent avoir une "
"valeur défaut différent et potentiellement leur propre logique intégrée qui "
"outrepassera ce réglage. Par exemple [FileDialog] fait défaut à [code]false[/"
"code], et contient sa propre logique pour valider l'entrée qui est appelée "
-"quand vous poussez OK, qui finit par cachant la boîte de dialogue si "
-"l'entrée est valide. Comme tel, cette propriété ne peut pas être utilisé en "
+"quand vous pressez OK, qui éventuellement cache le dialogue si l'entrée est "
+"valide. Comme tel, cette propriété ne peut pas être utilisé dans "
"[FileDialog] pour désactiver la dissimulation de la boîte de dialogue quand "
-"OK est poussé."
+"OK est pressé."
#: doc/classes/AcceptDialog.xml:69
msgid "The text displayed by the dialog."
@@ -5950,9 +5962,9 @@ msgid ""
"Gets all children nodes in order as a [code]name: node[/code] dictionary. "
"Only useful when inheriting [AnimationRootNode]."
msgstr ""
-"Obtient tous les nœuds enfants dans l'ordre en tant que dictionnaire de la "
-"forme [code]nom: nœud[/code]. Utile uniquement lorsque [AnimationRootNode] "
-"est hérité."
+"Obtient tous les nœuds enfants dans l'ordre en tant que dictionnaire "
+"[code]name: node[/code]. Utile uniquement lorsque [AnimationRootNode] est "
+"hérité."
#: doc/classes/AnimationNode.xml:79
msgid ""
@@ -6149,7 +6161,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -11759,17 +11771,21 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -11778,24 +11794,24 @@ msgid ""
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -11809,63 +11825,63 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
#, fuzzy
msgid "The rotation of the baked custom sky."
msgstr "La racine de la scène éditée."
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -11873,36 +11889,36 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
#, fuzzy
msgid "The calculated light data."
msgstr "La hauteur de la capsule."
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -11910,13 +11926,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -11928,82 +11944,82 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
#, fuzzy
msgid "The default bake quality mode."
msgstr "L'arrière-plan par défaut pour [GraphNode]."
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
#, fuzzy
msgid "Baking was successful."
msgstr "La connexion a réussi."
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr "Actuellement inutilisé."
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
#, fuzzy
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr "Renvoie l'arc tangente des paramètres."
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
#, fuzzy
msgid "The size of the generated lightmaps is too large."
msgstr "Taille du plan généré."
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
#, fuzzy
msgid "Returns if user cancels baking."
msgstr "Retourne le bouton d'annulation."
-#: doc/classes/BakedLightmap.xml:131
+#: doc/classes/BakedLightmap.xml:132
msgid ""
"Returns if lightmapper can't be created. Unless you are using a custom "
"lightmapper, please report this as bug."
msgstr ""
-#: doc/classes/BakedLightmap.xml:134
+#: doc/classes/BakedLightmap.xml:135
msgid ""
"There is no root node to start baking from. Either provide [code]from_node[/"
"code] argument or attach this node to a parent that should be used as root."
msgstr ""
-#: doc/classes/BakedLightmap.xml:137
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:140
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:143
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:146
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -12464,8 +12480,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -15430,7 +15449,6 @@ msgid ""
msgstr ""
#: doc/classes/Color.xml:37
-#, fuzzy
msgid ""
"Constructs a color from a 32-bit integer in RGBA format (each byte "
"represents a color channel).\n"
@@ -15438,10 +15456,10 @@ msgid ""
"var c = Color(274) # Similar to Color(0.0, 0.0, 0.004, 0.07)\n"
"[/codeblock]"
msgstr ""
-"Construit une couleur à partir d'une couleur existante, mais avec une valeur "
-"alpha personnalisée.\n"
+"Construit une couleur à partir d'un entier de 32 bits au format RGBA (chaque "
+"octet représente un canal de couleur).\n"
"[codeblock]\n"
-"var red = Color(Color.red, 0.5) # 50% de rouge transparent.\n"
+"var c = Color(274) # Similar to Color(0.0, 0.0, 0.004, 0.07)\n"
"[/codeblock]"
#: doc/classes/Color.xml:49
@@ -15582,7 +15600,6 @@ msgstr ""
"[/codeblock]"
#: doc/classes/Color.xml:158
-#, fuzzy
msgid ""
"Returns the linear interpolation with another color. The interpolation "
"factor [code]weight[/code] is between 0 and 1.\n"
@@ -15594,11 +15611,12 @@ msgid ""
"[/codeblock]"
msgstr ""
"Retourne l'interpolation linéaire avec une autre couleur. Le facteur "
-"d'interpolation [code]t[/code] est compris entre 0 et 1.\n"
+"d'interpolation [code]weight[/code] est compris entre 0 et 1.\n"
"[codeblock]\n"
"var c1 = Color(1.0, 0.0, 0.0)\n"
"var c2 = Color(0.0, 1.0, 0.0)\n"
-"var li_c = c1.lerp(c2, 0.5) # Une couleur d'une RGBA( 128, 128, 0, 255)\n"
+"var li_c = c1.linear_interpolate(c2, 0.5) # Equivalent to Color(0.5, 0.5, "
+"0.0)\n"
"[/codeblock]"
#: doc/classes/Color.xml:169
@@ -22885,9 +22903,8 @@ msgid "Removes an import plugin registered by [method add_import_plugin]."
msgstr "Supprime un type personnalisé ajouté par [méthode add_custom_type]."
#: doc/classes/EditorPlugin.xml:423
-#, fuzzy
msgid "Removes an inspector plugin registered by [method add_import_plugin]"
-msgstr "Supprime un type personnalisé ajouté par [méthode add_custom_type]."
+msgstr "Supprime un type personnalisé ajouté par [méthode add_custom_type]"
#: doc/classes/EditorPlugin.xml:430
#, fuzzy
@@ -27001,21 +27018,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -27024,14 +27052,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr "Appelle [method bake] avec [code]create_visual_debug[/code] activé."
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -27041,61 +27073,61 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
#, fuzzy
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr "Si [code]true[/code], permet le défilement horizontal."
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
@@ -27104,22 +27136,26 @@ msgstr ""
"plus rapide. Utilisez-le si vous le pouvez, mais surtout utilisez-le sur du "
"matériel bas de gamme."
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
"Utilise 128 subdivisions. Il s’agit du paramètre de qualité par défaut."
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr "Utilise 256 subdivisions."
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
+#, fuzzy
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
+"Utilise 64 subdivisions. C’est le réglage de qualité la plus basse, mais le "
+"plus rapide. Utilisez-le si vous le pouvez, mais surtout utilisez-le sur du "
+"matériel bas de gamme."
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -31429,7 +31465,9 @@ msgid "The drag position."
msgstr "La position de glissement."
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -32789,7 +32827,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -32854,22 +32893,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -32884,7 +32925,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -32892,19 +32933,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -32978,7 +33019,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -33036,7 +33078,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -36654,7 +36698,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -40018,7 +40062,7 @@ msgstr "Retourne le nombre de formes assignées à une zone."
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -40048,14 +40092,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -40065,7 +40109,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -42611,17 +42655,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -42639,11 +42709,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -42854,7 +42924,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -43662,6 +43734,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -43679,7 +43769,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -43799,9 +43889,10 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-#, fuzzy
-msgid "Returns the [PhysicsDirectBodyState] of the body."
-msgstr "Retourne le [enum BitmaskMode] de l'autotile."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
+msgstr ""
#: doc/classes/PhysicsServer.xml:370
msgid ""
@@ -46434,24 +46525,30 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:282
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:285
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:288
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -46461,7 +46558,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:291
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -46471,27 +46568,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:294
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:297
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:300
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:303
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -46499,81 +46596,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:306
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:309
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:312
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:315
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:318
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:321
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:324
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:327
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:330
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:333
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:336
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:339
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:342
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -46581,112 +46678,112 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:345
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:348
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:351
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:354
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:357
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:360
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:363
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:366
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:369
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:372
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:375
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:378
+#: doc/classes/ProjectSettings.xml:380
#, fuzzy
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
"Si [code]true[/code], le mouvement linéaire à travers l’axe Z est limité."
-#: doc/classes/ProjectSettings.xml:381
+#: doc/classes/ProjectSettings.xml:383
#, fuzzy
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr "Si [code]true[/code], le filtrage est activé."
-#: doc/classes/ProjectSettings.xml:384
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:387
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:390
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:393
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:396
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:399
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -46697,91 +46794,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:404
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr "Pile d’appels maximale autorisée pour le débogage de GDScript."
-#: doc/classes/ProjectSettings.xml:407
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:410
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:413
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:416
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:419
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:422
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:425
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:428
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:431
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:434
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:437
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:440
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr "Hotspot pour l’image de curseur de souris personnalisée."
-#: doc/classes/ProjectSettings.xml:443
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:446
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:449
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:452
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -46790,13 +46887,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:456
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:459
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -46806,7 +46903,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:464
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -46814,19 +46911,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:469
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:473
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:477
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -46840,45 +46937,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:482
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:485
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:489
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:492
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:495
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:498
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:501
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -46887,7 +46984,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:504
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -46898,7 +46995,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:508
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -46914,14 +47011,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:516
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:519
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -46929,49 +47026,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:522
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:525
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:530
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:533
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:536
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:539
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:542
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:545
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:548
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -46980,7 +47077,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:552
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -46988,7 +47085,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:556
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -46996,7 +47093,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:560
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -47006,7 +47103,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:564
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -47015,7 +47112,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:568
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -47024,7 +47121,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:572
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -47034,7 +47131,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:576
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -47042,7 +47139,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:580
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -47052,7 +47149,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:584
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -47062,7 +47159,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:588
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -47070,7 +47167,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:592
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -47079,7 +47176,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:596
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -47087,7 +47184,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:600
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -47099,478 +47196,478 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:606
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:609
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:612
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:615
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:618
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:621
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:624
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:627
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:630
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:633
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:636
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:639
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:642
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:645
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:648
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:651
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:654
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:657
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:660
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:663
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:666
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:669
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:672
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:675
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:678
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:681
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:684
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:687
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:690
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:693
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:696
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:699
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:702
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:705
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:708
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:711
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:714
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:717
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:720
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:723
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:726
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:729
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:732
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:735
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:738
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:741
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:744
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:747
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:750
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:753
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:756
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:759
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:762
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:765
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:768
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:771
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:774
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:777
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:780
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:783
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:786
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:789
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:792
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:795
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:798
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:801
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:804
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:807
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:810
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:813
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:816
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:819
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:822
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:825
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:828
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:831
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:834
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:837
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:840
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:843
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:846
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:849
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:852
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:855
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:858
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:861
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:864
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:867
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:870
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:873
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:876
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:879
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:882
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:885
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:888
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:891
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:894
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:897
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:900
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:903
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:906
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:909
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:912
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:915
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:918
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:921
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:924
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:927
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:930
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:933
+#: doc/classes/ProjectSettings.xml:935
#, fuzzy
msgid "If [code]true[/code], logs all output to files."
msgstr "Si [code]true[/code], enregistre toutes les sorties aux fichiers."
-#: doc/classes/ProjectSettings.xml:936
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:939
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:942
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:947
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:950
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -47578,92 +47675,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:953
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:956
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:959
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:962
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:965
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:968
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:971
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:974
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:977
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:980
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:983
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:986
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:989
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:992
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:995
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:998
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1001
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1004
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -47673,19 +47770,19 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1008
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1011
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1014
+#: doc/classes/ProjectSettings.xml:1016
#, fuzzy
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
@@ -47695,14 +47792,14 @@ msgstr ""
"Taille de la table de hachage utilisée pour l'algorithme de grille de "
"hachage 2D à large phase."
-#: doc/classes/ProjectSettings.xml:1018
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1022
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -47715,7 +47812,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1026
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -47727,7 +47824,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1034
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -47739,7 +47836,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1042
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -47752,7 +47849,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1046
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -47760,28 +47857,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1050
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1054
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1057
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1060
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -47791,25 +47888,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1064
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1067
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1070
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1073
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -47822,7 +47919,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1077
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -47834,7 +47931,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1085
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -47846,7 +47943,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1093
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -47859,13 +47956,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1097
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1100
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -47873,11 +47970,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1104
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1107
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -47891,7 +47988,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1113
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -47900,7 +47997,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1117
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -47916,7 +48013,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1122
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -47926,7 +48023,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1126
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -47936,7 +48033,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1130
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -47947,7 +48044,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1134
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -47957,7 +48054,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1138
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -47965,7 +48062,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1142
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -47976,7 +48073,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1146
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -47991,7 +48088,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1152
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -48000,13 +48097,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1157
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1160
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -48015,7 +48112,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1163
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -48025,7 +48122,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1166
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -48037,7 +48134,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1169
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -48047,24 +48144,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1172
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1175
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1178
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1181
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -48073,7 +48170,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1184
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -48081,7 +48178,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1187
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -48090,7 +48187,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1190
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -48100,7 +48197,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1194
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -48108,31 +48205,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1198
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1201
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1204
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1207
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1210
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -48140,7 +48237,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1213
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -48150,21 +48247,21 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1216
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1219
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
"iOS specific override for [member rendering/gles2/compatibility/"
"disable_half_float], due to poor support for half-float vertex compression "
"on many devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
"If [code]true[/code] and available on the target Android device, enables "
"high floating point precision for all shader computations in GLES2.\n"
@@ -48172,31 +48269,31 @@ msgid ""
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1226
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1229
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1232
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1235
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1238
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -48204,7 +48301,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1241
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -48214,7 +48311,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1244
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -48223,7 +48320,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1247
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -48232,14 +48329,14 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1250
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1253
+#: doc/classes/ProjectSettings.xml:1255
#, fuzzy
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
@@ -48248,7 +48345,7 @@ msgstr ""
"Si [code]true[/code], la [SpinBox] sera modifiable. Sinon, elle sera en "
"lecture seule."
-#: doc/classes/ProjectSettings.xml:1256
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -48257,7 +48354,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1259
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -48265,7 +48362,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -48274,7 +48371,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1266
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -48284,13 +48381,13 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1275
+#: doc/classes/ProjectSettings.xml:1277
#, fuzzy
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
@@ -48300,7 +48397,7 @@ msgstr ""
"Si [code]true[/code], l’état de la clé est pressé. Si [code]false[/code], "
"l’état de la clé est libéré."
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -48309,13 +48406,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -48325,46 +48422,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1294
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1297
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1300
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1303
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1306
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -48374,7 +48471,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -48386,7 +48483,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1317
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -48394,7 +48491,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -48402,7 +48499,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1324
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -48411,7 +48508,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1327
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -48425,7 +48522,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1332
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -48435,7 +48532,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1335
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -48444,7 +48541,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1338
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -48454,54 +48551,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1341
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1344
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1347
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1350
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1353
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1356
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1359
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -48512,61 +48609,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1366
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1369
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1372
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1375
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1378
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1381
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1384
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1387
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -48577,7 +48674,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1394
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -48586,26 +48683,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400
-#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1409
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1412
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -48616,20 +48713,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1419
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1426
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -48641,52 +48738,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1436
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1439
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1442
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1445
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1448
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1451
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1454
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -48694,7 +48791,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -48707,7 +48804,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -48719,7 +48816,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -48731,7 +48828,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -48743,7 +48840,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -48755,7 +48852,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1481
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -49436,40 +49533,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr "Retourne la zone du [Rect2]."
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -49477,14 +49588,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -51839,6 +51950,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -51856,7 +51983,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -51864,11 +51991,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -51878,19 +52005,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -56288,7 +56415,6 @@ msgstr ""
"de la [code]position[/code]."
#: doc/classes/String.xml:272
-#, fuzzy
msgid ""
"Finds the first occurrence of a substring. Returns the starting position of "
"the substring or [code]-1[/code] if not found. Optionally, the initial "
@@ -56301,10 +56427,17 @@ msgid ""
" pass\n"
"[/codeblock]"
msgstr ""
-"Trouve la première occurence d'une sous-chaîne de caractères. Retourne la "
+"Trouve la première occurrence d'une sous-chaîne de caractères. Retourne la "
"position de départ de la sous-chaîne de caractères ou [code]-1[/code] si non "
"trouvée. Optionnellement, l'index de recherche initial peut être passé (en "
-"tant qu'argument) ."
+"tant qu'argument).\n"
+"[b]Note:[/b] Si vous voulez simplement savoir si une chaîne contient une "
+"sous-chaîne, utilisez l'opérateur [code]in[/code] comme suit:\n"
+"[codeblock]\n"
+"# Évaluera à `false`.\n"
+"if \"i\" in \"team\":\n"
+" pass\n"
+"[/codeblock]"
#: doc/classes/String.xml:285
msgid ""
@@ -57493,20 +57626,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -57517,28 +57655,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -57550,19 +57688,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -72260,8 +72398,8 @@ msgid ""
"until you get a [signal connection_closed] signal to achieve the clean "
"close. See [method WebSocketPeer.close] for more details."
msgstr ""
-"Émis lorsque le serveur demande une fermeture propre. Vous devriez continuer "
-"à voter jusqu’à ce que vous obteniez un signal [signal connection_closed] "
+"Émit lorsque le serveur demande une fermeture propre. Vous devriez continuer "
+"à sonder jusqu'à ce que vous obteniez un signal [signal connection_closed] "
"pour obtenir la fermeture propre. Voir [method WebSocketPeer.close] pour "
"plus de détails."
@@ -73182,6 +73320,13 @@ msgstr ""
"Si [code]true[/code] (vrai), les nœuds enfants sont triés, sinon le tri est "
"désactivé."
+#~ msgid "Returns this [AABB] expanded to include a given point."
+#~ msgstr "Retourne cette [AABB] élargie pour inclure un point donné."
+
+#, fuzzy
+#~ msgid "Returns the [PhysicsDirectBodyState] of the body."
+#~ msgstr "Retourne le [enum BitmaskMode] de l'autotile."
+
#, fuzzy
#~ msgid "Emitted when the resource value was set and user clicked to edit it."
#~ msgstr "Émis lorsqu'une interface est supprimée."
diff --git a/doc/translations/gl.po b/doc/translations/gl.po
index b4b213e411..6cf999916b 100644
--- a/doc/translations/gl.po
+++ b/doc/translations/gl.po
@@ -3588,112 +3588,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4765,7 +4774,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -10142,15 +10151,19 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10159,24 +10172,24 @@ msgid ""
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10190,62 +10203,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10253,35 +10266,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10289,13 +10302,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10307,77 +10320,77 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr ""
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:131
+#: doc/classes/BakedLightmap.xml:132
msgid ""
"Returns if lightmapper can't be created. Unless you are using a custom "
"lightmapper, please report this as bug."
msgstr ""
-#: doc/classes/BakedLightmap.xml:134
+#: doc/classes/BakedLightmap.xml:135
msgid ""
"There is no root node to start baking from. Either provide [code]from_node[/"
"code] argument or attach this node to a parent that should be used as root."
msgstr ""
-#: doc/classes/BakedLightmap.xml:137
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:140
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:143
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:146
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10825,8 +10838,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -24771,20 +24787,31 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr ""
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -24793,14 +24820,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -24810,80 +24841,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -29076,7 +29107,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30375,7 +30408,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30440,22 +30474,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30470,7 +30506,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30478,19 +30514,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30558,7 +30594,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30616,7 +30653,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -34141,7 +34180,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37436,7 +37475,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37466,14 +37505,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37483,7 +37522,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -39961,17 +40000,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -39989,11 +40054,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40188,7 +40253,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -40990,6 +41057,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41007,7 +41092,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41121,7 +41206,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -43661,24 +43748,30 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:282
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:285
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:288
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43688,7 +43781,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:291
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43698,27 +43791,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:294
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:297
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:300
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:303
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -43726,81 +43819,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:306
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:309
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:312
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:315
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:318
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:321
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:324
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:327
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:330
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:333
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:336
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:339
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:342
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -43808,109 +43901,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:345
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:348
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:351
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:354
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:357
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:360
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:363
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:366
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:369
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:372
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:375
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:378
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:381
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:384
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:387
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:390
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:393
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:396
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:399
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -43921,91 +44014,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:404
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:407
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:410
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:413
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:416
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:419
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:422
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:425
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:428
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:431
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:434
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:437
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:440
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:443
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:446
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:449
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:452
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44014,13 +44107,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:456
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:459
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44030,7 +44123,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:464
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44038,19 +44131,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:469
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:473
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:477
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44064,45 +44157,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:482
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:485
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:489
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:492
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:495
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:498
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:501
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44111,7 +44204,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:504
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44122,7 +44215,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:508
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44138,14 +44231,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:516
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:519
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44153,49 +44246,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:522
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:525
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:530
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:533
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:536
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:539
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:542
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:545
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:548
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44204,7 +44297,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:552
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44212,7 +44305,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:556
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44220,7 +44313,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:560
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44230,7 +44323,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:564
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44239,7 +44332,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:568
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44248,7 +44341,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:572
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44258,7 +44351,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:576
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44266,7 +44359,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:580
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44276,7 +44369,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:584
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44286,7 +44379,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:588
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44294,7 +44387,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:592
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44303,7 +44396,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:596
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44311,7 +44404,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:600
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44323,477 +44416,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:606
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:609
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:612
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:615
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:618
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:621
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:624
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:627
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:630
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:633
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:636
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:639
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:642
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:645
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:648
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:651
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:654
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:657
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:660
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:663
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:666
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:669
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:672
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:675
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:678
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:681
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:684
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:687
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:690
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:693
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:696
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:699
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:702
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:705
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:708
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:711
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:714
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:717
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:720
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:723
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:726
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:729
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:732
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:735
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:738
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:741
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:744
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:747
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:750
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:753
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:756
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:759
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:762
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:765
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:768
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:771
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:774
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:777
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:780
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:783
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:786
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:789
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:792
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:795
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:798
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:801
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:804
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:807
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:810
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:813
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:816
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:819
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:822
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:825
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:828
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:831
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:834
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:837
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:840
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:843
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:846
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:849
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:852
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:855
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:858
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:861
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:864
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:867
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:870
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:873
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:876
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:879
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:882
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:885
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:888
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:891
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:894
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:897
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:900
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:903
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:906
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:909
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:912
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:915
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:918
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:921
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:924
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:927
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:930
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:933
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:936
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:939
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:942
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:947
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:950
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -44801,92 +44894,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:953
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:956
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:959
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:962
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:965
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:968
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:971
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:974
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:977
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:980
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:983
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:986
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:989
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:992
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:995
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:998
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1001
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1004
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -44896,33 +44989,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1008
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1011
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1014
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1018
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1022
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44935,7 +45028,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1026
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44947,7 +45040,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1034
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44959,7 +45052,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1042
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44972,7 +45065,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1046
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -44980,28 +45073,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1050
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1054
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1057
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1060
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45011,25 +45104,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1064
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1067
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1070
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1073
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45042,7 +45135,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1077
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45054,7 +45147,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1085
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45066,7 +45159,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1093
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45079,13 +45172,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1097
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1100
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45093,11 +45186,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1104
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1107
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45111,7 +45204,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1113
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45120,7 +45213,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1117
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45136,7 +45229,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1122
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45146,7 +45239,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1126
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45156,7 +45249,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1130
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45167,7 +45260,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1134
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45177,7 +45270,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1138
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45185,7 +45278,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1142
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45196,7 +45289,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1146
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45211,7 +45304,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1152
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45220,13 +45313,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1157
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1160
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45235,7 +45328,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1163
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45245,7 +45338,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1166
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45257,7 +45350,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1169
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45267,24 +45360,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1172
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1175
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1178
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1181
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45293,7 +45386,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1184
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45301,7 +45394,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1187
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45310,7 +45403,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1190
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45320,7 +45413,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1194
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45328,31 +45421,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1198
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1201
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1204
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1207
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1210
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45360,7 +45453,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1213
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45370,21 +45463,21 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1216
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1219
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
"iOS specific override for [member rendering/gles2/compatibility/"
"disable_half_float], due to poor support for half-float vertex compression "
"on many devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
"If [code]true[/code] and available on the target Android device, enables "
"high floating point precision for all shader computations in GLES2.\n"
@@ -45392,31 +45485,31 @@ msgid ""
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1226
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1229
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1232
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1235
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1238
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45424,7 +45517,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1241
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45434,7 +45527,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1244
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45443,7 +45536,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1247
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45452,20 +45545,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1250
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1253
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1256
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45474,7 +45567,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1259
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45482,7 +45575,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45491,7 +45584,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1266
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45501,20 +45594,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1275
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45523,13 +45616,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45539,46 +45632,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1294
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1297
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1300
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1303
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1306
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45588,7 +45681,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45600,7 +45693,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1317
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45608,7 +45701,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45616,7 +45709,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1324
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45625,7 +45718,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1327
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45639,7 +45732,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1332
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45649,7 +45742,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1335
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45658,7 +45751,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1338
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45668,54 +45761,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1341
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1344
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1347
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1350
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1353
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1356
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1359
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -45726,61 +45819,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1366
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1369
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1372
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1375
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1378
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1381
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1384
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1387
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -45791,7 +45884,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1394
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -45800,26 +45893,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400
-#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1409
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1412
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -45830,20 +45923,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1419
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1426
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -45855,52 +45948,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1436
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1439
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1442
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1445
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1448
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1451
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1454
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -45908,7 +46001,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -45921,7 +46014,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -45933,7 +46026,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -45945,7 +46038,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -45957,7 +46050,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -45969,7 +46062,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1481
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46628,40 +46721,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46669,14 +46776,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49003,6 +49110,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49020,7 +49143,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49028,11 +49151,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49042,19 +49165,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54439,20 +54562,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54463,28 +54591,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54496,19 +54624,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
diff --git a/doc/translations/hi.po b/doc/translations/hi.po
index 641d8c17dd..942e7dc94d 100644
--- a/doc/translations/hi.po
+++ b/doc/translations/hi.po
@@ -3586,112 +3586,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4763,7 +4772,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -10140,15 +10149,19 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10157,24 +10170,24 @@ msgid ""
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10188,62 +10201,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10251,35 +10264,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10287,13 +10300,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10305,77 +10318,77 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr ""
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:131
+#: doc/classes/BakedLightmap.xml:132
msgid ""
"Returns if lightmapper can't be created. Unless you are using a custom "
"lightmapper, please report this as bug."
msgstr ""
-#: doc/classes/BakedLightmap.xml:134
+#: doc/classes/BakedLightmap.xml:135
msgid ""
"There is no root node to start baking from. Either provide [code]from_node[/"
"code] argument or attach this node to a parent that should be used as root."
msgstr ""
-#: doc/classes/BakedLightmap.xml:137
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:140
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:143
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:146
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10823,8 +10836,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -24769,20 +24785,31 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr ""
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -24791,14 +24818,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -24808,80 +24839,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -29074,7 +29105,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30373,7 +30406,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30438,22 +30472,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30468,7 +30504,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30476,19 +30512,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30556,7 +30592,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30614,7 +30651,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -34139,7 +34178,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37434,7 +37473,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37464,14 +37503,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37481,7 +37520,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -39959,17 +39998,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -39987,11 +40052,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40186,7 +40251,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -40988,6 +41055,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41005,7 +41090,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41119,7 +41204,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -43659,24 +43746,30 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:282
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:285
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:288
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43686,7 +43779,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:291
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43696,27 +43789,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:294
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:297
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:300
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:303
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -43724,81 +43817,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:306
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:309
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:312
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:315
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:318
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:321
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:324
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:327
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:330
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:333
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:336
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:339
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:342
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -43806,109 +43899,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:345
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:348
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:351
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:354
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:357
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:360
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:363
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:366
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:369
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:372
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:375
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:378
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:381
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:384
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:387
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:390
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:393
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:396
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:399
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -43919,91 +44012,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:404
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:407
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:410
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:413
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:416
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:419
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:422
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:425
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:428
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:431
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:434
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:437
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:440
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:443
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:446
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:449
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:452
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44012,13 +44105,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:456
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:459
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44028,7 +44121,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:464
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44036,19 +44129,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:469
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:473
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:477
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44062,45 +44155,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:482
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:485
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:489
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:492
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:495
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:498
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:501
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44109,7 +44202,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:504
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44120,7 +44213,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:508
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44136,14 +44229,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:516
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:519
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44151,49 +44244,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:522
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:525
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:530
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:533
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:536
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:539
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:542
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:545
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:548
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44202,7 +44295,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:552
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44210,7 +44303,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:556
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44218,7 +44311,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:560
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44228,7 +44321,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:564
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44237,7 +44330,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:568
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44246,7 +44339,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:572
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44256,7 +44349,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:576
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44264,7 +44357,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:580
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44274,7 +44367,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:584
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44284,7 +44377,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:588
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44292,7 +44385,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:592
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44301,7 +44394,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:596
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44309,7 +44402,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:600
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44321,477 +44414,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:606
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:609
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:612
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:615
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:618
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:621
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:624
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:627
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:630
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:633
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:636
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:639
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:642
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:645
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:648
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:651
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:654
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:657
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:660
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:663
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:666
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:669
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:672
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:675
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:678
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:681
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:684
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:687
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:690
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:693
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:696
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:699
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:702
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:705
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:708
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:711
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:714
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:717
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:720
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:723
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:726
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:729
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:732
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:735
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:738
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:741
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:744
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:747
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:750
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:753
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:756
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:759
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:762
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:765
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:768
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:771
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:774
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:777
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:780
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:783
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:786
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:789
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:792
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:795
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:798
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:801
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:804
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:807
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:810
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:813
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:816
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:819
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:822
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:825
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:828
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:831
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:834
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:837
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:840
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:843
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:846
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:849
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:852
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:855
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:858
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:861
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:864
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:867
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:870
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:873
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:876
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:879
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:882
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:885
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:888
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:891
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:894
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:897
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:900
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:903
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:906
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:909
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:912
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:915
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:918
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:921
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:924
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:927
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:930
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:933
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:936
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:939
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:942
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:947
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:950
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -44799,92 +44892,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:953
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:956
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:959
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:962
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:965
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:968
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:971
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:974
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:977
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:980
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:983
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:986
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:989
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:992
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:995
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:998
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1001
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1004
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -44894,33 +44987,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1008
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1011
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1014
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1018
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1022
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44933,7 +45026,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1026
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44945,7 +45038,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1034
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44957,7 +45050,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1042
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44970,7 +45063,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1046
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -44978,28 +45071,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1050
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1054
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1057
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1060
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45009,25 +45102,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1064
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1067
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1070
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1073
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45040,7 +45133,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1077
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45052,7 +45145,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1085
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45064,7 +45157,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1093
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45077,13 +45170,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1097
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1100
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45091,11 +45184,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1104
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1107
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45109,7 +45202,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1113
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45118,7 +45211,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1117
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45134,7 +45227,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1122
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45144,7 +45237,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1126
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45154,7 +45247,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1130
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45165,7 +45258,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1134
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45175,7 +45268,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1138
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45183,7 +45276,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1142
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45194,7 +45287,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1146
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45209,7 +45302,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1152
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45218,13 +45311,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1157
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1160
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45233,7 +45326,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1163
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45243,7 +45336,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1166
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45255,7 +45348,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1169
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45265,24 +45358,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1172
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1175
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1178
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1181
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45291,7 +45384,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1184
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45299,7 +45392,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1187
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45308,7 +45401,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1190
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45318,7 +45411,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1194
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45326,31 +45419,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1198
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1201
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1204
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1207
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1210
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45358,7 +45451,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1213
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45368,21 +45461,21 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1216
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1219
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
"iOS specific override for [member rendering/gles2/compatibility/"
"disable_half_float], due to poor support for half-float vertex compression "
"on many devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
"If [code]true[/code] and available on the target Android device, enables "
"high floating point precision for all shader computations in GLES2.\n"
@@ -45390,31 +45483,31 @@ msgid ""
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1226
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1229
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1232
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1235
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1238
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45422,7 +45515,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1241
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45432,7 +45525,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1244
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45441,7 +45534,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1247
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45450,20 +45543,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1250
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1253
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1256
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45472,7 +45565,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1259
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45480,7 +45573,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45489,7 +45582,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1266
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45499,20 +45592,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1275
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45521,13 +45614,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45537,46 +45630,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1294
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1297
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1300
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1303
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1306
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45586,7 +45679,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45598,7 +45691,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1317
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45606,7 +45699,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45614,7 +45707,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1324
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45623,7 +45716,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1327
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45637,7 +45730,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1332
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45647,7 +45740,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1335
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45656,7 +45749,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1338
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45666,54 +45759,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1341
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1344
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1347
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1350
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1353
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1356
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1359
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -45724,61 +45817,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1366
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1369
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1372
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1375
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1378
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1381
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1384
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1387
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -45789,7 +45882,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1394
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -45798,26 +45891,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400
-#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1409
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1412
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -45828,20 +45921,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1419
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1426
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -45853,52 +45946,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1436
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1439
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1442
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1445
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1448
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1451
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1454
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -45906,7 +45999,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -45919,7 +46012,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -45931,7 +46024,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -45943,7 +46036,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -45955,7 +46048,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -45967,7 +46060,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1481
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46626,40 +46719,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46667,14 +46774,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49001,6 +49108,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49018,7 +49141,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49026,11 +49149,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49040,19 +49163,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54437,20 +54560,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54461,28 +54589,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54494,19 +54622,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
diff --git a/doc/translations/hu.po b/doc/translations/hu.po
index c917fe976a..d4797ed27b 100644
--- a/doc/translations/hu.po
+++ b/doc/translations/hu.po
@@ -5,12 +5,14 @@
#
# Misi <varady.misi@gmail.com>, 2021.
# Looky1173 <lgl1173and2006@gmail.com>, 2021.
+# Frontrider <frontrider@tutanota.com>, 2021.
+# Andras Virag <snowflake71@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-10-31 13:40+0000\n"
-"Last-Translator: Looky1173 <lgl1173and2006@gmail.com>\n"
+"PO-Revision-Date: 2021-11-15 21:14+0000\n"
+"Last-Translator: Andras Virag <snowflake71@gmail.com>\n"
"Language-Team: Hungarian <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/hu/>\n"
"Language: hu\n"
@@ -18,7 +20,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -37,26 +39,24 @@ msgid "Methods"
msgstr "Metódusok"
#: doc/tools/make_rst.py
-#, fuzzy
msgid "Theme Properties"
-msgstr "Téma Tulajdonságok"
+msgstr "Téma Tulajdonságai"
#: doc/tools/make_rst.py
msgid "Signals"
msgstr "Jelzések"
#: doc/tools/make_rst.py
-#, fuzzy
msgid "Enumerations"
-msgstr "Számlálók"
+msgstr "Listák"
#: doc/tools/make_rst.py
msgid "Constants"
-msgstr "Konstansok"
+msgstr "Ãllandók"
#: doc/tools/make_rst.py
msgid "Property Descriptions"
-msgstr "Tulajdonság leírások"
+msgstr "Tulajdonság leírásai"
#: doc/tools/make_rst.py
msgid "Method Descriptions"
@@ -1434,19 +1434,19 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:104
msgid "Top-left corner."
-msgstr ""
+msgstr "Bal felső sarok."
#: doc/classes/@GlobalScope.xml:107
msgid "Top-right corner."
-msgstr ""
+msgstr "Jobb felső sarok."
#: doc/classes/@GlobalScope.xml:110
msgid "Bottom-right corner."
-msgstr ""
+msgstr "Jobb alsó sarok."
#: doc/classes/@GlobalScope.xml:113
msgid "Bottom-left corner."
-msgstr ""
+msgstr "Bal alsó sarok."
#: doc/classes/@GlobalScope.xml:116
msgid ""
@@ -1490,19 +1490,19 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:143
msgid "Escape key."
-msgstr ""
+msgstr "Escape billentyű."
#: doc/classes/@GlobalScope.xml:146
msgid "Tab key."
-msgstr ""
+msgstr "Tab billentyű."
#: doc/classes/@GlobalScope.xml:149
msgid "Shift+Tab key."
-msgstr ""
+msgstr "Shift+Tab billentyű."
#: doc/classes/@GlobalScope.xml:152
msgid "Backspace key."
-msgstr ""
+msgstr "Backspace billentyű."
#: doc/classes/@GlobalScope.xml:155
msgid "Return key (on the main keyboard)."
@@ -3602,112 +3602,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4779,7 +4788,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -10156,15 +10165,19 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10173,24 +10186,24 @@ msgid ""
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10204,62 +10217,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10267,35 +10280,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10303,13 +10316,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10321,77 +10334,77 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr ""
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:131
+#: doc/classes/BakedLightmap.xml:132
msgid ""
"Returns if lightmapper can't be created. Unless you are using a custom "
"lightmapper, please report this as bug."
msgstr ""
-#: doc/classes/BakedLightmap.xml:134
+#: doc/classes/BakedLightmap.xml:135
msgid ""
"There is no root node to start baking from. Either provide [code]from_node[/"
"code] argument or attach this node to a parent that should be used as root."
msgstr ""
-#: doc/classes/BakedLightmap.xml:137
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:140
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:143
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:146
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10839,8 +10852,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -24785,20 +24801,31 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr ""
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -24807,14 +24834,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -24824,80 +24855,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -29090,7 +29121,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30389,7 +30422,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30454,22 +30488,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30484,7 +30520,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30492,19 +30528,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30572,7 +30608,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30630,7 +30667,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -34155,7 +34194,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37450,7 +37489,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37480,14 +37519,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37497,7 +37536,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -39975,17 +40014,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40003,11 +40068,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40202,7 +40267,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41004,6 +41071,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41021,7 +41106,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41135,7 +41220,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -43675,24 +43762,30 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:282
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:285
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:288
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43702,7 +43795,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:291
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43712,27 +43805,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:294
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:297
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:300
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:303
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -43740,81 +43833,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:306
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:309
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:312
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:315
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:318
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:321
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:324
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:327
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:330
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:333
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:336
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:339
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:342
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -43822,109 +43915,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:345
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:348
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:351
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:354
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:357
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:360
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:363
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:366
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:369
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:372
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:375
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:378
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:381
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:384
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:387
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:390
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:393
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:396
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:399
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -43935,91 +44028,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:404
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:407
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:410
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:413
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:416
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:419
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:422
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:425
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:428
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:431
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:434
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:437
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:440
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:443
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:446
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:449
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:452
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44028,13 +44121,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:456
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:459
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44044,7 +44137,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:464
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44052,19 +44145,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:469
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:473
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:477
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44078,45 +44171,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:482
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:485
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:489
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:492
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:495
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:498
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:501
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44125,7 +44218,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:504
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44136,7 +44229,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:508
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44152,14 +44245,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:516
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:519
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44167,49 +44260,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:522
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:525
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:530
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:533
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:536
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:539
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:542
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:545
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:548
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44218,7 +44311,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:552
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44226,7 +44319,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:556
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44234,7 +44327,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:560
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44244,7 +44337,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:564
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44253,7 +44346,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:568
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44262,7 +44355,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:572
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44272,7 +44365,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:576
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44280,7 +44373,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:580
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44290,7 +44383,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:584
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44300,7 +44393,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:588
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44308,7 +44401,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:592
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44317,7 +44410,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:596
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44325,7 +44418,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:600
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44337,477 +44430,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:606
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:609
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:612
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:615
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:618
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:621
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:624
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:627
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:630
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:633
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:636
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:639
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:642
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:645
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:648
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:651
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:654
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:657
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:660
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:663
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:666
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:669
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:672
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:675
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:678
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:681
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:684
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:687
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:690
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:693
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:696
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:699
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:702
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:705
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:708
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:711
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:714
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:717
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:720
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:723
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:726
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:729
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:732
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:735
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:738
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:741
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:744
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:747
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:750
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:753
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:756
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:759
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:762
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:765
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:768
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:771
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:774
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:777
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:780
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:783
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:786
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:789
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:792
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:795
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:798
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:801
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:804
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:807
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:810
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:813
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:816
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:819
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:822
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:825
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:828
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:831
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:834
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:837
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:840
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:843
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:846
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:849
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:852
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:855
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:858
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:861
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:864
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:867
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:870
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:873
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:876
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:879
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:882
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:885
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:888
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:891
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:894
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:897
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:900
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:903
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:906
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:909
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:912
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:915
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:918
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:921
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:924
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:927
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:930
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:933
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:936
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:939
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:942
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:947
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:950
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -44815,92 +44908,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:953
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:956
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:959
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:962
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:965
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:968
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:971
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:974
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:977
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:980
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:983
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:986
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:989
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:992
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:995
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:998
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1001
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1004
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -44910,33 +45003,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1008
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1011
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1014
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1018
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1022
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44949,7 +45042,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1026
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44961,7 +45054,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1034
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44973,7 +45066,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1042
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44986,7 +45079,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1046
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -44994,28 +45087,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1050
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1054
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1057
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1060
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45025,25 +45118,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1064
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1067
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1070
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1073
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45056,7 +45149,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1077
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45068,7 +45161,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1085
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45080,7 +45173,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1093
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45093,13 +45186,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1097
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1100
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45107,11 +45200,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1104
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1107
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45125,7 +45218,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1113
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45134,7 +45227,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1117
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45150,7 +45243,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1122
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45160,7 +45253,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1126
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45170,7 +45263,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1130
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45181,7 +45274,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1134
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45191,7 +45284,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1138
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45199,7 +45292,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1142
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45210,7 +45303,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1146
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45225,7 +45318,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1152
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45234,13 +45327,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1157
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1160
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45249,7 +45342,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1163
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45259,7 +45352,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1166
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45271,7 +45364,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1169
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45281,24 +45374,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1172
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1175
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1178
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1181
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45307,7 +45400,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1184
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45315,7 +45408,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1187
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45324,7 +45417,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1190
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45334,7 +45427,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1194
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45342,31 +45435,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1198
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1201
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1204
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1207
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1210
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45374,7 +45467,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1213
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45384,21 +45477,21 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1216
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1219
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
"iOS specific override for [member rendering/gles2/compatibility/"
"disable_half_float], due to poor support for half-float vertex compression "
"on many devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
"If [code]true[/code] and available on the target Android device, enables "
"high floating point precision for all shader computations in GLES2.\n"
@@ -45406,31 +45499,31 @@ msgid ""
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1226
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1229
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1232
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1235
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1238
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45438,7 +45531,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1241
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45448,7 +45541,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1244
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45457,7 +45550,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1247
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45466,20 +45559,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1250
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1253
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1256
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45488,7 +45581,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1259
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45496,7 +45589,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45505,7 +45598,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1266
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45515,20 +45608,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1275
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45537,13 +45630,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45553,46 +45646,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1294
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1297
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1300
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1303
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1306
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45602,7 +45695,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45614,7 +45707,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1317
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45622,7 +45715,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45630,7 +45723,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1324
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45639,7 +45732,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1327
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45653,7 +45746,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1332
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45663,7 +45756,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1335
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45672,7 +45765,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1338
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45682,54 +45775,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1341
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1344
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1347
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1350
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1353
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1356
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1359
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -45740,61 +45833,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1366
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1369
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1372
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1375
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1378
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1381
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1384
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1387
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -45805,7 +45898,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1394
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -45814,26 +45907,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400
-#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1409
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1412
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -45844,20 +45937,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1419
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1426
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -45869,52 +45962,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1436
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1439
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1442
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1445
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1448
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1451
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1454
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -45922,7 +46015,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -45935,7 +46028,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -45947,7 +46040,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -45959,7 +46052,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -45971,7 +46064,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -45983,7 +46076,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1481
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46642,40 +46735,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46683,14 +46790,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49017,6 +49124,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49034,7 +49157,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49042,11 +49165,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49056,19 +49179,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54453,20 +54576,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54477,28 +54605,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54510,19 +54638,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
diff --git a/doc/translations/id.po b/doc/translations/id.po
index 3e64a2b4c3..c19b00b573 100644
--- a/doc/translations/id.po
+++ b/doc/translations/id.po
@@ -9,12 +9,13 @@
# Hanz <hanzhaxors@gmail.com>, 2021.
# Naufal Adriansyah <naufaladrn90@gmail.com>, 2021.
# Hilman Hazazi <hafizd.muhammad.kren.403@gmail.com>, 2021.
+# Stephen Gunawan Susilo <gunawanstephen@yahoo.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-10-07 10:24+0000\n"
-"Last-Translator: Hilman Hazazi <hafizd.muhammad.kren.403@gmail.com>\n"
+"PO-Revision-Date: 2021-11-11 16:02+0000\n"
+"Last-Translator: Stephen Gunawan Susilo <gunawanstephen@yahoo.com>\n"
"Language-Team: Indonesian <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/id/>\n"
"Language: id\n"
@@ -22,7 +23,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -119,7 +120,6 @@ msgstr ""
"dalam [Color]."
#: modules/gdscript/doc_classes/@GDScript.xml:45
-#, fuzzy
msgid ""
"Returns the absolute value of parameter [code]s[/code] (i.e. positive "
"value).\n"
@@ -127,11 +127,10 @@ msgid ""
"a = abs(-1) # a is 1\n"
"[/codeblock]"
msgstr ""
-"Mengembalikan nilai mutlak dari parameter [code]s[/code] (misal: nilai "
+"Mengembalikan nilai mutlak dari parameter [code]s[/code] (mis: nilai "
"positif).\n"
"[codeblock]\n"
-"# a adalah 1\n"
-"a = abs(-1)\n"
+"a = abs(-1) # a adalah 1\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:55
@@ -3795,112 +3794,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4978,7 +4986,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -10377,17 +10385,21 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10396,24 +10408,24 @@ msgid ""
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10427,62 +10439,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10490,35 +10502,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10526,13 +10538,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10544,77 +10556,77 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr ""
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:131
+#: doc/classes/BakedLightmap.xml:132
msgid ""
"Returns if lightmapper can't be created. Unless you are using a custom "
"lightmapper, please report this as bug."
msgstr ""
-#: doc/classes/BakedLightmap.xml:134
+#: doc/classes/BakedLightmap.xml:135
msgid ""
"There is no root node to start baking from. Either provide [code]from_node[/"
"code] argument or attach this node to a parent that should be used as root."
msgstr ""
-#: doc/classes/BakedLightmap.xml:137
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:140
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:143
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:146
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -11070,8 +11082,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -25085,21 +25100,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -25108,14 +25134,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -25125,80 +25155,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -29414,7 +29444,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30726,7 +30758,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30791,22 +30824,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30821,7 +30856,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30829,19 +30864,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30912,7 +30947,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30970,7 +31006,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -34519,7 +34557,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37832,7 +37870,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37862,14 +37900,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37879,7 +37917,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40378,17 +40416,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40406,11 +40470,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40605,7 +40669,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41408,6 +41474,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41425,7 +41509,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41539,7 +41623,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -44081,24 +44167,30 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:282
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:285
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:288
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44108,7 +44200,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:291
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44118,27 +44210,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:294
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:297
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:300
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:303
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -44146,81 +44238,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:306
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:309
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:312
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:315
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:318
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:321
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:324
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:327
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:330
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:333
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:336
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:339
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:342
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -44228,109 +44320,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:345
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:348
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:351
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:354
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:357
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:360
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:363
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:366
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:369
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:372
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:375
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:378
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:381
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:384
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:387
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:390
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:393
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:396
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:399
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44341,91 +44433,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:404
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:407
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:410
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:413
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:416
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:419
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:422
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:425
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:428
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:431
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:434
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:437
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:440
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:443
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:446
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:449
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:452
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44434,13 +44526,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:456
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:459
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44450,7 +44542,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:464
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44458,19 +44550,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:469
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:473
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:477
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44484,45 +44576,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:482
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:485
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:489
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:492
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:495
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:498
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:501
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44531,7 +44623,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:504
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44542,7 +44634,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:508
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44558,14 +44650,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:516
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:519
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44573,49 +44665,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:522
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:525
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:530
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:533
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:536
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:539
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:542
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:545
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:548
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44624,7 +44716,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:552
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44632,7 +44724,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:556
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44640,7 +44732,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:560
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44650,7 +44742,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:564
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44659,7 +44751,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:568
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44668,7 +44760,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:572
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44678,7 +44770,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:576
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44686,7 +44778,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:580
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44696,7 +44788,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:584
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44706,7 +44798,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:588
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44714,7 +44806,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:592
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44723,7 +44815,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:596
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44731,7 +44823,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:600
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44743,477 +44835,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:606
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:609
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:612
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:615
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:618
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:621
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:624
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:627
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:630
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:633
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:636
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:639
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:642
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:645
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:648
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:651
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:654
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:657
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:660
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:663
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:666
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:669
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:672
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:675
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:678
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:681
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:684
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:687
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:690
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:693
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:696
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:699
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:702
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:705
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:708
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:711
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:714
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:717
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:720
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:723
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:726
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:729
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:732
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:735
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:738
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:741
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:744
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:747
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:750
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:753
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:756
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:759
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:762
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:765
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:768
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:771
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:774
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:777
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:780
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:783
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:786
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:789
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:792
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:795
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:798
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:801
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:804
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:807
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:810
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:813
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:816
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:819
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:822
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:825
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:828
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:831
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:834
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:837
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:840
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:843
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:846
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:849
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:852
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:855
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:858
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:861
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:864
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:867
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:870
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:873
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:876
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:879
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:882
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:885
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:888
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:891
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:894
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:897
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:900
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:903
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:906
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:909
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:912
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:915
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:918
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:921
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:924
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:927
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:930
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:933
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:936
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:939
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:942
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:947
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:950
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -45221,92 +45313,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:953
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:956
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:959
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:962
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:965
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:968
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:971
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:974
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:977
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:980
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:983
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:986
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:989
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:992
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:995
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:998
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1001
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1004
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -45316,33 +45408,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1008
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1011
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1014
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1018
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1022
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45355,7 +45447,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1026
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45367,7 +45459,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1034
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45379,7 +45471,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1042
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45392,7 +45484,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1046
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45400,28 +45492,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1050
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1054
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1057
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1060
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45431,25 +45523,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1064
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1067
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1070
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1073
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45462,7 +45554,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1077
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45474,7 +45566,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1085
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45486,7 +45578,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1093
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45499,13 +45591,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1097
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1100
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45513,11 +45605,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1104
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1107
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45531,7 +45623,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1113
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45540,7 +45632,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1117
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45556,7 +45648,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1122
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45566,7 +45658,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1126
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45576,7 +45668,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1130
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45587,7 +45679,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1134
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45597,7 +45689,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1138
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45605,7 +45697,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1142
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45616,7 +45708,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1146
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45631,7 +45723,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1152
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45640,13 +45732,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1157
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1160
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45655,7 +45747,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1163
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45665,7 +45757,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1166
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45677,7 +45769,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1169
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45687,24 +45779,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1172
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1175
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1178
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1181
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45713,7 +45805,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1184
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45721,7 +45813,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1187
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45730,7 +45822,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1190
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45740,7 +45832,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1194
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45748,31 +45840,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1198
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1201
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1204
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1207
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1210
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45780,7 +45872,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1213
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45790,21 +45882,21 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1216
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1219
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
"iOS specific override for [member rendering/gles2/compatibility/"
"disable_half_float], due to poor support for half-float vertex compression "
"on many devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
"If [code]true[/code] and available on the target Android device, enables "
"high floating point precision for all shader computations in GLES2.\n"
@@ -45812,31 +45904,31 @@ msgid ""
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1226
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1229
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1232
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1235
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1238
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45844,7 +45936,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1241
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45854,7 +45946,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1244
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45863,7 +45955,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1247
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45872,20 +45964,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1250
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1253
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1256
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45894,7 +45986,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1259
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45902,7 +45994,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45911,7 +46003,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1266
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45921,20 +46013,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1275
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45943,13 +46035,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45959,46 +46051,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1294
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1297
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1300
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1303
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1306
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -46008,7 +46100,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -46020,7 +46112,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1317
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -46028,7 +46120,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -46036,7 +46128,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1324
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -46045,7 +46137,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1327
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -46059,7 +46151,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1332
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -46069,7 +46161,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1335
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -46078,7 +46170,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1338
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -46088,54 +46180,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1341
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1344
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1347
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1350
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1353
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1356
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1359
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -46146,61 +46238,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1366
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1369
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1372
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1375
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1378
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1381
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1384
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1387
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -46211,7 +46303,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1394
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -46220,26 +46312,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400
-#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1409
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1412
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -46250,20 +46342,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1419
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1426
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -46275,52 +46367,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1436
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1439
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1442
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1445
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1448
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1451
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1454
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -46328,7 +46420,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -46341,7 +46433,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46353,7 +46445,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46365,7 +46457,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46377,7 +46469,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46389,7 +46481,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1481
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -47053,40 +47145,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -47094,14 +47200,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49436,6 +49542,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49453,7 +49575,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49461,11 +49583,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49475,19 +49597,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54902,20 +55024,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54926,28 +55053,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54959,19 +55086,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
diff --git a/doc/translations/it.po b/doc/translations/it.po
index cdc5e42f21..b5b5700045 100644
--- a/doc/translations/it.po
+++ b/doc/translations/it.po
@@ -21,12 +21,14 @@
# Jacopo Farina <jacopo1.farina@gmail.com>, 2021.
# Riteo Siuga <riteo@posteo.net>, 2021.
# ZeroKun265 <davidegiambirtone265@gmail.com>, 2021.
+# Andrea Montagna <fullmontis@gmail.com>, 2021.
+# Andrea Leganza <neogene@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-10-31 13:39+0000\n"
-"Last-Translator: ZeroKun265 <davidegiambirtone265@gmail.com>\n"
+"PO-Revision-Date: 2021-11-15 21:14+0000\n"
+"Last-Translator: Andrea Leganza <neogene@gmail.com>\n"
"Language-Team: Italian <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/it/>\n"
"Language: it\n"
@@ -34,7 +36,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -183,7 +185,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:78
-#, fuzzy
msgid ""
"Asserts that the [code]condition[/code] is [code]true[/code]. If the "
"[code]condition[/code] is [code]false[/code], an error is generated. When "
@@ -209,7 +210,7 @@ msgid ""
"a message with clarifying details\n"
"[/codeblock]"
msgstr ""
-"Controlla che [code]condizion[/code] sia [code]true[/code]. Se "
+"Controlla che [code]condition[/code] sia [code]true[/code]. Se "
"[code]condition[/code] è [code]false[/code], un errore è generato ed il "
"programma viene fermato fin quando decidi di avviarlo di nuovo. Viene "
"eseguito soltanto nelle build di debug, o quando il gioco viene eseguito "
@@ -296,7 +297,6 @@ msgstr ""
"dall'origine ed un angolo)."
#: modules/gdscript/doc_classes/@GDScript.xml:135
-#, fuzzy
msgid ""
"Rounds [code]s[/code] upward (towards positive infinity), returning the "
"smallest whole number that is not less than [code]s[/code].\n"
@@ -306,12 +306,13 @@ msgid ""
"[/codeblock]\n"
"See also [method floor], [method round], [method stepify], and [int]."
msgstr ""
-"Arrotonda [code]s[/code] per eccesso, ritornando il più piccolo intero non "
-"minore di [code]s[/code].\n"
+"Arrotonda [code]s[/code] per eccesso (verso l'infinito positivo), ritornando "
+"il più piccolo intero non minore di [code]s[/code].\n"
"[codeblock]\n"
-"i = ceil(1.45) # i è 2\n"
-"i = ceil(1.001) # i è 2\n"
-"[/codeblock]"
+"a = ceil(1.45) # a è 2.0\n"
+"a = ceil(1.001) # a è 2.0\n"
+"[/codeblock]\n"
+"Vedi anche [method floor], [method round], [method stepify], e [int]."
#: modules/gdscript/doc_classes/@GDScript.xml:147
msgid ""
@@ -334,7 +335,6 @@ msgstr ""
"Questo è l'inverso di [method ord]."
#: modules/gdscript/doc_classes/@GDScript.xml:162
-#, fuzzy
msgid ""
"Clamps [code]value[/code] and returns a value not less than [code]min[/code] "
"and not more than [code]max[/code].\n"
@@ -347,13 +347,9 @@ msgstr ""
"Limita [code]value[/code] e ritorna un valore non minore di [code]min[/code] "
"e non maggiore di [code]max[/code].\n"
"[codeblock]\n"
-"speed = 1000\n"
-"# a è 20\n"
-"a = clamp(speed, 1, 20)\n"
-"\n"
-"speed = -10\n"
-"# a è 1\n"
-"a = clamp(speed, 1, 20)\n"
+"a = clamp(1000, 1, 20) # a è 20\n"
+"a = clamp(-10, 1, 20) # a è 1\n"
+"a = clamp(15, 1, 20) # a è 15\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:175
@@ -381,7 +377,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:190
-#, fuzzy
msgid ""
"Returns the cosine of angle [code]s[/code] in radians.\n"
"[codeblock]\n"
@@ -391,13 +386,11 @@ msgid ""
msgstr ""
"RItorna il coseno dell'angolo [code]s[/code] in radianti.\n"
"[codeblock]\n"
-"# Stampa 1 poi -1\n"
-"print(cos(PI * 2))\n"
-"print(cos(PI))\n"
+"a = cos(TAU) # a è 1.0\n"
+"a = cos(PI) # a è -1.0\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:201
-#, fuzzy
msgid ""
"Returns the hyperbolic cosine of [code]s[/code] in radians.\n"
"[codeblock]\n"
@@ -406,8 +399,7 @@ msgid ""
msgstr ""
"Ritorna il coseno iperbolico di [code]s[/code] in radianti.\n"
"[codeblock]\n"
-"# Stampa 1.543081\n"
-"print(cosh(1))\n"
+"print(cosh(1)) # Stampa 1.543081\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:211
@@ -416,10 +408,9 @@ msgstr "Converte da decibel a energia lineare (audio)."
#: modules/gdscript/doc_classes/@GDScript.xml:218
msgid "Deprecated alias for [method step_decimals]."
-msgstr ""
+msgstr "Alias deprecato per [method step_decimals]."
#: modules/gdscript/doc_classes/@GDScript.xml:227
-#, fuzzy
msgid ""
"[b]Note:[/b] [code]dectime[/code] has been deprecated and will be removed in "
"Godot 4.0, please use [method move_toward] instead.\n"
@@ -429,11 +420,12 @@ msgid ""
"a = dectime(60, 10, 0.1)) # a is 59.0\n"
"[/codeblock]"
msgstr ""
-"Restituisce il risultato di [code]valore[/code] diminuito di [code]step[/"
-"code]*[code]quantità[/code].\n"
+"[b]Nota bene:[/b] [code]dectime[/code] è oramai deprecato e verrà rimosso in "
+"Godot 4.0, si prega invece di usare [method move_toward].\n"
+"Ritorna il valore di [code]value[/code] diminuito di [code]step[/code] * "
+"[code]amount[/code].\n"
"[codeblock]\n"
-"# a = 59\n"
-"a = dectime(60, 10, 0.1))\n"
+"a = dectime(60, 10, 0.1)) # a è 59.0\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:238
@@ -449,13 +441,12 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:248
-#, fuzzy
msgid ""
"Converts a dictionary (previously created with [method inst2dict]) back to "
"an instance. Useful for deserializing."
msgstr ""
-"Converte un'istanza precedentemente convertita in un dizionario di nuovo in "
-"un istanza. Utile per la deserializzazione."
+"Riconverte un dizionario (precedentemente creato usando [method inst2dict]) "
+"in una istanza. Utile per la deserializzazione."
#: modules/gdscript/doc_classes/@GDScript.xml:256
msgid ""
@@ -477,6 +468,23 @@ msgid ""
"See also [method smoothstep]. If you need to perform more advanced "
"transitions, use [Tween] or [AnimationPlayer]."
msgstr ""
+"Ritorna un valore \"allentato\" di [code]x[/code] basato su una funzione di "
+"allentamento definita in [code]curve[/code]. Questa funzione è basata su un "
+"esponente. L'argomento [code]curve[/code] può essere qualunque numero "
+"decimale, con valori specifici che portano ai seguenti comportamenti:\n"
+"[codeblock]\n"
+"- Minore di -1.0 (exclusive): Ease in-out\n"
+"- 1.0: Lineare\n"
+"- Compreso tra -1.0 and 0.0 (non compresi): Ease out-in\n"
+"- 0.0: Costante\n"
+"- Compreso tra 0.0 to 1.0 (non compresi): Ease in\n"
+"- 1.0: Lineare\n"
+"- Maggiore di 1.0 (non compreso): Ease out\n"
+"[/codeblock]\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"ease_cheatsheet.png]ease() curve values cheatsheet[/url]\n"
+"Vedi anche [method smoothstep]. Se hai bisogno di transizioni più avanzate, "
+"usa [Tween] oppure [AnimationPlayer]."
#: modules/gdscript/doc_classes/@GDScript.xml:274
msgid ""
@@ -499,7 +507,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:286
-#, fuzzy
msgid ""
"Rounds [code]s[/code] downward (towards negative infinity), returning the "
"largest whole number that is not more than [code]s[/code].\n"
@@ -514,18 +521,18 @@ msgid ""
"directly."
msgstr ""
"Arrotonda [code]s[/code] verso il basso (all'infinito negativo), restituendo "
-"il più grande intero che è minore di [code]s[/code]\n"
+"il più grande intero minore di [code]s[/code].\n"
"[codeblock]\n"
-"# a è 2.0\n"
-"a = floor(2.99)\n"
-"# a è -3.0\n"
-"a = floor(-2.99)\n"
+"a = floor(2.45) # a è 2.0\n"
+"a = floor(2.99) # a è 2.0\n"
+"a = floor(-2.99) # a è -3.0\n"
"[/codeblock]\n"
-"[b]Nota:[/b] Questo metodo restituisce un float. Se ti serve un intero puoi "
-"direttamente usare [code]int(s)[/code]."
+"Vedi anche [method ceil], [method round], [method stepify], e [int].\n"
+"[b]Nota:[/b] Questo metodo restituisce un float. Se ti serve un intero e "
+"[code]s[/code] è un numero non negativo, puoi direttamente usare [code]int(s)"
+"[/code]."
#: modules/gdscript/doc_classes/@GDScript.xml:301
-#, fuzzy
msgid ""
"Returns the floating-point remainder of [code]a/b[/code], keeping the sign "
"of [code]a[/code].\n"
@@ -537,13 +544,11 @@ msgstr ""
"Restituisce il resto in virgola mobile di [code]a/b[/code], mantenendo il "
"segno di [code]a[/code].\n"
"[codeblock]\n"
-"# Il resto è 1.5\n"
-"var resto = fmod(7, 5.5)\n"
+"r = fmod(7, 5.5) # r è 1.5\n"
"[/codeblock]\n"
"Per l'operazione di resto intero, utilizzare l'operatore %."
#: modules/gdscript/doc_classes/@GDScript.xml:313
-#, fuzzy
msgid ""
"Returns the floating-point modulus of [code]a/b[/code] that wraps equally in "
"positive and negative.\n"
@@ -566,24 +571,19 @@ msgstr ""
"Restituisce il modulo in virgola mobile di [code]a/b[/code] che arrotonda "
"ugualmente in positivo e negativo.\n"
"[codeblock]\n"
-"var i = -6\n"
-"while i < 5:\n"
-" prints(i, fposmod(i, 3))\n"
-" i += 1\n"
+"for i in 7:\n"
+" var x = 0.5 * i - 1.5\n"
+" print(\"%4.1f %4.1f %4.1f\" % [x, fmod(x, 1.5), fposmod(x, 1.5)])\n"
"[/codeblock]\n"
"Produce:\n"
"[codeblock]\n"
-"-6 0\n"
-"-5 1\n"
-"-4 2\n"
-"-3 0\n"
-"-2 1\n"
-"-1 2\n"
-"0 0\n"
-"1 1\n"
-"2 2\n"
-"3 0\n"
-"4 1\n"
+"-1.5 -0.0 0.0\n"
+"-1.0 -1.0 0.5\n"
+"-0.5 -0.5 1.0\n"
+" 0.0 0.0 0.0\n"
+" 0.5 0.5 0.5\n"
+" 1.0 1.0 1.0\n"
+" 1.5 0.0 0.0\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:336
@@ -772,7 +772,7 @@ msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml:453
msgid ""
"Returns whether [code]s[/code] is a NaN (\"Not a Number\" or invalid) value."
-msgstr "Ritorna se[code]s[/code] è un valore NaN (Not-A-Number) o invalido."
+msgstr "Ritorna se [code]s[/code] è un valore NaN (Not-A-Number) o invalido."
#: modules/gdscript/doc_classes/@GDScript.xml:460
msgid ""
@@ -793,18 +793,18 @@ msgid ""
"len(a) # Returns 4\n"
"[/codeblock]"
msgstr ""
-"Restituisce la lunghezza della variante [code]var[/code]. La lunghezza è il "
-"conteggio dei caratteri della Stringa, il conteggio degli elementi "
-"dell'Array, la dimensione del Dizionario, ecc.\n"
-"[b]Nota:[/b] Genera un errore fatale se la Variante non può fornire una "
-"lunghezza.\n"
+"Restituisce la lunghezza della variabile Variant [code]var[/code]. La "
+"lunghezza è il conteggio dei caratteri di una variabile String, il conteggio "
+"degli elementi di una variabile Array, la dimensione di una variabile "
+"Dizionario, ecc.\n"
+"[b]Nota:[/b] Genera un errore fatale se la variable Variant non può fornire "
+"una lunghezza.\n"
"[codeblock]\n"
"a = [1, 2, 3, 4]\n"
"len(a) # Restituisce 4\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:482
-#, fuzzy
msgid ""
"Linearly interpolates between two values by a normalized value. This is the "
"opposite of [method inverse_lerp].\n"
@@ -818,13 +818,14 @@ msgid ""
"lerp(Vector2(1, 5), Vector2(3, 2), 0.5) # Returns Vector2(2, 3.5)\n"
"[/codeblock]"
msgstr ""
-"Interpola linearmente tra due valori con un valore normalizzato. Questo è "
-"l'opposto di [method inverse_lerp].\n"
-"Se gli argomenti [code]da [/code] e da [code]a[/code] sono di tipo [int] o "
+"Interpola linearmente tra due valori mediante un valore normalizzato. Questo "
+"metodo è l'opposto di [method inverse_lerp].\n"
+"Se gli argomenti [code]from[/code] e [code]to[/code] sono di tipo [int] o "
"[float], il valore di ritorno è un [float].\n"
"Se entrambi sono dello stesso tipo di vettore ([Vector2], [Vector3] o "
"[Color]), il valore di ritorno sarà dello stesso tipo ([code]lerp[/code] "
-"quindi chiama il metodo [code]lerp[/code] del tipo vettore).\n"
+"quindi chiama il metodo [code]linear_interpolate[/code] del vettore "
+"utilizzato).\n"
"[codeblock].\n"
"lerp(0, 4, 0.75) # Restituisce 3.0\n"
"lerp(Vector2(1, 5), Vector2(3, 2), 0.5) # Restituisce Vector2(2, 3.5)\n"
@@ -889,7 +890,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:527
-#, fuzzy
msgid ""
"Loads a resource from the filesystem located at [code]path[/code]. The "
"resource is loaded on the method call (unless it's referenced already "
@@ -911,15 +911,16 @@ msgid ""
"This method is a simplified version of [method ResourceLoader.load], which "
"can be used for more advanced scenarios."
msgstr ""
-"Carica una risorsa dai file system che si trova su [code]path[/code]. La "
-"risorsa è caricata nella chiamata del metodo (a meno che ci sia già un "
-"riferimento in un altro punto, per esempio un altro script o nella scena), "
-"che potrebbe causare un ritardo, specialmente quando si caricano le scene. "
-"Per evitare ritardi non necessari quando si carica qualcosa più volte, o si "
-"salva la risorsa in una variabile o si usa [method preload].\n"
+"Carica una risorsa dai file system posizionata in [code]path[/code]. La "
+"risorsa è caricata alla chiamata del metodo (a meno che non sia già "
+"indirizzato altrove, per esempio in un altro script o nella scena). Ciò "
+"potrebbe causare un ritardo, specialmente al caricamento delle scene. Per "
+"evitare ritardi superflui in caso di molteplici caricamenti, salvare la "
+"risorsa in una variabile o usare [method preload].\n"
"[b]Nota:[/b] I percorsi delle risorse possono essere ottenuti cliccando con "
-"il tasto destro su una risorsa nel riquadro File di sistema \"Copia percorso"
-"\" o trascinando il file dal riquadro File di sistema nello script.\n"
+"il tasto destro su una risorsa nel riquadro File di Sistema e scegliendo "
+"\"Copia percorso\" o trascinando il file dal riquadro File di Sistema nello "
+"script.\n"
"[codeblock]\n"
"# Carica una scena chiamata main che si trova alla radice della cartella di "
"progetto e salvala temporaneamente in una variabile.\n"
@@ -927,7 +928,9 @@ msgstr ""
"PackedScene.\n"
"[/codeblock]\n"
"[b]Importante:[/b] Il percorso deve essere assoluto, un percorso locale "
-"ritornerà [code]null[/code]."
+"ritornerà [code]null[/code].\n"
+"Questo metodo è una versione semplificata di [method ResourceLoader.load], "
+"che può essere usata in casi più avanzati."
#: modules/gdscript/doc_classes/@GDScript.xml:541
msgid ""
@@ -1056,7 +1059,6 @@ msgstr ""
"Questo metodo è l'opposto di [method char]."
#: modules/gdscript/doc_classes/@GDScript.xml:622
-#, fuzzy
msgid ""
"Parse JSON text to a Variant. (Use [method typeof] to check if the Variant's "
"type is what you expect.)\n"
@@ -1076,15 +1078,15 @@ msgid ""
"[/codeblock]\n"
"See also [JSON] for an alternative way to parse JSON text."
msgstr ""
-"Converte una stringa JSON in Variant. (Usa [method typeof] per controllare "
-"se la tipologia di Variant è quella prevista)\n"
-"[b]Nota:[/b] La specifica JSON non presenta tipi integer o float, ma solo "
+"Converte una stringa JSON in una variabile Variant. (Usa [method typeof] per "
+"controllare se la tipologia di Variant è quella prevista.)\n"
+"[b]Nota:[/b] La specifica JSON non definisce tipi integer o float, ma solo "
"tipi [i]number[/i]. Perciò convertire una stringa JSON convertirà tutti i "
"valori numerici in [float].\n"
"[b]Nota:[/b] Gli oggetti JSON non mantengono l'ordinamento delle chiavi come "
-"i dictionary Godot, quindi non dovresti dare per scontato che le chiavi "
-"siano in un certo ordine se un dictionary è stato costruito da JSON. Al "
-"contrario, gli array JSON mantengono l'ordine degli elementi.\n"
+"i tipi Dictionary di Godot, quindi non si deve assumere che le chiavi siano "
+"in un certo ordine se una variabile Dictionary è stata generata da JSON. Al "
+"contrario, gli array JSON mantengono l'ordine degli elementi:\n"
"[codeblock]\n"
"var p = JSON.parse('[\"hello\", \"world\", \"!\"]')\n"
"if typeof(p.result) == TYPE_ARRAY:\n"
@@ -1204,6 +1206,16 @@ msgid ""
"distinguishes them from print messages used for debugging purposes, while "
"also displaying a stack trace when an error or warning is printed."
msgstr ""
+"Converte uno o più argomenti di qualunque tipo in una striga e li stampa "
+"nella console.\n"
+"[codeblock]\n"
+"a = [1, 2, 3]\n"
+"print(\"a\", \"=\", a) # Stampa a=[1, 2, 3]\n"
+"[/codeblock]\n"
+"[b]Nota:[/b] Valuta l'utilizzo di [method push_error] e [method "
+"push_warning] per stampare messaggi di errore e di warning invece di "
+"utilizzare [method print]. Questa scelta permette di distinguerli dai "
+"messaggi di debug ed errore che vengono mostrati con la stack trace."
#: modules/gdscript/doc_classes/@GDScript.xml:702
msgid "Like [method print], but prints only when used in debug mode."
@@ -1212,7 +1224,6 @@ msgstr ""
"debug."
#: modules/gdscript/doc_classes/@GDScript.xml:708
-#, fuzzy
msgid ""
"Prints a stack track at code location, only works when running with debugger "
"turned on.\n"
@@ -1221,15 +1232,14 @@ msgid ""
"Frame 0 - res://test.gd:16 in function '_process'\n"
"[/codeblock]"
msgstr ""
-"Stampa un stack trace nella nel codice, funziona solo quando il debugger è "
-"acceso.\n"
+"Stampa un stack trace nella posizione del codice, funziona solo quando il "
+"debugger è attivato.\n"
"L'output nella console apparirà come:\n"
"[codeblock]\n"
"Frame 0 - res://test.gd:16 in function '_process'\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:718
-#, fuzzy
msgid ""
"Prints one or more arguments to strings in the best way possible to standard "
"error line.\n"
@@ -1238,7 +1248,7 @@ msgid ""
"[/codeblock]"
msgstr ""
"Stampa uno o più argomenti come stringhe nella migliore maniera possibile "
-"per standardizzare la linea dell'errore.\n"
+"sullo standard error.\n"
"[codeblock]\n"
"printerr(\"prints to stderr\")\n"
"[/codeblock]"
@@ -1295,7 +1305,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:758
-#, fuzzy
msgid ""
"Pushes an error message to Godot's built-in debugger and to the OS "
"terminal.\n"
@@ -1312,7 +1321,10 @@ msgstr ""
"[codeblock]\n"
"push_error(\"errore di prova\") # Stampa \"errore di prova\" al debugger e "
"al terminale con una error call\n"
-"[/codeblock]"
+"[/codeblock]\n"
+"[b]Nota:[/b] Questo tipo di stampa degli errori non interrompe l'esecuzione. "
+"Per stampare un messaggio d'errore e interrompere l'esecuzione nelle build "
+"di debug, è necessario adoperare [code]assert(false, \"test error\")[/code]."
#: modules/gdscript/doc_classes/@GDScript.xml:769
msgid ""
@@ -1344,7 +1356,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:790
-#, fuzzy
msgid ""
"Random range, any floating point value between [code]from[/code] and "
"[code]to[/code].\n"
@@ -1352,11 +1363,10 @@ msgid ""
"prints(rand_range(0, 1), rand_range(0, 1)) # Prints e.g. 0.135591 0.405263\n"
"[/codeblock]"
msgstr ""
-"Un range casuale, un qualsiasi numero con la virgola tra [code]from[/code] e "
-"[code]to[/code]\n"
+"Un range casuale, un qualsiasi numero in virgola mobile tra [code]from[/"
+"code] e [code]to[/code]\n"
"[codeblock]\n"
-"prints(rand_range(0, 1), rand_range(0, 1)) # Per esempio stampa 0.135591 "
-"0.405263\n"
+"prints(rand_range(0, 1), rand_range(0, 1)) # Stampa 0.135591 0.405263\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:800
@@ -1366,6 +1376,11 @@ msgid ""
"pseudo random number generator. The internal state of the current "
"implementation is 64 bits."
msgstr ""
+"Genera un numero pseudocasuale da un seed: fornendo un [code]seed[/code], "
+"viene restituito un array contenente sia il valore pseudocasuale generato "
+"che il nuovo sedd. Con \"Seed\" si intente un valore adoperato internamente "
+"dal generatore di valori pseudocasuali. La gestione di tale valore è a 64 "
+"bits."
#: modules/gdscript/doc_classes/@GDScript.xml:806
msgid ""
@@ -1374,6 +1389,11 @@ msgid ""
"randf() # Returns e.g. 0.375671\n"
"[/codeblock]"
msgstr ""
+"Restituisce un numero casuale in virgola mobile nell'intervallo [code][0, 1]"
+"[/code].\n"
+"[codeblock]\n"
+"randf() # Restituisce ad esempio 0.375671\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:815
msgid ""
@@ -1387,6 +1407,15 @@ msgid ""
"randi() % 100 + 1 # Returns random integer between 1 and 100\n"
"[/codeblock]"
msgstr ""
+"Restituisce un numero intero unsigned pseudocasuale di 32-bit. Adoperando "
+"l'operatore modulo/resto è possibile generare valori nell'intervallo [code]"
+"[0, N - 1][/code] (dove N è minore di 2^32).\n"
+"[codeblock]\n"
+"randi() # Restituisce un intero pseudocasuale tra 0 e 2^32 - 1\n"
+"randi() % 20 # Restituisce un intero pseudocasuale tra 0 e 19\n"
+"randi() % 100 # Restituisce un intero pseudocasuale tra 0 e 99\n"
+"randi() % 100 + 1 # Restituisce un intero pseudocasuale tra 1 e 100\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:827
msgid ""
@@ -1397,6 +1426,13 @@ msgid ""
" randomize()\n"
"[/codeblock]"
msgstr ""
+"Randomizza il seed (o lo stato interno) di un generatore di numeri "
+"pseudocasuali. L'implementazione attuale adopera un numero basato sul tempo "
+"per randomizzarlo nuovamente.\n"
+"[codeblock]\n"
+"func _ready():\n"
+" randomize()\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:837
msgid ""
@@ -1448,9 +1484,13 @@ msgid ""
"range_lerp(75, 0, 100, -1, 1) # Returns 0.5\n"
"[/codeblock]"
msgstr ""
+"Effettua una mappatura di un valore [code]value[/code] da un intervallo "
+"[code][istart, istop][/code] in [code][ostart, ostop][/code].\n"
+"[codeblock]\n"
+"range_lerp(75, 0, 100, -1, 1) # Restituisce 0.5\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:884
-#, fuzzy
msgid ""
"Rounds [code]s[/code] to the nearest whole number, with halfway cases "
"rounded away from zero.\n"
@@ -1464,8 +1504,11 @@ msgstr ""
"Arrotonda il risultato di [code]s[/code] al più vicino numero intero, e per "
"eccesso nei casi equidistanti.\n"
"[codeblock]\n"
-"round(2.6) # Ritorna 32\n"
-"[/codeblock]"
+"a = round(2.49) # a assume il valore 2.0\n"
+"a = round(2.5) # a assume il valore 3.0\n"
+"a = round(2.51) # a assume il valore 3.0\n"
+"[/codeblock]\n"
+"Consulta inoltre [method floor], [method ceil], [method stepify], e [int]."
#: modules/gdscript/doc_classes/@GDScript.xml:897
msgid ""
@@ -1475,6 +1518,11 @@ msgid ""
"seed(my_seed.hash())\n"
"[/codeblock]"
msgstr ""
+"Imposta il seed per il generatore di numeri casuali.\n"
+"[codeblock]\n"
+"my_seed = \"Godot Rocks\"\n"
+"seed(my_seed.hash())\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:908
msgid ""
@@ -1486,6 +1534,13 @@ msgid ""
"sign(6) # Returns 1\n"
"[/codeblock]"
msgstr ""
+"Restituisce il segno di un valore [code]s[/code]: -1 o 1 per indicare se il "
+"valore è < o > di 0 rispettivamente. Restituisce 0 se [code]s[/code] è 0.\n"
+"[codeblock]\n"
+"sign(-6) # Restituisce -1\n"
+"sign(0) # Restituisce 0\n"
+"sign(6) # Restituisce 1\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:920
msgid ""
@@ -1494,6 +1549,10 @@ msgid ""
"sin(0.523599) # Returns 0.5\n"
"[/codeblock]"
msgstr ""
+"Restituisce il seno dell'angolo [code]s[/code] in radianti.\n"
+"[codeblock]\n"
+"sin(0.523599) # Restituisce 0.5\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:930
msgid ""
@@ -1503,6 +1562,11 @@ msgid ""
"sinh(a) # Returns 0.75\n"
"[/codeblock]"
msgstr ""
+"Restituisce il seno iperbolico di [code]s[/code].\n"
+"[codeblock]\n"
+"a = log(2.0) # Restituisce 0.693147\n"
+"sinh(a) # Restituisce 0.75\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:943
msgid ""
@@ -1540,6 +1604,14 @@ msgid ""
"[b]Note:[/b] Negative values of [code]s[/code] return NaN. If you need "
"negative inputs, use [code]System.Numerics.Complex[/code] in C#."
msgstr ""
+"Restituisce la radice quadrata di [code]s[/code], dove [code]s[/code] è un "
+"numero non negativo.\n"
+"[codeblock]\n"
+"sqrt(9) # Restituisce 3\n"
+"[/codeblock]\n"
+"[b]Nota:[/b] Adoperando valori negativi [code]s[/code] viene restituito NaN. "
+"Se è necessario adoperare valori negativi è suggerito l'utilizzo di "
+"[code]System.Numerics.Complex[/code] in C#."
#: modules/gdscript/doc_classes/@GDScript.xml:971
msgid ""
@@ -1552,6 +1624,14 @@ msgid ""
"n = step_decimals(0.000000005) # n is 9\n"
"[/codeblock]"
msgstr ""
+"Restituisce la posizione della prima cifra diversa da zero dopo il "
+"separatore decimale. Il massimo valore restituito è 10, dovuto ad una scelta "
+"implementativa.\n"
+"[codeblock]\n"
+"n = step_decimals(5) # n è 0\n"
+"n = step_decimals(1.0005) # n è 4\n"
+"n = step_decimals(0.000000005) # n è 9\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:984
msgid ""
@@ -1594,6 +1674,13 @@ msgid ""
"print(b[\"a\"]) # Prints 1\n"
"[/codeblock]"
msgstr ""
+"Converte una stringa formattata restituita da [method var2str] nel valore "
+"originale.\n"
+"[codeblock]\n"
+"a = '{ \"a\": 1, \"b\": 2 }'\n"
+"b = str2var(a)\n"
+"print(b[\"a\"]) # Stampa 1\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:1020
msgid ""
@@ -1602,6 +1689,10 @@ msgid ""
"tan(deg2rad(45)) # Returns 1\n"
"[/codeblock]"
msgstr ""
+"Restituisce la tangente dell'angolo [code]s[/code] in radianti.\n"
+"[codeblock]\n"
+"tan(deg2rad(45)) # Restituisce 1\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:1030
#, fuzzy
@@ -1635,6 +1726,22 @@ msgid ""
"text will convert all numerical values to [float] types.\n"
"See also [JSON] for an alternative way to convert a [Variant] to JSON text."
msgstr ""
+"Converte una [Variant] [code]var[/code] in un testo in formato JSON e lo "
+"restituisce. È utile per serializzare dei dati per memorizzarli su un "
+"dispositivo o inviarli attraverso la rete.\n"
+"[codeblock]\n"
+"# Entrambi i numeri sono interi.\n"
+"a = { \"a\": 1, \"b\": 2 }\n"
+"b = to_json(a)\n"
+"print(b) # {\"a\":1, \"b\":2}\n"
+"# Entrambi i numeri sono float, anche se mostrati senza valore decimale.\n"
+"[/codeblock]\n"
+"[b]Nota:[/b] Le specifiche del formato JSON non fanno distinzione tra interi "
+"e float, ma descrivono solo un tipo numerico [i]number[/i]. Per tale motivo, "
+"convertire [Variant] in JSON effettuerà automaticamente la conversione dei "
+"valori da interi a [float].\n"
+"Consulta [JSON] per valutare le possibilità per effettuare la conversione di "
+"[Variant] in testo in formato JSON."
#: modules/gdscript/doc_classes/@GDScript.xml:1057
msgid ""
@@ -1644,6 +1751,12 @@ msgid ""
"type_exists(\"Variant\") # Returns false\n"
"[/codeblock]"
msgstr ""
+"Restituisce un booleano per confermare o no se una particolare classe è "
+"disponibile [ClassDB].\n"
+"[codeblock]\n"
+"type_exists(\"Sprite\") # Restituisce true\n"
+"type_exists(\"Variant\") # Restituisce false\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:1068
msgid ""
@@ -1671,6 +1784,16 @@ msgid ""
" push_error(\"Invalid JSON: \" + v)\n"
"[/codeblock]"
msgstr ""
+"Controlla che [code]json[/code] sia un dato JSON valido. Restituisce una "
+"stringa vuota in caso affermativo, un errore altrimenti.\n"
+"[codeblock]\n"
+"j = to_json([1, 2, 3])\n"
+"v = validate_json(j)\n"
+"if not v:\n"
+" print(\"Valid JSON.\")\n"
+"else:\n"
+" push_error(\"Invalid JSON: \" + v)\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:1098
msgid ""
@@ -1678,6 +1801,9 @@ msgid ""
"[code]true[/code] encoding objects is allowed (and can potentially include "
"code)."
msgstr ""
+"Converte una variabile in un array di byte. Quando il parametro "
+"[code]full_objects[/code] è [code]true[/code] è possibile convertire istanze "
+"di classi (incluso il codice presente)."
#: modules/gdscript/doc_classes/@GDScript.xml:1105
msgid ""
@@ -1695,6 +1821,19 @@ msgid ""
"}\n"
"[/codeblock]"
msgstr ""
+"Converte una Variant [code]var[/code] in una stringa formattata che può "
+"essere successivamente processata adoperando [method str2var].\n"
+"[codeblock]\n"
+"a = { \"a\": 1, \"b\": 2 }\n"
+"print(var2str(a))\n"
+"[/codeblock]\n"
+"prints\n"
+"[codeblock]\n"
+"{\n"
+"\"a\": 1,\n"
+"\"b\": 2\n"
+"}\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:1123
msgid ""
@@ -1705,6 +1844,12 @@ msgid ""
"something else. However, until the object is actually destroyed the weak "
"reference may return the object even if there are no strong references to it."
msgstr ""
+"Restituisce un riferimento debole/weak ad un oggetto.\n"
+"Un riferimento debole/weak non è sufficiente per mantenerlo in vita: se è "
+"l'unico riferimento rimasto il garbage collector è autorizzato a deallocarlo "
+"in un qualunque momento. Comunque, finché non sarà deallocato, tale "
+"riferimento consentirà di adoperare l'oggetto anche se non fossero presenti "
+"riferimenti forti/strong ad esso."
#: modules/gdscript/doc_classes/@GDScript.xml:1133
msgid ""
@@ -1747,6 +1892,22 @@ msgid ""
"[code]wrapi[/code] is more flexible than using the [method posmod] approach "
"by giving the user control over the minimum value."
msgstr ""
+"Limita un valore intero [code]value[/code] tra [code]min[/code] e [code]max[/"
+"code].\n"
+"È utilizzabile per creare comportamenti in loop o superfici infinite.\n"
+"[codeblock]\n"
+"# Ciclo infinito tra 5 e 9\n"
+"frame = wrapi(frame + 1, 5, 10)\n"
+"[/codeblock]\n"
+"[codeblock]\n"
+"# Viene restituito -2\n"
+"var result = wrapi(-6, -5, -1)\n"
+"[/codeblock]\n"
+"[b]Nota:[/b] Se [code]min[/code] è [code]0[/code], è equivalente ad "
+"utilizzare [method posmod], in tal caso si suggerisce di adoperare "
+"quest'ultimo.\n"
+"[code]wrapi[/code] è più utile rispetto a [method posmod] quando è "
+"necessario impostare anche il valore minimo."
#: modules/gdscript/doc_classes/@GDScript.xml:1176
msgid ""
@@ -1792,18 +1953,62 @@ msgid ""
"[code]GDScriptFunctionState[/code]. Notice [code]yield(get_tree(), "
"\"idle_frame\")[/code] from the above example."
msgstr ""
+"Interrompe l'esecuzione della funzione e ne restituisce lo stato attuale.\n"
+"Basta invocare [method GDScriptFunctionState.resume] su tale stato per far "
+"riprendere l'esecuzione. Questa operazione invalida lo stato. All'interno "
+"della funzione [code]yield()[/code] restituisce cosa è stato passato alla "
+"funzione [code]resume()[/code] .\n"
+"Il ripristino della funzione, quando viene passato un oggetto e un segnale, "
+"avviene quando l'oggetto invia tale segnale. In tal caso, [code]yield()[/"
+"code] restituisce il valore passato a [code]emit_signal()[/code] se il "
+"segnale accetta un solo un parametro, oppure un array di tutti i parametri "
+"passati a [code]emit_signal()[/code].\n"
+"You can also use [code]yield[/code] to wait for a function to finish:\n"
+"[codeblock]\n"
+"func _ready():\n"
+" yield(countdown(), \"completed\") # attendi che countdown() termini\n"
+" print('Ready')\n"
+"\n"
+"func countdown():\n"
+" yield(get_tree(), \"idle_frame\") # restituisce un GDScriptFunctionState "
+"object to _ready()\n"
+" print(3)\n"
+" yield(get_tree().create_timer(1.0), \"timeout\")\n"
+" print(2)\n"
+" yield(get_tree().create_timer(1.0), \"timeout\")\n"
+" print(1)\n"
+" yield(get_tree().create_timer(1.0), \"timeout\")\n"
+"\n"
+"# Stampa:\n"
+"# 3\n"
+"# 2\n"
+"# 1\n"
+"# Ready\n"
+"[/codeblock]\n"
+"Quando si utilizza yield su una funzione viene emesso il segnale "
+"[code]completed[/code] automaticamente quanto la funzione termina. Può "
+"essere inoltre adoperata come parametro [code]signal[/code] del metodo "
+"[code]yield[/code] per ripristinarne lo stato.\n"
+"Per adoperare yield su una funzione, è necessario che questa restituisca un "
+"[code]GDScriptFunctionState[/code]. Nota tale comportamento relativamente "
+"alla riga di codice [code]yield(get_tree(), \"idle_frame\")[/code] ."
#: modules/gdscript/doc_classes/@GDScript.xml:1207
msgid ""
"Constant that represents how many times the diameter of a circle fits around "
"its perimeter. This is equivalent to [code]TAU / 2[/code]."
msgstr ""
+"Constante che indica il rapporto tra diametro del cerchio e perimetro. This "
+"is equivalent to [code]TAU / 2[/code]."
#: modules/gdscript/doc_classes/@GDScript.xml:1210
msgid ""
"The circle constant, the circumference of the unit circle in radians. This "
"is equivalent to [code]PI * 2[/code], or 360 degrees in rotations."
msgstr ""
+"Lunghezza della circonferenza del cerchio di raggio unitario in radianti "
+"(Circonferenza = Pi * diametro). È equivalente a [code]PI * 2[/code], "
+"equivalente a 360°."
#: modules/gdscript/doc_classes/@GDScript.xml:1213
msgid ""
@@ -1831,6 +2036,15 @@ msgid ""
"[code]0[/code] will not result in [constant NAN] and will result in a run-"
"time error instead."
msgstr ""
+"\"Not a Number\", indica un valore in virgola mobile non valido. [constant "
+"NAN] ha proprietà particolari, ad esempio non è uguale a se stesso "
+"([code]NAN == NAN[/code] restituisce [code]false[/code]). E restituito in "
+"caso di operazioni non valide, come ad la una divisione del numero in "
+"virgola mobile [code]0.0[/code] per [code]0.0[/code].\n"
+"[b]Nota:[/b] \"Not a Number\" è correlato solo ad operazioni su numeri con "
+"virgola mobile, non ha quindi un corrispettivo per gli interi. La divisione "
+"dell'intero [code]0[/code] per [code]0[/code] non produrrà un [constant NAN] "
+"ma genererà un errore run-time."
#: doc/classes/@GlobalScope.xml:4
msgid "Global scope constants and variables."
@@ -1846,136 +2060,148 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:16
msgid "The [ARVRServer] singleton."
-msgstr ""
+msgstr "Il singleton [ARVRServer]."
#: doc/classes/@GlobalScope.xml:19
msgid "The [AudioServer] singleton."
-msgstr ""
+msgstr "Il singleton [AudioServer]."
#: doc/classes/@GlobalScope.xml:22
msgid "The [CameraServer] singleton."
-msgstr ""
+msgstr "Il singleton [CameraServer]."
#: doc/classes/@GlobalScope.xml:25
msgid "The [ClassDB] singleton."
-msgstr ""
+msgstr "Il singleton [ClassDB]."
#: doc/classes/@GlobalScope.xml:28
msgid "The [Engine] singleton."
-msgstr ""
+msgstr "Il singleton [Engine]."
#: doc/classes/@GlobalScope.xml:31
msgid "The [Geometry] singleton."
-msgstr ""
+msgstr "Il singleton [Geometry]."
#: doc/classes/@GlobalScope.xml:34
msgid "The [IP] singleton."
-msgstr ""
+msgstr "Il singleton [IP]."
#: doc/classes/@GlobalScope.xml:37
msgid "The [Input] singleton."
-msgstr ""
+msgstr "Il singleton [Input]."
#: doc/classes/@GlobalScope.xml:40
msgid "The [InputMap] singleton."
-msgstr ""
+msgstr "Il singleton [InputMap]."
#: doc/classes/@GlobalScope.xml:43
msgid "The [JSON] singleton."
-msgstr ""
+msgstr "Il singleton [JSON]."
#: doc/classes/@GlobalScope.xml:46
msgid ""
"The [JavaClassWrapper] singleton.\n"
"[b]Note:[/b] Only implemented on Android."
msgstr ""
+"Il singleton [JavaClassWrapper].\n"
+"[b]Note:[/b] Disponibile solo per Android."
#: doc/classes/@GlobalScope.xml:50
msgid ""
"The [JavaScript] singleton.\n"
"[b]Note:[/b] Only implemented on HTML5."
msgstr ""
+"Il singleton [JavaScript].\n"
+"[b]Note:[/b] Disponibile solo per HTML5."
#: doc/classes/@GlobalScope.xml:54
msgid "The [Marshalls] singleton."
-msgstr ""
+msgstr "Il singleton [Marshalls]."
#: doc/classes/@GlobalScope.xml:57
msgid "The [EditorNavigationMeshGenerator] singleton."
-msgstr ""
+msgstr "Il singleton [EditorNavigationMeshGenerator]."
#: doc/classes/@GlobalScope.xml:60
msgid "The [OS] singleton."
-msgstr ""
+msgstr "Il singleton [OS]."
#: doc/classes/@GlobalScope.xml:63
msgid "The [Performance] singleton."
-msgstr ""
+msgstr "Il singleton [Performance]."
#: doc/classes/@GlobalScope.xml:66
msgid "The [Physics2DServer] singleton."
-msgstr ""
+msgstr "Il singleton [Physics2DServer]."
#: doc/classes/@GlobalScope.xml:69
msgid "The [PhysicsServer] singleton."
-msgstr ""
+msgstr "Il singleton [PhysicsServer]."
#: doc/classes/@GlobalScope.xml:72
msgid "The [ProjectSettings] singleton."
-msgstr ""
+msgstr "Il singleton [ProjectSettings]."
#: doc/classes/@GlobalScope.xml:75
msgid "The [ResourceLoader] singleton."
-msgstr ""
+msgstr "Il singleton [ResourceLoader]."
#: doc/classes/@GlobalScope.xml:78
msgid "The [ResourceSaver] singleton."
-msgstr ""
+msgstr "Il singleton [ResourceSaver]."
#: doc/classes/@GlobalScope.xml:81
msgid "The [TranslationServer] singleton."
-msgstr ""
+msgstr "Il singleton [TranslationServer]."
#: doc/classes/@GlobalScope.xml:84
msgid "The [VisualScriptEditor] singleton."
-msgstr ""
+msgstr "Il singleton [VisualScriptEditor]."
#: doc/classes/@GlobalScope.xml:87
msgid "The [VisualServer] singleton."
-msgstr ""
+msgstr "Il singleton [VisualServer]."
#: doc/classes/@GlobalScope.xml:92
msgid "Left margin, usually used for [Control] or [StyleBox]-derived classes."
msgstr ""
+"Margine sinistro, generalmente adoperato nelle classi figlie di [Control] "
+"oppure [StyleBox]."
#: doc/classes/@GlobalScope.xml:95
msgid "Top margin, usually used for [Control] or [StyleBox]-derived classes."
msgstr ""
+"Margine superiore, generalmente adoperato nelle classi figlie di [Control] o "
+"[StyleBox]."
#: doc/classes/@GlobalScope.xml:98
msgid "Right margin, usually used for [Control] or [StyleBox]-derived classes."
msgstr ""
+"Margine destro, generalmente adoperato nelle classi figlie di [Control] o "
+"[StyleBox]."
#: doc/classes/@GlobalScope.xml:101
msgid ""
"Bottom margin, usually used for [Control] or [StyleBox]-derived classes."
msgstr ""
+"Margine inferiore, generalmente adoperato nelle classi figlie di [Control] o "
+"[StyleBox]."
#: doc/classes/@GlobalScope.xml:104
msgid "Top-left corner."
-msgstr ""
+msgstr "Angolo superiore-sinistro."
#: doc/classes/@GlobalScope.xml:107
msgid "Top-right corner."
-msgstr ""
+msgstr "Angolo superiore-destro."
#: doc/classes/@GlobalScope.xml:110
msgid "Bottom-right corner."
-msgstr ""
+msgstr "Angolo inferiore-destro."
#: doc/classes/@GlobalScope.xml:113
msgid "Bottom-left corner."
-msgstr ""
+msgstr "Angolo inferiore-sinistro."
#: doc/classes/@GlobalScope.xml:116
msgid ""
@@ -2019,43 +2245,43 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:143
msgid "Escape key."
-msgstr ""
+msgstr "Tasto ESC/Escape."
#: doc/classes/@GlobalScope.xml:146
msgid "Tab key."
-msgstr ""
+msgstr "Tasto TAB/Tabulazione."
#: doc/classes/@GlobalScope.xml:149
msgid "Shift+Tab key."
-msgstr ""
+msgstr "Tasto SHIFT+TAB."
#: doc/classes/@GlobalScope.xml:152
msgid "Backspace key."
-msgstr ""
+msgstr "Tasto backspace."
#: doc/classes/@GlobalScope.xml:155
msgid "Return key (on the main keyboard)."
-msgstr ""
+msgstr "Tasto return/invio (sulla tastiera principale)."
#: doc/classes/@GlobalScope.xml:158
msgid "Enter key on the numeric keypad."
-msgstr ""
+msgstr "Tasto return/enter sul tastierino numerico."
#: doc/classes/@GlobalScope.xml:161
msgid "Insert key."
-msgstr ""
+msgstr "Tasto INS/inserisci."
#: doc/classes/@GlobalScope.xml:164
msgid "Delete key."
-msgstr ""
+msgstr "Tasto DEL/Canc."
#: doc/classes/@GlobalScope.xml:167
msgid "Pause key."
-msgstr ""
+msgstr "Tasto Pausa/Pause."
#: doc/classes/@GlobalScope.xml:170
msgid "Print Screen key."
-msgstr ""
+msgstr "Tasto Stamp/Print Screen."
#: doc/classes/@GlobalScope.xml:173
msgid "System Request key."
@@ -2063,63 +2289,63 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:176
msgid "Clear key."
-msgstr ""
+msgstr "Tasto Clear/Delete/Del."
#: doc/classes/@GlobalScope.xml:179
msgid "Home key."
-msgstr ""
+msgstr "Tasto Home/Inizio."
#: doc/classes/@GlobalScope.xml:182
msgid "End key."
-msgstr ""
+msgstr "Tasto End/Fine."
#: doc/classes/@GlobalScope.xml:185
msgid "Left arrow key."
-msgstr ""
+msgstr "Freccia cursore a sinistra."
#: doc/classes/@GlobalScope.xml:188
msgid "Up arrow key."
-msgstr ""
+msgstr "Freccia cursore alta."
#: doc/classes/@GlobalScope.xml:191
msgid "Right arrow key."
-msgstr ""
+msgstr "Freccia cursore destra."
#: doc/classes/@GlobalScope.xml:194
msgid "Down arrow key."
-msgstr ""
+msgstr "Freccia cursore in basso."
#: doc/classes/@GlobalScope.xml:197
msgid "Page Up key."
-msgstr ""
+msgstr "Tasto Page Up/Page ^."
#: doc/classes/@GlobalScope.xml:200
msgid "Page Down key."
-msgstr ""
+msgstr "Tasto Page Up/Page v."
#: doc/classes/@GlobalScope.xml:203
msgid "Shift key."
-msgstr ""
+msgstr "Tasto Shift/Maiuscola."
#: doc/classes/@GlobalScope.xml:206
msgid "Control key."
-msgstr ""
+msgstr "Tasto Control/CTRL."
#: doc/classes/@GlobalScope.xml:209
msgid "Meta key."
-msgstr ""
+msgstr "Tasto Meta/Command."
#: doc/classes/@GlobalScope.xml:212
msgid "Alt key."
-msgstr ""
+msgstr "Tasto Alt."
#: doc/classes/@GlobalScope.xml:215
msgid "Caps Lock key."
-msgstr ""
+msgstr "Tasto Caps Lock/Blocco maiuscole."
#: doc/classes/@GlobalScope.xml:218
msgid "Num Lock key."
-msgstr ""
+msgstr "Tasto Num Lock/Bloc num."
#: doc/classes/@GlobalScope.xml:221
msgid "Scroll Lock key."
@@ -2127,135 +2353,135 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:224
msgid "F1 key."
-msgstr ""
+msgstr "Tasto F1."
#: doc/classes/@GlobalScope.xml:227
msgid "F2 key."
-msgstr ""
+msgstr "Tasto F2."
#: doc/classes/@GlobalScope.xml:230
msgid "F3 key."
-msgstr ""
+msgstr "Tasto F3."
#: doc/classes/@GlobalScope.xml:233
msgid "F4 key."
-msgstr ""
+msgstr "Tasto F4."
#: doc/classes/@GlobalScope.xml:236
msgid "F5 key."
-msgstr ""
+msgstr "Tasto F5."
#: doc/classes/@GlobalScope.xml:239
msgid "F6 key."
-msgstr ""
+msgstr "Tasto F6."
#: doc/classes/@GlobalScope.xml:242
msgid "F7 key."
-msgstr ""
+msgstr "Tasto F7."
#: doc/classes/@GlobalScope.xml:245
msgid "F8 key."
-msgstr ""
+msgstr "Tasto F8."
#: doc/classes/@GlobalScope.xml:248
msgid "F9 key."
-msgstr ""
+msgstr "Tasto F9."
#: doc/classes/@GlobalScope.xml:251
msgid "F10 key."
-msgstr ""
+msgstr "Tasto F10."
#: doc/classes/@GlobalScope.xml:254
msgid "F11 key."
-msgstr ""
+msgstr "Tasto F11."
#: doc/classes/@GlobalScope.xml:257
msgid "F12 key."
-msgstr ""
+msgstr "Tasto F12."
#: doc/classes/@GlobalScope.xml:260
msgid "F13 key."
-msgstr ""
+msgstr "Tasto F13."
#: doc/classes/@GlobalScope.xml:263
msgid "F14 key."
-msgstr ""
+msgstr "Tasto F14."
#: doc/classes/@GlobalScope.xml:266
msgid "F15 key."
-msgstr ""
+msgstr "Tasto F15."
#: doc/classes/@GlobalScope.xml:269
msgid "F16 key."
-msgstr ""
+msgstr "Tasto F16."
#: doc/classes/@GlobalScope.xml:272
msgid "Multiply (*) key on the numeric keypad."
-msgstr ""
+msgstr "Tasto */ Moltiplica sul tastierino numerico."
#: doc/classes/@GlobalScope.xml:275
msgid "Divide (/) key on the numeric keypad."
-msgstr ""
+msgstr "Tasto '/' / divisione sul tastierino numerico."
#: doc/classes/@GlobalScope.xml:278
msgid "Subtract (-) key on the numeric keypad."
-msgstr ""
+msgstr "Tasto - / Sottrazione sul tastierino numerico."
#: doc/classes/@GlobalScope.xml:281
msgid "Period (.) key on the numeric keypad."
-msgstr ""
+msgstr "Tasto . sul tastierino numerico."
#: doc/classes/@GlobalScope.xml:284
msgid "Add (+) key on the numeric keypad."
-msgstr ""
+msgstr "Tasto +/ Somma sul tastierino numerico."
#: doc/classes/@GlobalScope.xml:287
msgid "Number 0 on the numeric keypad."
-msgstr ""
+msgstr "Numero 0 sul tastierino numerico."
#: doc/classes/@GlobalScope.xml:290
msgid "Number 1 on the numeric keypad."
-msgstr ""
+msgstr "Numero 1 sul tastierino numerico."
#: doc/classes/@GlobalScope.xml:293
msgid "Number 2 on the numeric keypad."
-msgstr ""
+msgstr "Numero 2 sul tastierino numerico."
#: doc/classes/@GlobalScope.xml:296
msgid "Number 3 on the numeric keypad."
-msgstr ""
+msgstr "Numero 3 sul tastierino numerico."
#: doc/classes/@GlobalScope.xml:299
msgid "Number 4 on the numeric keypad."
-msgstr ""
+msgstr "Numero 4 sul tastierino numerico."
#: doc/classes/@GlobalScope.xml:302
msgid "Number 5 on the numeric keypad."
-msgstr ""
+msgstr "Numero 5 sul tastierino numerico."
#: doc/classes/@GlobalScope.xml:305
msgid "Number 6 on the numeric keypad."
-msgstr ""
+msgstr "Numero 6 sul tastierino numerico."
#: doc/classes/@GlobalScope.xml:308
msgid "Number 7 on the numeric keypad."
-msgstr ""
+msgstr "Numero 7 sul tastierino numerico."
#: doc/classes/@GlobalScope.xml:311
msgid "Number 8 on the numeric keypad."
-msgstr ""
+msgstr "Numero 8 sul tastierino numerico."
#: doc/classes/@GlobalScope.xml:314
msgid "Number 9 on the numeric keypad."
-msgstr ""
+msgstr "Numero 9 sul tastierino numerico."
#: doc/classes/@GlobalScope.xml:317
msgid "Left Super key (Windows key)."
-msgstr ""
+msgstr "Tasto 'Windows' sinistro."
#: doc/classes/@GlobalScope.xml:320
msgid "Right Super key (Windows key)."
-msgstr ""
+msgstr "Tasto 'Windows' destro."
#: doc/classes/@GlobalScope.xml:323
msgid "Context menu key."
@@ -4134,112 +4360,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -5318,7 +5553,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -10737,17 +10972,21 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10756,24 +10995,24 @@ msgid ""
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10787,62 +11026,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10850,35 +11089,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10886,13 +11125,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10904,78 +11143,78 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
#, fuzzy
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr "Restituisce l'arco-tangente dei parametri."
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:131
+#: doc/classes/BakedLightmap.xml:132
msgid ""
"Returns if lightmapper can't be created. Unless you are using a custom "
"lightmapper, please report this as bug."
msgstr ""
-#: doc/classes/BakedLightmap.xml:134
+#: doc/classes/BakedLightmap.xml:135
msgid ""
"There is no root node to start baking from. Either provide [code]from_node[/"
"code] argument or attach this node to a parent that should be used as root."
msgstr ""
-#: doc/classes/BakedLightmap.xml:137
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:140
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:143
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:146
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -11431,8 +11670,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -25491,21 +25733,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -25514,14 +25767,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -25531,36 +25788,36 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
#, fuzzy
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
@@ -25568,46 +25825,46 @@ msgstr ""
"Se [code] vero [/code], i nodi figli sono ordinati, altrimenti l'ordinamento "
"è disabilitato."
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -29843,7 +30100,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -31160,7 +31419,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -31225,22 +31485,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -31255,7 +31517,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -31263,19 +31525,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -31346,7 +31608,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -31404,7 +31667,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -34963,7 +35228,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -38283,7 +38548,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -38313,14 +38578,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -38330,7 +38595,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40848,17 +41113,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40876,11 +41167,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -41075,7 +41366,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41878,6 +42171,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41895,7 +42206,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -42009,7 +42320,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -44556,24 +44869,30 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:282
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:285
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:288
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44583,7 +44902,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:291
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44593,27 +44912,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:294
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:297
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:300
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:303
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -44621,81 +44940,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:306
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:309
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:312
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:315
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:318
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:321
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:324
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:327
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:330
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:333
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:336
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:339
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:342
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -44703,109 +45022,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:345
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:348
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:351
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:354
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:357
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:360
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:363
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:366
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:369
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:372
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:375
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:378
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:381
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:384
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:387
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:390
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:393
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:396
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:399
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44816,91 +45135,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:404
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:407
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:410
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:413
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:416
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:419
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:422
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:425
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:428
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:431
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:434
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:437
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:440
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:443
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:446
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:449
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:452
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44909,13 +45228,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:456
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:459
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44925,7 +45244,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:464
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44933,19 +45252,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:469
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:473
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:477
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44959,45 +45278,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:482
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:485
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:489
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:492
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:495
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:498
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:501
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -45006,7 +45325,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:504
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -45017,7 +45336,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:508
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -45033,14 +45352,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:516
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:519
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -45048,49 +45367,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:522
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:525
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:530
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:533
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:536
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:539
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:542
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:545
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:548
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -45099,7 +45418,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:552
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45107,7 +45426,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:556
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45115,7 +45434,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:560
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -45125,7 +45444,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:564
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -45134,7 +45453,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:568
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -45143,7 +45462,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:572
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -45153,7 +45472,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:576
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45161,7 +45480,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:580
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -45171,7 +45490,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:584
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -45181,7 +45500,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:588
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45189,7 +45508,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:592
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -45198,7 +45517,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:596
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45206,7 +45525,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:600
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -45218,477 +45537,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:606
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:609
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:612
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:615
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:618
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:621
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:624
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:627
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:630
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:633
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:636
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:639
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:642
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:645
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:648
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:651
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:654
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:657
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:660
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:663
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:666
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:669
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:672
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:675
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:678
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:681
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:684
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:687
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:690
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:693
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:696
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:699
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:702
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:705
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:708
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:711
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:714
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:717
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:720
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:723
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:726
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:729
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:732
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:735
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:738
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:741
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:744
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:747
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:750
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:753
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:756
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:759
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:762
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:765
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:768
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:771
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:774
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:777
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:780
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:783
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:786
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:789
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:792
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:795
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:798
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:801
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:804
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:807
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:810
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:813
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:816
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:819
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:822
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:825
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:828
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:831
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:834
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:837
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:840
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:843
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:846
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:849
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:852
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:855
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:858
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:861
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:864
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:867
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:870
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:873
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:876
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:879
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:882
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:885
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:888
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:891
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:894
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:897
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:900
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:903
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:906
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:909
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:912
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:915
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:918
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:921
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:924
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:927
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:930
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:933
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:936
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:939
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:942
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:947
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:950
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -45696,92 +46015,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:953
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:956
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:959
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:962
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:965
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:968
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:971
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:974
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:977
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:980
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:983
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:986
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:989
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:992
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:995
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:998
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1001
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1004
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -45791,33 +46110,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1008
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1011
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1014
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1018
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1022
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45830,7 +46149,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1026
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45842,7 +46161,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1034
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45854,7 +46173,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1042
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45867,7 +46186,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1046
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45875,28 +46194,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1050
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1054
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1057
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1060
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45906,25 +46225,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1064
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1067
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1070
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1073
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45937,7 +46256,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1077
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45949,7 +46268,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1085
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45961,7 +46280,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1093
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45974,13 +46293,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1097
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1100
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45988,11 +46307,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1104
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1107
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -46006,7 +46325,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1113
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -46015,7 +46334,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1117
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -46031,7 +46350,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1122
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -46041,7 +46360,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1126
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -46051,7 +46370,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1130
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -46062,7 +46381,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1134
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -46072,7 +46391,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1138
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -46080,7 +46399,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1142
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -46091,7 +46410,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1146
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -46106,7 +46425,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1152
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -46115,13 +46434,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1157
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1160
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -46130,7 +46449,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1163
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -46140,7 +46459,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1166
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -46152,7 +46471,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1169
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -46162,24 +46481,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1172
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1175
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1178
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1181
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -46188,7 +46507,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1184
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -46196,7 +46515,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1187
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -46205,7 +46524,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1190
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -46215,7 +46534,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1194
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -46223,31 +46542,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1198
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1201
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1204
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1207
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1210
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -46255,7 +46574,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1213
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -46265,21 +46584,21 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1216
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1219
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
"iOS specific override for [member rendering/gles2/compatibility/"
"disable_half_float], due to poor support for half-float vertex compression "
"on many devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
"If [code]true[/code] and available on the target Android device, enables "
"high floating point precision for all shader computations in GLES2.\n"
@@ -46287,31 +46606,31 @@ msgid ""
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1226
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1229
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1232
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1235
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1238
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -46319,7 +46638,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1241
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -46329,7 +46648,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1244
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -46338,7 +46657,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1247
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -46347,20 +46666,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1250
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1253
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1256
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -46369,7 +46688,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1259
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -46377,7 +46696,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -46386,7 +46705,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1266
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -46396,20 +46715,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1275
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -46418,13 +46737,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -46434,46 +46753,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1294
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1297
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1300
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1303
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1306
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -46483,7 +46802,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -46495,7 +46814,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1317
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -46503,7 +46822,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -46511,7 +46830,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1324
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -46520,7 +46839,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1327
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -46534,7 +46853,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1332
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -46544,7 +46863,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1335
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -46553,7 +46872,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1338
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -46563,54 +46882,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1341
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1344
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1347
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1350
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1353
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1356
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1359
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -46621,61 +46940,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1366
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1369
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1372
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1375
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1378
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1381
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1384
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1387
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -46686,7 +47005,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1394
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -46695,26 +47014,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400
-#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1409
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1412
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -46725,20 +47044,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1419
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1426
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -46750,52 +47069,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1436
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1439
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1442
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1445
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1448
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1451
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1454
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -46803,7 +47122,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -46816,7 +47135,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46828,7 +47147,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46840,7 +47159,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46852,7 +47171,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46864,7 +47183,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1481
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -47534,40 +47853,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -47575,14 +47908,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49918,6 +50251,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49935,7 +50284,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49943,11 +50292,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49957,19 +50306,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -55399,20 +55748,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -55423,28 +55777,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -55456,19 +55810,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -60565,7 +60919,6 @@ msgid "Service type."
msgstr ""
#: modules/upnp/doc_classes/UPNPDevice.xml:66
-#, fuzzy
msgid "OK."
msgstr "OK."
@@ -60851,9 +61204,8 @@ msgstr ""
"Ritorna [code]true[/code] se il vettore è normalizzato, o falso altrimenti."
#: doc/classes/Vector2.xml:155 doc/classes/Vector3.xml:131
-#, fuzzy
msgid "Returns the length (magnitude) of this vector."
-msgstr "Restituisce la lunghezza (magnitudine) di questo vettore."
+msgstr "Restituisce la lunghezza di questo vettore."
#: doc/classes/Vector2.xml:161 doc/classes/Vector3.xml:137
msgid ""
@@ -70321,6 +70673,8 @@ msgid ""
"Gets the contents of a text node. This will raise an error in any other type "
"of node."
msgstr ""
+"Restituisce il contenuto del nodo di testo. Genera un errore se adoperato su "
+"un altro tipo di nodo."
#: doc/classes/XMLParser.xml:61
msgid ""
@@ -70328,6 +70682,8 @@ msgid ""
"current node type is neither [constant NODE_ELEMENT] nor [constant "
"NODE_ELEMENT_END]."
msgstr ""
+"Restituisce il nome del nodo corrente. Produce un errore se il nodo non "
+"appartiene a [constant NODE_ELEMENT] oppure a [constant NODE_ELEMENT_END]."
#: doc/classes/XMLParser.xml:67
msgid ""
@@ -70339,10 +70695,12 @@ msgstr ""
msgid ""
"Gets the type of the current node. Compare with [enum NodeType] constants."
msgstr ""
+"Restituisce il tipo del nodo attuale. Effettua il confronto adoperando le "
+"costanti [enum NodeType]."
#: doc/classes/XMLParser.xml:80
msgid "Check whether the current element has a certain attribute."
-msgstr ""
+msgstr "Verifica che l'elemento attuale abbia un certo attributo."
#: doc/classes/XMLParser.xml:86
msgid ""
@@ -70352,7 +70710,7 @@ msgstr ""
#: doc/classes/XMLParser.xml:93
msgid "Opens an XML file for parsing. This returns an error code."
-msgstr ""
+msgstr "Apre un file XML per effettuarne il parsing. Può restituire un errore."
#: doc/classes/XMLParser.xml:100
msgid "Opens an XML raw buffer for parsing. This returns an error code."
@@ -70388,23 +70746,23 @@ msgstr ""
#: doc/classes/XMLParser.xml:134
msgid "Text node."
-msgstr ""
+msgstr "Nodo Testo."
#: doc/classes/XMLParser.xml:137
msgid "Comment node."
-msgstr ""
+msgstr "Nodo Commento."
#: doc/classes/XMLParser.xml:140
msgid "CDATA content."
-msgstr ""
+msgstr "Contenuto CDATA."
#: doc/classes/XMLParser.xml:143
msgid "Unknown node."
-msgstr ""
+msgstr "Nodo sconosciuto."
#: doc/classes/YSort.xml:4
msgid "Sort all child nodes based on their Y positions."
-msgstr ""
+msgstr "Ordina tutti i nodi figli in base alla loro posizione Y."
#: doc/classes/YSort.xml:7
msgid ""
@@ -70416,6 +70774,12 @@ msgid ""
"the same space as the parent YSort, allowing to better organize a scene or "
"divide it in multiple ones, yet keep the unique sorting."
msgstr ""
+"Ordina tutti i nodi figli in base alla loro posizione Y. I nodi figli devono "
+"derivare da [CanvasItem]. I nodi con y maggiore saranno disegnati "
+"successivamente e quindi appariranno sopra gli altri. \n"
+"È possibile creare gerarchie di nodi ordinati rispetto all'asse Y. Nodi "
+"figli ordinati rispetto all'asse Y vengono organizzati rispetto "
+"all'ordinamento applicato al nodo padre."
#: doc/classes/YSort.xml:16
msgid ""
diff --git a/doc/translations/ja.po b/doc/translations/ja.po
index 611e762e31..a7a1436ccc 100644
--- a/doc/translations/ja.po
+++ b/doc/translations/ja.po
@@ -13,8 +13,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-10-24 20:52+0000\n"
-"Last-Translator: Itoyo Onuki <bettawat@yahoo.co.jp>\n"
+"PO-Revision-Date: 2021-11-05 11:56+0000\n"
+"Last-Translator: Wataru Onuki <bettawat@yahoo.co.jp>\n"
"Language-Team: Japanese <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/ja/>\n"
"Language: ja\n"
@@ -4499,22 +4499,31 @@ msgstr ""
"ã“ã® [AABB] ãŒã‚‚ã†ã²ã¨ã¤ã‚’完全ã«å†…包ã™ã‚‹å ´åˆ [code]true[/code] ã‚’è¿”ã—ã¾ã™ã€‚"
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
-msgstr "与ãˆã‚‰ã‚ŒãŸãƒã‚¤ãƒ³ãƒˆã‚’å«ã‚€ã‚ˆã†æ‹¡å¤§ã—㟠[AABB] ã‚’è¿”ã—ã¾ã™ã€‚"
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
+msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr "[AABB] ã®ä½“ç©ã‚’è¿”ã—ã¾ã™ã€‚"
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr "空間ã«ã‚ã‚‹ [AABB] ã® 8 ãƒã‚¤ãƒ³ãƒˆã®ä½ç½®ã‚’è¿”ã—ã¾ã™ã€‚"
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr "[AABB] ã®æœ€é•·è»¸ã‚’æ­£è¦åŒ–ã—ã¦è¿”ã—ã¾ã™ã€‚"
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
@@ -4522,15 +4531,15 @@ msgstr ""
"[AABB] ã®æœ€é•·è»¸ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã‚’è¿”ã—ã¾ã™ ([Vector3]ã® [code]AXIS_*[/code] 定数"
"ã«åŸºã¥ã)。"
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr "[AABB] ã®æœ€é•·è»¸ã®é•·ã•をスカラー数ã§è¿”ã—ã¾ã™ã€‚"
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr "[AABB] ã®æœ€çŸ­è»¸ã‚’æ­£è¦åŒ–ã—ã¦è¿”ã—ã¾ã™ã€‚"
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
@@ -4538,11 +4547,11 @@ msgstr ""
"[AABB] ã®æœ€çŸ­è»¸ã®ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ã‚’è¿”ã—ã¾ã™ ([Vector3] ã® [code]AXIS_*[/code] 定"
"æ•°ã«åŸºã¥ã)。"
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr "[AABB] ã®æœ€çŸ­è»¸ã®é•·ã•をスカラー数ã§è¿”ã—ã¾ã™ã€‚"
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
@@ -4550,25 +4559,25 @@ msgstr ""
"指定ã—ãŸæ–¹å‘ã®ã‚µãƒãƒ¼ãƒˆãƒã‚¤ãƒ³ãƒˆã‚’è¿”ã—ã¾ã™ã€‚ã“れã¯ã€è¡çªæ¤œå‡ºã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ å‘ã‘ã«"
"便利ã§ã™ã€‚"
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr "与ãˆã‚‰ã‚ŒãŸé‡ã ã‘免颿–¹å‘ã«æ‹¡å¤§ã—㟠[AABB] ã®ã‚³ãƒ”ーを返ã—ã¾ã™ã€‚"
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr "[AABB] ãŒå¹³å¦ã‚ã‚‹ã„ã¯ç©ºã§ã‚ã‚‹å ´åˆã« [code]true[/code] ã‚’è¿”ã—ã¾ã™ã€‚"
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr "[AABB] ãŒç©ºã§ã‚ã‚‹å ´åˆã« [code]true[/code] ã‚’è¿”ã—ã¾ã™ã€‚"
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr "[AABB] ãŒãƒã‚¤ãƒ³ãƒˆã‚’å«ã‚€å ´åˆã« [code]true[/code] ã‚’è¿”ã—ã¾ã™ã€‚"
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
@@ -4576,16 +4585,16 @@ msgstr ""
"2ã¤ã® [AABB] ã®äº¤å·®éƒ¨ã‚’è¿”ã—ã¾ã™ã€‚失敗ã—ãŸæ™‚ã¯ã€ç©ºã® AABB (大ãã• 0,0,0)ãŒè¿”り"
"ã¾ã™ã€‚"
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
"ã“ã® [AABB] ãŒã‚‚ã†ä¸€æ–¹ã¨é‡ãªã£ã¦ã„ã‚‹ã¨ãã« [code]true[/code] ã‚’è¿”ã—ã¾ã™ã€‚"
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr "[AABB] ãŒç‰¹å®šã®å¹³é¢ã®ä¸¡å´ã«ã‚ã‚‹å ´åˆã€[code]true[/code] ã‚’è¿”ã—ã¾ã™ã€‚"
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
@@ -4593,7 +4602,7 @@ msgstr ""
"[code]from[/code] ã‹ã‚‰ [code]to[/code] ã¾ã§ã®ç·šåˆ†ã«ã“ã® [AABB] ãŒäº¤å·®ã—ã¦ã„れ"
"ã° [code]true[/code] ã‚’è¿”ã—ã¾ã™ã€‚"
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
@@ -4603,13 +4612,13 @@ msgstr ""
"ã™ã€‚ãれãžã‚Œã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã§ [method @GDScript.is_equal_approx] ãŒå‘¼ã°ã‚Œã¾"
"ã™ã€‚"
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
"ã“ã® [AABB] 㨠[code]with[/code] を両方å«ã‚€ã€ã‚ˆã‚Šå¤§ã㪠[AABB] ã‚’è¿”ã—ã¾ã™ã€‚"
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
@@ -4617,11 +4626,11 @@ msgstr ""
"終端。ã“れ㯠[code]position + size[/code] ã¨ã—ã¦è¨ˆç®—ã•れã¾ã™ã€‚ã“ã®å€¤ã‚’変更ã™"
"ã‚‹ã¨ã€åŒæ™‚ã«å¤§ãã•も変ã‚りã¾ã™ã€‚"
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr "開始角。通常㯠[member end] よりも低ã„値をæŒã¡ã¾ã™ã€‚"
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
#, fuzzy
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
@@ -6055,7 +6064,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -12632,17 +12641,21 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/ja/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -12651,24 +12664,24 @@ msgid ""
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -12682,63 +12695,63 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
#, fuzzy
msgid "The rotation of the baked custom sky."
msgstr "エリアã®ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªãƒã‚¹ã®åå‰ã§ã™ã€‚"
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -12746,35 +12759,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -12782,13 +12795,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -12800,79 +12813,79 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
#, fuzzy
msgid "Baking was successful."
msgstr "接続æˆåŠŸã€‚"
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr "ç¾åœ¨ã¯æœªä½¿ç”¨ã§ã™ã€‚"
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
#, fuzzy
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr "複数パラメータã®é€†ã‚¿ãƒ³ã‚¸ã‚§ãƒ³ãƒˆã‚’è¿”ã—ã¾ã™ã€‚"
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:131
+#: doc/classes/BakedLightmap.xml:132
msgid ""
"Returns if lightmapper can't be created. Unless you are using a custom "
"lightmapper, please report this as bug."
msgstr ""
-#: doc/classes/BakedLightmap.xml:134
+#: doc/classes/BakedLightmap.xml:135
msgid ""
"There is no root node to start baking from. Either provide [code]from_node[/"
"code] argument or attach this node to a parent that should be used as root."
msgstr ""
-#: doc/classes/BakedLightmap.xml:137
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:140
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:143
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:146
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -13433,8 +13446,11 @@ msgstr "[code]true[/code]ã«ãªã£ã¦ã„るビットマップè¦ç´ ã®æ•°ã‚’è¿”ã
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -27673,10 +27689,21 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
@@ -27691,12 +27718,12 @@ msgstr ""
"[member ProjectSettings.rendering/quality/gi_probes/quality]ã§ãƒ—ローブã®å“質"
"を下ã’れã°ã€ãƒ‘フォーマンスをå‘上ã•ã›ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/ja/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -27705,14 +27732,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -27722,81 +27753,81 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
#, fuzzy
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr "[code]true[/code] ã®å ´åˆã€åå°„ã«ãŠã‘る空ã®å¯„与ãŒç„¡è¦–ã•れã¾ã™ã€‚"
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -32060,7 +32091,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -33401,7 +33434,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -33466,22 +33500,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -33496,7 +33532,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -33504,19 +33540,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -33587,7 +33623,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -33645,7 +33682,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -37223,7 +37262,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -40548,7 +40587,7 @@ msgstr "ブレンド空間内ã®ãƒã‚¤ãƒ³ãƒˆæ•°ã‚’è¿”ã—ã¾ã™ã€‚"
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -40578,14 +40617,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -40595,7 +40634,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -43125,17 +43164,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -43153,11 +43218,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -43352,7 +43417,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -44155,6 +44222,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -44172,7 +44257,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -44286,7 +44371,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -46856,24 +46943,30 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:282
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:285
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:288
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -46883,7 +46976,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:291
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -46893,27 +46986,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:294
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:297
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:300
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:303
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -46921,12 +47014,12 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:306
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:309
+#: doc/classes/ProjectSettings.xml:311
#, fuzzy
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
@@ -46935,20 +47028,20 @@ msgstr ""
"[code]true[/code] ã®å ´åˆã€ã‚¤ãƒ³ãƒ‡ãƒƒã‚¯ã‚¹ [code]bus_idx[/code] ã®ãƒã‚¹ã‚’ミュート"
"ã—ã¾ã™ã€‚"
-#: doc/classes/ProjectSettings.xml:312
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:315
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:318
+#: doc/classes/ProjectSettings.xml:320
#, fuzzy
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
@@ -46957,51 +47050,51 @@ msgstr ""
"[code]true[/code]ã®å ´åˆã€ã‚ªãƒ–ジェクトã¯è·é›¢ã«é–¢ä¿‚ãªãåŒã˜ã‚µã‚¤ã‚ºã§ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°"
"ã•れã¾ã™ã€‚"
-#: doc/classes/ProjectSettings.xml:321
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:324
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:327
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:330
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:333
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:336
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:339
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:342
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -47009,74 +47102,74 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:345
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:348
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:351
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:354
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:357
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:360
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:363
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:366
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:369
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:372
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:375
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:378
+#: doc/classes/ProjectSettings.xml:380
#, fuzzy
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
@@ -47084,38 +47177,38 @@ msgstr ""
"[code]true[/code] ã®å ´åˆã€ã‚·ãƒ¼ãƒ³ãƒ„リーã«è¿½åŠ ã•れãŸã¨ãã«ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªãŒå†ç”Ÿã•れ"
"ã¾ã™ã€‚"
-#: doc/classes/ProjectSettings.xml:381
+#: doc/classes/ProjectSettings.xml:383
#, fuzzy
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr "[code]true[/code]ã®å ´åˆã€æ³•ç·šãƒžãƒƒãƒ”ãƒ³ã‚°ãŒæœ‰åйã«ãªã‚Šã¾ã™ã€‚"
-#: doc/classes/ProjectSettings.xml:384
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:387
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:390
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:393
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:396
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:399
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -47126,91 +47219,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:404
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:407
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:410
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:413
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:416
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:419
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:422
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:425
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:428
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:431
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:434
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:437
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:440
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:443
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:446
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:449
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:452
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -47219,13 +47312,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:456
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:459
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -47235,7 +47328,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:464
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -47243,19 +47336,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:469
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:473
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:477
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -47269,45 +47362,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:482
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:485
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:489
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:492
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:495
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:498
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:501
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -47316,7 +47409,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:504
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -47327,7 +47420,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:508
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -47343,14 +47436,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:516
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:519
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -47358,49 +47451,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:522
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:525
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:530
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:533
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:536
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:539
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:542
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:545
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:548
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -47409,7 +47502,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:552
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -47417,7 +47510,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:556
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -47425,7 +47518,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:560
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -47435,7 +47528,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:564
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -47444,7 +47537,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:568
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -47453,7 +47546,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:572
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -47463,7 +47556,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:576
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -47471,7 +47564,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:580
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -47481,7 +47574,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:584
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -47491,7 +47584,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:588
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -47499,7 +47592,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:592
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -47508,7 +47601,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:596
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -47516,7 +47609,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:600
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -47528,477 +47621,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:606
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:609
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:612
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:615
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:618
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:621
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:624
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:627
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:630
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:633
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:636
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:639
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:642
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:645
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:648
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:651
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:654
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:657
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:660
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:663
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:666
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:669
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:672
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:675
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:678
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:681
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:684
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:687
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:690
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:693
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:696
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:699
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:702
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:705
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:708
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:711
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:714
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:717
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:720
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:723
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:726
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:729
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:732
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:735
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:738
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:741
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:744
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:747
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:750
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:753
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:756
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:759
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:762
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:765
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:768
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:771
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:774
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:777
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:780
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:783
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:786
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:789
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:792
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:795
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:798
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:801
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:804
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:807
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:810
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:813
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:816
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:819
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:822
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:825
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:828
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:831
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:834
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:837
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:840
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:843
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:846
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:849
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:852
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:855
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:858
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:861
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:864
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:867
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:870
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:873
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:876
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:879
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:882
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:885
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:888
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:891
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:894
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:897
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:900
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:903
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:906
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:909
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:912
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:915
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:918
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:921
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:924
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:927
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:930
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:933
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:936
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:939
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:942
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:947
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:950
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -48006,92 +48099,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:953
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:956
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:959
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:962
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:965
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:968
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:971
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:974
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:977
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:980
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:983
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:986
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:989
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:992
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:995
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:998
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1001
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1004
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -48101,33 +48194,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1008
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1011
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1014
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1018
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1022
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -48140,7 +48233,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1026
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -48152,7 +48245,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1034
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -48164,7 +48257,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1042
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -48177,7 +48270,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1046
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -48185,28 +48278,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1050
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1054
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1057
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1060
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -48216,25 +48309,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1064
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1067
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1070
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1073
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -48247,7 +48340,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1077
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -48259,7 +48352,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1085
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -48271,7 +48364,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1093
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -48284,13 +48377,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1097
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1100
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -48298,11 +48391,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1104
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1107
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -48316,7 +48409,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1113
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -48325,7 +48418,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1117
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -48341,7 +48434,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1122
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -48351,7 +48444,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1126
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -48361,7 +48454,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1130
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -48372,7 +48465,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1134
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -48382,7 +48475,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1138
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -48390,7 +48483,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1142
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -48401,7 +48494,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1146
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -48416,7 +48509,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1152
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -48425,13 +48518,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1157
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1160
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -48440,7 +48533,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1163
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -48450,7 +48543,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1166
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -48462,7 +48555,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1169
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -48472,24 +48565,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1172
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1175
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1178
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1181
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -48498,7 +48591,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1184
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -48506,7 +48599,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1187
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -48515,7 +48608,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1190
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -48525,7 +48618,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1194
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -48533,31 +48626,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1198
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1201
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1204
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1207
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1210
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -48565,7 +48658,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1213
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -48575,21 +48668,21 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1216
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1219
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
"iOS specific override for [member rendering/gles2/compatibility/"
"disable_half_float], due to poor support for half-float vertex compression "
"on many devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
"If [code]true[/code] and available on the target Android device, enables "
"high floating point precision for all shader computations in GLES2.\n"
@@ -48597,31 +48690,31 @@ msgid ""
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1226
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1229
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1232
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1235
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1238
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -48629,7 +48722,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1241
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -48639,7 +48732,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1244
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -48648,7 +48741,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1247
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -48657,20 +48750,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1250
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1253
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1256
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -48679,7 +48772,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1259
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -48687,7 +48780,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -48696,7 +48789,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1266
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -48706,20 +48799,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1275
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -48728,13 +48821,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -48744,46 +48837,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1294
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1297
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1300
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1303
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1306
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -48793,7 +48886,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -48805,7 +48898,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1317
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -48813,7 +48906,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -48821,7 +48914,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1324
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -48830,7 +48923,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1327
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -48844,7 +48937,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1332
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -48854,7 +48947,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1335
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -48863,7 +48956,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1338
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -48873,54 +48966,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1341
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1344
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1347
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1350
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1353
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1356
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1359
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -48931,61 +49024,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1366
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1369
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1372
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1375
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1378
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1381
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1384
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1387
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -48996,7 +49089,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1394
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -49005,26 +49098,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400
-#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1409
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1412
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -49035,20 +49128,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1419
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1426
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -49060,54 +49153,54 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1436
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1439
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1442
+#: doc/classes/ProjectSettings.xml:1444
#, fuzzy
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr "サブサーフェス スキャタリング効果ã®å¼·ã•。"
-#: doc/classes/ProjectSettings.xml:1445
+#: doc/classes/ProjectSettings.xml:1447
#, fuzzy
msgid "Max radius used for subsurface scattering samples."
msgstr "サブサーフェス スキャタリング効果ã®å¼·ã•。"
-#: doc/classes/ProjectSettings.xml:1448
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1451
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1454
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -49115,7 +49208,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -49128,7 +49221,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -49140,7 +49233,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -49152,7 +49245,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -49164,7 +49257,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -49176,7 +49269,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1481
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -49851,40 +49944,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -49892,14 +49999,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -52246,6 +52353,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -52263,7 +52386,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -52271,11 +52394,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -52285,19 +52408,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -58025,20 +58148,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -58049,28 +58177,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -58082,19 +58210,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -73153,7 +73281,7 @@ msgstr ""
#: doc/classes/YSort.xml:4
msgid "Sort all child nodes based on their Y positions."
-msgstr ""
+msgstr "ã™ã¹ã¦ã®å­ãƒŽãƒ¼ãƒ‰ã‚’Yä½ç½®ã«åŸºã¥ãソートã™ã‚‹ã€‚"
#: doc/classes/YSort.xml:7
msgid ""
@@ -73165,11 +73293,22 @@ msgid ""
"the same space as the parent YSort, allowing to better organize a scene or "
"divide it in multiple ones, yet keep the unique sorting."
msgstr ""
+"ã™ã¹ã¦ã®å­ãƒŽãƒ¼ãƒ‰ã‚’Yä½ç½®ã«åŸºã¥ã„ã¦ã‚½ãƒ¼ãƒˆã—ã¾ã™ã€‚ソートã™ã‚‹ãŸã‚ã«ã¯ã€å­ãƒŽãƒ¼ãƒ‰ã¯"
+"[CanvasItem]を継承ã—ã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚Yä½ç½®ãŒé«˜ã„ノードã¯å¾Œã§æç”»ã•れるãŸ"
+"ã‚ã€Yä½ç½®ãŒä½Žã„ノードã®ä¸Šã«è¡¨ç¤ºã•れã¾ã™ã€‚\n"
+"YSortノードã¯ãƒã‚¹ãƒˆå¯èƒ½ã§ã™ã€‚å­ã®YSortノードã¯ã€è¦ªã®YSortã¨åŒã˜ç©ºé–“ã§ã‚½ãƒ¼ãƒˆã•"
+"れるã®ã§ã€ç‹¬è‡ªã®ã‚½ãƒ¼ãƒˆã‚’ç¶­æŒã—ãŸã¾ã¾ã€ã‚·ãƒ¼ãƒ³ã‚’より整ç†ã—ãŸã‚Šã€è¤‡æ•°ã®ã‚·ãƒ¼ãƒ³ã«"
+"分割ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
#: doc/classes/YSort.xml:16
msgid ""
"If [code]true[/code], child nodes are sorted, otherwise sorting is disabled."
msgstr ""
+"[code]true[/code]ã®å ´åˆã€å­ãƒŽãƒ¼ãƒ‰ã¯ã‚½ãƒ¼ãƒˆã•れã¾ã™ã€‚ãã†ã§ãªã‘れã°ã‚½ãƒ¼ãƒˆã¯ç„¡åй"
+"ã«ãªã‚Šã¾ã™ã€‚"
+
+#~ msgid "Returns this [AABB] expanded to include a given point."
+#~ msgstr "与ãˆã‚‰ã‚ŒãŸãƒã‚¤ãƒ³ãƒˆã‚’å«ã‚€ã‚ˆã†æ‹¡å¤§ã—㟠[AABB] ã‚’è¿”ã—ã¾ã™ã€‚"
#, fuzzy
#~ msgid ""
diff --git a/doc/translations/ko.po b/doc/translations/ko.po
index 055ac1daf8..d14d8903de 100644
--- a/doc/translations/ko.po
+++ b/doc/translations/ko.po
@@ -12,12 +12,13 @@
# Jaemin Park <ppparkje@naver.com>, 2021.
# dewcked <dewcked@protonmail.ch>, 2021.
# ì‹ ë™ê·œ <rlsl0422@gmail.com>, 2021.
+# whatthesamuel <alex01763@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-10-28 22:08+0000\n"
-"Last-Translator: ì‹ ë™ê·œ <rlsl0422@gmail.com>\n"
+"PO-Revision-Date: 2021-11-19 08:44+0000\n"
+"Last-Translator: Myeongjin Lee <aranet100@gmail.com>\n"
"Language-Team: Korean <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/ko/>\n"
"Language: ko\n"
@@ -25,7 +26,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -33,7 +34,7 @@ msgstr "설명"
#: doc/tools/make_rst.py
msgid "Tutorials"
-msgstr "강좌"
+msgstr "튜토리얼"
#: doc/tools/make_rst.py
msgid "Properties"
@@ -130,8 +131,7 @@ msgid ""
msgstr ""
"[code]s[/code] ë§¤ê°œë³€ìˆ˜ì˜ ì ˆëŒ€ê°’ì„ ë¦¬í„´í•œë‹¤(즉, 양수 ê°’)\n"
"[codeblock]\n"
-"# a 는 1\n"
-"a = abs(-1)\n"
+"a = abs(-1) # a 는 1\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:55
@@ -3717,112 +3717,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4901,7 +4910,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -10302,17 +10311,21 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10321,24 +10334,24 @@ msgid ""
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10352,62 +10365,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10415,35 +10428,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10451,13 +10464,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10469,78 +10482,78 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
#, fuzzy
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr "ë§¤ê°œë³€ìˆ˜ë“¤ì˜ ì•„í¬íƒ„젠트 ê°’ì„ ë°˜í™˜í•©ë‹ˆë‹¤."
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:131
+#: doc/classes/BakedLightmap.xml:132
msgid ""
"Returns if lightmapper can't be created. Unless you are using a custom "
"lightmapper, please report this as bug."
msgstr ""
-#: doc/classes/BakedLightmap.xml:134
+#: doc/classes/BakedLightmap.xml:135
msgid ""
"There is no root node to start baking from. Either provide [code]from_node[/"
"code] argument or attach this node to a parent that should be used as root."
msgstr ""
-#: doc/classes/BakedLightmap.xml:137
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:140
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:143
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:146
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10996,8 +11009,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -25108,21 +25124,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -25131,14 +25158,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -25148,80 +25179,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -29446,7 +29477,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30760,7 +30793,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30825,22 +30859,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30855,7 +30891,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30863,19 +30899,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30946,7 +30982,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -31004,7 +31041,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -34557,7 +34596,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -35224,8 +35263,8 @@ msgstr ""
"는 ê²ƒì„ í™•ì‹ í•  수 있습니다.\n"
"(특히 ì”¬ì„ ë‹¤ë¥¸ ì”¬ì— ì¸ìŠ¤í„´ì‹±í•  때) 씬 계층구조를 ì¶”ì í•˜ê¸° 위해 [member "
"owner] ì†ì„±ìœ¼ë¡œ ë…¸ë“œì˜ \"주ì¸\"ì„ ì„¤ì •í•  수 있습니다. ì´ë¥¼ 통해 누가 ì´ ì”¬ì„ "
-"ì¸ìŠ¤í„´ì‹±í–ˆëŠ”ì§€ ì¶”ì í•  수 있습니다. ì—디터나 ë„구를 작성하는 ëŒ€ë¶€ë¶„ì˜ ê²½ìš°ì— "
-"ì´ ê¸°ëŠ¥ì´ ìœ ìš©í•©ë‹ˆë‹¤.\n"
+"ì¸ìŠ¤í„´ì‹±í–ˆëŠ”ì§€ ì¶”ì í•  수 있습니다. ì—디터나 íˆ´ì„ ìž‘ì„±í•˜ëŠ” ëŒ€ë¶€ë¶„ì˜ ê²½ìš°ì— ì´ "
+"ê¸°ëŠ¥ì´ ìœ ìš©í•©ë‹ˆë‹¤.\n"
"마지막으로, [method Object.free]나 [method queue_free]를 통해 노드를 해제하"
"는 경우 ìžì† ë…¸ë“œë“¤ë„ ê°™ì´ í•´ì œë©ë‹ˆë‹¤.\n"
"[b]그룹:[/b] 노드는 ì›í™œí•œ 관리를 위해 필요한 ë§Œí¼ ê·¸ë£¹ì— ì¶”ê°€ë  ìˆ˜ 있는ë°, "
@@ -37999,7 +38038,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -38029,14 +38068,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -38046,7 +38085,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40547,17 +40586,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40575,11 +40640,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40774,7 +40839,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41577,6 +41644,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41594,7 +41679,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41708,7 +41793,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -44253,24 +44340,30 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:282
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:285
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:288
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44280,7 +44373,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:291
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44290,27 +44383,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:294
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:297
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:300
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:303
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -44318,81 +44411,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:306
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:309
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:312
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:315
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:318
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:321
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:324
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:327
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:330
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:333
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:336
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:339
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:342
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -44400,109 +44493,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:345
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:348
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:351
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:354
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:357
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:360
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:363
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:366
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:369
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:372
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:375
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:378
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:381
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:384
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:387
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:390
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:393
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:396
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:399
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44513,91 +44606,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:404
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:407
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:410
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:413
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:416
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:419
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:422
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:425
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:428
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:431
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:434
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:437
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:440
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:443
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:446
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:449
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:452
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44606,13 +44699,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:456
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:459
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44622,7 +44715,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:464
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44630,19 +44723,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:469
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:473
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:477
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44656,45 +44749,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:482
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:485
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:489
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:492
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:495
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:498
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:501
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44703,7 +44796,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:504
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44714,7 +44807,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:508
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44730,14 +44823,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:516
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:519
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44745,49 +44838,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:522
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:525
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:530
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:533
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:536
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:539
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:542
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:545
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:548
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44796,7 +44889,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:552
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44804,7 +44897,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:556
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44812,7 +44905,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:560
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44822,7 +44915,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:564
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44831,7 +44924,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:568
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44840,7 +44933,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:572
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44850,7 +44943,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:576
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44858,7 +44951,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:580
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44868,7 +44961,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:584
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44878,7 +44971,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:588
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44886,7 +44979,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:592
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44895,7 +44988,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:596
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44903,7 +44996,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:600
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44915,477 +45008,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:606
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:609
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:612
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:615
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:618
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:621
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:624
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:627
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:630
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:633
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:636
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:639
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:642
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:645
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:648
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:651
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:654
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:657
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:660
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:663
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:666
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:669
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:672
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:675
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:678
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:681
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:684
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:687
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:690
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:693
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:696
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:699
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:702
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:705
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:708
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:711
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:714
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:717
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:720
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:723
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:726
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:729
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:732
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:735
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:738
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:741
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:744
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:747
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:750
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:753
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:756
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:759
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:762
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:765
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:768
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:771
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:774
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:777
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:780
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:783
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:786
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:789
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:792
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:795
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:798
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:801
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:804
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:807
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:810
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:813
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:816
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:819
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:822
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:825
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:828
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:831
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:834
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:837
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:840
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:843
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:846
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:849
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:852
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:855
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:858
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:861
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:864
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:867
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:870
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:873
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:876
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:879
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:882
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:885
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:888
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:891
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:894
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:897
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:900
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:903
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:906
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:909
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:912
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:915
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:918
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:921
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:924
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:927
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:930
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:933
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:936
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:939
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:942
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:947
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:950
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -45393,92 +45486,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:953
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:956
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:959
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:962
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:965
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:968
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:971
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:974
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:977
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:980
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:983
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:986
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:989
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:992
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:995
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:998
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1001
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1004
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -45488,33 +45581,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1008
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1011
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1014
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1018
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1022
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45527,7 +45620,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1026
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45539,7 +45632,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1034
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45551,7 +45644,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1042
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45564,7 +45657,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1046
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45572,28 +45665,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1050
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1054
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1057
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1060
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45603,25 +45696,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1064
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1067
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1070
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1073
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45634,7 +45727,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1077
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45646,7 +45739,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1085
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45658,7 +45751,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1093
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45671,13 +45764,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1097
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1100
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45685,11 +45778,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1104
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1107
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45703,7 +45796,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1113
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45712,7 +45805,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1117
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45728,7 +45821,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1122
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45738,7 +45831,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1126
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45748,7 +45841,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1130
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45759,7 +45852,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1134
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45769,7 +45862,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1138
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45777,7 +45870,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1142
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45788,7 +45881,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1146
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45803,7 +45896,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1152
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45812,13 +45905,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1157
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1160
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45827,7 +45920,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1163
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45837,7 +45930,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1166
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45849,7 +45942,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1169
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45859,24 +45952,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1172
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1175
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1178
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1181
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45885,7 +45978,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1184
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45893,7 +45986,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1187
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45902,7 +45995,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1190
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45912,7 +46005,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1194
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45920,31 +46013,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1198
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1201
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1204
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1207
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1210
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45952,7 +46045,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1213
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45962,21 +46055,21 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1216
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1219
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
"iOS specific override for [member rendering/gles2/compatibility/"
"disable_half_float], due to poor support for half-float vertex compression "
"on many devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
"If [code]true[/code] and available on the target Android device, enables "
"high floating point precision for all shader computations in GLES2.\n"
@@ -45984,31 +46077,31 @@ msgid ""
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1226
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1229
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1232
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1235
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1238
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -46016,7 +46109,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1241
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -46026,7 +46119,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1244
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -46035,7 +46128,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1247
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -46044,20 +46137,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1250
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1253
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1256
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -46066,7 +46159,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1259
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -46074,7 +46167,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -46083,7 +46176,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1266
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -46093,20 +46186,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1275
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -46115,13 +46208,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -46131,46 +46224,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1294
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1297
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1300
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1303
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1306
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -46180,7 +46273,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -46192,7 +46285,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1317
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -46200,7 +46293,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -46208,7 +46301,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1324
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -46217,7 +46310,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1327
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -46231,7 +46324,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1332
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -46241,7 +46334,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1335
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -46250,7 +46343,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1338
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -46260,54 +46353,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1341
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1344
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1347
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1350
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1353
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1356
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1359
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -46318,61 +46411,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1366
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1369
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1372
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1375
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1378
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1381
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1384
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1387
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -46383,7 +46476,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1394
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -46392,26 +46485,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400
-#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1409
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1412
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -46422,20 +46515,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1419
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1426
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -46447,52 +46540,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1436
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1439
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1442
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1445
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1448
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1451
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1454
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -46500,7 +46593,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -46513,7 +46606,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46525,7 +46618,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46537,7 +46630,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46549,7 +46642,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46561,7 +46654,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1481
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -47225,40 +47318,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -47266,14 +47373,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49608,6 +49715,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49625,7 +49748,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49633,11 +49756,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49647,19 +49770,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -55074,20 +55197,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -55098,28 +55226,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -55131,19 +55259,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -61238,6 +61366,17 @@ msgid ""
"Finally, viewports can also behave as render targets, in which case they "
"will not be visible unless the associated texture is used to draw."
msgstr ""
+"ë·°í¬íŠ¸ëŠ” ì”¬ì— ë‹¤ë¥¸ 뷰를 ìƒì„±í•˜ê±°ë‚˜ 다른 ë·°í¬íЏ ë‚´ë¶€ì— ì„œë¸Œ 뷰를 ìƒì„±í•©ë‹ˆë‹¤. "
+"ìžì‹ 2D 노드가 ì—¬ê¸°ì— í‘œì‹œë˜ê³  ìžì‹ ì¹´ë©”ë¼ 3D ë…¸ë“œë„ ì—¬ê¸°ì— ë Œë”ë§ë©ë‹ˆë‹¤.\n"
+"ë·°í¬íŠ¸ëŠ” ìžì²´ì ìœ¼ë¡œ 2D ë˜ëŠ” 3D 세계를 가질 수 있으므로 다른 ë·°í¬íŠ¸ì™€ 그리는 "
+"ë‚´ìš©ì„ ê³µìœ í•˜ì§€ 않습니다.\n"
+"ë·°í¬íŠ¸ê°€ [ViewportContainer]ì˜ ìžì‹ì´ë©´ ìžë™ìœ¼ë¡œ í¬ê¸°ë¥¼ 차지하며, 그렇지 않으"
+"ë©´ 수ë™ìœ¼ë¡œ 설정해야 합니다.\n"
+"ë·°í¬íŠ¸ëŠ” ë˜í•œ 오디오 리스너가 ë˜ë„ë¡ ì„ íƒí•  수 있으므로 ë·°í¬íŠ¸ì˜ 2D ë˜ëŠ” 3D "
+"ì¹´ë©”ë¼ ìžì‹ì— ë”°ë¼ positional audio를 ìƒì„±í•©ë‹ˆë‹¤.\n"
+"ë˜í•œ ìž¥ì¹˜ì— ì—¬ëŸ¬ í™”ë©´ì´ ìžˆëŠ” 경우 ë·°í¬íŠ¸ë¥¼ 다른 í™”ë©´ì— í• ë‹¹í•  수 있습니다.\n"
+"마지막으로 ë·°í¬íŠ¸ëŠ” ë Œë” íƒ€ê²Ÿìœ¼ë¡œ ìž‘ë™í•  ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. ì´ ê²½ìš° ì—°ê²°ëœí…스처"
+"를 사용하여 그리지 않는 한 ë³´ì´ì§€ 않습니다."
#: doc/classes/Viewport.xml:16
#, fuzzy
@@ -69847,6 +69986,14 @@ msgid ""
"skybox). Usually, these are added in order to improve the realism/color "
"balance of the scene."
msgstr ""
+"[WorldEnvironment] 노드는 ì”¬ì˜ ê¸°ë³¸ [Environment]를 설정하는 ë° ì‚¬ìš©ë©ë‹ˆë‹¤.\n"
+"[WorldEnvironment]ì— ì •ì˜ëœ 매개변수는 현재 [Camera]ì— ì„¤ì •ëœ [Environment] "
+"ë…¸ë“œì— ì˜í•´ 재정ì˜ë  수 있습니다. ë˜í•œ 한 ë²ˆì— í•˜ë‚˜ì˜ [WorldEnvironment]ë§Œ ì§€"
+"ì •ëœ ì”¬ì—서 ì¸ìŠ¤í„´ìŠ¤í™”í•  수 있습니다.\n"
+"[WorldEnvironment]를 통해 사용ìžëŠ” 기본 조명 매개변수(예: ambient lighting), "
+"다양한 후처리 효과(예: SSAO, DOF, Tonemapping), 배경 그리는 방법(예: solid "
+"color, skybox)ì„ ì§€ì •í•  수 있습니다. ì¼ë°˜ì ìœ¼ë¡œ ì”¬ì˜ ì‚¬ì‹¤ê°/ìƒ‰ìƒ ê· í˜•ì„ ê°œì„ "
+"하기 위해 추가ë©ë‹ˆë‹¤."
#: doc/classes/WorldEnvironment.xml:21
msgid ""
diff --git a/doc/translations/lv.po b/doc/translations/lv.po
index 33cbdd282e..2740831460 100644
--- a/doc/translations/lv.po
+++ b/doc/translations/lv.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-10-31 22:17+0000\n"
+"PO-Revision-Date: 2021-11-12 13:49+0000\n"
"Last-Translator: M E <gruffy7932@gmail.com>\n"
"Language-Team: Latvian <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/lv/>\n"
@@ -21,7 +21,7 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=3; plural=(n % 10 == 0 || n % 100 >= 11 && n % 100 <= "
"19) ? 0 : ((n % 10 == 1 && n % 100 != 11) ? 1 : 2);\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -49,7 +49,7 @@ msgstr "SignÄli"
#: doc/tools/make_rst.py
msgid "Enumerations"
-msgstr "Uzskaitījumi"
+msgstr "Uzskaites"
#: doc/tools/make_rst.py
msgid "Constants"
@@ -3605,112 +3605,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4788,7 +4797,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -10187,17 +10196,21 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10206,24 +10219,24 @@ msgid ""
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10237,62 +10250,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10300,35 +10313,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10336,13 +10349,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10354,77 +10367,77 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr ""
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:131
+#: doc/classes/BakedLightmap.xml:132
msgid ""
"Returns if lightmapper can't be created. Unless you are using a custom "
"lightmapper, please report this as bug."
msgstr ""
-#: doc/classes/BakedLightmap.xml:134
+#: doc/classes/BakedLightmap.xml:135
msgid ""
"There is no root node to start baking from. Either provide [code]from_node[/"
"code] argument or attach this node to a parent that should be used as root."
msgstr ""
-#: doc/classes/BakedLightmap.xml:137
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:140
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:143
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:146
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10880,8 +10893,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -24893,21 +24909,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -24916,14 +24943,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -24933,80 +24964,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -29222,7 +29253,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30534,7 +30567,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30599,22 +30633,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30629,7 +30665,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30637,19 +30673,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30720,7 +30756,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30778,7 +30815,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -34321,7 +34360,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37634,7 +37673,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37664,14 +37703,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37681,7 +37720,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40166,17 +40205,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40194,11 +40259,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40393,7 +40458,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41195,6 +41262,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41212,7 +41297,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41326,7 +41411,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -43867,24 +43954,30 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:282
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:285
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:288
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43894,7 +43987,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:291
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43904,27 +43997,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:294
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:297
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:300
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:303
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -43932,81 +44025,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:306
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:309
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:312
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:315
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:318
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:321
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:324
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:327
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:330
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:333
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:336
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:339
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:342
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -44014,109 +44107,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:345
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:348
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:351
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:354
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:357
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:360
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:363
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:366
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:369
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:372
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:375
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:378
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:381
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:384
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:387
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:390
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:393
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:396
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:399
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44127,91 +44220,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:404
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:407
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:410
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:413
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:416
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:419
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:422
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:425
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:428
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:431
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:434
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:437
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:440
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:443
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:446
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:449
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:452
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44220,13 +44313,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:456
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:459
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44236,7 +44329,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:464
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44244,19 +44337,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:469
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:473
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:477
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44270,45 +44363,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:482
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:485
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:489
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:492
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:495
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:498
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:501
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44317,7 +44410,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:504
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44328,7 +44421,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:508
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44344,14 +44437,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:516
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:519
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44359,49 +44452,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:522
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:525
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:530
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:533
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:536
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:539
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:542
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:545
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:548
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44410,7 +44503,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:552
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44418,7 +44511,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:556
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44426,7 +44519,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:560
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44436,7 +44529,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:564
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44445,7 +44538,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:568
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44454,7 +44547,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:572
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44464,7 +44557,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:576
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44472,7 +44565,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:580
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44482,7 +44575,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:584
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44492,7 +44585,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:588
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44500,7 +44593,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:592
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44509,7 +44602,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:596
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44517,7 +44610,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:600
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44529,477 +44622,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:606
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:609
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:612
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:615
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:618
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:621
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:624
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:627
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:630
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:633
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:636
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:639
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:642
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:645
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:648
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:651
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:654
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:657
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:660
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:663
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:666
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:669
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:672
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:675
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:678
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:681
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:684
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:687
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:690
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:693
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:696
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:699
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:702
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:705
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:708
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:711
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:714
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:717
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:720
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:723
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:726
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:729
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:732
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:735
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:738
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:741
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:744
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:747
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:750
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:753
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:756
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:759
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:762
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:765
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:768
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:771
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:774
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:777
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:780
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:783
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:786
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:789
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:792
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:795
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:798
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:801
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:804
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:807
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:810
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:813
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:816
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:819
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:822
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:825
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:828
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:831
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:834
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:837
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:840
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:843
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:846
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:849
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:852
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:855
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:858
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:861
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:864
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:867
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:870
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:873
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:876
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:879
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:882
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:885
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:888
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:891
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:894
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:897
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:900
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:903
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:906
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:909
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:912
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:915
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:918
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:921
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:924
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:927
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:930
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:933
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:936
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:939
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:942
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:947
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:950
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -45007,92 +45100,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:953
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:956
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:959
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:962
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:965
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:968
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:971
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:974
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:977
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:980
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:983
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:986
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:989
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:992
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:995
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:998
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1001
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1004
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -45102,33 +45195,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1008
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1011
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1014
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1018
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1022
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45141,7 +45234,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1026
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45153,7 +45246,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1034
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45165,7 +45258,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1042
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45178,7 +45271,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1046
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45186,28 +45279,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1050
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1054
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1057
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1060
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45217,25 +45310,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1064
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1067
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1070
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1073
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45248,7 +45341,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1077
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45260,7 +45353,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1085
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45272,7 +45365,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1093
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45285,13 +45378,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1097
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1100
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45299,11 +45392,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1104
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1107
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45317,7 +45410,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1113
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45326,7 +45419,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1117
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45342,7 +45435,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1122
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45352,7 +45445,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1126
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45362,7 +45455,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1130
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45373,7 +45466,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1134
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45383,7 +45476,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1138
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45391,7 +45484,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1142
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45402,7 +45495,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1146
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45417,7 +45510,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1152
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45426,13 +45519,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1157
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1160
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45441,7 +45534,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1163
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45451,7 +45544,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1166
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45463,7 +45556,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1169
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45473,24 +45566,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1172
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1175
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1178
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1181
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45499,7 +45592,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1184
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45507,7 +45600,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1187
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45516,7 +45609,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1190
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45526,7 +45619,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1194
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45534,31 +45627,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1198
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1201
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1204
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1207
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1210
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45566,7 +45659,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1213
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45576,21 +45669,21 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1216
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1219
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
"iOS specific override for [member rendering/gles2/compatibility/"
"disable_half_float], due to poor support for half-float vertex compression "
"on many devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
"If [code]true[/code] and available on the target Android device, enables "
"high floating point precision for all shader computations in GLES2.\n"
@@ -45598,31 +45691,31 @@ msgid ""
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1226
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1229
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1232
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1235
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1238
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45630,7 +45723,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1241
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45640,7 +45733,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1244
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45649,7 +45742,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1247
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45658,20 +45751,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1250
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1253
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1256
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45680,7 +45773,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1259
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45688,7 +45781,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45697,7 +45790,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1266
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45707,20 +45800,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1275
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45729,13 +45822,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45745,46 +45838,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1294
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1297
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1300
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1303
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1306
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45794,7 +45887,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45806,7 +45899,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1317
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45814,7 +45907,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45822,7 +45915,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1324
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45831,7 +45924,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1327
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45845,7 +45938,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1332
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45855,7 +45948,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1335
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45864,7 +45957,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1338
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45874,54 +45967,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1341
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1344
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1347
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1350
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1353
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1356
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1359
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -45932,61 +46025,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1366
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1369
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1372
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1375
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1378
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1381
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1384
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1387
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -45997,7 +46090,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1394
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -46006,26 +46099,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400
-#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1409
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1412
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -46036,20 +46129,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1419
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1426
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -46061,52 +46154,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1436
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1439
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1442
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1445
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1448
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1451
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1454
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -46114,7 +46207,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -46127,7 +46220,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46139,7 +46232,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46151,7 +46244,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46163,7 +46256,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46175,7 +46268,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1481
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46839,40 +46932,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46880,14 +46987,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49222,6 +49329,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49239,7 +49362,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49247,11 +49370,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49261,19 +49384,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54688,20 +54811,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54712,28 +54840,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54745,19 +54873,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
diff --git a/doc/translations/mr.po b/doc/translations/mr.po
index 352da4a417..6def4dd098 100644
--- a/doc/translations/mr.po
+++ b/doc/translations/mr.po
@@ -3586,112 +3586,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4763,7 +4772,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -10140,15 +10149,19 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10157,24 +10170,24 @@ msgid ""
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10188,62 +10201,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10251,35 +10264,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10287,13 +10300,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10305,77 +10318,77 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr ""
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:131
+#: doc/classes/BakedLightmap.xml:132
msgid ""
"Returns if lightmapper can't be created. Unless you are using a custom "
"lightmapper, please report this as bug."
msgstr ""
-#: doc/classes/BakedLightmap.xml:134
+#: doc/classes/BakedLightmap.xml:135
msgid ""
"There is no root node to start baking from. Either provide [code]from_node[/"
"code] argument or attach this node to a parent that should be used as root."
msgstr ""
-#: doc/classes/BakedLightmap.xml:137
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:140
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:143
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:146
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10823,8 +10836,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -24769,20 +24785,31 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr ""
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -24791,14 +24818,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -24808,80 +24839,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -29074,7 +29105,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30373,7 +30406,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30438,22 +30472,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30468,7 +30504,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30476,19 +30512,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30556,7 +30592,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30614,7 +30651,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -34139,7 +34178,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37434,7 +37473,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37464,14 +37503,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37481,7 +37520,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -39959,17 +39998,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -39987,11 +40052,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40186,7 +40251,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -40988,6 +41055,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41005,7 +41090,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41119,7 +41204,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -43659,24 +43746,30 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:282
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:285
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:288
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43686,7 +43779,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:291
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43696,27 +43789,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:294
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:297
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:300
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:303
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -43724,81 +43817,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:306
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:309
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:312
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:315
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:318
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:321
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:324
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:327
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:330
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:333
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:336
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:339
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:342
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -43806,109 +43899,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:345
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:348
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:351
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:354
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:357
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:360
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:363
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:366
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:369
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:372
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:375
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:378
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:381
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:384
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:387
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:390
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:393
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:396
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:399
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -43919,91 +44012,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:404
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:407
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:410
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:413
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:416
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:419
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:422
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:425
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:428
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:431
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:434
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:437
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:440
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:443
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:446
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:449
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:452
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44012,13 +44105,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:456
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:459
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44028,7 +44121,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:464
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44036,19 +44129,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:469
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:473
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:477
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44062,45 +44155,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:482
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:485
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:489
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:492
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:495
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:498
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:501
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44109,7 +44202,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:504
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44120,7 +44213,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:508
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44136,14 +44229,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:516
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:519
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44151,49 +44244,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:522
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:525
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:530
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:533
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:536
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:539
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:542
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:545
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:548
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44202,7 +44295,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:552
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44210,7 +44303,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:556
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44218,7 +44311,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:560
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44228,7 +44321,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:564
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44237,7 +44330,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:568
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44246,7 +44339,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:572
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44256,7 +44349,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:576
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44264,7 +44357,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:580
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44274,7 +44367,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:584
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44284,7 +44377,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:588
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44292,7 +44385,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:592
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44301,7 +44394,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:596
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44309,7 +44402,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:600
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44321,477 +44414,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:606
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:609
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:612
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:615
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:618
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:621
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:624
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:627
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:630
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:633
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:636
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:639
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:642
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:645
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:648
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:651
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:654
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:657
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:660
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:663
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:666
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:669
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:672
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:675
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:678
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:681
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:684
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:687
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:690
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:693
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:696
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:699
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:702
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:705
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:708
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:711
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:714
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:717
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:720
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:723
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:726
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:729
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:732
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:735
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:738
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:741
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:744
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:747
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:750
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:753
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:756
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:759
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:762
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:765
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:768
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:771
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:774
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:777
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:780
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:783
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:786
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:789
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:792
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:795
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:798
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:801
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:804
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:807
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:810
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:813
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:816
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:819
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:822
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:825
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:828
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:831
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:834
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:837
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:840
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:843
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:846
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:849
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:852
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:855
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:858
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:861
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:864
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:867
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:870
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:873
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:876
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:879
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:882
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:885
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:888
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:891
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:894
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:897
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:900
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:903
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:906
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:909
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:912
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:915
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:918
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:921
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:924
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:927
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:930
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:933
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:936
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:939
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:942
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:947
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:950
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -44799,92 +44892,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:953
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:956
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:959
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:962
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:965
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:968
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:971
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:974
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:977
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:980
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:983
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:986
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:989
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:992
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:995
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:998
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1001
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1004
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -44894,33 +44987,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1008
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1011
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1014
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1018
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1022
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44933,7 +45026,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1026
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44945,7 +45038,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1034
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44957,7 +45050,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1042
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44970,7 +45063,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1046
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -44978,28 +45071,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1050
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1054
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1057
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1060
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45009,25 +45102,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1064
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1067
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1070
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1073
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45040,7 +45133,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1077
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45052,7 +45145,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1085
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45064,7 +45157,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1093
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45077,13 +45170,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1097
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1100
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45091,11 +45184,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1104
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1107
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45109,7 +45202,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1113
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45118,7 +45211,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1117
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45134,7 +45227,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1122
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45144,7 +45237,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1126
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45154,7 +45247,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1130
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45165,7 +45258,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1134
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45175,7 +45268,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1138
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45183,7 +45276,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1142
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45194,7 +45287,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1146
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45209,7 +45302,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1152
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45218,13 +45311,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1157
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1160
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45233,7 +45326,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1163
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45243,7 +45336,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1166
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45255,7 +45348,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1169
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45265,24 +45358,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1172
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1175
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1178
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1181
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45291,7 +45384,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1184
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45299,7 +45392,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1187
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45308,7 +45401,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1190
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45318,7 +45411,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1194
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45326,31 +45419,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1198
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1201
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1204
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1207
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1210
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45358,7 +45451,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1213
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45368,21 +45461,21 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1216
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1219
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
"iOS specific override for [member rendering/gles2/compatibility/"
"disable_half_float], due to poor support for half-float vertex compression "
"on many devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
"If [code]true[/code] and available on the target Android device, enables "
"high floating point precision for all shader computations in GLES2.\n"
@@ -45390,31 +45483,31 @@ msgid ""
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1226
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1229
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1232
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1235
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1238
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45422,7 +45515,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1241
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45432,7 +45525,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1244
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45441,7 +45534,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1247
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45450,20 +45543,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1250
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1253
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1256
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45472,7 +45565,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1259
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45480,7 +45573,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45489,7 +45582,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1266
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45499,20 +45592,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1275
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45521,13 +45614,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45537,46 +45630,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1294
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1297
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1300
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1303
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1306
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45586,7 +45679,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45598,7 +45691,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1317
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45606,7 +45699,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45614,7 +45707,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1324
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45623,7 +45716,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1327
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45637,7 +45730,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1332
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45647,7 +45740,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1335
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45656,7 +45749,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1338
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45666,54 +45759,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1341
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1344
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1347
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1350
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1353
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1356
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1359
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -45724,61 +45817,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1366
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1369
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1372
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1375
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1378
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1381
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1384
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1387
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -45789,7 +45882,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1394
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -45798,26 +45891,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400
-#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1409
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1412
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -45828,20 +45921,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1419
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1426
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -45853,52 +45946,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1436
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1439
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1442
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1445
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1448
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1451
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1454
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -45906,7 +45999,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -45919,7 +46012,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -45931,7 +46024,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -45943,7 +46036,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -45955,7 +46048,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -45967,7 +46060,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1481
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46626,40 +46719,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46667,14 +46774,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49001,6 +49108,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49018,7 +49141,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49026,11 +49149,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49040,19 +49163,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54437,20 +54560,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54461,28 +54589,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54494,19 +54622,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
diff --git a/doc/translations/nb.po b/doc/translations/nb.po
index 0e6b60e4d0..1f08034df2 100644
--- a/doc/translations/nb.po
+++ b/doc/translations/nb.po
@@ -3596,112 +3596,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4773,7 +4782,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -10150,15 +10159,19 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10167,24 +10180,24 @@ msgid ""
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10198,62 +10211,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10261,35 +10274,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10297,13 +10310,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10315,77 +10328,77 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr ""
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:131
+#: doc/classes/BakedLightmap.xml:132
msgid ""
"Returns if lightmapper can't be created. Unless you are using a custom "
"lightmapper, please report this as bug."
msgstr ""
-#: doc/classes/BakedLightmap.xml:134
+#: doc/classes/BakedLightmap.xml:135
msgid ""
"There is no root node to start baking from. Either provide [code]from_node[/"
"code] argument or attach this node to a parent that should be used as root."
msgstr ""
-#: doc/classes/BakedLightmap.xml:137
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:140
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:143
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:146
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10833,8 +10846,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -24779,20 +24795,31 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr ""
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -24801,14 +24828,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -24818,80 +24849,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -29084,7 +29115,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30383,7 +30416,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30448,22 +30482,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30478,7 +30514,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30486,19 +30522,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30566,7 +30602,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30624,7 +30661,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -34149,7 +34188,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37444,7 +37483,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37474,14 +37513,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37491,7 +37530,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -39969,17 +40008,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -39997,11 +40062,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40196,7 +40261,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -40998,6 +41065,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41015,7 +41100,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41129,7 +41214,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -43669,24 +43756,30 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:282
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:285
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:288
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43696,7 +43789,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:291
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43706,27 +43799,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:294
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:297
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:300
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:303
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -43734,81 +43827,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:306
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:309
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:312
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:315
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:318
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:321
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:324
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:327
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:330
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:333
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:336
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:339
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:342
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -43816,109 +43909,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:345
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:348
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:351
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:354
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:357
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:360
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:363
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:366
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:369
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:372
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:375
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:378
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:381
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:384
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:387
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:390
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:393
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:396
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:399
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -43929,91 +44022,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:404
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:407
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:410
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:413
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:416
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:419
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:422
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:425
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:428
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:431
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:434
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:437
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:440
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:443
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:446
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:449
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:452
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44022,13 +44115,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:456
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:459
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44038,7 +44131,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:464
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44046,19 +44139,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:469
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:473
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:477
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44072,45 +44165,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:482
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:485
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:489
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:492
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:495
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:498
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:501
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44119,7 +44212,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:504
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44130,7 +44223,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:508
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44146,14 +44239,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:516
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:519
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44161,49 +44254,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:522
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:525
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:530
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:533
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:536
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:539
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:542
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:545
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:548
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44212,7 +44305,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:552
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44220,7 +44313,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:556
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44228,7 +44321,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:560
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44238,7 +44331,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:564
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44247,7 +44340,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:568
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44256,7 +44349,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:572
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44266,7 +44359,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:576
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44274,7 +44367,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:580
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44284,7 +44377,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:584
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44294,7 +44387,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:588
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44302,7 +44395,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:592
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44311,7 +44404,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:596
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44319,7 +44412,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:600
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44331,477 +44424,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:606
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:609
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:612
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:615
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:618
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:621
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:624
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:627
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:630
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:633
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:636
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:639
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:642
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:645
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:648
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:651
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:654
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:657
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:660
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:663
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:666
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:669
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:672
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:675
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:678
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:681
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:684
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:687
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:690
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:693
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:696
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:699
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:702
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:705
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:708
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:711
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:714
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:717
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:720
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:723
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:726
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:729
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:732
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:735
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:738
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:741
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:744
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:747
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:750
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:753
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:756
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:759
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:762
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:765
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:768
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:771
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:774
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:777
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:780
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:783
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:786
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:789
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:792
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:795
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:798
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:801
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:804
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:807
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:810
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:813
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:816
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:819
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:822
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:825
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:828
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:831
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:834
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:837
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:840
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:843
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:846
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:849
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:852
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:855
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:858
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:861
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:864
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:867
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:870
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:873
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:876
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:879
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:882
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:885
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:888
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:891
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:894
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:897
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:900
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:903
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:906
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:909
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:912
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:915
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:918
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:921
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:924
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:927
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:930
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:933
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:936
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:939
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:942
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:947
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:950
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -44809,92 +44902,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:953
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:956
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:959
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:962
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:965
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:968
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:971
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:974
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:977
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:980
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:983
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:986
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:989
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:992
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:995
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:998
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1001
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1004
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -44904,33 +44997,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1008
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1011
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1014
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1018
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1022
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44943,7 +45036,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1026
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44955,7 +45048,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1034
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44967,7 +45060,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1042
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44980,7 +45073,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1046
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -44988,28 +45081,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1050
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1054
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1057
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1060
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45019,25 +45112,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1064
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1067
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1070
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1073
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45050,7 +45143,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1077
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45062,7 +45155,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1085
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45074,7 +45167,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1093
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45087,13 +45180,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1097
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1100
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45101,11 +45194,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1104
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1107
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45119,7 +45212,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1113
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45128,7 +45221,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1117
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45144,7 +45237,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1122
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45154,7 +45247,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1126
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45164,7 +45257,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1130
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45175,7 +45268,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1134
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45185,7 +45278,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1138
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45193,7 +45286,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1142
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45204,7 +45297,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1146
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45219,7 +45312,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1152
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45228,13 +45321,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1157
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1160
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45243,7 +45336,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1163
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45253,7 +45346,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1166
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45265,7 +45358,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1169
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45275,24 +45368,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1172
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1175
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1178
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1181
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45301,7 +45394,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1184
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45309,7 +45402,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1187
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45318,7 +45411,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1190
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45328,7 +45421,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1194
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45336,31 +45429,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1198
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1201
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1204
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1207
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1210
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45368,7 +45461,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1213
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45378,21 +45471,21 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1216
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1219
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
"iOS specific override for [member rendering/gles2/compatibility/"
"disable_half_float], due to poor support for half-float vertex compression "
"on many devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
"If [code]true[/code] and available on the target Android device, enables "
"high floating point precision for all shader computations in GLES2.\n"
@@ -45400,31 +45493,31 @@ msgid ""
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1226
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1229
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1232
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1235
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1238
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45432,7 +45525,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1241
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45442,7 +45535,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1244
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45451,7 +45544,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1247
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45460,20 +45553,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1250
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1253
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1256
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45482,7 +45575,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1259
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45490,7 +45583,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45499,7 +45592,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1266
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45509,20 +45602,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1275
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45531,13 +45624,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45547,46 +45640,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1294
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1297
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1300
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1303
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1306
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45596,7 +45689,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45608,7 +45701,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1317
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45616,7 +45709,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45624,7 +45717,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1324
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45633,7 +45726,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1327
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45647,7 +45740,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1332
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45657,7 +45750,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1335
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45666,7 +45759,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1338
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45676,54 +45769,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1341
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1344
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1347
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1350
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1353
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1356
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1359
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -45734,61 +45827,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1366
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1369
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1372
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1375
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1378
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1381
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1384
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1387
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -45799,7 +45892,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1394
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -45808,26 +45901,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400
-#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1409
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1412
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -45838,20 +45931,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1419
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1426
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -45863,52 +45956,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1436
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1439
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1442
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1445
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1448
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1451
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1454
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -45916,7 +46009,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -45929,7 +46022,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -45941,7 +46034,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -45953,7 +46046,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -45965,7 +46058,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -45977,7 +46070,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1481
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46636,40 +46729,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46677,14 +46784,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49011,6 +49118,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49028,7 +49151,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49036,11 +49159,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49050,19 +49173,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54447,20 +54570,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54471,28 +54599,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54504,19 +54632,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
diff --git a/doc/translations/nl.po b/doc/translations/nl.po
index df5a6168a0..26d5127ccc 100644
--- a/doc/translations/nl.po
+++ b/doc/translations/nl.po
@@ -6,12 +6,13 @@
# Stijn Hinlopen <f.a.hinlopen@gmail.com>, 2020.
# marnicq van loon <marnicqvanloon@gmail.com>, 2020.
# Pierre Stempin <pierre.stempin@gmail.com>, 2020.
+# Daan van Luijk <daanvl@outlook.be>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2020-12-26 14:29+0000\n"
-"Last-Translator: Stijn Hinlopen <f.a.hinlopen@gmail.com>\n"
+"PO-Revision-Date: 2021-11-07 22:24+0000\n"
+"Last-Translator: Daan van Luijk <daanvl@outlook.be>\n"
"Language-Team: Dutch <https://hosted.weblate.org/projects/godot-engine/godot-"
"class-reference/nl/>\n"
"Language: nl\n"
@@ -19,7 +20,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.4.1-dev\n"
+"X-Generator: Weblate 4.9-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -47,7 +48,7 @@ msgstr "Signalen"
#: doc/tools/make_rst.py
msgid "Enumerations"
-msgstr "Enumeratie"
+msgstr "Enumeraties"
#: doc/tools/make_rst.py
msgid "Constants"
@@ -117,7 +118,6 @@ msgstr ""
"zijn gedefinieerd."
#: modules/gdscript/doc_classes/@GDScript.xml:45
-#, fuzzy
msgid ""
"Returns the absolute value of parameter [code]s[/code] (i.e. positive "
"value).\n"
@@ -125,11 +125,10 @@ msgid ""
"a = abs(-1) # a is 1\n"
"[/codeblock]"
msgstr ""
-"Geeft als resultaat de absolute waarde van de parameter [code]s[/code] (d.w."
-"z. ongetekende waarde, werkt voor integer en float).\n"
+"Geeft als resultaat de absolute waarde van de parameter terug [code]s[/code] "
+"(d.w.z. positieve waarde).\n"
"[codeblock]\n"
-"# a is 1\n"
-"a = abs(-1)\n"
+"a = abs(-1) # a is 1\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:55
@@ -3640,112 +3639,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4823,7 +4831,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -10222,17 +10230,21 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10241,24 +10253,24 @@ msgid ""
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10272,62 +10284,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10335,35 +10347,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10371,13 +10383,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10389,77 +10401,77 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr ""
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:131
+#: doc/classes/BakedLightmap.xml:132
msgid ""
"Returns if lightmapper can't be created. Unless you are using a custom "
"lightmapper, please report this as bug."
msgstr ""
-#: doc/classes/BakedLightmap.xml:134
+#: doc/classes/BakedLightmap.xml:135
msgid ""
"There is no root node to start baking from. Either provide [code]from_node[/"
"code] argument or attach this node to a parent that should be used as root."
msgstr ""
-#: doc/classes/BakedLightmap.xml:137
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:140
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:143
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:146
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10915,8 +10927,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -24928,21 +24943,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -24951,14 +24977,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -24968,80 +24998,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -29257,7 +29287,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30569,7 +30601,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30634,22 +30667,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30664,7 +30699,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30672,19 +30707,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30755,7 +30790,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30813,7 +30849,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -34356,7 +34394,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37669,7 +37707,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37699,14 +37737,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37716,7 +37754,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40201,17 +40239,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40229,11 +40293,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40428,7 +40492,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41230,6 +41296,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41247,7 +41331,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41361,7 +41445,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -43902,24 +43988,30 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:282
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:285
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:288
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43929,7 +44021,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:291
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43939,27 +44031,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:294
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:297
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:300
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:303
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -43967,81 +44059,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:306
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:309
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:312
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:315
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:318
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:321
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:324
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:327
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:330
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:333
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:336
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:339
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:342
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -44049,109 +44141,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:345
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:348
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:351
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:354
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:357
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:360
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:363
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:366
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:369
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:372
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:375
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:378
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:381
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:384
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:387
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:390
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:393
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:396
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:399
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44162,91 +44254,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:404
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:407
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:410
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:413
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:416
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:419
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:422
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:425
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:428
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:431
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:434
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:437
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:440
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:443
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:446
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:449
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:452
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44255,13 +44347,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:456
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:459
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44271,7 +44363,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:464
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44279,19 +44371,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:469
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:473
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:477
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44305,45 +44397,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:482
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:485
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:489
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:492
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:495
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:498
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:501
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44352,7 +44444,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:504
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44363,7 +44455,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:508
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44379,14 +44471,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:516
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:519
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44394,49 +44486,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:522
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:525
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:530
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:533
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:536
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:539
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:542
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:545
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:548
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44445,7 +44537,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:552
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44453,7 +44545,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:556
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44461,7 +44553,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:560
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44471,7 +44563,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:564
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44480,7 +44572,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:568
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44489,7 +44581,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:572
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44499,7 +44591,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:576
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44507,7 +44599,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:580
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44517,7 +44609,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:584
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44527,7 +44619,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:588
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44535,7 +44627,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:592
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44544,7 +44636,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:596
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44552,7 +44644,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:600
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44564,477 +44656,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:606
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:609
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:612
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:615
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:618
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:621
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:624
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:627
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:630
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:633
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:636
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:639
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:642
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:645
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:648
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:651
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:654
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:657
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:660
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:663
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:666
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:669
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:672
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:675
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:678
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:681
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:684
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:687
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:690
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:693
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:696
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:699
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:702
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:705
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:708
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:711
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:714
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:717
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:720
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:723
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:726
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:729
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:732
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:735
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:738
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:741
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:744
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:747
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:750
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:753
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:756
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:759
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:762
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:765
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:768
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:771
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:774
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:777
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:780
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:783
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:786
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:789
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:792
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:795
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:798
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:801
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:804
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:807
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:810
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:813
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:816
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:819
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:822
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:825
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:828
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:831
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:834
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:837
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:840
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:843
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:846
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:849
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:852
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:855
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:858
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:861
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:864
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:867
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:870
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:873
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:876
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:879
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:882
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:885
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:888
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:891
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:894
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:897
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:900
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:903
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:906
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:909
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:912
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:915
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:918
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:921
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:924
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:927
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:930
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:933
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:936
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:939
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:942
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:947
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:950
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -45042,92 +45134,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:953
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:956
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:959
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:962
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:965
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:968
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:971
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:974
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:977
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:980
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:983
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:986
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:989
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:992
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:995
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:998
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1001
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1004
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -45137,33 +45229,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1008
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1011
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1014
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1018
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1022
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45176,7 +45268,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1026
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45188,7 +45280,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1034
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45200,7 +45292,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1042
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45213,7 +45305,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1046
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45221,28 +45313,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1050
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1054
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1057
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1060
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45252,25 +45344,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1064
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1067
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1070
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1073
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45283,7 +45375,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1077
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45295,7 +45387,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1085
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45307,7 +45399,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1093
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45320,13 +45412,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1097
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1100
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45334,11 +45426,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1104
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1107
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45352,7 +45444,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1113
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45361,7 +45453,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1117
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45377,7 +45469,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1122
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45387,7 +45479,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1126
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45397,7 +45489,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1130
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45408,7 +45500,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1134
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45418,7 +45510,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1138
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45426,7 +45518,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1142
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45437,7 +45529,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1146
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45452,7 +45544,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1152
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45461,13 +45553,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1157
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1160
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45476,7 +45568,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1163
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45486,7 +45578,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1166
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45498,7 +45590,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1169
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45508,24 +45600,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1172
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1175
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1178
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1181
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45534,7 +45626,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1184
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45542,7 +45634,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1187
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45551,7 +45643,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1190
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45561,7 +45653,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1194
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45569,31 +45661,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1198
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1201
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1204
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1207
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1210
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45601,7 +45693,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1213
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45611,21 +45703,21 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1216
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1219
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
"iOS specific override for [member rendering/gles2/compatibility/"
"disable_half_float], due to poor support for half-float vertex compression "
"on many devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
"If [code]true[/code] and available on the target Android device, enables "
"high floating point precision for all shader computations in GLES2.\n"
@@ -45633,31 +45725,31 @@ msgid ""
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1226
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1229
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1232
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1235
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1238
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45665,7 +45757,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1241
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45675,7 +45767,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1244
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45684,7 +45776,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1247
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45693,20 +45785,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1250
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1253
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1256
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45715,7 +45807,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1259
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45723,7 +45815,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45732,7 +45824,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1266
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45742,20 +45834,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1275
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45764,13 +45856,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45780,46 +45872,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1294
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1297
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1300
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1303
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1306
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45829,7 +45921,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45841,7 +45933,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1317
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45849,7 +45941,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45857,7 +45949,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1324
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45866,7 +45958,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1327
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45880,7 +45972,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1332
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45890,7 +45982,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1335
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45899,7 +45991,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1338
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45909,54 +46001,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1341
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1344
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1347
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1350
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1353
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1356
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1359
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -45967,61 +46059,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1366
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1369
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1372
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1375
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1378
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1381
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1384
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1387
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -46032,7 +46124,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1394
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -46041,26 +46133,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400
-#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1409
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1412
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -46071,20 +46163,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1419
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1426
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -46096,52 +46188,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1436
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1439
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1442
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1445
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1448
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1451
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1454
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -46149,7 +46241,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -46162,7 +46254,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46174,7 +46266,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46186,7 +46278,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46198,7 +46290,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46210,7 +46302,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1481
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46874,40 +46966,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46915,14 +47021,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49258,6 +49364,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49275,7 +49397,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49283,11 +49405,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49297,19 +49419,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54724,20 +54846,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54748,28 +54875,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54781,19 +54908,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
diff --git a/doc/translations/pl.po b/doc/translations/pl.po
index 921ba76bc8..e7c2358cea 100644
--- a/doc/translations/pl.po
+++ b/doc/translations/pl.po
@@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-10-31 13:40+0000\n"
+"PO-Revision-Date: 2021-11-06 19:35+0000\n"
"Last-Translator: CXVMNER <cxvmner@gmail.com>\n"
"Language-Team: Polish <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/pl/>\n"
@@ -238,12 +238,12 @@ msgid ""
"a = atan(0.5) # a is 0.463648\n"
"[/codeblock]"
msgstr ""
-"Zwraca tangens łuku [code]s[/code] w radianach. Użyj go by uzyskać kąt z "
-"kÄ…ta tangensa w trygonometrii: [code]atan(tan(angle)) == angle[/code].\n"
+"Zwraca arcus tangens kąta [code]s[/code] w radianach. Użyj go by uzyskać kąt "
+"z kÄ…ta tangensa w trygonometrii: [code]atan(tan(angle)) == angle[/code].\n"
"Metoda nie wie w którym kwadrancie wypada kąt . Sprawdź [method atan2] jeśli "
"posiadasz oba [code]y[/code] oraz [code]x[/code].\n"
"[codeblock]\n"
-"a = atan(0.5) # a is 0.463648\n"
+"a = atan(0.5) # a ma wartość 0.463648\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:107
@@ -290,7 +290,6 @@ msgstr ""
"współrzędne biegunowe (odległość od początku układu i kąt)."
#: modules/gdscript/doc_classes/@GDScript.xml:135
-#, fuzzy
msgid ""
"Rounds [code]s[/code] upward (towards positive infinity), returning the "
"smallest whole number that is not less than [code]s[/code].\n"
@@ -301,11 +300,12 @@ msgid ""
"See also [method floor], [method round], [method stepify], and [int]."
msgstr ""
"Zaokrągla [code]s[/code] w górę (w kierunku dodatnim), zwracając najmniejszą "
-"liczbę całkowitą, która jest nie mniejsza niż [code]s[/code] (tj. sufit).\n"
+"liczbę całkowitą, która jest nie mniejsza niż [code]s[/code].\n"
"[codeblock]\n"
-"i = ceil(1.45) # i is 2\n"
-"i = ceil(1.001) # i is 2\n"
-"[/codeblock]"
+"a = ceil(1.45) # a jest równe 2\n"
+"a = ceil(1.001) # a jest równe 2\n"
+"[/codeblock]\n"
+"Zobacz też [method floor], [method round], [method stepify] oraz [int]."
#: modules/gdscript/doc_classes/@GDScript.xml:147
msgid ""
@@ -328,7 +328,6 @@ msgstr ""
"Jest to odwrotność [method ord]."
#: modules/gdscript/doc_classes/@GDScript.xml:162
-#, fuzzy
msgid ""
"Clamps [code]value[/code] and returns a value not less than [code]min[/code] "
"and not more than [code]max[/code].\n"
@@ -341,13 +340,9 @@ msgstr ""
"Ogranicza [code]value[/code] i zwraca wartość nie mniejszą od [code]min[/"
"code] i nie większą od [code]max[/code].\n"
"[codeblock]\n"
-"speed = 1000\n"
-"# a is 20\n"
-"a = clamp(speed, 1, 20)\n"
-"\n"
-"speed = -10\n"
-"# a is 1\n"
-"a = clamp(speed, 1, 20)\n"
+"a = clamp(1000, 1, 20) # a jest równe 20\n"
+"a = clamp(-10, 1, 20) # a jest równe 1\n"
+"a = clamp(15, 1, 20) # a jest równe 15\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:175
@@ -375,7 +370,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:190
-#, fuzzy
msgid ""
"Returns the cosine of angle [code]s[/code] in radians.\n"
"[codeblock]\n"
@@ -385,13 +379,11 @@ msgid ""
msgstr ""
"Zwraca kosinus kÄ…ta [code]s[/code] w radianach.\n"
"[codeblock]\n"
-"# Wypisze 1 następnie -1\n"
-"print(cos(PI * 2))\n"
-"print(cos(PI))\n"
+"a = cos(TAU) # a równe 1.0\n"
+"a = cos(PI) # a równe -1.0\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:201
-#, fuzzy
msgid ""
"Returns the hyperbolic cosine of [code]s[/code] in radians.\n"
"[codeblock]\n"
@@ -400,8 +392,7 @@ msgid ""
msgstr ""
"Zwraca hiperboliczny cosinus [code]s[/code] w radianach.\n"
"[codeblock]\n"
-"# Wypisze 1.543081\n"
-"print(cosh(1))\n"
+"print(cosh(1)) # Wypisze 1.543081\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:211
@@ -410,10 +401,9 @@ msgstr "Konwertuje decybele na liniowy przekaz energii (dźwięk)."
#: modules/gdscript/doc_classes/@GDScript.xml:218
msgid "Deprecated alias for [method step_decimals]."
-msgstr ""
+msgstr "Przestarzały odpowiednik metody [method step_decimals]."
#: modules/gdscript/doc_classes/@GDScript.xml:227
-#, fuzzy
msgid ""
"[b]Note:[/b] [code]dectime[/code] has been deprecated and will be removed in "
"Godot 4.0, please use [method move_toward] instead.\n"
@@ -423,25 +413,24 @@ msgid ""
"a = dectime(60, 10, 0.1)) # a is 59.0\n"
"[/codeblock]"
msgstr ""
-"Zwraca wynik zmniejszania wartości [code]value[/code] o [code]step[/code] * "
+"[b]Notka:[/b] [code]dectime[/code] jest przestarzała i zostanie usunięta w "
+"Godot 4.0. Zamiast tego, użyj [method move_toward].\n"
+"Zwraca wartość [code]value[/code] zmniejszoną o [code]step[/code] * "
"[code]amount[/code].\n"
"[codeblock]\n"
-"# a = 59\n"
-"a = dectime(60, 10, 0.1))\n"
+"a = dectime(60, 10, 0.1)) # a równe 59.0\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:238
-#, fuzzy
msgid ""
"Converts an angle expressed in degrees to radians.\n"
"[codeblock]\n"
"r = deg2rad(180) # r is 3.141593\n"
"[/codeblock]"
msgstr ""
-"Zwraca kąt wyrażony w stopniach do radianów.\n"
+"Przelicza kąt wyrażony w stopniach na kąt w radianach.\n"
"[codeblock]\n"
-"# r is 3.141593\n"
-"r = deg2rad(180)\n"
+"r = deg2rad(180) # r równe 3.141593\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:248
@@ -453,6 +442,7 @@ msgstr ""
"instancjÄ™. Przydatne podczas deserializacji."
#: modules/gdscript/doc_classes/@GDScript.xml:256
+#, fuzzy
msgid ""
"Returns an \"eased\" value of [code]x[/code] based on an easing function "
"defined with [code]curve[/code]. This easing function is based on an "
@@ -472,6 +462,24 @@ msgid ""
"See also [method smoothstep]. If you need to perform more advanced "
"transitions, use [Tween] or [AnimationPlayer]."
msgstr ""
+"Zwraca \"wygładzoną\" wartość [code]x[/code] w oparciu o funkcję przejścia "
+"zdefiniowaną przez [code]curve[/code]. Funkcja przejścia jest funkcją "
+"potęgową. [code]curve[/code] może być dowolną liczbą zmiennoprzecinkową, dla "
+"której określonych wartości zachodzą następujące zależności:\n"
+"[codeblock]\n"
+"- Mniej niż -1.0 (przedział otwarty): Ease in-out\n"
+"- 1.0: przejście liniowe\n"
+"- Od -1.0 do 0.0 (przedział otwarty): Ease out-in\n"
+"- 0.0: stała wartość\n"
+"- Od 0.0 to 1.0 (przedział otwarty): Ease in\n"
+"- 1.0: przejście liniowe\n"
+"- Więcej niż 1.0 (przedział otwarty): Ease out\n"
+"[/codeblock]\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"ease_cheatsheet.png]przykładowe krzywe ease() dla różnych wartości curve[/"
+"url]\n"
+"Zobacz też [method smoothstep]. Jeśli potrzebujesz bardziej zaawansowanych "
+"metod przejścia użyj [Tween] lub [AnimationPlayer]."
#: modules/gdscript/doc_classes/@GDScript.xml:274
msgid ""
@@ -520,7 +528,6 @@ msgstr ""
"liczby całkowitej użyj bezpośrednio metody [code]int(s)[/code]."
#: modules/gdscript/doc_classes/@GDScript.xml:301
-#, fuzzy
msgid ""
"Returns the floating-point remainder of [code]a/b[/code], keeping the sign "
"of [code]a[/code].\n"
@@ -529,16 +536,14 @@ msgid ""
"[/codeblock]\n"
"For the integer remainder operation, use the % operator."
msgstr ""
-"Zwraca zmiennoprzecinkowÄ… resztÄ™ [code]a/b[/code], zachowujÄ…c znak [code]a[/"
-"code].\n"
+"Zwraca zmiennoprzecinkowÄ… resztÄ™ z [code]a/b[/code], zachowujÄ…c znak "
+"[code]a[/code].\n"
"[codeblock]\n"
-"# Reszta wynosi 1.5\n"
-"var reszta = fmod(7, 5.5)\n"
+"r = fmod(7, 5.5) # r równe 1.5\n"
"[/codeblock]\n"
"Dla operacji z całkowitą resztą, użyj operatora %."
#: modules/gdscript/doc_classes/@GDScript.xml:313
-#, fuzzy
msgid ""
"Returns the floating-point modulus of [code]a/b[/code] that wraps equally in "
"positive and negative.\n"
@@ -558,27 +563,22 @@ msgid ""
" 1.5 0.0 0.0\n"
"[/codeblock]"
msgstr ""
-"Zwraca zmiennoprzecinkowy moduł [code]a /b[/code], który zawiera równo "
+"Zwraca zmiennoprzecinkowy moduł z [code]a /b[/code], który zawiera równo "
"wartość dodatnią jak i ujemną.\n"
"[codeblock]\n"
-"var i = -6\n"
-"while i < 5:\n"
-" prints(i, fposmod(i, 3))\n"
-" i += 1\n"
+"for i in 7:\n"
+" var x = 0.5 * i - 1.5\n"
+" print(\"%4.1f %4.1f %4.1f\" % [x, fmod(x, 1.5), fposmod(x, 1.5)])\n"
"[/codeblock]\n"
-"Daje nam te wartości:\n"
+"Daje nam wartości:\n"
"[codeblock]\n"
-"-6 0\n"
-"-5 1\n"
-"-4 2\n"
-"-3 0\n"
-"-2 1\n"
-"-1 2\n"
-"0 0\n"
-"1 1\n"
-"2 2\n"
-"3 0\n"
-"4 1\n"
+"-1.5 -0.0 0.0\n"
+"-1.0 -1.0 0.5\n"
+"-0.5 -0.5 1.0\n"
+" 0.0 0.0 0.0\n"
+" 0.5 0.5 0.5\n"
+" 1.0 1.0 1.0\n"
+" 1.5 0.0 0.0\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:336
@@ -4034,112 +4034,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -5218,7 +5227,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -10625,17 +10634,21 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10644,24 +10657,24 @@ msgid ""
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10675,62 +10688,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10738,35 +10751,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10774,13 +10787,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10792,78 +10805,78 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
#, fuzzy
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr "Zwraca arcus tangens parametrów."
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:131
+#: doc/classes/BakedLightmap.xml:132
msgid ""
"Returns if lightmapper can't be created. Unless you are using a custom "
"lightmapper, please report this as bug."
msgstr ""
-#: doc/classes/BakedLightmap.xml:134
+#: doc/classes/BakedLightmap.xml:135
msgid ""
"There is no root node to start baking from. Either provide [code]from_node[/"
"code] argument or attach this node to a parent that should be used as root."
msgstr ""
-#: doc/classes/BakedLightmap.xml:137
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:140
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:143
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:146
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -11319,8 +11332,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -25351,21 +25367,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -25374,14 +25401,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -25391,36 +25422,36 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
#, fuzzy
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
@@ -25428,46 +25459,46 @@ msgstr ""
"Jeśli [code]true[/code], potomne węzły są sortowane. W innym przypadku jest "
"wyłączone."
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -29695,7 +29726,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -31017,7 +31050,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -31082,22 +31116,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -31112,7 +31148,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -31120,19 +31156,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -31203,7 +31239,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -31261,7 +31298,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -34820,7 +34859,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -38139,7 +38178,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -38169,14 +38208,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -38186,7 +38225,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40702,17 +40741,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40730,11 +40795,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40929,7 +40994,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41732,6 +41799,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41749,7 +41834,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41863,7 +41948,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -44410,24 +44497,30 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:282
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:285
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:288
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44437,7 +44530,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:291
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44447,27 +44540,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:294
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:297
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:300
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:303
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -44475,81 +44568,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:306
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:309
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:312
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:315
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:318
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:321
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:324
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:327
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:330
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:333
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:336
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:339
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:342
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -44557,109 +44650,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:345
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:348
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:351
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:354
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:357
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:360
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:363
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:366
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:369
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:372
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:375
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:378
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:381
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:384
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:387
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:390
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:393
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:396
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:399
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44670,91 +44763,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:404
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:407
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:410
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:413
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:416
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:419
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:422
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:425
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:428
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:431
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:434
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:437
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:440
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:443
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:446
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:449
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:452
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44763,13 +44856,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:456
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:459
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44779,7 +44872,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:464
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44787,19 +44880,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:469
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:473
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:477
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44813,45 +44906,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:482
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:485
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:489
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:492
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:495
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:498
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:501
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44860,7 +44953,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:504
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44871,7 +44964,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:508
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44887,14 +44980,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:516
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:519
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44902,49 +44995,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:522
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:525
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:530
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:533
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:536
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:539
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:542
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:545
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:548
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44953,7 +45046,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:552
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44961,7 +45054,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:556
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44969,7 +45062,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:560
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44979,7 +45072,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:564
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44988,7 +45081,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:568
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44997,7 +45090,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:572
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -45007,7 +45100,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:576
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45015,7 +45108,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:580
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -45025,7 +45118,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:584
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -45035,7 +45128,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:588
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45043,7 +45136,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:592
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -45052,7 +45145,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:596
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45060,7 +45153,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:600
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -45072,477 +45165,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:606
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:609
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:612
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:615
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:618
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:621
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:624
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:627
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:630
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:633
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:636
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:639
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:642
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:645
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:648
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:651
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:654
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:657
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:660
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:663
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:666
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:669
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:672
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:675
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:678
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:681
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:684
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:687
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:690
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:693
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:696
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:699
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:702
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:705
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:708
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:711
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:714
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:717
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:720
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:723
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:726
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:729
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:732
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:735
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:738
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:741
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:744
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:747
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:750
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:753
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:756
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:759
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:762
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:765
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:768
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:771
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:774
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:777
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:780
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:783
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:786
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:789
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:792
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:795
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:798
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:801
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:804
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:807
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:810
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:813
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:816
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:819
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:822
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:825
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:828
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:831
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:834
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:837
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:840
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:843
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:846
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:849
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:852
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:855
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:858
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:861
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:864
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:867
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:870
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:873
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:876
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:879
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:882
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:885
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:888
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:891
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:894
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:897
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:900
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:903
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:906
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:909
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:912
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:915
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:918
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:921
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:924
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:927
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:930
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:933
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:936
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:939
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:942
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:947
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:950
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -45550,92 +45643,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:953
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:956
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:959
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:962
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:965
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:968
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:971
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:974
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:977
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:980
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:983
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:986
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:989
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:992
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:995
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:998
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1001
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1004
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -45645,33 +45738,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1008
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1011
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1014
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1018
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1022
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45684,7 +45777,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1026
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45696,7 +45789,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1034
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45708,7 +45801,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1042
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45721,7 +45814,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1046
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45729,28 +45822,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1050
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1054
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1057
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1060
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45760,25 +45853,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1064
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1067
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1070
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1073
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45791,7 +45884,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1077
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45803,7 +45896,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1085
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45815,7 +45908,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1093
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45828,13 +45921,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1097
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1100
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45842,11 +45935,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1104
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1107
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45860,7 +45953,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1113
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45869,7 +45962,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1117
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45885,7 +45978,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1122
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45895,7 +45988,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1126
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45905,7 +45998,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1130
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45916,7 +46009,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1134
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45926,7 +46019,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1138
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45934,7 +46027,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1142
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45945,7 +46038,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1146
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45960,7 +46053,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1152
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45969,13 +46062,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1157
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1160
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45984,7 +46077,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1163
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45994,7 +46087,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1166
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -46006,7 +46099,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1169
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -46016,24 +46109,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1172
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1175
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1178
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1181
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -46042,7 +46135,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1184
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -46050,7 +46143,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1187
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -46059,7 +46152,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1190
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -46069,7 +46162,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1194
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -46077,31 +46170,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1198
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1201
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1204
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1207
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1210
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -46109,7 +46202,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1213
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -46119,21 +46212,21 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1216
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1219
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
"iOS specific override for [member rendering/gles2/compatibility/"
"disable_half_float], due to poor support for half-float vertex compression "
"on many devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
"If [code]true[/code] and available on the target Android device, enables "
"high floating point precision for all shader computations in GLES2.\n"
@@ -46141,31 +46234,31 @@ msgid ""
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1226
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1229
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1232
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1235
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1238
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -46173,7 +46266,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1241
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -46183,7 +46276,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1244
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -46192,7 +46285,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1247
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -46201,20 +46294,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1250
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1253
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1256
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -46223,7 +46316,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1259
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -46231,7 +46324,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -46240,7 +46333,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1266
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -46250,20 +46343,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1275
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -46272,13 +46365,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -46288,46 +46381,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1294
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1297
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1300
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1303
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1306
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -46337,7 +46430,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -46349,7 +46442,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1317
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -46357,7 +46450,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -46365,7 +46458,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1324
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -46374,7 +46467,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1327
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -46388,7 +46481,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1332
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -46398,7 +46491,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1335
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -46407,7 +46500,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1338
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -46417,54 +46510,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1341
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1344
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1347
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1350
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1353
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1356
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1359
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -46475,61 +46568,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1366
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1369
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1372
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1375
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1378
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1381
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1384
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1387
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -46540,7 +46633,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1394
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -46549,26 +46642,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400
-#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1409
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1412
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -46579,20 +46672,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1419
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1426
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -46604,52 +46697,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1436
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1439
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1442
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1445
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1448
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1451
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1454
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -46657,7 +46750,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -46670,7 +46763,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46682,7 +46775,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46694,7 +46787,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46706,7 +46799,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46718,7 +46811,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1481
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -47390,40 +47483,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -47431,14 +47538,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49773,6 +49880,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49790,7 +49913,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49798,11 +49921,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49812,19 +49935,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -55249,20 +55372,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -55273,28 +55401,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -55306,19 +55434,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
diff --git a/doc/translations/pt_BR.po b/doc/translations/pt_BR.po
index e74b0335e6..0e60bcc6bc 100644
--- a/doc/translations/pt_BR.po
+++ b/doc/translations/pt_BR.po
@@ -26,12 +26,15 @@
# William Weber Berrutti <wwberrutti@protonmail.ch>, 2021.
# jak3z <jose_renato06@outlook.com>, 2021.
# Henrique Darko <henridark00@gmail.com>, 2021.
+# Cearaj <pmoraisleal@gmail.com>, 2021.
+# Fernando H. Rosa <ferhrosa@gmail.com>, 2021.
+# Alefy San <alefyferreiradeoliveira@outlook.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-10-31 13:40+0000\n"
-"Last-Translator: jak3z <jose_renato06@outlook.com>\n"
+"PO-Revision-Date: 2021-11-17 07:42+0000\n"
+"Last-Translator: Alefy San <alefyferreiradeoliveira@outlook.com>\n"
"Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/"
"godot-engine/godot-class-reference/pt_BR/>\n"
"Language: pt_BR\n"
@@ -39,7 +42,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -190,7 +193,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:78
-#, fuzzy
msgid ""
"Asserts that the [code]condition[/code] is [code]true[/code]. If the "
"[code]condition[/code] is [code]false[/code], an error is generated. When "
@@ -216,24 +218,29 @@ msgid ""
"a message with clarifying details\n"
"[/codeblock]"
msgstr ""
-"Afirma que o [code]condition[/code] é [code]true[/code]. Se o "
-"[code]condition[/code] é [code]false[/code], um erro é gerado e o programa é "
-"interrompido até que você o retome. Apenas executa em compilações de "
-"depuração, ou quando executando o jogo a partir do editor. Use-o por motivos "
-"de depuração, para ter certeza que a declaração é [code]true[/code] durante "
-"o desenvolvimento.\n"
+"Afirma que [code]condition[/code] (condição) é [code]true[/code]. Se "
+"[code]condition[/code] é [code]false[/code], um erro é gerado. Ao executar a "
+"partir do editor, o programa também será interrompido, até que você o "
+"retome. Isso pode ser usado como uma forma mais forte de [method push_error] "
+"para reportar erros aos desenvolvedores do projeto ou para utilizadores de "
+"add-ons.\n"
+"[b]Obs.:[/b] Por motivos de desempenho, o código inserido no [method assert] "
+"só é executado em compilações de depuração ou quando o projeto é executado a "
+"partir do editor. Não insira código com efeitos colaterais dentro de um "
+"[method assert], senão o projeto terá um comportamento diferente quando "
+"exportado em modo de lançamento.\n"
"O argumento opcional [code]message[/code], se dado, é mostrado em "
-"complemento a mensagem genérica \"Assertion failed\". Você pode usar isso "
-"para prover detalhes adicionais do o porquê a afirmação falhou.\n"
+"complemento à mensagem genérica \"Assertion failed\". Você pode usar isso "
+"para fornecer detalhes adicionais do porquê a afirmação falhou.\n"
"[codeblock]\n"
-"# Imagine que queremos que uma velocidade esteja entre 0 e 20\n"
-"speed = -10\n"
+"# Imagine que queremos que a velocidade se situe sempre entre 0 e 20.\n"
+"var speed = -10\n"
"assert(speed < 20) # True, o programa irá continuar\n"
"assert(speed >= 0) # False, o programa irá parar\n"
-"assert(speed >= 0 && speed < 20) # Você pode, inclusive, combinar dois "
+"assert(speed >= 0 && speed < 20) # Você também pode combinar os dois "
"parâmetros condicionais em uma verificação\n"
-"assert(speed < 20, \"speed = %f, but the speed limit is 20\" % speed) # "
-"Mostra uma mensagem com detalhes esclarecedores\n"
+"assert(speed < 20, \"speed = %f, mas o limite de velocidade é 20\" % speed) "
+"# Mostra uma mensagem com mais detalhes\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:95
@@ -301,7 +308,6 @@ msgstr ""
"ângulo)."
#: modules/gdscript/doc_classes/@GDScript.xml:135
-#, fuzzy
msgid ""
"Rounds [code]s[/code] upward (towards positive infinity), returning the "
"smallest whole number that is not less than [code]s[/code].\n"
@@ -340,7 +346,6 @@ msgstr ""
"Isso é o inverso de [method ord]."
#: modules/gdscript/doc_classes/@GDScript.xml:162
-#, fuzzy
msgid ""
"Clamps [code]value[/code] and returns a value not less than [code]min[/code] "
"and not more than [code]max[/code].\n"
@@ -356,7 +361,7 @@ msgstr ""
"a = clamp(1000, 1, 20) # a é 20\n"
"a = clamp(-10, 1, 20) # a é 1\n"
"a = clamp(15, 1, 20) # a é 15\n"
-"[/ codeblock]"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:175
msgid ""
@@ -383,7 +388,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:190
-#, fuzzy
msgid ""
"Returns the cosine of angle [code]s[/code] in radians.\n"
"[codeblock]\n"
@@ -391,7 +395,7 @@ msgid ""
"a = cos(PI) # a is -1.0\n"
"[/codeblock]"
msgstr ""
-"Retorna o seno do ângulo [code]s[/code] em radianos.\n"
+"Retorna o cosseno do ângulo [code]s[/code] em radianos.\n"
"[codeblock]\n"
"a = cos(TAU) # a é 1.0\n"
"a = cos(PI) # a é -1.0\n"
@@ -406,8 +410,7 @@ msgid ""
msgstr ""
"Retorna o cosseno hiperbólico de [code]s[/code] em radianos.\n"
"[codeblock]\n"
-"# Imprime 1.543081\n"
-"print(cosh(1))\n"
+"print(cosh(1)) # Imprime 1.543081\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:211
@@ -449,13 +452,12 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:248
-#, fuzzy
msgid ""
"Converts a dictionary (previously created with [method inst2dict]) back to "
"an instance. Useful for deserializing."
msgstr ""
-"Converte uma instância pré-convertida em um dicionário, de volta em uma "
-"instância. Útil para desserialização."
+"Converte uma instância pré-convertida em um dicionário (com [method "
+"inst2dict]), de volta em uma instância. Útil para desserialização."
#: modules/gdscript/doc_classes/@GDScript.xml:256
#, fuzzy
@@ -480,8 +482,8 @@ msgid ""
msgstr ""
"Retorna um valor \"suavizado\" de [code]x[/code] baseado em uma função de "
"atenuação definida com [code]curve[/code]. Essa função de atenuação é "
-"baseada em um exponente. A [code]curve[/code] pode ser qualquer número de "
-"ponto flutuante, com específicos valores lavando para os seguintes "
+"baseada em um exponente. [code]curve[/code] pode ser qualquer número de "
+"ponto flutuante, com valores específicos resultando nos seguintes "
"comportamentos:\n"
"[codeblock]\n"
"- Menor que -1.0 (exclusivo): Ease in-out\n"
@@ -1978,12 +1980,12 @@ msgstr ""
"em torno de seu perímetro. Isto equivale a [code]TAU / 2[/code]."
#: modules/gdscript/doc_classes/@GDScript.xml:1210
-#, fuzzy
msgid ""
"The circle constant, the circumference of the unit circle in radians. This "
"is equivalent to [code]PI * 2[/code], or 360 degrees in rotations."
msgstr ""
-"A constante do círculo, a circunferência do círculo unitário em radianos."
+"A constante do círculo, a circunferência do círculo unitário em radianos. "
+"Isto é equivalente a [code]PI * 2[/code] ou 360 graus em rotações."
#: modules/gdscript/doc_classes/@GDScript.xml:1213
msgid ""
@@ -3304,121 +3306,119 @@ msgstr "Máscara do segundo botão extra do mouse."
#: doc/classes/@GlobalScope.xml:938
msgid "Invalid button or axis."
-msgstr ""
+msgstr "Botão ou eixo inválido."
#: doc/classes/@GlobalScope.xml:941
msgid "Gamepad button 0."
-msgstr ""
+msgstr "Botão 0 do controle."
#: doc/classes/@GlobalScope.xml:944
-#, fuzzy
msgid "Gamepad button 1."
-msgstr "Máscara do primeiro botão extra do mouse."
+msgstr "Botão 1 do controle."
#: doc/classes/@GlobalScope.xml:947
-#, fuzzy
msgid "Gamepad button 2."
-msgstr "Máscara do segundo botão extra do mouse."
+msgstr "Botão 2 do controle."
#: doc/classes/@GlobalScope.xml:950
msgid "Gamepad button 3."
-msgstr ""
+msgstr "Botão 3 do controle."
#: doc/classes/@GlobalScope.xml:953
msgid "Gamepad button 4."
-msgstr ""
+msgstr "Botão 4 do controle."
#: doc/classes/@GlobalScope.xml:956
msgid "Gamepad button 5."
-msgstr ""
+msgstr "Botão 5 do controle."
#: doc/classes/@GlobalScope.xml:959
msgid "Gamepad button 6."
-msgstr ""
+msgstr "Botão 6 do controle."
#: doc/classes/@GlobalScope.xml:962
msgid "Gamepad button 7."
-msgstr ""
+msgstr "Botão 7 do controle."
#: doc/classes/@GlobalScope.xml:965
msgid "Gamepad button 8."
-msgstr ""
+msgstr "Botão 8 do controle."
#: doc/classes/@GlobalScope.xml:968
msgid "Gamepad button 9."
-msgstr ""
+msgstr "Botão 9 do controle."
#: doc/classes/@GlobalScope.xml:971
msgid "Gamepad button 10."
-msgstr ""
+msgstr "Botão 10 do controle."
#: doc/classes/@GlobalScope.xml:974
msgid "Gamepad button 11."
-msgstr ""
+msgstr "Botão 11 do controle."
#: doc/classes/@GlobalScope.xml:977
msgid "Gamepad button 12."
-msgstr ""
+msgstr "Botão 12 do controle."
#: doc/classes/@GlobalScope.xml:980
msgid "Gamepad button 13."
-msgstr ""
+msgstr "Botão 13 do controle."
#: doc/classes/@GlobalScope.xml:983
msgid "Gamepad button 14."
-msgstr ""
+msgstr "Botão 14 do controle."
#: doc/classes/@GlobalScope.xml:986
msgid "Gamepad button 15."
-msgstr ""
+msgstr "Botão 15 do controle."
#: doc/classes/@GlobalScope.xml:989
msgid "Gamepad button 16."
-msgstr ""
+msgstr "Botão 16 do controle."
#: doc/classes/@GlobalScope.xml:992
msgid "Gamepad button 17."
-msgstr ""
+msgstr "Botão 17 do controle."
#: doc/classes/@GlobalScope.xml:995
msgid "Gamepad button 18."
-msgstr ""
+msgstr "Botão 18 do controle."
#: doc/classes/@GlobalScope.xml:998
msgid "Gamepad button 19."
-msgstr ""
+msgstr "Botão 19 do controle."
#: doc/classes/@GlobalScope.xml:1001
msgid "Gamepad button 20."
-msgstr ""
+msgstr "Botão 20 do controle."
#: doc/classes/@GlobalScope.xml:1004
msgid "Gamepad button 21."
-msgstr ""
+msgstr "Botão 21 do controle."
#: doc/classes/@GlobalScope.xml:1007
msgid "Gamepad button 22."
-msgstr ""
+msgstr "Botão 22 do controle."
#: doc/classes/@GlobalScope.xml:1010
msgid "Represents the maximum number of joystick buttons supported."
-msgstr ""
+msgstr "Representa o número máximo de botões de joystick suportados."
#: doc/classes/@GlobalScope.xml:1013
msgid "DualShock circle button."
-msgstr ""
+msgstr "Botão Círculo do DualShock."
#: doc/classes/@GlobalScope.xml:1016
msgid "DualShock X button."
-msgstr ""
+msgstr "Botão X do DualShock."
#: doc/classes/@GlobalScope.xml:1019
msgid "DualShock square button."
-msgstr ""
+msgstr "Botão quadrado do DualShock."
#: doc/classes/@GlobalScope.xml:1022
msgid "DualShock triangle button."
-msgstr ""
+msgstr "Botão triângulo do Dualshock."
#: doc/classes/@GlobalScope.xml:1025
#, fuzzy
@@ -3470,7 +3470,7 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:1055
msgid "Trigger on a VR controller."
-msgstr ""
+msgstr "Gatilho em um controle VR."
#: doc/classes/@GlobalScope.xml:1058
msgid ""
@@ -3494,11 +3494,11 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:1070
msgid "Gamepad button Select."
-msgstr ""
+msgstr "Botão Select do controle."
#: doc/classes/@GlobalScope.xml:1073
msgid "Gamepad button Start."
-msgstr ""
+msgstr "Botão Start do controle."
#: doc/classes/@GlobalScope.xml:1076
msgid "Gamepad DPad up."
@@ -3696,7 +3696,7 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:1223
msgid "Generic error."
-msgstr ""
+msgstr "Erro genérico."
#: doc/classes/@GlobalScope.xml:1226
msgid "Unavailable error."
@@ -3728,15 +3728,15 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:1247
msgid "File: Bad path error."
-msgstr ""
+msgstr "Arquivo: Erro caminho incorreto."
#: doc/classes/@GlobalScope.xml:1250
msgid "File: No permission error."
-msgstr ""
+msgstr "Aquivo: Erro sem permissão."
#: doc/classes/@GlobalScope.xml:1253
msgid "File: Already in use error."
-msgstr ""
+msgstr "Arquivo: Erro arquivo já em uso."
#: doc/classes/@GlobalScope.xml:1256
msgid "File: Can't open error."
@@ -3800,7 +3800,7 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:1301
msgid "Connection error."
-msgstr ""
+msgstr "Erro de conexão."
#: doc/classes/@GlobalScope.xml:1304
msgid "Can't acquire resource error."
@@ -3836,11 +3836,11 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:1328
msgid "Compilation failed error."
-msgstr ""
+msgstr "Erro de compilação fracassada."
#: doc/classes/@GlobalScope.xml:1331
msgid "Method not found error."
-msgstr ""
+msgstr "Erro de método não encontrado."
#: doc/classes/@GlobalScope.xml:1334
msgid "Linking failed error."
@@ -3856,7 +3856,7 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:1343
msgid "Invalid declaration error."
-msgstr ""
+msgstr "Erro de declaração inválida."
#: doc/classes/@GlobalScope.xml:1346
msgid "Duplicate symbol error."
@@ -3876,7 +3876,7 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:1358
msgid "Help error."
-msgstr ""
+msgstr "Erro de ajuda."
#: doc/classes/@GlobalScope.xml:1361
msgid "Bug error."
@@ -4037,7 +4037,7 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:1445
msgid "The property can be checked in the editor inspector."
-msgstr ""
+msgstr "A propriedade pode ser checada no inspetor do editor."
#: doc/classes/@GlobalScope.xml:1448
msgid "The property is checked in the editor inspector."
@@ -4112,111 +4112,111 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:1502
msgid "Variable is [code]null[/code]."
-msgstr ""
+msgstr "Variável é [code]null[/code]."
#: doc/classes/@GlobalScope.xml:1505
msgid "Variable is of type [bool]."
-msgstr ""
+msgstr "Variável é do tipo [bool]."
#: doc/classes/@GlobalScope.xml:1508
msgid "Variable is of type [int]."
-msgstr ""
+msgstr "Variável é do tipo [int]."
#: doc/classes/@GlobalScope.xml:1511
msgid "Variable is of type [float] (real)."
-msgstr ""
+msgstr "Variável é do tipo [float] (real)."
#: doc/classes/@GlobalScope.xml:1514
msgid "Variable is of type [String]."
-msgstr ""
+msgstr "Variável é do tipo [String]."
#: doc/classes/@GlobalScope.xml:1517
msgid "Variable is of type [Vector2]."
-msgstr ""
+msgstr "Variável é do tipo [Vector2]."
#: doc/classes/@GlobalScope.xml:1520
msgid "Variable is of type [Rect2]."
-msgstr ""
+msgstr "Variável é do tipo [Rect2]."
#: doc/classes/@GlobalScope.xml:1523
msgid "Variable is of type [Vector3]."
-msgstr ""
+msgstr "Variável é do tipo [Vector3]."
#: doc/classes/@GlobalScope.xml:1526
msgid "Variable is of type [Transform2D]."
-msgstr ""
+msgstr "Variável é do tipo [Transform2D]."
#: doc/classes/@GlobalScope.xml:1529
msgid "Variable is of type [Plane]."
-msgstr ""
+msgstr "Variável é do tipo [Plane]."
#: doc/classes/@GlobalScope.xml:1532
msgid "Variable is of type [Quat]."
-msgstr ""
+msgstr "Variável é do tipo [Quat]."
#: doc/classes/@GlobalScope.xml:1535
msgid "Variable is of type [AABB]."
-msgstr ""
+msgstr "Variável é do tipo [AABB]."
#: doc/classes/@GlobalScope.xml:1538
msgid "Variable is of type [Basis]."
-msgstr ""
+msgstr "Variável é do tipo [Basis]."
#: doc/classes/@GlobalScope.xml:1541
msgid "Variable is of type [Transform]."
-msgstr ""
+msgstr "Variável é do tipo [Transform]."
#: doc/classes/@GlobalScope.xml:1544
msgid "Variable is of type [Color]."
-msgstr ""
+msgstr "Variável é do tipo [Color]."
#: doc/classes/@GlobalScope.xml:1547
msgid "Variable is of type [NodePath]."
-msgstr ""
+msgstr "Variável é do tipo [NodePath]."
#: doc/classes/@GlobalScope.xml:1550
msgid "Variable is of type [RID]."
-msgstr ""
+msgstr "Variável é do tipo [RID]."
#: doc/classes/@GlobalScope.xml:1553
msgid "Variable is of type [Object]."
-msgstr ""
+msgstr "Variável é do tipo [Object]."
#: doc/classes/@GlobalScope.xml:1556
msgid "Variable is of type [Dictionary]."
-msgstr ""
+msgstr "Variável é do tipo [Dictionary]."
#: doc/classes/@GlobalScope.xml:1559
msgid "Variable is of type [Array]."
-msgstr ""
+msgstr "Variável é do tipo [Array]."
#: doc/classes/@GlobalScope.xml:1562
msgid "Variable is of type [PoolByteArray]."
-msgstr ""
+msgstr "Variável é do tipo [PoolByteArray]."
#: doc/classes/@GlobalScope.xml:1565
msgid "Variable is of type [PoolIntArray]."
-msgstr ""
+msgstr "Variável é do tipo [PoolIntArray]."
#: doc/classes/@GlobalScope.xml:1568
msgid "Variable is of type [PoolRealArray]."
-msgstr ""
+msgstr "Variável é do tipo [PoolRealArray]."
#: doc/classes/@GlobalScope.xml:1571
msgid "Variable is of type [PoolStringArray]."
-msgstr ""
+msgstr "Variável é do tipo [PoolStringArray]."
#: doc/classes/@GlobalScope.xml:1574
msgid "Variable is of type [PoolVector2Array]."
-msgstr ""
+msgstr "Variável é do tipo [PoolVector2Array]."
#: doc/classes/@GlobalScope.xml:1577
msgid "Variable is of type [PoolVector3Array]."
-msgstr ""
+msgstr "Variável é do tipo [PoolVector3Array]."
#: doc/classes/@GlobalScope.xml:1580
msgid "Variable is of type [PoolColorArray]."
-msgstr ""
+msgstr "Variável é do tipo [PoolColorArray]."
#: doc/classes/@GlobalScope.xml:1583
msgid "Represents the size of the [enum Variant.Type] enum."
@@ -4244,11 +4244,11 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:1601
msgid "Greater than or equal operator ([code]>=[/code])."
-msgstr ""
+msgstr "Operador igual ou maior que ([code]>=[/code])."
#: doc/classes/@GlobalScope.xml:1604
msgid "Addition operator ([code]+[/code])."
-msgstr ""
+msgstr "Operador de adição ([code]+[/code])."
#: doc/classes/@GlobalScope.xml:1607
msgid "Subtraction operator ([code]-[/code])."
@@ -4256,11 +4256,11 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:1610
msgid "Multiplication operator ([code]*[/code])."
-msgstr ""
+msgstr "Operador de multiplicação ([code]*[/code])."
#: doc/classes/@GlobalScope.xml:1613
msgid "Division operator ([code]/[/code])."
-msgstr ""
+msgstr "Operador de divisão ([code]/[/code])."
#: doc/classes/@GlobalScope.xml:1616
msgid "Unary negation operator ([code]-[/code])."
@@ -4377,112 +4377,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4578,6 +4587,8 @@ msgstr ""
#: doc/classes/AcceptDialog.xml:82
msgid "Emitted when a custom button is pressed. See [method add_button]."
msgstr ""
+"Emitido quando um botão personalizado é pressionado. Veja [method "
+"add_button]."
#: doc/classes/AESContext.xml:4
msgid "Interface to low level AES encryption features."
@@ -4724,19 +4735,19 @@ msgstr ""
#: doc/classes/AnimatedSprite.xml:41 doc/classes/SpriteBase3D.xml:48
msgid "If [code]true[/code], texture will be centered."
-msgstr ""
+msgstr "Se [code]true[/code], a texture será centralizada."
#: doc/classes/AnimatedSprite.xml:44 doc/classes/Sprite.xml:39
#: doc/classes/SpriteBase3D.xml:54 doc/classes/TextureButton.xml:21
#: doc/classes/TextureRect.xml:20
msgid "If [code]true[/code], texture is flipped horizontally."
-msgstr ""
+msgstr "Se [code]true[/code], a textura será invertida horizontalmente."
#: doc/classes/AnimatedSprite.xml:47 doc/classes/Sprite.xml:42
#: doc/classes/SpriteBase3D.xml:57 doc/classes/TextureButton.xml:24
#: doc/classes/TextureRect.xml:23
msgid "If [code]true[/code], texture is flipped vertically."
-msgstr ""
+msgstr "Se [code]true[/code], a textura será invertida verticalmente."
#: doc/classes/AnimatedSprite.xml:50 doc/classes/AnimatedSprite3D.xml:38
msgid "The displayed animation frame's index."
@@ -4744,7 +4755,7 @@ msgstr ""
#: doc/classes/AnimatedSprite.xml:53 doc/classes/AnimatedSprite3D.xml:41
msgid "The [SpriteFrames] resource containing the animation(s)."
-msgstr ""
+msgstr "O recurso [SpriteFrames] que contém a(s) animação(ões)."
#: doc/classes/AnimatedSprite.xml:56 doc/classes/Sprite.xml:58
#: doc/classes/SpriteBase3D.xml:63
@@ -4757,7 +4768,7 @@ msgstr ""
#: doc/classes/AnimatedSprite.xml:62
msgid "The animation speed is multiplied by this value."
-msgstr ""
+msgstr "A velocidade da animação é multiplicada por este valor."
#: doc/classes/AnimatedSprite.xml:68 doc/classes/AnimatedSprite3D.xml:50
msgid ""
@@ -4768,7 +4779,7 @@ msgstr ""
#: doc/classes/AnimatedSprite.xml:73 doc/classes/AnimatedSprite3D.xml:55
msgid "Emitted when [member frame] changed."
-msgstr ""
+msgstr "Emitido quando [member frame] muda."
#: doc/classes/AnimatedSprite3D.xml:4
msgid ""
@@ -4922,7 +4933,7 @@ msgstr "https://docs.godotengine.org/en/latest/tutorials/animation/index.html"
#: doc/classes/Animation.xml:28
msgid "Adds a track to the Animation."
-msgstr ""
+msgstr "Adiciona uma trilha à Animação."
#: doc/classes/Animation.xml:36
msgid ""
@@ -5130,7 +5141,7 @@ msgstr ""
#: doc/classes/Animation.xml:317
msgid "Gets the type of a track."
-msgstr ""
+msgstr "Obtém o tipo de uma trilha."
#: doc/classes/Animation.xml:327
msgid "Insert a generic key in a given track."
@@ -5149,7 +5160,7 @@ msgstr ""
#: doc/classes/Animation.xml:348
msgid "Moves a track down."
-msgstr ""
+msgstr "Move uma trilha para baixo."
#: doc/classes/Animation.xml:356
msgid ""
@@ -5159,7 +5170,7 @@ msgstr ""
#: doc/classes/Animation.xml:363
msgid "Moves a track up."
-msgstr ""
+msgstr "Move uma trilha para cima."
#: doc/classes/Animation.xml:371
msgid "Removes a key by index in a given track."
@@ -5315,11 +5326,11 @@ msgstr ""
#: doc/classes/Animation.xml:552
msgid "Linear interpolation."
-msgstr ""
+msgstr "Interpolação linear."
#: doc/classes/Animation.xml:555
msgid "Cubic interpolation."
-msgstr ""
+msgstr "Interpolação cúbica."
#: doc/classes/Animation.xml:558
msgid "Update between keyframes."
@@ -5341,7 +5352,7 @@ msgstr ""
#: doc/classes/AnimationNode.xml:4
msgid "Base resource for [AnimationTree] nodes."
-msgstr ""
+msgstr "Recurso base para nós [AnimationTree]."
#: doc/classes/AnimationNode.xml:7
msgid ""
@@ -5565,7 +5576,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -5879,18 +5890,20 @@ msgid ""
"Returns [code]true[/code] if a sub-node with specified [code]name[/code] "
"exists."
msgstr ""
+"Retorna [code]true[/code] se um subnó com um [code]name[/code] especificado "
+"existe."
#: doc/classes/AnimationNodeBlendTree.xml:64
msgid "Removes a sub-node."
-msgstr ""
+msgstr "Remove um subnó."
#: doc/classes/AnimationNodeBlendTree.xml:72
msgid "Changes the name of a sub-node."
-msgstr ""
+msgstr "Muda o nome de um subnó."
#: doc/classes/AnimationNodeBlendTree.xml:80
msgid "Modifies the position of a sub-node."
-msgstr ""
+msgstr "Modifica a posição de um subnó."
#: doc/classes/AnimationNodeBlendTree.xml:86
msgid "The global offset of all sub-nodes."
@@ -6144,7 +6157,7 @@ msgstr ""
#: doc/classes/AnimationNodeStateMachineTransition.xml:29
msgid "The transition type."
-msgstr ""
+msgstr "O tipo de transição."
#: doc/classes/AnimationNodeStateMachineTransition.xml:32
msgid "The time to cross-fade between this state and the next."
@@ -6473,11 +6486,11 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:234
msgid "Notifies when an animation finished playing."
-msgstr ""
+msgstr "Notifica quando uma animação termina de reproduzir."
#: doc/classes/AnimationPlayer.xml:240
msgid "Notifies when an animation starts playing."
-msgstr ""
+msgstr "Notifica quando uma animação começa a reproduzir."
#: doc/classes/AnimationPlayer.xml:245
msgid ""
@@ -6738,7 +6751,7 @@ msgstr ""
#: doc/classes/AnimationTreePlayer.xml:188
msgid "Check if a node exists (by name)."
-msgstr ""
+msgstr "Checa se um nó existe (pelo nome)."
#: doc/classes/AnimationTreePlayer.xml:195
msgid ""
@@ -6851,7 +6864,7 @@ msgstr "Retorna o nome do nó em [code]idx[/code]."
#: doc/classes/AnimationTreePlayer.xml:357
msgid "Resets this [AnimationTreePlayer]."
-msgstr ""
+msgstr "Reseta este [AnimationTreePlayer]."
#: doc/classes/AnimationTreePlayer.xml:364
#, fuzzy
@@ -6964,7 +6977,7 @@ msgstr ""
#: doc/classes/AnimationTreePlayer.xml:478
msgid "Animation node."
-msgstr ""
+msgstr "Nó de animação."
#: doc/classes/AnimationTreePlayer.xml:481
msgid "OneShot node."
@@ -6976,15 +6989,15 @@ msgstr ""
#: doc/classes/AnimationTreePlayer.xml:487
msgid "Blend2 node."
-msgstr ""
+msgstr "Nó Blend2."
#: doc/classes/AnimationTreePlayer.xml:490
msgid "Blend3 node."
-msgstr ""
+msgstr "Nó Blend3."
#: doc/classes/AnimationTreePlayer.xml:493
msgid "Blend4 node."
-msgstr ""
+msgstr "Nó Blend4."
#: doc/classes/AnimationTreePlayer.xml:496
msgid "TimeScale node."
@@ -6996,7 +7009,7 @@ msgstr ""
#: doc/classes/AnimationTreePlayer.xml:502
msgid "Transition node."
-msgstr ""
+msgstr "Nó de transição."
#: doc/classes/Area.xml:4
msgid "3D area for detection and physics and audio influence."
@@ -8251,11 +8264,11 @@ msgstr ""
#: doc/classes/ARVRController.xml:76
msgid "Emitted when a button on this controller is pressed."
-msgstr ""
+msgstr "Emitido quando um botão é pressionado neste controle."
#: doc/classes/ARVRController.xml:82
msgid "Emitted when a button on this controller is released."
-msgstr ""
+msgstr "Emitido quando um botão é solto neste controle."
#: doc/classes/ARVRController.xml:88
msgid ""
@@ -8338,7 +8351,7 @@ msgstr ""
#: doc/classes/ARVRInterface.xml:63
msgid "Turns the interface off."
-msgstr ""
+msgstr "Desliga a interface."
#: doc/classes/ARVRInterface.xml:69
msgid "On an AR interface, [code]true[/code] if anchor detection is enabled."
@@ -8666,7 +8679,7 @@ msgstr ""
#: doc/classes/ARVRServer.xml:120
msgid "Removes this interface."
-msgstr ""
+msgstr "Remove esta interface."
#: doc/classes/ARVRServer.xml:127
msgid "Removes this positional tracker."
@@ -8684,11 +8697,11 @@ msgstr ""
#: doc/classes/ARVRServer.xml:143
msgid "Emitted when a new interface has been added."
-msgstr ""
+msgstr "Emitido quando uma nova interface é adicionada."
#: doc/classes/ARVRServer.xml:149
msgid "Emitted when an interface is removed."
-msgstr ""
+msgstr "Emitido quando uma interface é removida."
#: doc/classes/ARVRServer.xml:157
msgid ""
@@ -9412,7 +9425,7 @@ msgstr ""
#: doc/classes/AudioEffectChorus.xml:105 doc/classes/AudioEffectChorus.xml:123
#: doc/classes/AudioEffectChorus.xml:141 doc/classes/AudioEffectChorus.xml:159
msgid "The voice's volume."
-msgstr ""
+msgstr "O volume da voz."
#: doc/classes/AudioEffectChorus.xml:108 doc/classes/AudioEffectChorus.xml:126
#: doc/classes/AudioEffectChorus.xml:144 doc/classes/AudioEffectChorus.xml:162
@@ -9426,7 +9439,7 @@ msgstr ""
#: doc/classes/AudioEffectChorus.xml:168
msgid "The amount of voices in the effect."
-msgstr ""
+msgstr "A quantidade de vozes no efeito."
#: doc/classes/AudioEffectChorus.xml:171
msgid "The effect's processed signal."
@@ -9592,7 +9605,7 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml:18
msgid "Distortion power. Value can range from 0 to 1."
-msgstr ""
+msgstr "Poder de distorção. O valor pode variar de 0 a 1."
#: doc/classes/AudioEffectDistortion.xml:21
msgid ""
@@ -9602,7 +9615,7 @@ msgstr ""
#: doc/classes/AudioEffectDistortion.xml:24
msgid "Distortion type."
-msgstr ""
+msgstr "Tipo de distorção."
#: doc/classes/AudioEffectDistortion.xml:27
msgid ""
@@ -10323,7 +10336,7 @@ msgstr ""
#: doc/classes/AudioServer.xml:321
msgid "Emitted when the [AudioBusLayout] changes."
-msgstr ""
+msgstr "Emitido quando o [AudioBusLayout] muda."
#: doc/classes/AudioServer.xml:327
msgid "Two or fewer speakers were detected."
@@ -10524,7 +10537,7 @@ msgstr ""
#: doc/classes/AudioStreamPlayer.xml:48 doc/classes/AudioStreamPlayer2D.xml:44
#: doc/classes/AudioStreamPlayer3D.xml:45
msgid "Stops the audio."
-msgstr ""
+msgstr "Para o áudio."
#: doc/classes/AudioStreamPlayer.xml:54 doc/classes/AudioStreamPlayer2D.xml:56
msgid "If [code]true[/code], audio plays when added to scene tree."
@@ -10550,7 +10563,7 @@ msgstr ""
#: doc/classes/AudioStreamPlayer.xml:66 doc/classes/AudioStreamPlayer2D.xml:68
#: doc/classes/AudioStreamPlayer3D.xml:94
msgid "If [code]true[/code], audio is playing."
-msgstr ""
+msgstr "Se [code]true[/code], o áudio está sendo reproduzido."
#: doc/classes/AudioStreamPlayer.xml:69 doc/classes/AudioStreamPlayer2D.xml:71
msgid "The [AudioStream] object to be played."
@@ -10564,20 +10577,20 @@ msgstr ""
#: doc/classes/AudioStreamPlayer.xml:75
msgid "Volume of sound, in dB."
-msgstr ""
+msgstr "Volume do som, em dB."
#: doc/classes/AudioStreamPlayer.xml:81 doc/classes/AudioStreamPlayer2D.xml:83
#: doc/classes/AudioStreamPlayer3D.xml:112
msgid "Emitted when the audio stops playing."
-msgstr ""
+msgstr "Emitido quando o áudio para de reproduzir."
#: doc/classes/AudioStreamPlayer.xml:87
msgid "The audio will be played only on the first channel."
-msgstr ""
+msgstr "O áudio será tocado somente no primeiro canal."
#: doc/classes/AudioStreamPlayer.xml:90
msgid "The audio will be played on all surround channels."
-msgstr ""
+msgstr "O áudio será reproduzido em todos os canais surround."
#: doc/classes/AudioStreamPlayer.xml:93
msgid ""
@@ -10586,7 +10599,7 @@ msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml:4
msgid "Plays positional sound in 2D space."
-msgstr ""
+msgstr "Reproduz um som posicional em espaço 2D."
#: doc/classes/AudioStreamPlayer2D.xml:7
msgid ""
@@ -10635,7 +10648,7 @@ msgstr ""
#: doc/classes/AudioStreamPlayer3D.xml:4
msgid "Plays positional sound in 3D space."
-msgstr ""
+msgstr "Reproduz um som posicional em espaço 3D."
#: doc/classes/AudioStreamPlayer3D.xml:7
msgid ""
@@ -10888,11 +10901,11 @@ msgstr ""
#: doc/classes/AudioStreamSample.xml:50
msgid "8-bit audio codec."
-msgstr ""
+msgstr "Codec de áudio 8-bits."
#: doc/classes/AudioStreamSample.xml:53
msgid "16-bit audio codec."
-msgstr ""
+msgstr "Codec de áudio 16-bits."
#: doc/classes/AudioStreamSample.xml:56
msgid "Audio is compressed using IMA ADPCM."
@@ -10900,7 +10913,7 @@ msgstr ""
#: doc/classes/AudioStreamSample.xml:59
msgid "Audio does not loop."
-msgstr ""
+msgstr "O áudio não repete."
#: doc/classes/AudioStreamSample.xml:62
msgid ""
@@ -10975,17 +10988,21 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10994,24 +11011,24 @@ msgid ""
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -11025,62 +11042,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -11088,35 +11105,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -11124,13 +11141,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -11142,78 +11159,78 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
-msgstr ""
+msgstr "Atualmente inutilizado."
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
#, fuzzy
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr "Retorna o arco-tangente dos parâmetros."
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:131
+#: doc/classes/BakedLightmap.xml:132
msgid ""
"Returns if lightmapper can't be created. Unless you are using a custom "
"lightmapper, please report this as bug."
msgstr ""
-#: doc/classes/BakedLightmap.xml:134
+#: doc/classes/BakedLightmap.xml:135
msgid ""
"There is no root node to start baking from. Either provide [code]from_node[/"
"code] argument or attach this node to a parent that should be used as root."
msgstr ""
-#: doc/classes/BakedLightmap.xml:137
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:140
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:143
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:146
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -11305,7 +11322,7 @@ msgstr ""
#: doc/classes/BaseButton.xml:62
msgid "[ButtonGroup] associated to the button."
-msgstr ""
+msgstr "[ButtonGroup] associado ao botão."
#: doc/classes/BaseButton.xml:65
msgid ""
@@ -11344,11 +11361,11 @@ msgstr ""
#: doc/classes/BaseButton.xml:85
msgid "Emitted when the button starts being held down."
-msgstr ""
+msgstr "Emitido quando um botão começa a ser pressionado."
#: doc/classes/BaseButton.xml:90
msgid "Emitted when the button stops being held down."
-msgstr ""
+msgstr "Emitido quando um botão para de ser pressionado."
#: doc/classes/BaseButton.xml:95
msgid ""
@@ -11670,8 +11687,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -11953,7 +11973,7 @@ msgstr ""
#: doc/classes/Button.xml:4
msgid "Standard themed Button."
-msgstr ""
+msgstr "Botão temático padrão."
#: doc/classes/Button.xml:7
msgid ""
@@ -12022,15 +12042,15 @@ msgstr ""
#: doc/classes/Button.xml:51
msgid "Align the text to the left."
-msgstr ""
+msgstr "Alinha o texto pela esquerda."
#: doc/classes/Button.xml:54
msgid "Align the text to the center."
-msgstr ""
+msgstr "Alinha o texto pelo centro."
#: doc/classes/Button.xml:57
msgid "Align the text to the right."
-msgstr ""
+msgstr "Alinha o texto pela direita."
#: doc/classes/Button.xml:62
msgid "[StyleBox] used when the [Button] is disabled."
@@ -12049,7 +12069,7 @@ msgstr ""
#: doc/classes/Button.xml:71
msgid "Default text [Color] of the [Button]."
-msgstr ""
+msgstr "[Color] do texto padrão do [Button]."
#: doc/classes/Button.xml:74
msgid "Text [Color] used when the [Button] is disabled."
@@ -12088,7 +12108,7 @@ msgstr ""
#: doc/classes/ButtonGroup.xml:4
msgid "Group of Buttons."
-msgstr ""
+msgstr "Grupo de botões."
#: doc/classes/ButtonGroup.xml:7
msgid ""
@@ -12109,7 +12129,7 @@ msgstr ""
#: doc/classes/ButtonGroup.xml:33
msgid "Emitted when one of the buttons of the group is pressed."
-msgstr ""
+msgstr "Emitido quando um dos botões do grupo é pressionado."
#: doc/classes/Camera.xml:4
msgid "Camera node, displays from a point of view."
@@ -12396,7 +12416,7 @@ msgstr ""
#: doc/classes/Camera2D.xml:4
msgid "Camera node for 2D scenes."
-msgstr ""
+msgstr "Nó de câmera para cenas 2D."
#: doc/classes/Camera2D.xml:7
msgid ""
@@ -12441,7 +12461,7 @@ msgstr ""
#: doc/classes/Camera2D.xml:38
msgid "Returns the camera position."
-msgstr ""
+msgstr "Retorna a posição da câmera."
#: doc/classes/Camera2D.xml:44
msgid ""
@@ -12550,6 +12570,7 @@ msgstr ""
msgid ""
"If [code]true[/code], draws the camera's limits rectangle in the editor."
msgstr ""
+"Se [code]true[/code], desenha o retângulo dos limites da câmera no editor."
#: doc/classes/Camera2D.xml:126
msgid ""
@@ -12716,7 +12737,7 @@ msgstr ""
#: doc/classes/CameraFeed.xml:54
msgid "Unspecified position."
-msgstr ""
+msgstr "Posição não especificada."
#: doc/classes/CameraFeed.xml:57
msgid "Camera is mounted at the front of the device."
@@ -12756,7 +12777,7 @@ msgstr ""
#: doc/classes/CameraServer.xml:43
msgid "Removes a [CameraFeed]."
-msgstr ""
+msgstr "Remove uma [CameraFeed]."
#: doc/classes/CameraServer.xml:51
msgid "Emitted when a [CameraFeed] is added (e.g. webcam is plugged in)."
@@ -12811,7 +12832,7 @@ msgstr ""
#: doc/classes/CanvasItem.xml:4
msgid "Base class of anything 2D."
-msgstr ""
+msgstr "Classe base de qualquer coisa 2D."
#: doc/classes/CanvasItem.xml:7
msgid ""
@@ -12874,7 +12895,7 @@ msgstr ""
#: doc/classes/CanvasItem.xml:57
msgid "Draws a colored circle."
-msgstr ""
+msgstr "Desenha um círculo colorido."
#: doc/classes/CanvasItem.xml:69
msgid "Draws a colored polygon of any amount of points, convex or concave."
@@ -13023,7 +13044,7 @@ msgstr ""
#: doc/classes/CanvasItem.xml:287
msgid "Returns the global position of the mouse."
-msgstr ""
+msgstr "Retorna a posição global do mouse."
#: doc/classes/CanvasItem.xml:293
msgid "Returns the global transform matrix of this item."
@@ -13136,7 +13157,7 @@ msgstr ""
#: doc/classes/CanvasItem.xml:418
msgid "The color applied to textures on this [CanvasItem]."
-msgstr ""
+msgstr "A cor aplicada às texturas neste [CanvasItem]."
#: doc/classes/CanvasItem.xml:421
msgid ""
@@ -13146,11 +13167,11 @@ msgstr ""
#: doc/classes/CanvasItem.xml:424
msgid "If [code]true[/code], the object draws behind its parent."
-msgstr ""
+msgstr "Se [code]true[/code], o objeto é desenhado por trás de seu pai."
#: doc/classes/CanvasItem.xml:427
msgid "If [code]true[/code], the object draws on top of its parent."
-msgstr ""
+msgstr "Se [code]true[/code], o objeto é desenhado por cima de seu pai."
#: doc/classes/CanvasItem.xml:430
msgid ""
@@ -13249,7 +13270,7 @@ msgstr ""
#: doc/classes/CanvasItemMaterial.xml:4
msgid "A material for [CanvasItem]s."
-msgstr ""
+msgstr "Um material para [CanvasItem]s."
#: doc/classes/CanvasItemMaterial.xml:7
msgid ""
@@ -13437,11 +13458,11 @@ msgstr ""
#: doc/classes/CapsuleShape.xml:4 doc/classes/CapsuleShape.xml:7
msgid "Capsule shape for collisions."
-msgstr ""
+msgstr "Formato de cápsula para colisões."
#: doc/classes/CapsuleShape.xml:16 doc/classes/CapsuleShape2D.xml:15
msgid "The capsule's height."
-msgstr ""
+msgstr "A altura da cápsula."
#: doc/classes/CapsuleShape.xml:19 doc/classes/CapsuleShape2D.xml:18
msgid "The capsule's radius."
@@ -13449,11 +13470,11 @@ msgstr ""
#: doc/classes/CapsuleShape2D.xml:4 doc/classes/CapsuleShape2D.xml:7
msgid "Capsule shape for 2D collisions."
-msgstr ""
+msgstr "Formato de cápsula para colisões 2D."
#: doc/classes/CenterContainer.xml:4
msgid "Keeps children controls centered."
-msgstr ""
+msgstr "Mantém os controles dos filhos centralizados."
#: doc/classes/CenterContainer.xml:7
msgid ""
@@ -13765,7 +13786,7 @@ msgstr ""
#: doc/classes/CircleShape2D.xml:4
msgid "Circular shape for 2D collisions."
-msgstr ""
+msgstr "Formato circular para colisões 2D."
#: doc/classes/CircleShape2D.xml:7
msgid ""
@@ -13902,7 +13923,7 @@ msgstr ""
#: doc/classes/ClassDB.xml:162
msgid "Returns the names of all the classes available."
-msgstr ""
+msgstr "Retorna os nomes de todas as classes disponíveis."
#: doc/classes/ClassDB.xml:169
msgid ""
@@ -14007,7 +14028,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml:4
msgid "Base node for collision objects."
-msgstr ""
+msgstr "Nó base para objetos de colisão."
#: doc/classes/CollisionObject.xml:7
msgid ""
@@ -14047,7 +14068,7 @@ msgstr ""
#: doc/classes/CollisionObject.xml:47 doc/classes/CollisionObject2D.xml:45
msgid "Returns the object's [RID]."
-msgstr ""
+msgstr "Retorna o [RID] do objeto."
#: doc/classes/CollisionObject.xml:53 doc/classes/CollisionObject2D.xml:58
msgid ""
@@ -14178,7 +14199,7 @@ msgstr ""
#: doc/classes/CollisionObject2D.xml:4
msgid "Base node for 2D collision objects."
-msgstr ""
+msgstr "Nó base para objetos de colisão 2D."
#: doc/classes/CollisionObject2D.xml:7
msgid ""
@@ -14316,7 +14337,7 @@ msgstr ""
#: doc/classes/CollisionPolygon.xml:18
msgid "If [code]true[/code], no collision will be produced."
-msgstr ""
+msgstr "Se [code]true[/code], não se produzirá colisões."
#: doc/classes/CollisionPolygon.xml:21
msgid ""
@@ -14336,7 +14357,7 @@ msgstr ""
#: doc/classes/CollisionPolygon2D.xml:4
msgid "Defines a 2D collision polygon."
-msgstr ""
+msgstr "Define um polígono de colisão 2D."
#: doc/classes/CollisionPolygon2D.xml:7
msgid ""
@@ -14823,7 +14844,7 @@ msgstr ""
#: doc/classes/Color.xml:298
msgid "Black color."
-msgstr ""
+msgstr "Cor Preta."
#: doc/classes/Color.xml:301
msgid "Blanche almond color."
@@ -14831,7 +14852,7 @@ msgstr ""
#: doc/classes/Color.xml:304
msgid "Blue color."
-msgstr ""
+msgstr "Cor azul."
#: doc/classes/Color.xml:307
msgid "Blue violet color."
@@ -14839,7 +14860,7 @@ msgstr ""
#: doc/classes/Color.xml:310
msgid "Brown color."
-msgstr ""
+msgstr "Cor marrom."
#: doc/classes/Color.xml:313
msgid "Burly wood color."
@@ -14987,7 +15008,7 @@ msgstr ""
#: doc/classes/Color.xml:421
msgid "Gold color."
-msgstr ""
+msgstr "Cor dourada."
#: doc/classes/Color.xml:424
msgid "Goldenrod color."
@@ -14995,11 +15016,11 @@ msgstr ""
#: doc/classes/Color.xml:427
msgid "Gray color."
-msgstr ""
+msgstr "Cor cinza."
#: doc/classes/Color.xml:430
msgid "Green color."
-msgstr ""
+msgstr "Cor verde."
#: doc/classes/Color.xml:433
msgid "Green yellow color."
@@ -15047,7 +15068,7 @@ msgstr ""
#: doc/classes/Color.xml:466
msgid "Light blue color."
-msgstr ""
+msgstr "Cor azul claro."
#: doc/classes/Color.xml:469
msgid "Light coral color."
@@ -15111,7 +15132,7 @@ msgstr ""
#: doc/classes/Color.xml:514
msgid "Magenta color."
-msgstr ""
+msgstr "Cor magenta."
#: doc/classes/Color.xml:517
msgid "Maroon color."
@@ -15231,7 +15252,7 @@ msgstr ""
#: doc/classes/Color.xml:604
msgid "Pink color."
-msgstr ""
+msgstr "Cor rosa."
#: doc/classes/Color.xml:607
msgid "Plum color."
@@ -15243,7 +15264,7 @@ msgstr ""
#: doc/classes/Color.xml:613
msgid "Purple color."
-msgstr ""
+msgstr "Cor roxa."
#: doc/classes/Color.xml:616
msgid "Rebecca purple color."
@@ -15251,7 +15272,7 @@ msgstr ""
#: doc/classes/Color.xml:619
msgid "Red color."
-msgstr ""
+msgstr "Cor vermelha."
#: doc/classes/Color.xml:622
msgid "Rosy brown color."
@@ -15287,7 +15308,7 @@ msgstr ""
#: doc/classes/Color.xml:646
msgid "Silver color."
-msgstr ""
+msgstr "Cor prata."
#: doc/classes/Color.xml:649
msgid "Sky blue color."
@@ -15363,7 +15384,7 @@ msgstr ""
#: doc/classes/Color.xml:703
msgid "White color."
-msgstr ""
+msgstr "Cor branca."
#: doc/classes/Color.xml:706
msgid "White smoke color."
@@ -15371,7 +15392,7 @@ msgstr ""
#: doc/classes/Color.xml:709
msgid "Yellow color."
-msgstr ""
+msgstr "Cor amarela."
#: doc/classes/Color.xml:712
msgid "Yellow green color."
@@ -15446,7 +15467,7 @@ msgstr ""
#: doc/classes/ColorPicker.xml:65
msgid "Emitted when the color is changed."
-msgstr ""
+msgstr "Emitido quando a cor muda."
#: doc/classes/ColorPicker.xml:71
msgid "Emitted when a preset is added."
@@ -15531,7 +15552,7 @@ msgstr ""
#: doc/classes/ColorPickerButton.xml:44
msgid "Emitted when the color changes."
-msgstr ""
+msgstr "Emitido quando a cor muda."
#: doc/classes/ColorPickerButton.xml:49
msgid ""
@@ -15541,7 +15562,7 @@ msgstr ""
#: doc/classes/ColorPickerButton.xml:54
msgid "Emitted when the [ColorPicker] is closed."
-msgstr ""
+msgstr "Emitido quando o [ColorPicker] é fechado."
#: doc/classes/ColorPickerButton.xml:62
msgid "The background of the color preview rect on the button."
@@ -15603,7 +15624,7 @@ msgstr ""
#: doc/classes/ColorRect.xml:4
msgid "Colored rectangle."
-msgstr ""
+msgstr "Retângulo colorido."
#: doc/classes/ColorRect.xml:7
msgid ""
@@ -15922,7 +15943,7 @@ msgstr ""
#: doc/classes/Container.xml:4
msgid "Base node for containers."
-msgstr ""
+msgstr "Nó base para os containers."
#: doc/classes/Container.xml:7
msgid ""
@@ -15945,7 +15966,7 @@ msgstr ""
#: doc/classes/Container.xml:31
msgid "Emitted when sorting the children is needed."
-msgstr ""
+msgstr "Emitido quando se é necessário organizar os filhos."
#: doc/classes/Container.xml:37
msgid ""
@@ -16359,7 +16380,7 @@ msgstr ""
#: doc/classes/Control.xml:353
msgid "Returns the rotation (in radians)."
-msgstr ""
+msgstr "Retorna a rotação (em radianos)."
#: doc/classes/Control.xml:361
msgid ""
@@ -16879,6 +16900,8 @@ msgid ""
"The node's global position, relative to the world (usually to the top-left "
"corner of the window)."
msgstr ""
+"A posição global do nó, em relação ao mundo (geralmente no canto superior "
+"esquerdo da janela)."
#: doc/classes/Control.xml:780
msgid ""
@@ -16963,19 +16986,19 @@ msgstr ""
#: doc/classes/Control.xml:815
msgid "Emitted when the node gains keyboard focus."
-msgstr ""
+msgstr "Emitido quando o nó ganha foco do teclado."
#: doc/classes/Control.xml:820
msgid "Emitted when the node loses keyboard focus."
-msgstr ""
+msgstr "Emitido quando o nó perde foco do teclado."
#: doc/classes/Control.xml:826
msgid "Emitted when the node receives an [InputEvent]."
-msgstr ""
+msgstr "Emitido quando o nó recebe um [InputEvent]."
#: doc/classes/Control.xml:831
msgid "Emitted when the node's minimum size changes."
-msgstr ""
+msgstr "Emitido quando o tamanho mínimo do nó muda."
#: doc/classes/Control.xml:836
msgid "Emitted when a modal [Control] is closed. See [method show_modal]."
@@ -17002,7 +17025,7 @@ msgstr ""
#: doc/classes/Control.xml:853
msgid "Emitted when the control changes size."
-msgstr ""
+msgstr "Emitido quando o controle muda de tamanho."
#: doc/classes/Control.xml:858
msgid ""
@@ -17032,11 +17055,11 @@ msgstr ""
#: doc/classes/Control.xml:876
msgid "Sent when the mouse pointer enters the node."
-msgstr ""
+msgstr "Enviado quando o ponteiro do mouse entra no nó."
#: doc/classes/Control.xml:879
msgid "Sent when the mouse pointer exits the node."
-msgstr ""
+msgstr "Enviado quando o ponteiro do mouse sai do nó."
#: doc/classes/Control.xml:882
msgid "Sent when the node grabs focus."
@@ -17284,19 +17307,19 @@ msgstr ""
#: doc/classes/Control.xml:999
msgid "The control will be resized to its minimum size."
-msgstr ""
+msgstr "O controle será redimensionado ao seu tamanho mínimo."
#: doc/classes/Control.xml:1002
msgid "The control's width will not change."
-msgstr ""
+msgstr "A largura do controle não irá mudar."
#: doc/classes/Control.xml:1005
msgid "The control's height will not change."
-msgstr ""
+msgstr "A altura do controle não irá mudar."
#: doc/classes/Control.xml:1008
msgid "The control's size will not change."
-msgstr ""
+msgstr "O tamanho do controle não irá mudar."
#: doc/classes/Control.xml:1011
msgid ""
@@ -17482,7 +17505,7 @@ msgstr ""
#: doc/classes/CPUParticles.xml:52 doc/classes/CPUParticles2D.xml:53
msgid "Restarts the particle emitter."
-msgstr ""
+msgstr "Reinicia o emissor de partículas."
#: doc/classes/CPUParticles.xml:60 doc/classes/CPUParticles2D.xml:61
msgid "Sets the base value of the parameter specified by [enum Parameter]."
@@ -17556,7 +17579,7 @@ msgstr ""
#: doc/classes/CPUParticles.xml:121 doc/classes/CPUParticles2D.xml:122
#: doc/classes/ParticlesMaterial.xml:106
msgid "Particle animation speed."
-msgstr ""
+msgstr "Velocidade da animação das partículas."
#: doc/classes/CPUParticles.xml:124 doc/classes/CPUParticles2D.xml:125
msgid "Each particle's animation speed will vary along this [Curve]."
@@ -17967,15 +17990,17 @@ msgstr ""
#: doc/classes/CPUParticles.xml:346 doc/classes/CPUParticles2D.xml:326
msgid "Use with [method set_particle_flag] to set [member flag_align_y]."
-msgstr ""
+msgstr "Use com [method set_particle_flag] para definir [member flag_align_y]."
#: doc/classes/CPUParticles.xml:349
msgid "Use with [method set_particle_flag] to set [member flag_rotate_y]."
msgstr ""
+"Use com [method set_particle_flag] para definir [member flag_rotate_y]."
#: doc/classes/CPUParticles.xml:352
msgid "Use with [method set_particle_flag] to set [member flag_disable_z]."
msgstr ""
+"Use com [method set_particle_flag] para definir [member flag_disable_z]."
#: doc/classes/CPUParticles.xml:355 doc/classes/CPUParticles2D.xml:335
#: doc/classes/GeometryInstance.xml:109 doc/classes/ParticlesMaterial.xml:307
@@ -18022,7 +18047,7 @@ msgstr ""
#: doc/classes/CPUParticles2D.xml:4
msgid "CPU-based 2D particle emitter."
-msgstr ""
+msgstr "Emissor de partículas 2D baseado em CPU."
#: doc/classes/CPUParticles2D.xml:7
msgid ""
@@ -18103,6 +18128,8 @@ msgstr ""
#: doc/classes/CPUParticles2D.xml:276 doc/classes/Particles2D.xml:77
msgid "Particle texture. If [code]null[/code], particles will be squares."
msgstr ""
+"A textura das partículas. Se [code]null[/code], as partículas serão "
+"quadrados."
#: doc/classes/CPUParticles2D.xml:329 doc/classes/CPUParticles2D.xml:332
msgid "Present for consistency with 3D particle nodes, not used in 2D."
@@ -18116,7 +18143,7 @@ msgstr ""
#: doc/classes/CPUParticles2D.xml:344
msgid "Particles will be emitted in the area of a rectangle."
-msgstr ""
+msgstr "As partículas serão emitidas na área do retângulo."
#: doc/classes/Crypto.xml:4
msgid "Access to advanced cryptographic functionalities."
@@ -18348,7 +18375,7 @@ msgstr ""
#: modules/csg/doc_classes/CSGCylinder.xml:18
msgid "The height of the cylinder."
-msgstr ""
+msgstr "A altura do cilindro."
#: modules/csg/doc_classes/CSGCylinder.xml:21
msgid "The material used to render the cylinder."
@@ -18776,7 +18803,7 @@ msgstr ""
#: doc/classes/CubeMap.xml:15
msgid "Returns the [CubeMap]'s height."
-msgstr ""
+msgstr "Retorna a altura do [CubeMap]."
#: doc/classes/CubeMap.xml:22
msgid ""
@@ -18990,7 +19017,7 @@ msgstr ""
#: doc/classes/Curve.xml:4
msgid "A mathematic curve."
-msgstr ""
+msgstr "Uma curva matemática."
#: doc/classes/Curve.xml:7
msgid ""
@@ -19021,7 +19048,7 @@ msgstr ""
#: doc/classes/Curve.xml:38 doc/classes/Curve2D.xml:27
#: doc/classes/Curve3D.xml:27
msgid "Removes all points from the curve."
-msgstr ""
+msgstr "Remove todos os pontos da curva."
#: doc/classes/Curve.xml:44 doc/classes/Curve2D.xml:61
#: doc/classes/Curve3D.xml:74
@@ -19418,7 +19445,7 @@ msgstr ""
#: doc/classes/CurveTexture.xml:4
msgid "A texture that shows a curve."
-msgstr ""
+msgstr "Uma textura que exibe uma curva."
#: doc/classes/CurveTexture.xml:7
msgid ""
@@ -19432,7 +19459,7 @@ msgstr ""
#: doc/classes/CurveTexture.xml:18
msgid "The width of the texture."
-msgstr ""
+msgstr "A largura de uma textura."
#: doc/classes/CylinderMesh.xml:4
msgid "Class representing a cylindrical [PrimitiveMesh]."
@@ -19484,7 +19511,7 @@ msgstr ""
#: doc/classes/CylinderShape.xml:18
msgid "The cylinder's height."
-msgstr ""
+msgstr "A altura do cilindro."
#: doc/classes/CylinderShape.xml:21
msgid "The cylinder's radius."
@@ -20219,7 +20246,7 @@ msgstr ""
#: doc/classes/DynamicFont.xml:105
msgid "The font size in pixels."
-msgstr ""
+msgstr "O tamanho da fonte em pixels."
#: doc/classes/DynamicFont.xml:108
msgid ""
@@ -20602,15 +20629,15 @@ msgstr ""
#: doc/classes/EditorFileDialog.xml:72
msgid "Emitted when a directory is selected."
-msgstr ""
+msgstr "Emitido quando um diretório é selecionado."
#: doc/classes/EditorFileDialog.xml:78
msgid "Emitted when a file is selected."
-msgstr ""
+msgstr "Emitido quando um arquivo é selecionado."
#: doc/classes/EditorFileDialog.xml:84
msgid "Emitted when multiple files are selected."
-msgstr ""
+msgstr "Emitido quando múltiplos arquivos são selecionados."
#: doc/classes/EditorFileDialog.xml:90
msgid ""
@@ -21010,7 +21037,7 @@ msgstr ""
#: doc/classes/EditorInspector.xml:34
msgid "Emitted when a property is edited in the inspector."
-msgstr ""
+msgstr "Emitido quando uma propriedade é editada no inspetor."
#: doc/classes/EditorInspector.xml:40
msgid ""
@@ -21021,7 +21048,7 @@ msgstr ""
#: doc/classes/EditorInspector.xml:46
msgid "Emitted when a property is selected in the inspector."
-msgstr ""
+msgstr "Emitido quando uma propriedade é selecionada no inspetor."
#: doc/classes/EditorInspector.xml:53
msgid ""
@@ -21033,7 +21060,7 @@ msgstr ""
#: doc/classes/EditorInspector.xml:61
msgid "Emitted when a resource is selected in the inspector."
-msgstr ""
+msgstr "Emitido quando um recurso é selecionado no inspetor."
#: doc/classes/EditorInspector.xml:66
msgid ""
@@ -21254,7 +21281,7 @@ msgstr ""
#: doc/classes/EditorInterface.xml:164
msgid "Plays the currently active scene."
-msgstr ""
+msgstr "Reproduz a cena atualmente ativa."
#: doc/classes/EditorInterface.xml:171
msgid "Plays the scene specified by its filepath."
@@ -21262,7 +21289,7 @@ msgstr ""
#: doc/classes/EditorInterface.xml:177
msgid "Plays the main scene."
-msgstr ""
+msgstr "Reproduz a cena principal."
#: doc/classes/EditorInterface.xml:184
msgid "Reloads the scene at the given path."
@@ -21276,7 +21303,7 @@ msgstr ""
#: doc/classes/EditorInterface.xml:198
msgid "Saves the scene as a file at [code]path[/code]."
-msgstr ""
+msgstr "Salva a cena como um arquivo em [code]path[/code]."
#: doc/classes/EditorInterface.xml:205
msgid ""
@@ -21801,6 +21828,8 @@ msgid ""
"Emitted when user closes a scene. The argument is file path to a closed "
"scene."
msgstr ""
+"Emitido quando o usuário fecha uma cena. O argumento é um caminho de arquivo "
+"para uma cena fechada."
#: doc/classes/EditorPlugin.xml:553
msgid "Represents the size of the [enum DockSlot] enum."
@@ -21907,7 +21936,7 @@ msgstr ""
#: doc/classes/EditorProperty.xml:107
msgid "Emitted when a property was checked. Used internally."
-msgstr ""
+msgstr "Emitido quando uma propriedade é checada. Usado internamente."
#: doc/classes/EditorProperty.xml:113
msgid ""
@@ -21926,7 +21955,7 @@ msgstr ""
#: doc/classes/EditorProperty.xml:134
msgid "Emitted when selected. Used internally."
-msgstr ""
+msgstr "Emitido quando selecionado. Usado internamente."
#: doc/classes/EditorResourcePicker.xml:4
msgid "Godot editor's control for selecting [Resource] type properties."
@@ -22291,7 +22320,7 @@ msgstr ""
#: doc/classes/EditorSelection.xml:24
msgid "Clear the selection."
-msgstr ""
+msgstr "Limpa a seleção."
#: doc/classes/EditorSelection.xml:30
msgid "Gets the list of selected nodes."
@@ -22310,7 +22339,7 @@ msgstr ""
#: doc/classes/EditorSelection.xml:50
msgid "Emitted when the selection changes."
-msgstr ""
+msgstr "Emitido quando a seleção muda."
#: doc/classes/EditorSettings.xml:4
msgid "Object that holds the project-independent editor settings."
@@ -22426,7 +22455,7 @@ msgstr ""
#: doc/classes/EditorSettings.xml:121
msgid "Sets the list of favorite files and directories for this project."
-msgstr ""
+msgstr "Define a lista de arquivos e diretórios favoritos para este projeto."
#: doc/classes/EditorSettings.xml:130
msgid ""
@@ -22941,7 +22970,7 @@ msgstr ""
#: doc/classes/Engine.xml:70
msgid "Returns Godot license text."
-msgstr ""
+msgstr "Retorna o texto da licença do Godot."
#: doc/classes/Engine.xml:76
msgid "Returns the main loop object (see [MainLoop] and [SceneTree])."
@@ -23189,7 +23218,7 @@ msgstr ""
#: doc/classes/Environment.xml:55
msgid "The ambient light's [Color]."
-msgstr ""
+msgstr "A [Color] da luz do ambiente."
#: doc/classes/Environment.xml:58
msgid ""
@@ -23842,7 +23871,7 @@ msgstr "Retorna a tangente do parâmetro."
#: doc/classes/ExternalTexture.xml:23
msgid "External texture size."
-msgstr ""
+msgstr "Tamanho da textura externa."
#: doc/classes/File.xml:4
msgid "Type to handle file reading and writing operations."
@@ -23996,7 +24025,7 @@ msgstr ""
#: doc/classes/File.xml:138
msgid "Returns the size of the file in bytes."
-msgstr ""
+msgstr "Retorna o tamanho do arquivo em bytes."
#: doc/classes/File.xml:144
msgid ""
@@ -24364,7 +24393,7 @@ msgstr ""
#: doc/classes/FileDialog.xml:85
msgid "Emitted when the user selects a directory."
-msgstr ""
+msgstr "Emitido quando o usuário seleciona um diretório."
#: doc/classes/FileDialog.xml:91
msgid ""
@@ -24374,7 +24403,7 @@ msgstr ""
#: doc/classes/FileDialog.xml:97
msgid "Emitted when the user selects multiple files."
-msgstr ""
+msgstr "Emitido quando o usuário seleciona múltiplos arquivos."
#: doc/classes/FileDialog.xml:103
msgid "The dialog allows selecting one, and only one file."
@@ -24416,7 +24445,7 @@ msgstr ""
#: doc/classes/FileDialog.xml:129
msgid "Custom icon for files."
-msgstr ""
+msgstr "Ãcone personalizado para arquivos."
#: doc/classes/FileDialog.xml:132
msgid "The color modulation applied to the file icon."
@@ -24430,7 +24459,7 @@ msgstr ""
#: doc/classes/FileDialog.xml:138
msgid "Custom icon for folders."
-msgstr ""
+msgstr "Ãcone personalizado para diretórios."
#: doc/classes/FileDialog.xml:141
msgid "The color modulation applied to the folder icon."
@@ -25752,21 +25781,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -25775,14 +25815,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -25792,36 +25836,36 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
#, fuzzy
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
@@ -25829,46 +25873,46 @@ msgstr ""
"Se [code]true[/code], os nós filhos são organizados, do contrário, a "
"organização é desabilitada."
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -26702,7 +26746,7 @@ msgstr ""
#: modules/gridmap/doc_classes/GridMap.xml:4
msgid "Node for 3D tile-based maps."
-msgstr ""
+msgstr "Nó para mapas 3D baseados em mosaicos."
#: modules/gridmap/doc_classes/GridMap.xml:7
msgid ""
@@ -27201,7 +27245,7 @@ msgstr ""
#: doc/classes/HSeparator.xml:4
msgid "Horizontal separator."
-msgstr ""
+msgstr "Separador horizontal."
#: doc/classes/HSeparator.xml:7
msgid ""
@@ -28390,11 +28434,11 @@ msgstr ""
#: doc/classes/Image.xml:152
msgid "Flips the image horizontally."
-msgstr ""
+msgstr "Inverte a imagem horizontalmente."
#: doc/classes/Image.xml:158
msgid "Flips the image vertically."
-msgstr ""
+msgstr "Inverte a imagem verticalmente."
#: doc/classes/Image.xml:165
msgid ""
@@ -28416,11 +28460,11 @@ msgstr "Retorna o cosseno do parâmetro."
#: doc/classes/Image.xml:178
msgid "Returns the image's format. See [enum Format] constants."
-msgstr ""
+msgstr "Retorna o formato da imagem. Veja os constantes [enum Format]."
#: doc/classes/Image.xml:184
msgid "Returns the image's height."
-msgstr ""
+msgstr "Retorna a altura da imagem."
#: doc/classes/Image.xml:191
msgid ""
@@ -28462,7 +28506,7 @@ msgstr ""
#: doc/classes/Image.xml:231
msgid "Returns the image's width."
-msgstr ""
+msgstr "Retorna a largura da imagem."
#: doc/classes/Image.xml:237
msgid "Returns [code]true[/code] if the image has generated mipmaps."
@@ -28947,7 +28991,7 @@ msgstr ""
#: doc/classes/Image.xml:574
msgid "Image does not have alpha."
-msgstr ""
+msgstr "A imagem não contém alfa."
#: doc/classes/Image.xml:577
msgid "Image stores alpha in a single bit."
@@ -28955,27 +28999,27 @@ msgstr ""
#: doc/classes/Image.xml:580
msgid "Image uses alpha."
-msgstr ""
+msgstr "A Imagem usa alpha."
#: doc/classes/Image.xml:583
msgid "Use S3TC compression."
-msgstr ""
+msgstr "Use a compressão S3TC."
#: doc/classes/Image.xml:586
msgid "Use PVRTC2 compression."
-msgstr ""
+msgstr "Use a compressão PVRTC2."
#: doc/classes/Image.xml:589
msgid "Use PVRTC4 compression."
-msgstr ""
+msgstr "Use a compressão PVRTC4."
#: doc/classes/Image.xml:592
msgid "Use ETC compression."
-msgstr ""
+msgstr "Use a compressão ETC."
#: doc/classes/Image.xml:595
msgid "Use ETC2 compression."
-msgstr ""
+msgstr "Use a compressão ETC2."
#: doc/classes/Image.xml:598
msgid ""
@@ -28995,7 +29039,7 @@ msgstr ""
#: doc/classes/ImageTexture.xml:4
msgid "A [Texture] based on an [Image]."
-msgstr ""
+msgstr "Uma [Texture] baseada em uma [Image]."
#: doc/classes/ImageTexture.xml:7
msgid ""
@@ -30111,7 +30155,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30556,7 +30602,7 @@ msgstr ""
#: doc/classes/ItemList.xml:35
msgid "Removes all items from the list."
-msgstr ""
+msgstr "Remove todos os itens da lista."
#: doc/classes/ItemList.xml:41
msgid ""
@@ -30860,7 +30906,7 @@ msgstr ""
#: doc/classes/ItemList.xml:398
msgid "Icon is drawn above the text."
-msgstr ""
+msgstr "O ícone é desenhado por cima do texto."
#: doc/classes/ItemList.xml:401
msgid "Icon is drawn to the left of the text."
@@ -30868,7 +30914,7 @@ msgstr ""
#: doc/classes/ItemList.xml:404
msgid "Only allow selecting a single item."
-msgstr ""
+msgstr "Permite que somente um item seja selecionado."
#: doc/classes/ItemList.xml:407
msgid "Allows selecting multiple items by holding Ctrl or Shift."
@@ -30895,11 +30941,11 @@ msgstr ""
#: doc/classes/ItemList.xml:424 doc/classes/Tree.xml:407
msgid "[Font] of the item's text."
-msgstr ""
+msgstr "[Font] do texto do item."
#: doc/classes/ItemList.xml:427 doc/classes/Tree.xml:410
msgid "Default text [Color] of the item."
-msgstr ""
+msgstr "[Color] padrão do texto do item."
#: doc/classes/ItemList.xml:430 doc/classes/Tree.xml:413
msgid "Text [Color] used when the item is selected."
@@ -30913,15 +30959,15 @@ msgstr ""
#: doc/classes/ItemList.xml:436
msgid "The horizontal spacing between items."
-msgstr ""
+msgstr "O espaço horizontal entre os itens."
#: doc/classes/ItemList.xml:439
msgid "The spacing between item's icon and text."
-msgstr ""
+msgstr "O espaço entre o ícone e o texto do item."
#: doc/classes/ItemList.xml:442
msgid "The vertical spacing between each line of text."
-msgstr ""
+msgstr "O espaço vertical entre cada linha de texto."
#: doc/classes/ItemList.xml:445
msgid ""
@@ -30936,7 +30982,7 @@ msgstr ""
#: doc/classes/ItemList.xml:451
msgid "The vertical spacing between items."
-msgstr ""
+msgstr "O espaço vertical entre os itens."
#: doc/classes/JavaScript.xml:4
msgid ""
@@ -31430,7 +31476,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -31495,22 +31542,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -31525,7 +31574,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -31533,19 +31582,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -31616,7 +31665,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -31674,7 +31724,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -31814,7 +31866,7 @@ msgstr ""
#: doc/classes/Label.xml:24
msgid "Returns the font size in pixels."
-msgstr ""
+msgstr "Retorna o tamanho da fonte em pixels."
#: doc/classes/Label.xml:30
msgid ""
@@ -31920,7 +31972,7 @@ msgstr ""
#: doc/classes/Label.xml:105
msgid "Default text [Color] of the [Label]."
-msgstr ""
+msgstr "[Color] padrão do texto do [Label]."
#: doc/classes/Label.xml:108
msgid "[Color] of the text's shadow effect."
@@ -32399,7 +32451,7 @@ msgstr ""
#: doc/classes/Line2D.xml:4
msgid "A 2D line."
-msgstr ""
+msgstr "Uma linha 2D."
#: doc/classes/Line2D.xml:7
msgid ""
@@ -32425,11 +32477,11 @@ msgstr ""
#: doc/classes/Line2D.xml:27
msgid "Removes all points from the line."
-msgstr ""
+msgstr "Remove todos os pontos da linha."
#: doc/classes/Line2D.xml:33
msgid "Returns the Line2D's amount of points."
-msgstr ""
+msgstr "Retorna a quantidade de pontos de uma Line2D."
#: doc/classes/Line2D.xml:40
msgid "Returns point [code]i[/code]'s position."
@@ -32509,7 +32561,7 @@ msgstr ""
#: doc/classes/Line2D.xml:95
msgid "The line's width."
-msgstr ""
+msgstr "A largura da linha."
#: doc/classes/Line2D.xml:98
msgid ""
@@ -32783,7 +32835,7 @@ msgstr ""
#: doc/classes/LineEdit.xml:185 doc/classes/TextEdit.xml:506
msgid "Emitted when the text changes."
-msgstr ""
+msgstr "Emitido quando o texto muda."
#: doc/classes/LineEdit.xml:191
msgid "Emitted when the user presses [constant KEY_ENTER] on the [LineEdit]."
@@ -32811,7 +32863,7 @@ msgstr ""
#: doc/classes/LineEdit.xml:212 doc/classes/TextEdit.xml:530
msgid "Copies the selected text."
-msgstr ""
+msgstr "Copia o texto selecionado."
#: doc/classes/LineEdit.xml:215
msgid ""
@@ -32867,7 +32919,7 @@ msgstr ""
#: doc/classes/LineEdit.xml:254
msgid "Default font color."
-msgstr ""
+msgstr "Cor padrão da fonte."
#: doc/classes/LineEdit.xml:257
msgid "Font color for selected text (inside the selection rectangle)."
@@ -33104,7 +33156,7 @@ msgstr ""
#: doc/classes/MainLoop.xml:57
msgid "Called before the program exits."
-msgstr ""
+msgstr "Chamada antes do programa fechar."
#: doc/classes/MainLoop.xml:65
msgid ""
@@ -33466,7 +33518,7 @@ msgstr ""
#: doc/classes/MenuButton.xml:58
msgid "Default text [Color] of the [MenuButton]."
-msgstr ""
+msgstr "[Color] padrão do texto do [MenuButton]."
#: doc/classes/MenuButton.xml:61
msgid "Text [Color] used when the [MenuButton] is disabled."
@@ -34097,7 +34149,7 @@ msgstr ""
#: doc/classes/MeshInstance2D.xml:29 doc/classes/MultiMeshInstance2D.xml:29
msgid "Emitted when the [member texture] is changed."
-msgstr ""
+msgstr "Emitido quando a [member texture] muda."
#: doc/classes/MeshLibrary.xml:4
msgid "Library of meshes."
@@ -34170,7 +34222,7 @@ msgstr ""
#: doc/classes/MeshLibrary.xml:101
msgid "Removes the item."
-msgstr ""
+msgstr "Remove o item."
#: doc/classes/MeshLibrary.xml:109
msgid "Sets the item's mesh."
@@ -35236,7 +35288,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -35625,11 +35677,11 @@ msgstr ""
#: doc/classes/NetworkedMultiplayerPeer.xml:59
msgid "Emitted when a connection attempt fails."
-msgstr ""
+msgstr "Emitido quando uma tentativa de conexão falha."
#: doc/classes/NetworkedMultiplayerPeer.xml:64
msgid "Emitted when a connection attempt succeeds."
-msgstr ""
+msgstr "Emitido quando uma tentativa de conexão tem sucesso."
#: doc/classes/NetworkedMultiplayerPeer.xml:70
msgid "Emitted by the server when a client connects."
@@ -35776,7 +35828,7 @@ msgstr ""
#: doc/classes/NinePatchRect.xml:61
msgid "Emitted when the node's texture changes."
-msgstr ""
+msgstr "Emitido quando a textura de um nó muda."
#: doc/classes/NinePatchRect.xml:67
msgid ""
@@ -36700,15 +36752,15 @@ msgstr ""
#: doc/classes/Node.xml:713
msgid "Emitted when the node is ready."
-msgstr ""
+msgstr "Emitido quando o nó está preparado."
#: doc/classes/Node.xml:718
msgid "Emitted when the node is renamed."
-msgstr ""
+msgstr "Emitido quando o nó é renomeado."
#: doc/classes/Node.xml:723
msgid "Emitted when the node enters the tree."
-msgstr ""
+msgstr "Emitido quando o nó entra na árvore."
#: doc/classes/Node.xml:728
msgid "Emitted after the node exits the tree and is no longer active."
@@ -37653,7 +37705,7 @@ msgstr ""
#: doc/classes/Object.xml:418
msgid "Emitted whenever the object's script is changed."
-msgstr ""
+msgstr "Emitido cada vez que o script do objeto muda."
#: doc/classes/Object.xml:424
msgid "Called right when the object is initialized. Not available in script."
@@ -38552,7 +38604,7 @@ msgstr "Retorna o número de nós nesta [SceneTree]."
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -38582,14 +38634,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -38599,7 +38651,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40489,7 +40541,7 @@ msgstr ""
#: doc/classes/Path.xml:22
msgid "Emitted when the [member curve] changes."
-msgstr ""
+msgstr "Emitido quando a [member curve] muda."
#: doc/classes/Path2D.xml:4
msgid "Contains a [Curve2D] path for [PathFollow2D] nodes to follow."
@@ -41117,17 +41169,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -41145,11 +41223,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -41344,7 +41422,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -42147,6 +42227,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -42164,7 +42262,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -42278,7 +42376,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -43564,7 +43664,7 @@ msgstr ""
#: doc/classes/Popup.xml:70
msgid "Emitted when a popup is hidden."
-msgstr ""
+msgstr "Emitido quando um popup é ocultado."
#: doc/classes/Popup.xml:76
msgid "Notification sent right after the popup is shown."
@@ -44320,7 +44420,7 @@ msgstr ""
#: doc/classes/ProceduralSky.xml:46
msgid "The sun's color."
-msgstr ""
+msgstr "A cor do sol."
#: doc/classes/ProceduralSky.xml:49
msgid ""
@@ -44399,11 +44499,11 @@ msgstr ""
#: doc/classes/ProgressBar.xml:33
msgid "The color of the text."
-msgstr ""
+msgstr "A cor do texto."
#: doc/classes/ProgressBar.xml:36
msgid "The color of the text's shadow."
-msgstr ""
+msgstr "A cor da sombra do texto."
#: doc/classes/ProjectSettings.xml:4
msgid "Contains global variables accessible from everywhere."
@@ -44827,24 +44927,30 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:282
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:285
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:288
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44854,7 +44960,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:291
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44864,27 +44970,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:294
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:297
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:300
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:303
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -44892,81 +44998,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:306
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:309
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:312
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:315
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:318
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:321
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:324
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:327
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:330
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:333
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:336
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:339
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:342
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -44974,109 +45080,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:345
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:348
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:351
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:354
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:357
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:360
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:363
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:366
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:369
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:372
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:375
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:378
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:381
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:384
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:387
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:390
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:393
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:396
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:399
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -45087,91 +45193,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:404
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:407
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:410
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:413
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:416
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:419
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:422
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:425
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:428
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:431
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:434
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:437
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:440
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:443
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:446
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:449
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:452
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -45180,13 +45286,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:456
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:459
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -45196,7 +45302,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:464
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -45204,19 +45310,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:469
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:473
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:477
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -45230,45 +45336,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:482
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:485
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:489
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:492
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:495
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:498
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:501
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -45277,7 +45383,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:504
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -45288,7 +45394,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:508
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -45304,14 +45410,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:516
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:519
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -45319,49 +45425,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:522
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:525
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:530
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:533
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:536
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:539
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:542
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:545
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:548
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -45370,7 +45476,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:552
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45378,7 +45484,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:556
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45386,7 +45492,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:560
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -45396,7 +45502,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:564
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -45405,7 +45511,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:568
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -45414,7 +45520,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:572
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -45424,7 +45530,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:576
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45432,7 +45538,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:580
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -45442,7 +45548,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:584
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -45452,7 +45558,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:588
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45460,7 +45566,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:592
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -45469,7 +45575,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:596
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45477,7 +45583,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:600
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -45489,477 +45595,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:606
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:609
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:612
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:615
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
-msgstr ""
+msgstr "Nome opcional para a camada 1 da física 2D."
-#: doc/classes/ProjectSettings.xml:618
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
-msgstr ""
+msgstr "Nome opcional para a camada 10 da física 2D."
-#: doc/classes/ProjectSettings.xml:621
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
-msgstr ""
+msgstr "Nome opcional para a camada 11 da física 2D."
-#: doc/classes/ProjectSettings.xml:624
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
-msgstr ""
+msgstr "Nome opcional para a camada 12 da física 2D."
-#: doc/classes/ProjectSettings.xml:627
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
-msgstr ""
+msgstr "Nome opcional para a camada 13 da física 2D."
-#: doc/classes/ProjectSettings.xml:630
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
-msgstr ""
+msgstr "Nome opcional para a camada 14 da física 2D."
-#: doc/classes/ProjectSettings.xml:633
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
-msgstr ""
+msgstr "Nome opcional para a camada 15 da física 2D."
-#: doc/classes/ProjectSettings.xml:636
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
-msgstr ""
+msgstr "Nome opcional para a camada 16 da física 2D."
-#: doc/classes/ProjectSettings.xml:639
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
-msgstr ""
+msgstr "Nome opcional para a camada 17 da física 2D."
-#: doc/classes/ProjectSettings.xml:642
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
-msgstr ""
+msgstr "Nome opcional para a camada 18 da física 2D."
-#: doc/classes/ProjectSettings.xml:645
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
-msgstr ""
+msgstr "Nome opcional para a camada 19 da física 2D."
-#: doc/classes/ProjectSettings.xml:648
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
-msgstr ""
+msgstr "Nome opcional para a camada 2 da física 2D."
-#: doc/classes/ProjectSettings.xml:651
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
-msgstr ""
+msgstr "Nome opcional para a camada 20 da física 2D."
-#: doc/classes/ProjectSettings.xml:654
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
-msgstr ""
+msgstr "Nome opcional para a camada 21 da física 2D."
-#: doc/classes/ProjectSettings.xml:657
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
-msgstr ""
+msgstr "Nome opcional para a camada 22 da física 2D."
-#: doc/classes/ProjectSettings.xml:660
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
-msgstr ""
+msgstr "Nome opcional para a camada 23 da física 2D."
-#: doc/classes/ProjectSettings.xml:663
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
-msgstr ""
+msgstr "Nome opcional para a camada 24 da física 2D."
-#: doc/classes/ProjectSettings.xml:666
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
-msgstr ""
+msgstr "Nome opcional para a camada 25 da física 2D."
-#: doc/classes/ProjectSettings.xml:669
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
-msgstr ""
+msgstr "Nome opcional para a camada 26 da física 2D."
-#: doc/classes/ProjectSettings.xml:672
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
-msgstr ""
+msgstr "Nome opcional para a camada 27 da física 2D."
-#: doc/classes/ProjectSettings.xml:675
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
-msgstr ""
+msgstr "Nome opcional para a camada 28 da física 2D."
-#: doc/classes/ProjectSettings.xml:678
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
-msgstr ""
+msgstr "Nome opcional para a camada 29 da física 2D."
-#: doc/classes/ProjectSettings.xml:681
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
-msgstr ""
+msgstr "Nome opcional para a camada 3 da física 2D."
-#: doc/classes/ProjectSettings.xml:684
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
-msgstr ""
+msgstr "Nome opcional para a camada 30 da física 2D."
-#: doc/classes/ProjectSettings.xml:687
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
-msgstr ""
+msgstr "Nome opcional para a camada 31 da física 2D."
-#: doc/classes/ProjectSettings.xml:690
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
-msgstr ""
+msgstr "Nome opcional para a camada 32 da física 2D."
-#: doc/classes/ProjectSettings.xml:693
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
-msgstr ""
+msgstr "Nome opcional para a camada 4 da física 2D."
-#: doc/classes/ProjectSettings.xml:696
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
-msgstr ""
+msgstr "Nome opcional para a camada 5 da física 2D."
-#: doc/classes/ProjectSettings.xml:699
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
-msgstr ""
+msgstr "Nome opcional para a camada 6 da física 2D."
-#: doc/classes/ProjectSettings.xml:702
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
-msgstr ""
+msgstr "Nome opcional para a camada 7 da física 2D."
-#: doc/classes/ProjectSettings.xml:705
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
-msgstr ""
+msgstr "Nome opcional para a camada 8 da física 2D."
-#: doc/classes/ProjectSettings.xml:708
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
-msgstr ""
+msgstr "Nome opcional para a camada 9 da física 2D."
-#: doc/classes/ProjectSettings.xml:711
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
-msgstr ""
+msgstr "Nome opcional para a camada 1 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:714
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
-msgstr ""
+msgstr "Nome opcional para a camada 10 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:717
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
-msgstr ""
+msgstr "Nome opcional para a camada 11 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:720
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
-msgstr ""
+msgstr "Nome opcional para a camada 12 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:723
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
-msgstr ""
+msgstr "Nome opcional para a camada 13 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:726
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
-msgstr ""
+msgstr "Nome opcional para a camada 14 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:729
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
-msgstr ""
+msgstr "Nome opcional para a camada 15 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:732
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
-msgstr ""
+msgstr "Nome opcional para a camada 16 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:735
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
-msgstr ""
+msgstr "Nome opcional para a camada 17 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:738
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
-msgstr ""
+msgstr "Nome opcional para a camada 18 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:741
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
-msgstr ""
+msgstr "Nome opcional para a camada 19 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:744
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
-msgstr ""
+msgstr "Nome opcional para a camada 2 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:747
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
-msgstr ""
+msgstr "Nome opcional para a camada 20 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:750
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
-msgstr ""
+msgstr "Nome opcional para a camada 3 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:753
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
-msgstr ""
+msgstr "Nome opcional para a camada 4 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:756
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
-msgstr ""
+msgstr "Nome opcional para a camada 5 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:759
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
-msgstr ""
+msgstr "Nome opcional para a camada 6 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:762
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
-msgstr ""
+msgstr "Nome opcional para a camada 7 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:765
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
-msgstr ""
+msgstr "Nome opcional para a camada 8 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:768
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
-msgstr ""
+msgstr "Nome opcional para a camada 9 da renderização 2D."
-#: doc/classes/ProjectSettings.xml:771
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:774
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:777
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:780
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:783
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:786
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:789
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:792
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:795
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:798
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:801
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:804
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:807
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:810
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:813
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:816
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:819
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:822
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:825
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:828
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:831
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:834
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:837
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:840
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:843
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:846
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:849
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:852
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:855
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:858
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:861
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:864
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:867
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
-msgstr ""
+msgstr "Nome opcional para a camada 1 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:870
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
-msgstr ""
+msgstr "Nome opcional para a camada 10 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:873
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
-msgstr ""
+msgstr "Nome opcional para a camada 11 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:876
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
-msgstr ""
+msgstr "Nome opcional para a camada 12 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:879
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
-msgstr ""
+msgstr "Nome opcional para a camada 13 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:882
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
-msgstr ""
+msgstr "Nome opcional para a camada 14 da renderização 3D"
-#: doc/classes/ProjectSettings.xml:885
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
-msgstr ""
+msgstr "Nome opcional para a camada 15 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:888
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
-msgstr ""
+msgstr "Nome opcional para a camada 16 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:891
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
-msgstr ""
+msgstr "Nome opcional para a camada 17 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:894
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
-msgstr ""
+msgstr "Nome opcional para a camada 18 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:897
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
-msgstr ""
+msgstr "Nome opcional para a camada 19 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:900
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
-msgstr ""
+msgstr "Nome opcional para a camada 2 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:903
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
-msgstr ""
+msgstr "Nome opcional para a camada 20 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:906
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
-msgstr ""
+msgstr "Nome opcional para a camada 3 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:909
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
-msgstr ""
+msgstr "Nome opcional para a camada 4 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:912
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
-msgstr ""
+msgstr "Nome opcional para a camada 5 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:915
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
-msgstr ""
+msgstr "Nome opcional para a camada 6 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:918
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
-msgstr ""
+msgstr "Nome opcional para a camada 7 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:921
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
-msgstr ""
+msgstr "Nome opcional para a camada 8 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:924
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
-msgstr ""
+msgstr "Nome opcional para a camada 9 da renderização 3D."
-#: doc/classes/ProjectSettings.xml:927
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:930
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:933
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:936
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:939
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:942
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:947
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:950
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -45967,92 +46073,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:953
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:956
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:959
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:962
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:965
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:968
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:971
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:974
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:977
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:980
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:983
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:986
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:989
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:992
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:995
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:998
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1001
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1004
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -46062,33 +46168,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1008
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1011
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1014
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1018
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1022
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -46101,7 +46207,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1026
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -46113,7 +46219,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1034
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -46125,7 +46231,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1042
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -46138,7 +46244,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1046
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -46146,28 +46252,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1050
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1054
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1057
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1060
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -46177,25 +46283,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1064
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1067
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1070
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1073
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -46208,7 +46314,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1077
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -46220,7 +46326,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1085
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -46232,7 +46338,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1093
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -46245,13 +46351,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1097
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1100
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -46259,11 +46365,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1104
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1107
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -46277,7 +46383,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1113
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -46286,7 +46392,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1117
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -46302,7 +46408,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1122
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -46312,7 +46418,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1126
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -46322,7 +46428,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1130
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -46333,7 +46439,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1134
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -46343,7 +46449,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1138
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -46351,7 +46457,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1142
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -46362,7 +46468,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1146
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -46377,7 +46483,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1152
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -46386,13 +46492,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1157
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1160
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -46401,7 +46507,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1163
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -46411,7 +46517,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1166
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -46423,7 +46529,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1169
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -46433,24 +46539,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1172
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1175
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1178
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1181
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -46459,7 +46565,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1184
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -46467,7 +46573,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1187
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -46476,7 +46582,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1190
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -46486,7 +46592,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1194
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -46494,31 +46600,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1198
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1201
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1204
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1207
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1210
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -46526,7 +46632,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1213
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -46536,21 +46642,21 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1216
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1219
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
"iOS specific override for [member rendering/gles2/compatibility/"
"disable_half_float], due to poor support for half-float vertex compression "
"on many devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
"If [code]true[/code] and available on the target Android device, enables "
"high floating point precision for all shader computations in GLES2.\n"
@@ -46558,31 +46664,31 @@ msgid ""
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1226
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1229
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1232
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1235
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1238
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -46590,7 +46696,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1241
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -46600,7 +46706,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1244
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -46609,7 +46715,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1247
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -46618,20 +46724,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1250
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1253
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1256
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -46640,7 +46746,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1259
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -46648,7 +46754,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -46657,7 +46763,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1266
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -46667,20 +46773,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1275
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -46689,13 +46795,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -46705,46 +46811,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1294
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1297
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1300
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1303
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1306
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -46754,7 +46860,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -46766,7 +46872,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1317
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -46774,7 +46880,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -46782,7 +46888,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1324
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -46791,7 +46897,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1327
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -46805,7 +46911,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1332
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -46815,7 +46921,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1335
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -46824,7 +46930,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1338
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -46834,54 +46940,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1341
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1344
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1347
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1350
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1353
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1356
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1359
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -46892,61 +46998,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1366
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1369
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1372
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1375
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1378
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1381
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1384
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1387
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -46957,7 +47063,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1394
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -46966,26 +47072,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400
-#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1409
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1412
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -46996,20 +47102,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1419
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1426
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -47021,52 +47127,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1436
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1439
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1442
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1445
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1448
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1451
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1454
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -47074,7 +47180,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -47087,7 +47193,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -47099,7 +47205,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -47111,7 +47217,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -47123,7 +47229,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -47135,7 +47241,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1481
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -47532,7 +47638,7 @@ msgstr ""
#: doc/classes/Range.xml:67
msgid "Emitted when [member value] changes."
-msgstr ""
+msgstr "Emitido quando [member value] muda."
#: doc/classes/RayCast.xml:4 doc/classes/RayCast2D.xml:4
msgid "Query the closest object intersecting a ray."
@@ -47805,40 +47911,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -47846,14 +47966,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49224,7 +49344,7 @@ msgstr ""
#: doc/classes/RichTextLabel.xml:377
msgid "The default text color."
-msgstr ""
+msgstr "A cor padrão do texto."
#: doc/classes/RichTextLabel.xml:380
msgid "The background The background used when the [RichTextLabel] is focused."
@@ -49238,7 +49358,7 @@ msgstr ""
#: doc/classes/RichTextLabel.xml:386
msgid "The color of the font's shadow."
-msgstr ""
+msgstr "A cor da sombra da fonte."
#: doc/classes/RichTextLabel.xml:389
msgid "The font used for italics text."
@@ -49246,7 +49366,7 @@ msgstr ""
#: doc/classes/RichTextLabel.xml:392
msgid "The vertical space between lines."
-msgstr ""
+msgstr "O espaço vertical entre linhas."
#: doc/classes/RichTextLabel.xml:395
msgid "The font used for monospace text."
@@ -49258,7 +49378,7 @@ msgstr ""
#: doc/classes/RichTextLabel.xml:401
msgid "The default text font."
-msgstr ""
+msgstr "A fonte padrão do texto."
#: doc/classes/RichTextLabel.xml:404
msgid "The color of the selection box."
@@ -50185,6 +50305,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -50202,7 +50338,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -50210,11 +50346,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -50224,19 +50360,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -50675,7 +50811,7 @@ msgstr ""
#: doc/classes/SceneTree.xml:231
msgid "The current scene."
-msgstr ""
+msgstr "A cena atual."
#: doc/classes/SceneTree.xml:234
msgid ""
@@ -50799,14 +50935,16 @@ msgid ""
"Emitted when a node's configuration changed. Only emitted in [code]tool[/"
"code] mode."
msgstr ""
+"Emitido quando a configuração de um nó muda. Só é emitido no modo "
+"[code]tool[/code]."
#: doc/classes/SceneTree.xml:324
msgid "Emitted whenever a node is removed from the [SceneTree]."
-msgstr ""
+msgstr "Emitido cada vez que um nó é removido da [SceneTree]."
#: doc/classes/SceneTree.xml:330
msgid "Emitted whenever a node is renamed."
-msgstr ""
+msgstr "Emitido cada vez que um nó é renomeado."
#: doc/classes/SceneTree.xml:335
msgid ""
@@ -50912,11 +51050,11 @@ msgstr ""
#: doc/classes/SceneTreeTimer.xml:22
msgid "The time remaining."
-msgstr ""
+msgstr "O tempo restante."
#: doc/classes/SceneTreeTimer.xml:28 doc/classes/Timer.xml:61
msgid "Emitted when the timer reaches 0."
-msgstr ""
+msgstr "Emitido quando o cronômetro chega ao 0."
#: doc/classes/Script.xml:4
msgid "A class stored as a resource."
@@ -50950,7 +51088,7 @@ msgstr "Retorna o script herdado diretamente por este script."
#: doc/classes/Script.xml:29
msgid "Returns the script's base type."
-msgstr ""
+msgstr "Retorna o tipo base de um script."
#: doc/classes/Script.xml:36
msgid "Returns the default value of the specified property."
@@ -51379,11 +51517,12 @@ msgstr ""
#: doc/classes/Shape2D.xml:4
msgid "Base class for all 2D shapes."
-msgstr ""
+msgstr "Classe base para todas as formas 2D."
#: doc/classes/Shape2D.xml:7
msgid "Base class for all 2D shapes. All 2D shape types inherit from this."
msgstr ""
+"Classe base para todos os formatos 2D. Todos os formatos 2D herdam disto."
#: doc/classes/Shape2D.xml:19
msgid ""
@@ -51500,7 +51639,7 @@ msgstr ""
#: doc/classes/Skeleton.xml:34
msgid "Clear all the bones in this skeleton."
-msgstr ""
+msgstr "Limpa todos os ossos neste esqueleto."
#: doc/classes/Skeleton.xml:46
msgid "Returns the bone index that matches [code]name[/code] as its name."
@@ -51570,7 +51709,7 @@ msgstr ""
#: doc/classes/Skeleton2D.xml:4
msgid "Skeleton for 2D characters and animated objects."
-msgstr ""
+msgstr "Esqueleto para personagens 2D e objetos animados."
#: doc/classes/Skeleton2D.xml:7
msgid ""
@@ -51956,7 +52095,7 @@ msgstr ""
#: doc/classes/SoftBody.xml:121
msgid "The SoftBody's mass."
-msgstr ""
+msgstr "A massa do SoftBody."
#: doc/classes/Spatial.xml:4
msgid "Most basic 3D game object, parent of all 3D-related nodes."
@@ -52241,7 +52380,7 @@ msgstr ""
#: doc/classes/Spatial.xml:284
msgid "Emitted when node visibility changes."
-msgstr ""
+msgstr "Emitido quando a visibilidade de um nó muda."
#: doc/classes/Spatial.xml:290
msgid ""
@@ -52283,7 +52422,7 @@ msgstr ""
#: doc/classes/SpatialMaterial.xml:4
msgid "Default 3D rendering material."
-msgstr ""
+msgstr "Material de renderização 3D padrão."
#: doc/classes/SpatialMaterial.xml:7
msgid ""
@@ -52339,7 +52478,7 @@ msgstr ""
#: doc/classes/SpatialMaterial.xml:61
msgid "The material's base color."
-msgstr ""
+msgstr "A cor base do material."
#: doc/classes/SpatialMaterial.xml:64
msgid ""
@@ -53704,7 +53843,7 @@ msgstr ""
#: doc/classes/Sprite.xml:51 doc/classes/Sprite3D.xml:21
msgid "The number of columns in the sprite sheet."
-msgstr ""
+msgstr "O número de colunas em uma folha de sprites."
#: doc/classes/Sprite.xml:54
msgid ""
@@ -53741,15 +53880,15 @@ msgstr ""
#: doc/classes/Sprite.xml:79 doc/classes/Sprite3D.xml:39
msgid "Emitted when the [member frame] changes."
-msgstr ""
+msgstr "Emitido quando o [member frame] muda."
#: doc/classes/Sprite.xml:84
msgid "Emitted when the [member texture] changes."
-msgstr ""
+msgstr "Emitido quando a [member texture] muda."
#: doc/classes/Sprite3D.xml:4
msgid "2D sprite node in a 3D world."
-msgstr ""
+msgstr "Nó de sprite 2D em um mundo 3D."
#: doc/classes/Sprite3D.xml:7
msgid ""
@@ -53912,7 +54051,7 @@ msgstr ""
#: doc/classes/SpriteFrames.xml:104
msgid "Changes the animation's name to [code]newname[/code]."
-msgstr ""
+msgstr "Muda o nome da animação para [code]newname[/code]."
#: doc/classes/SpriteFrames.xml:112
msgid "If [code]true[/code], the animation will loop."
@@ -55280,7 +55419,7 @@ msgstr ""
#: doc/classes/StyleBoxFlat.xml:135
msgid "Sets the color of the border."
-msgstr ""
+msgstr "Define a cor da borda."
#: doc/classes/StyleBoxFlat.xml:138
msgid "Border width for the bottom border."
@@ -55379,7 +55518,7 @@ msgstr ""
#: doc/classes/StyleBoxFlat.xml:188
msgid "The shadow size in pixels."
-msgstr ""
+msgstr "O tamanho da sombra em pixels."
#: doc/classes/StyleBoxLine.xml:4
msgid "[StyleBox] that displays a single line."
@@ -55393,7 +55532,7 @@ msgstr ""
#: doc/classes/StyleBoxLine.xml:15
msgid "The line's color."
-msgstr ""
+msgstr "A cor da linha."
#: doc/classes/StyleBoxLine.xml:18
msgid ""
@@ -55680,20 +55819,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -55704,28 +55848,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -55737,19 +55881,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -55905,11 +56049,11 @@ msgstr ""
#: doc/classes/TabContainer.xml:162 doc/classes/Tabs.xml:178
msgid "Emitted when switching to another tab."
-msgstr ""
+msgstr "Emitido quando mudando para outra aba."
#: doc/classes/TabContainer.xml:168
msgid "Emitted when a tab is selected, even if it is the current tab."
-msgstr ""
+msgstr "Emitido quando uma aba é selecionada, mesmo se for a aba atual."
#: doc/classes/TabContainer.xml:174 doc/classes/Tabs.xml:202
msgid "Align the tabs to the left."
@@ -56013,7 +56157,7 @@ msgstr ""
#: doc/classes/Tabs.xml:17
msgid "Adds a new tab."
-msgstr ""
+msgstr "Adiciona uma nova aba."
#: doc/classes/Tabs.xml:24
msgid "Moves the scroll view to make the tab visible."
@@ -56110,7 +56254,7 @@ msgstr ""
#: doc/classes/Tabs.xml:190
msgid "Emitted when a tab is closed."
-msgstr ""
+msgstr "Emitido quando uma taba é fechada."
#: doc/classes/Tabs.xml:196
msgid "Emitted when a tab is hovered by the mouse."
@@ -56162,7 +56306,7 @@ msgstr ""
#: doc/classes/TCP_Server.xml:4
msgid "A TCP server."
-msgstr ""
+msgstr "Um servidor TCP."
#: doc/classes/TCP_Server.xml:7
msgid ""
@@ -56302,7 +56446,7 @@ msgstr "Retorna o nome do nó em [code]idx[/code]."
#: doc/classes/TextEdit.xml:137
msgid "Returns the text of a specific line."
-msgstr ""
+msgstr "Retorna o texto de uma linha específica."
#: doc/classes/TextEdit.xml:143
msgid "Returns the amount of total lines in the text."
@@ -56629,7 +56773,7 @@ msgstr ""
#: doc/classes/TextEdit.xml:483
msgid "Emitted when the cursor changes."
-msgstr ""
+msgstr "Emitido quando o cursor muda."
#: doc/classes/TextEdit.xml:490
msgid "Emitted when the info icon is clicked."
@@ -56693,11 +56837,11 @@ msgstr ""
#: doc/classes/TextEdit.xml:599
msgid "Sets the default [Font]."
-msgstr ""
+msgstr "Define a [Font] padrão."
#: doc/classes/TextEdit.xml:602
msgid "Sets the font [Color]."
-msgstr ""
+msgstr "Define a [Color] da fonte."
#: doc/classes/TextEdit.xml:607
msgid ""
@@ -56744,7 +56888,7 @@ msgstr ""
#: doc/classes/Texture.xml:4
msgid "Texture for 2D and 3D."
-msgstr ""
+msgstr "Textura para 2D e 3D."
#: doc/classes/Texture.xml:7
msgid ""
@@ -56785,15 +56929,15 @@ msgstr ""
#: doc/classes/Texture.xml:60
msgid "Returns the texture height."
-msgstr ""
+msgstr "Retorna a altura da textura."
#: doc/classes/Texture.xml:66
msgid "Returns the texture size."
-msgstr ""
+msgstr "Retorna o tamanho da textura."
#: doc/classes/Texture.xml:72
msgid "Returns the texture width."
-msgstr ""
+msgstr "Retorna a largura da textura."
#: doc/classes/Texture.xml:78
#, fuzzy
@@ -57007,7 +57151,7 @@ msgstr ""
#: doc/classes/TextureLayered.xml:4
msgid "Base class for 3D texture types."
-msgstr ""
+msgstr "Classe base para tipos de textura 3D."
#: doc/classes/TextureLayered.xml:7
msgid ""
@@ -57068,7 +57212,7 @@ msgstr "Retorna o RID da tela usada por essa camada."
#: doc/classes/TextureLayered.xml:68
msgid "Specifies which [enum Flags] apply to this texture."
-msgstr ""
+msgstr "Especifica quais [enum Flags] se aplicam à esta textura."
#: doc/classes/TextureLayered.xml:73
msgid ""
@@ -57260,7 +57404,7 @@ msgstr ""
#: doc/classes/TextureRect.xml:4
msgid "Control for drawing textures."
-msgstr ""
+msgstr "Controle para desenhar texturas."
#: doc/classes/TextureRect.xml:7
msgid ""
@@ -57285,7 +57429,7 @@ msgstr ""
#: doc/classes/TextureRect.xml:30
msgid "The node's [Texture] resource."
-msgstr ""
+msgstr "O recurso [Texture] de um nó."
#: doc/classes/TextureRect.xml:35
msgid ""
@@ -57323,7 +57467,7 @@ msgstr ""
#: doc/classes/Theme.xml:17
msgid "Clears all values on the theme."
-msgstr ""
+msgstr "Limpa todos os valores no tema."
#: doc/classes/Theme.xml:25
msgid ""
@@ -57344,10 +57488,10 @@ msgid ""
msgstr ""
#: doc/classes/Theme.xml:49
-#, fuzzy
msgid ""
"Clears the icon at [code]name[/code] if the theme has [code]node_type[/code]."
-msgstr "Retorna o nome do nó em [code]idx[/code]."
+msgstr ""
+"Limpa o ícone em [code]name[/code] se o tema tiver [code]node_type[/code]."
#: doc/classes/Theme.xml:57
msgid ""
@@ -58633,7 +58777,7 @@ msgstr ""
#: doc/classes/TouchScreenButton.xml:39
msgid "The button's shape."
-msgstr ""
+msgstr "O formato do botão."
#: doc/classes/TouchScreenButton.xml:42
msgid ""
@@ -58652,15 +58796,15 @@ msgstr ""
#: doc/classes/TouchScreenButton.xml:54
msgid "Emitted when the button is pressed (down)."
-msgstr ""
+msgstr "Emitido quando o botão é pressionado (baixo)."
#: doc/classes/TouchScreenButton.xml:59
msgid "Emitted when the button is released (up)."
-msgstr ""
+msgstr "Emitido quando o botão é solto (cima)."
#: doc/classes/TouchScreenButton.xml:65
msgid "Always visible."
-msgstr ""
+msgstr "Sempre visível."
#: doc/classes/TouchScreenButton.xml:68
msgid "Visible on touch screens only."
@@ -58860,7 +59004,7 @@ msgstr ""
#: doc/classes/Transform2D.xml:78
msgid "Returns the scale."
-msgstr ""
+msgstr "Retorna a escala."
#: doc/classes/Transform2D.xml:86
msgid ""
@@ -58959,7 +59103,7 @@ msgstr ""
#: doc/classes/Translation.xml:33
msgid "Erases a message."
-msgstr ""
+msgstr "Apaga uma mensagem."
#: doc/classes/Translation.xml:40
msgid "Returns a message's translation."
@@ -59217,7 +59361,7 @@ msgstr ""
#: doc/classes/Tree.xml:200
msgid "Sets the title of a column."
-msgstr ""
+msgstr "Define o título de uma coluna."
#: doc/classes/Tree.xml:207
msgid "If [code]true[/code], column titles are visible."
@@ -59310,19 +59454,19 @@ msgstr ""
#: doc/classes/Tree.xml:298
msgid "Emitted when an item is edited."
-msgstr ""
+msgstr "Emitido quando um item é editado."
#: doc/classes/Tree.xml:303
msgid "Emitted when an item is edited using the right mouse button."
-msgstr ""
+msgstr "Emitido quando um item é editado com botão direito do mouse."
#: doc/classes/Tree.xml:309
msgid "Emitted when an item is selected with the right mouse button."
-msgstr ""
+msgstr "Emitido quando um item é selecionado com o botão direito do mouse."
#: doc/classes/Tree.xml:314
msgid "Emitted when an item is selected."
-msgstr ""
+msgstr "Emitido quando um item é selecionado."
#: doc/classes/Tree.xml:322
msgid ""
@@ -59333,6 +59477,8 @@ msgstr ""
#: doc/classes/Tree.xml:327
msgid "Emitted when a left mouse button click does not select any item."
msgstr ""
+"Emitido quando um clique com o botão esquerdo do mouse não seleciona nenhum "
+"item."
#: doc/classes/Tree.xml:333
msgid ""
@@ -60089,7 +60235,7 @@ msgstr ""
#: doc/classes/Tween.xml:200
msgid "Stops animating all tweens."
-msgstr ""
+msgstr "Para de animar todos os tweens."
#: doc/classes/Tween.xml:215
msgid ""
@@ -60141,11 +60287,11 @@ msgstr ""
#: doc/classes/Tween.xml:263
msgid "Emitted when a tween ends."
-msgstr ""
+msgstr "Emitido quando um tween termina."
#: doc/classes/Tween.xml:270
msgid "Emitted when a tween starts."
-msgstr ""
+msgstr "Emitido quando um tween começa."
#: doc/classes/Tween.xml:279
msgid "Emitted at each step of the animation."
@@ -60667,7 +60813,7 @@ msgstr ""
#: modules/upnp/doc_classes/UPNP.xml:170
msgid "The action failed."
-msgstr ""
+msgstr "A ação falhou."
#: modules/upnp/doc_classes/UPNP.xml:173
msgid ""
@@ -60731,15 +60877,15 @@ msgstr ""
#: modules/upnp/doc_classes/UPNP.xml:212
msgid "Invalid duration."
-msgstr ""
+msgstr "Duração inválida."
#: modules/upnp/doc_classes/UPNP.xml:215
msgid "Invalid arguments."
-msgstr ""
+msgstr "Argumentos inválidos."
#: modules/upnp/doc_classes/UPNP.xml:218
msgid "Invalid response."
-msgstr ""
+msgstr "Resposta inválida."
#: modules/upnp/doc_classes/UPNP.xml:221
msgid "Invalid parameter."
@@ -60748,7 +60894,7 @@ msgstr ""
#: modules/upnp/doc_classes/UPNP.xml:224
#: modules/upnp/doc_classes/UPNPDevice.xml:69
msgid "HTTP error."
-msgstr ""
+msgstr "Erro HTTP."
#: modules/upnp/doc_classes/UPNP.xml:227
msgid "Socket error."
@@ -60836,11 +60982,11 @@ msgstr ""
#: modules/upnp/doc_classes/UPNPDevice.xml:61
msgid "Service type."
-msgstr ""
+msgstr "Tipo de serviço."
#: modules/upnp/doc_classes/UPNPDevice.xml:66
msgid "OK."
-msgstr ""
+msgstr "OK."
#: modules/upnp/doc_classes/UPNPDevice.xml:72
msgid "Empty HTTP response."
@@ -60856,7 +61002,7 @@ msgstr ""
#: modules/upnp/doc_classes/UPNPDevice.xml:81
msgid "Disconnected."
-msgstr ""
+msgstr "Desconectado."
#: modules/upnp/doc_classes/UPNPDevice.xml:84
msgid "Unknown device."
@@ -60864,7 +61010,7 @@ msgstr ""
#: modules/upnp/doc_classes/UPNPDevice.xml:87
msgid "Invalid control."
-msgstr ""
+msgstr "Controle inválido."
#: modules/upnp/doc_classes/UPNPDevice.xml:90
msgid "Memory allocation error."
@@ -60979,7 +61125,7 @@ msgstr ""
#: doc/classes/Vector2.xml:4
msgid "Vector used for 2D math."
-msgstr ""
+msgstr "Vetor utilizado para matemática 2D."
#: doc/classes/Vector2.xml:7
msgid ""
@@ -61268,7 +61414,7 @@ msgstr ""
#: doc/classes/Vector3.xml:4
msgid "Vector used for 3D math."
-msgstr ""
+msgstr "Vetor utilizado para matemática 3D."
#: doc/classes/Vector3.xml:7
msgid ""
@@ -61747,15 +61893,15 @@ msgstr ""
#: doc/classes/VideoPlayer.xml:75
msgid "Audio volume as a linear value."
-msgstr ""
+msgstr "Volume do áudio como um valor linear."
#: doc/classes/VideoPlayer.xml:78
msgid "Audio volume in dB."
-msgstr ""
+msgstr "Volume do áudio em dB."
#: doc/classes/VideoPlayer.xml:84
msgid "Emitted when playback is finished."
-msgstr ""
+msgstr "Emitido quando a reprodução termina."
#: doc/classes/VideoStream.xml:4
msgid "Base resource for video streams."
@@ -61896,11 +62042,11 @@ msgstr ""
#: doc/classes/Viewport.xml:34
msgid "Returns the 2D world of the viewport."
-msgstr ""
+msgstr "Retorna o mundo 2D do viewport."
#: doc/classes/Viewport.xml:40
msgid "Returns the active 3D camera."
-msgstr ""
+msgstr "Retorna a câmera 3D ativa."
#: doc/classes/Viewport.xml:46
msgid "Returns the total transform of the viewport."
@@ -62309,7 +62455,7 @@ msgstr ""
#: doc/classes/Viewport.xml:371
msgid "Objects are displayed normally."
-msgstr ""
+msgstr "Objetos são exibidos normalmente."
#: doc/classes/Viewport.xml:374
msgid "Objects are displayed without light information."
@@ -62588,7 +62734,7 @@ msgstr ""
#: doc/classes/VisibilityNotifier.xml:42
msgid "Emitted when the VisibilityNotifier enters the screen."
-msgstr ""
+msgstr "Emitido quando o VisibilityNotifier entra na tela."
#: doc/classes/VisibilityNotifier.xml:47
#, fuzzy
@@ -62623,11 +62769,11 @@ msgstr ""
#: doc/classes/VisibilityNotifier2D.xml:31
msgid "Emitted when the VisibilityNotifier2D enters the screen."
-msgstr ""
+msgstr "Emitido quando o VisibilityNotifier2D entra na tela."
#: doc/classes/VisibilityNotifier2D.xml:36
msgid "Emitted when the VisibilityNotifier2D exits the screen."
-msgstr ""
+msgstr "Emitido quando o VisibilityNotifier2D sai da tela."
#: doc/classes/VisibilityNotifier2D.xml:42
msgid "Emitted when the VisibilityNotifier2D enters a [Viewport]'s view."
@@ -62803,7 +62949,7 @@ msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml:165
msgid "Returns a node's position in pixels."
-msgstr ""
+msgstr "Retorna a posição de um nó em pixels."
#: modules/visual_script/doc_classes/VisualScript.xml:172
msgid "Returns the default (initial) value of a variable."
@@ -62853,7 +62999,7 @@ msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml:258
msgid "Remove a specific node."
-msgstr ""
+msgstr "Remove um nó específico."
#: modules/visual_script/doc_classes/VisualScript.xml:265
msgid "Remove a variable with the given name."
@@ -62861,15 +63007,15 @@ msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml:273
msgid "Change the name of a custom signal."
-msgstr ""
+msgstr "Muda o nome de um sinal customizado."
#: modules/visual_script/doc_classes/VisualScript.xml:281
msgid "Change the name of a function."
-msgstr ""
+msgstr "Muda o nome de uma função."
#: modules/visual_script/doc_classes/VisualScript.xml:289
msgid "Change the name of a variable."
-msgstr ""
+msgstr "Muda o nome de uma variável."
#: modules/visual_script/doc_classes/VisualScript.xml:299
msgid ""
@@ -62895,7 +63041,7 @@ msgstr ""
#: modules/visual_script/doc_classes/VisualScript.xml:334
msgid "Position a node on the screen."
-msgstr ""
+msgstr "Posiciona um nó na tela."
#: modules/visual_script/doc_classes/VisualScript.xml:342
msgid "Change the default (initial) value of a variable."
@@ -63327,11 +63473,11 @@ msgstr ""
#: modules/visual_script/doc_classes/VisualScriptConstant.xml:19
msgid "The constant's type."
-msgstr ""
+msgstr "O tipo do constante."
#: modules/visual_script/doc_classes/VisualScriptConstant.xml:22
msgid "The constant's value."
-msgstr ""
+msgstr "O valor do constante."
#: modules/visual_script/doc_classes/VisualScriptConstructor.xml:4
msgid "A Visual Script node which calls a base type constructor."
@@ -63353,11 +63499,11 @@ msgstr ""
#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:15
msgid "Return the node's title."
-msgstr ""
+msgstr "Retorna o título do nó."
#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:21
msgid "Return the node's category."
-msgstr ""
+msgstr "Retorna a categoria do nó."
#: modules/visual_script/doc_classes/VisualScriptCustomNode.xml:27
msgid "Return the count of input value ports."
@@ -63748,7 +63894,7 @@ msgstr ""
#: modules/visual_script/doc_classes/VisualScriptInputAction.xml:15
msgid "Name of the action."
-msgstr ""
+msgstr "Nome da ação."
#: modules/visual_script/doc_classes/VisualScriptInputAction.xml:18
msgid "State of the action to check. See [enum Mode] for options."
@@ -63836,7 +63982,7 @@ msgstr ""
#: modules/visual_script/doc_classes/VisualScriptLocalVar.xml:4
msgid "Gets a local variable's value."
-msgstr ""
+msgstr "Obtém o valor de uma variável local."
#: modules/visual_script/doc_classes/VisualScriptLocalVar.xml:7
msgid ""
@@ -63851,16 +63997,16 @@ msgstr ""
#: modules/visual_script/doc_classes/VisualScriptLocalVar.xml:19
#: modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml:21
msgid "The local variable's type."
-msgstr ""
+msgstr "O tipo da variável local."
#: modules/visual_script/doc_classes/VisualScriptLocalVar.xml:22
#: modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml:24
msgid "The local variable's name."
-msgstr ""
+msgstr "O nome da variável local."
#: modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml:4
msgid "Changes a local variable's value."
-msgstr ""
+msgstr "Muda o valor de uma variável local."
#: modules/visual_script/doc_classes/VisualScriptLocalVarSet.xml:7
msgid ""
@@ -64003,7 +64149,7 @@ msgstr ""
#: modules/visual_script/doc_classes/VisualScriptPreload.xml:19
msgid "The [Resource] to load."
-msgstr ""
+msgstr "O [Resource] para carregar."
#: modules/visual_script/doc_classes/VisualScriptPropertyGet.xml:4
msgid "A Visual Script node returning a value of a property from an [Object]."
@@ -64218,7 +64364,7 @@ msgstr ""
#: modules/visual_script/doc_classes/VisualScriptSceneNode.xml:4
msgid "Node reference."
-msgstr ""
+msgstr "Referência de nó."
#: modules/visual_script/doc_classes/VisualScriptSceneNode.xml:7
msgid ""
@@ -64303,7 +64449,7 @@ msgstr ""
#: modules/visual_script/doc_classes/VisualScriptSubCall.xml:16
msgid "Called by this node."
-msgstr ""
+msgstr "Chamado por este nó."
#: modules/visual_script/doc_classes/VisualScriptSwitch.xml:4
msgid "Branches program flow based on a given input's value."
@@ -64347,7 +64493,7 @@ msgstr ""
#: modules/visual_script/doc_classes/VisualScriptVariableGet.xml:4
msgid "Gets a variable's value."
-msgstr ""
+msgstr "Obtém o valor de uma variável."
#: modules/visual_script/doc_classes/VisualScriptVariableGet.xml:7
msgid ""
@@ -64362,11 +64508,11 @@ msgstr ""
#: modules/visual_script/doc_classes/VisualScriptVariableGet.xml:19
#: modules/visual_script/doc_classes/VisualScriptVariableSet.xml:20
msgid "The variable's name."
-msgstr ""
+msgstr "Muda o nome de uma variável."
#: modules/visual_script/doc_classes/VisualScriptVariableSet.xml:4
msgid "Changes a variable's value."
-msgstr ""
+msgstr "Muda o valor de uma variável."
#: modules/visual_script/doc_classes/VisualScriptVariableSet.xml:7
msgid ""
@@ -65395,7 +65541,7 @@ msgstr ""
#: doc/classes/VisualServer.xml:1415
msgid "Function not implemented in Godot 3.x."
-msgstr ""
+msgstr "Função não implementada no Godot 3.x."
#: doc/classes/VisualServer.xml:1423
msgid ""
@@ -66259,7 +66405,7 @@ msgstr ""
#: doc/classes/VisualServer.xml:2569
msgid "Returns the parameters of a shader."
-msgstr ""
+msgstr "Retorna os parâmetros de uma shader."
#: doc/classes/VisualServer.xml:2577
msgid "Sets a shader's code."
@@ -66395,7 +66541,7 @@ msgstr "Retorna o tipo do nó em at [code]idx[/code]."
#: doc/classes/VisualServer.xml:2779
msgid "Returns the texture's width."
-msgstr ""
+msgstr "Retorna a largura da textura."
#: doc/classes/VisualServer.xml:2788
msgid ""
@@ -66432,7 +66578,7 @@ msgstr ""
#: doc/classes/VisualServer.xml:2852
msgid "Sets a viewport's camera."
-msgstr ""
+msgstr "Define a câmera de um viewport."
#: doc/classes/VisualServer.xml:2860
msgid "Sets a viewport's canvas."
@@ -66908,7 +67054,7 @@ msgstr ""
#: doc/classes/VisualServer.xml:3378
msgid "The light's energy."
-msgstr ""
+msgstr "A energia da luz."
#: doc/classes/VisualServer.xml:3381
msgid "Secondary multiplier used with indirect light (light bounces)."
@@ -67024,7 +67170,7 @@ msgstr ""
#: doc/classes/VisualServer.xml:3462
msgid "Do not update the viewport."
-msgstr ""
+msgstr "Não atualize o viewport."
#: doc/classes/VisualServer.xml:3465
msgid "Update the viewport once then set to disabled."
@@ -67922,7 +68068,7 @@ msgstr ""
#: doc/classes/VisualShaderNodeCompare.xml:32
msgid "A boolean type."
-msgstr ""
+msgstr "Um tipo boleano."
#: doc/classes/VisualShaderNodeCompare.xml:35
msgid "A transform ([code]mat4[/code]) type."
@@ -69089,15 +69235,15 @@ msgstr ""
#: doc/classes/VisualShaderNodeVectorOp.xml:20
msgid "Adds two vectors."
-msgstr ""
+msgstr "Soma dois vetores."
#: doc/classes/VisualShaderNodeVectorOp.xml:23
msgid "Subtracts a vector from a vector."
-msgstr ""
+msgstr "Subtrai um vetor de outro vetor."
#: doc/classes/VisualShaderNodeVectorOp.xml:26
msgid "Multiplies two vectors."
-msgstr ""
+msgstr "Multiplica dois vetores."
#: doc/classes/VisualShaderNodeVectorOp.xml:29
msgid "Divides vector by vector."
@@ -69407,7 +69553,7 @@ msgstr ""
#: modules/webrtc/doc_classes/WebRTCDataChannel.xml:108
msgid "The channel was closed, or connection failed."
-msgstr ""
+msgstr "O canal foi fechado, ou a conexão falhou."
#: modules/webrtc/doc_classes/WebRTCMultiplayer.xml:4
msgid ""
@@ -69764,7 +69910,7 @@ msgstr ""
#: modules/websocket/doc_classes/WebSocketClient.xml:70
msgid "Emitted when the connection to the server fails."
-msgstr ""
+msgstr "Emitido quando uma conexão ao servidor falha."
#: modules/websocket/doc_classes/WebSocketClient.xml:76
msgid ""
@@ -70343,7 +70489,7 @@ msgstr ""
#: modules/webxr/doc_classes/WebXRInterface.xml:238
msgid "Emitted when [member visibility_state] has changed."
-msgstr ""
+msgstr "Emitido quando [member visibility_state] muda."
#: doc/classes/WindowDialog.xml:4
msgid "Base class for window dialogs."
@@ -70402,7 +70548,7 @@ msgstr ""
#: doc/classes/WindowDialog.xml:50
msgid "The color of the title text."
-msgstr ""
+msgstr "A cor do texto de título."
#: doc/classes/WindowDialog.xml:53
msgid "The font used to draw the title."
@@ -70543,7 +70689,7 @@ msgstr ""
#: doc/classes/XMLParser.xml:15
msgid "Gets the amount of attributes in the current element."
-msgstr ""
+msgstr "Obtém a quantidade de atributos no elemento atual."
#: doc/classes/XMLParser.xml:22
msgid ""
@@ -70609,7 +70755,7 @@ msgstr ""
#: doc/classes/XMLParser.xml:93
msgid "Opens an XML file for parsing. This returns an error code."
-msgstr ""
+msgstr "Abre um arquivo XML para análise. Isto devolve um código de erro."
#: doc/classes/XMLParser.xml:100
msgid "Opens an XML raw buffer for parsing. This returns an error code."
@@ -70617,7 +70763,7 @@ msgstr ""
#: doc/classes/XMLParser.xml:106
msgid "Reads the next node of the file. This returns an error code."
-msgstr ""
+msgstr "Lê o próximo nó do arquivo. Isto retorna um código de erro."
#: doc/classes/XMLParser.xml:113
msgid ""
@@ -70641,27 +70787,27 @@ msgstr ""
#: doc/classes/XMLParser.xml:131
msgid "End of element."
-msgstr ""
+msgstr "Fim do elemento."
#: doc/classes/XMLParser.xml:134
msgid "Text node."
-msgstr ""
+msgstr "Nó de texto."
#: doc/classes/XMLParser.xml:137
msgid "Comment node."
-msgstr ""
+msgstr "Nó de comentário."
#: doc/classes/XMLParser.xml:140
msgid "CDATA content."
-msgstr ""
+msgstr "Conteúdo CDATA."
#: doc/classes/XMLParser.xml:143
msgid "Unknown node."
-msgstr ""
+msgstr "Nó desconhecido."
#: doc/classes/YSort.xml:4
msgid "Sort all child nodes based on their Y positions."
-msgstr ""
+msgstr "Ordena todos os nós filhos baseado em suas posições Y."
#: doc/classes/YSort.xml:7
msgid ""
diff --git a/doc/translations/ro.po b/doc/translations/ro.po
index 94a0476abb..cdcfbf3f29 100644
--- a/doc/translations/ro.po
+++ b/doc/translations/ro.po
@@ -6,12 +6,13 @@
# EVOKZH <avip.ady@gmail.com>, 2020.
# f0roots <f0rootss@gmail.com>, 2020.
# Pierre Stempin <pierre.stempin@gmail.com>, 2020.
+# FlooferLand <yunaflarf@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2020-10-12 09:28+0000\n"
-"Last-Translator: Pierre Stempin <pierre.stempin@gmail.com>\n"
+"PO-Revision-Date: 2021-11-07 09:45+0000\n"
+"Last-Translator: FlooferLand <yunaflarf@gmail.com>\n"
"Language-Team: Romanian <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/ro/>\n"
"Language: ro\n"
@@ -20,7 +21,7 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
"20)) ? 1 : 2;\n"
-"X-Generator: Weblate 4.3-dev\n"
+"X-Generator: Weblate 4.9-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -64,7 +65,7 @@ msgstr "Descrierile Metodei"
#: modules/gdscript/doc_classes/@GDScript.xml:4
msgid "Built-in GDScript functions."
-msgstr ""
+msgstr "Funcțiile incorporate GDScript."
#: modules/gdscript/doc_classes/@GDScript.xml:7
msgid ""
@@ -105,6 +106,11 @@ msgid ""
"a = abs(-1) # a is 1\n"
"[/codeblock]"
msgstr ""
+"Întoarce valoarea absolută parametrului [code]s[/code] (adică valoarea "
+"pozitivă).\n"
+"[codeblock]\n"
+"a = abs(-1) # a este 1\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:55
msgid ""
@@ -196,6 +202,8 @@ msgid ""
"axis) to the polar coordinate system (a distance from the origin and an "
"angle)."
msgstr ""
+"Schimbă un punct 2D din sistemul de coordonate cartezian (axa X si Z) la "
+"sistemul de coordonate polar (o distanță de la origine și un unghi)."
#: modules/gdscript/doc_classes/@GDScript.xml:135
msgid ""
@@ -1308,7 +1316,7 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:19
msgid "The [AudioServer] singleton."
-msgstr ""
+msgstr "Singletonul [AudioServer]."
#: doc/classes/@GlobalScope.xml:22
msgid "The [CameraServer] singleton."
@@ -1421,19 +1429,19 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:104
msgid "Top-left corner."
-msgstr ""
+msgstr "Colțul din stânga sus."
#: doc/classes/@GlobalScope.xml:107
msgid "Top-right corner."
-msgstr ""
+msgstr "Colțul din dreapta sus."
#: doc/classes/@GlobalScope.xml:110
msgid "Bottom-right corner."
-msgstr ""
+msgstr "Colțul din dreapta jos."
#: doc/classes/@GlobalScope.xml:113
msgid "Bottom-left corner."
-msgstr ""
+msgstr "Colțul din stânga jos."
#: doc/classes/@GlobalScope.xml:116
msgid ""
@@ -1477,11 +1485,11 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:143
msgid "Escape key."
-msgstr ""
+msgstr "Tasta de ieșire."
#: doc/classes/@GlobalScope.xml:146
msgid "Tab key."
-msgstr ""
+msgstr "Tasta tab."
#: doc/classes/@GlobalScope.xml:149
msgid "Shift+Tab key."
@@ -1489,7 +1497,7 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:152
msgid "Backspace key."
-msgstr ""
+msgstr "Tasta backspace."
#: doc/classes/@GlobalScope.xml:155
msgid "Return key (on the main keyboard)."
@@ -1509,7 +1517,7 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:167
msgid "Pause key."
-msgstr ""
+msgstr "Tasta de pauza."
#: doc/classes/@GlobalScope.xml:170
msgid "Print Screen key."
@@ -1585,67 +1593,67 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:224
msgid "F1 key."
-msgstr ""
+msgstr "Tasta F1."
#: doc/classes/@GlobalScope.xml:227
msgid "F2 key."
-msgstr ""
+msgstr "Tasta F2."
#: doc/classes/@GlobalScope.xml:230
msgid "F3 key."
-msgstr ""
+msgstr "Tasta F3."
#: doc/classes/@GlobalScope.xml:233
msgid "F4 key."
-msgstr ""
+msgstr "Tasta F4."
#: doc/classes/@GlobalScope.xml:236
msgid "F5 key."
-msgstr ""
+msgstr "Tasta F5."
#: doc/classes/@GlobalScope.xml:239
msgid "F6 key."
-msgstr ""
+msgstr "Tasta F6."
#: doc/classes/@GlobalScope.xml:242
msgid "F7 key."
-msgstr ""
+msgstr "Tasta F7."
#: doc/classes/@GlobalScope.xml:245
msgid "F8 key."
-msgstr ""
+msgstr "Tasta F8."
#: doc/classes/@GlobalScope.xml:248
msgid "F9 key."
-msgstr ""
+msgstr "Tasta F9."
#: doc/classes/@GlobalScope.xml:251
msgid "F10 key."
-msgstr ""
+msgstr "Tasta F10."
#: doc/classes/@GlobalScope.xml:254
msgid "F11 key."
-msgstr ""
+msgstr "Tasta F11."
#: doc/classes/@GlobalScope.xml:257
msgid "F12 key."
-msgstr ""
+msgstr "Tasta F12."
#: doc/classes/@GlobalScope.xml:260
msgid "F13 key."
-msgstr ""
+msgstr "Tasta F13."
#: doc/classes/@GlobalScope.xml:263
msgid "F14 key."
-msgstr ""
+msgstr "Tasta F14."
#: doc/classes/@GlobalScope.xml:266
msgid "F15 key."
-msgstr ""
+msgstr "Tasta F15."
#: doc/classes/@GlobalScope.xml:269
msgid "F16 key."
-msgstr ""
+msgstr "Tasta F16."
#: doc/classes/@GlobalScope.xml:272
msgid "Multiply (*) key on the numeric keypad."
@@ -1906,107 +1914,107 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:467
msgid "! key."
-msgstr ""
+msgstr "Tasta ! ."
#: doc/classes/@GlobalScope.xml:470
msgid "\" key."
-msgstr ""
+msgstr "Tasta \"."
#: doc/classes/@GlobalScope.xml:473
msgid "# key."
-msgstr ""
+msgstr "Tasta #."
#: doc/classes/@GlobalScope.xml:476
msgid "$ key."
-msgstr ""
+msgstr "Tasta $."
#: doc/classes/@GlobalScope.xml:479
msgid "% key."
-msgstr ""
+msgstr "Tasta %."
#: doc/classes/@GlobalScope.xml:482
msgid "& key."
-msgstr ""
+msgstr "Tasta &."
#: doc/classes/@GlobalScope.xml:485
msgid "' key."
-msgstr ""
+msgstr "Tasta '"
#: doc/classes/@GlobalScope.xml:488
msgid "( key."
-msgstr ""
+msgstr "Tasta (."
#: doc/classes/@GlobalScope.xml:491
msgid ") key."
-msgstr ""
+msgstr "Tasta )"
#: doc/classes/@GlobalScope.xml:494
msgid "* key."
-msgstr ""
+msgstr "Tasta *"
#: doc/classes/@GlobalScope.xml:497
msgid "+ key."
-msgstr ""
+msgstr "Tasta +"
#: doc/classes/@GlobalScope.xml:500
msgid ", key."
-msgstr ""
+msgstr "Tasta ,"
#: doc/classes/@GlobalScope.xml:503
msgid "- key."
-msgstr ""
+msgstr "Tasta -"
#: doc/classes/@GlobalScope.xml:506
msgid ". key."
-msgstr ""
+msgstr "Tasta ."
#: doc/classes/@GlobalScope.xml:509
msgid "/ key."
-msgstr ""
+msgstr "Tasta /"
#: doc/classes/@GlobalScope.xml:512
msgid "Number 0."
-msgstr ""
+msgstr "Numărul 0."
#: doc/classes/@GlobalScope.xml:515
msgid "Number 1."
-msgstr ""
+msgstr "Numărul 1."
#: doc/classes/@GlobalScope.xml:518
msgid "Number 2."
-msgstr ""
+msgstr "Numărul 2."
#: doc/classes/@GlobalScope.xml:521
msgid "Number 3."
-msgstr ""
+msgstr "Numărul 3."
#: doc/classes/@GlobalScope.xml:524
msgid "Number 4."
-msgstr ""
+msgstr "Numărul 4."
#: doc/classes/@GlobalScope.xml:527
msgid "Number 5."
-msgstr ""
+msgstr "Numărul 5."
#: doc/classes/@GlobalScope.xml:530
msgid "Number 6."
-msgstr ""
+msgstr "Numărul 6."
#: doc/classes/@GlobalScope.xml:533
msgid "Number 7."
-msgstr ""
+msgstr "Numărul 7."
#: doc/classes/@GlobalScope.xml:536
msgid "Number 8."
-msgstr ""
+msgstr "Numărul 8."
#: doc/classes/@GlobalScope.xml:539
msgid "Number 9."
-msgstr ""
+msgstr "Numărul 9."
#: doc/classes/@GlobalScope.xml:542
msgid ": key."
-msgstr ""
+msgstr "Tasta :"
#: doc/classes/@GlobalScope.xml:545
msgid "; key."
@@ -2034,147 +2042,147 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:563
msgid "A key."
-msgstr ""
+msgstr "Tasta A."
#: doc/classes/@GlobalScope.xml:566
msgid "B key."
-msgstr ""
+msgstr "Tasta B."
#: doc/classes/@GlobalScope.xml:569
msgid "C key."
-msgstr ""
+msgstr "Tasta C."
#: doc/classes/@GlobalScope.xml:572
msgid "D key."
-msgstr ""
+msgstr "Tasta D."
#: doc/classes/@GlobalScope.xml:575
msgid "E key."
-msgstr ""
+msgstr "Tasta E."
#: doc/classes/@GlobalScope.xml:578
msgid "F key."
-msgstr ""
+msgstr "Tasta F."
#: doc/classes/@GlobalScope.xml:581
msgid "G key."
-msgstr ""
+msgstr "Tasta G."
#: doc/classes/@GlobalScope.xml:584
msgid "H key."
-msgstr ""
+msgstr "Tasta H."
#: doc/classes/@GlobalScope.xml:587
msgid "I key."
-msgstr ""
+msgstr "Tasta I."
#: doc/classes/@GlobalScope.xml:590
msgid "J key."
-msgstr ""
+msgstr "Tasta J."
#: doc/classes/@GlobalScope.xml:593
msgid "K key."
-msgstr ""
+msgstr "Tasta K."
#: doc/classes/@GlobalScope.xml:596
msgid "L key."
-msgstr ""
+msgstr "Tasta L."
#: doc/classes/@GlobalScope.xml:599
msgid "M key."
-msgstr ""
+msgstr "Tasta M."
#: doc/classes/@GlobalScope.xml:602
msgid "N key."
-msgstr ""
+msgstr "Tasta N."
#: doc/classes/@GlobalScope.xml:605
msgid "O key."
-msgstr ""
+msgstr "Tasta O."
#: doc/classes/@GlobalScope.xml:608
msgid "P key."
-msgstr ""
+msgstr "Tasta P."
#: doc/classes/@GlobalScope.xml:611
msgid "Q key."
-msgstr ""
+msgstr "Tasta Q."
#: doc/classes/@GlobalScope.xml:614
msgid "R key."
-msgstr ""
+msgstr "Tasta R."
#: doc/classes/@GlobalScope.xml:617
msgid "S key."
-msgstr ""
+msgstr "Tasta S."
#: doc/classes/@GlobalScope.xml:620
msgid "T key."
-msgstr ""
+msgstr "Tasta T."
#: doc/classes/@GlobalScope.xml:623
msgid "U key."
-msgstr ""
+msgstr "Tasta U."
#: doc/classes/@GlobalScope.xml:626
msgid "V key."
-msgstr ""
+msgstr "Tasta V."
#: doc/classes/@GlobalScope.xml:629
msgid "W key."
-msgstr ""
+msgstr "Tasta W."
#: doc/classes/@GlobalScope.xml:632
msgid "X key."
-msgstr ""
+msgstr "Tasta X."
#: doc/classes/@GlobalScope.xml:635
msgid "Y key."
-msgstr ""
+msgstr "Tasta Y."
#: doc/classes/@GlobalScope.xml:638
msgid "Z key."
-msgstr ""
+msgstr "Tasta Z."
#: doc/classes/@GlobalScope.xml:641
msgid "[ key."
-msgstr ""
+msgstr "Tasta ["
#: doc/classes/@GlobalScope.xml:644
msgid "\\ key."
-msgstr ""
+msgstr "Tasta \\"
#: doc/classes/@GlobalScope.xml:647
msgid "] key."
-msgstr ""
+msgstr "Tasta ]"
#: doc/classes/@GlobalScope.xml:650
msgid "^ key."
-msgstr ""
+msgstr "Tasta ^"
#: doc/classes/@GlobalScope.xml:653
msgid "_ key."
-msgstr ""
+msgstr "Tasta _"
#: doc/classes/@GlobalScope.xml:656
msgid "` key."
-msgstr ""
+msgstr "Tasta `"
#: doc/classes/@GlobalScope.xml:659
msgid "{ key."
-msgstr ""
+msgstr "Tasta {"
#: doc/classes/@GlobalScope.xml:662
msgid "| key."
-msgstr ""
+msgstr "Tasta |"
#: doc/classes/@GlobalScope.xml:665
msgid "} key."
-msgstr ""
+msgstr "Tasta }"
#: doc/classes/@GlobalScope.xml:668
msgid "~ key."
-msgstr ""
+msgstr "Tasta ~"
#: doc/classes/@GlobalScope.xml:671
msgid "Non-breakable space key."
@@ -3592,112 +3600,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4775,7 +4792,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -10174,17 +10191,21 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10193,24 +10214,24 @@ msgid ""
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10224,62 +10245,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10287,35 +10308,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10323,13 +10344,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10341,77 +10362,77 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr ""
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:131
+#: doc/classes/BakedLightmap.xml:132
msgid ""
"Returns if lightmapper can't be created. Unless you are using a custom "
"lightmapper, please report this as bug."
msgstr ""
-#: doc/classes/BakedLightmap.xml:134
+#: doc/classes/BakedLightmap.xml:135
msgid ""
"There is no root node to start baking from. Either provide [code]from_node[/"
"code] argument or attach this node to a parent that should be used as root."
msgstr ""
-#: doc/classes/BakedLightmap.xml:137
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:140
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:143
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:146
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10867,8 +10888,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -24880,21 +24904,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -24903,14 +24938,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -24920,80 +24959,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -29209,7 +29248,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30521,7 +30562,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30586,22 +30628,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30616,7 +30660,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30624,19 +30668,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30707,7 +30751,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30765,7 +30810,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -34308,7 +34355,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37621,7 +37668,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37651,14 +37698,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37668,7 +37715,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -38321,79 +38368,79 @@ msgstr ""
#: doc/classes/OS.xml:1012
msgid "Sunday."
-msgstr ""
+msgstr "Duminică."
#: doc/classes/OS.xml:1015
msgid "Monday."
-msgstr ""
+msgstr "Luni."
#: doc/classes/OS.xml:1018
msgid "Tuesday."
-msgstr ""
+msgstr "Marți."
#: doc/classes/OS.xml:1021
msgid "Wednesday."
-msgstr ""
+msgstr "Miercuri."
#: doc/classes/OS.xml:1024
msgid "Thursday."
-msgstr ""
+msgstr "Joi."
#: doc/classes/OS.xml:1027
msgid "Friday."
-msgstr ""
+msgstr "Vineri."
#: doc/classes/OS.xml:1030
msgid "Saturday."
-msgstr ""
+msgstr "Sâmbătă."
#: doc/classes/OS.xml:1033
msgid "January."
-msgstr ""
+msgstr "Ianuarie."
#: doc/classes/OS.xml:1036
msgid "February."
-msgstr ""
+msgstr "Februarie."
#: doc/classes/OS.xml:1039
msgid "March."
-msgstr ""
+msgstr "Martie."
#: doc/classes/OS.xml:1042
msgid "April."
-msgstr ""
+msgstr "Aprilie."
#: doc/classes/OS.xml:1045
msgid "May."
-msgstr ""
+msgstr "Mai."
#: doc/classes/OS.xml:1048
msgid "June."
-msgstr ""
+msgstr "Iunie."
#: doc/classes/OS.xml:1051
msgid "July."
-msgstr ""
+msgstr "Iulie."
#: doc/classes/OS.xml:1054
msgid "August."
-msgstr ""
+msgstr "August."
#: doc/classes/OS.xml:1057
msgid "September."
-msgstr ""
+msgstr "Septembrie."
#: doc/classes/OS.xml:1060
msgid "October."
-msgstr ""
+msgstr "Octombrie."
#: doc/classes/OS.xml:1063
msgid "November."
-msgstr ""
+msgstr "Noiembrie."
#: doc/classes/OS.xml:1066
msgid "December."
-msgstr ""
+msgstr "Decembrie."
#: doc/classes/OS.xml:1069
msgid ""
@@ -40153,17 +40200,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40181,11 +40254,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40380,7 +40453,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41182,6 +41257,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41199,7 +41292,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41313,7 +41406,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -43854,24 +43949,30 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:282
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:285
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:288
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43881,7 +43982,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:291
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43891,27 +43992,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:294
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:297
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:300
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:303
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -43919,81 +44020,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:306
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:309
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:312
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:315
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:318
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:321
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:324
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:327
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:330
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:333
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:336
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:339
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:342
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -44001,109 +44102,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:345
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:348
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:351
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:354
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:357
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:360
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:363
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:366
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:369
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:372
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:375
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:378
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:381
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:384
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:387
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:390
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:393
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:396
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:399
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44114,91 +44215,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:404
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:407
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:410
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:413
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:416
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:419
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:422
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:425
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:428
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:431
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:434
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:437
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:440
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:443
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:446
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:449
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:452
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44207,13 +44308,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:456
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:459
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44223,7 +44324,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:464
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44231,19 +44332,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:469
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:473
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:477
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44257,45 +44358,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:482
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:485
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:489
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:492
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:495
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:498
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:501
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44304,7 +44405,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:504
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44315,7 +44416,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:508
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44331,14 +44432,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:516
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:519
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44346,49 +44447,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:522
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:525
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:530
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:533
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:536
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:539
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:542
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:545
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:548
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44397,7 +44498,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:552
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44405,7 +44506,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:556
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44413,7 +44514,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:560
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44423,7 +44524,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:564
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44432,7 +44533,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:568
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44441,7 +44542,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:572
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44451,7 +44552,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:576
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44459,7 +44560,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:580
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44469,7 +44570,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:584
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44479,7 +44580,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:588
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44487,7 +44588,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:592
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44496,7 +44597,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:596
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44504,7 +44605,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:600
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44516,477 +44617,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:606
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:609
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:612
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:615
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:618
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:621
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:624
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:627
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:630
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:633
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:636
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:639
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:642
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:645
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:648
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:651
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:654
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:657
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:660
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:663
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:666
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:669
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:672
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:675
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:678
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:681
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:684
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:687
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:690
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:693
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:696
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:699
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:702
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:705
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:708
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:711
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:714
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:717
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:720
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:723
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:726
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:729
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:732
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:735
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:738
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:741
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:744
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:747
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:750
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:753
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:756
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:759
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:762
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:765
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:768
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:771
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:774
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:777
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:780
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:783
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:786
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:789
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:792
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:795
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:798
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:801
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:804
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:807
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:810
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:813
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:816
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:819
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:822
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:825
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:828
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:831
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:834
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:837
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:840
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:843
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:846
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:849
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:852
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:855
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:858
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:861
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:864
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:867
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:870
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:873
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:876
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:879
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:882
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:885
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:888
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:891
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:894
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:897
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:900
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:903
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:906
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:909
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:912
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:915
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:918
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:921
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:924
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:927
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:930
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:933
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:936
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:939
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:942
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:947
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:950
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -44994,92 +45095,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:953
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:956
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:959
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:962
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:965
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:968
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:971
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:974
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:977
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:980
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:983
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:986
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:989
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:992
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:995
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:998
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1001
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1004
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -45089,33 +45190,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1008
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1011
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1014
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1018
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1022
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45128,7 +45229,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1026
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45140,7 +45241,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1034
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45152,7 +45253,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1042
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45165,7 +45266,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1046
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45173,28 +45274,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1050
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1054
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1057
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1060
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45204,25 +45305,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1064
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1067
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1070
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1073
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45235,7 +45336,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1077
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45247,7 +45348,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1085
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45259,7 +45360,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1093
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45272,13 +45373,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1097
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1100
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45286,11 +45387,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1104
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1107
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45304,7 +45405,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1113
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45313,7 +45414,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1117
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45329,7 +45430,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1122
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45339,7 +45440,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1126
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45349,7 +45450,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1130
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45360,7 +45461,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1134
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45370,7 +45471,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1138
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45378,7 +45479,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1142
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45389,7 +45490,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1146
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45404,7 +45505,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1152
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45413,13 +45514,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1157
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1160
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45428,7 +45529,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1163
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45438,7 +45539,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1166
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45450,7 +45551,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1169
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45460,24 +45561,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1172
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1175
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1178
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1181
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45486,7 +45587,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1184
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45494,7 +45595,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1187
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45503,7 +45604,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1190
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45513,7 +45614,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1194
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45521,31 +45622,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1198
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1201
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1204
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1207
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1210
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45553,7 +45654,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1213
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45563,21 +45664,21 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1216
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1219
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
"iOS specific override for [member rendering/gles2/compatibility/"
"disable_half_float], due to poor support for half-float vertex compression "
"on many devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
"If [code]true[/code] and available on the target Android device, enables "
"high floating point precision for all shader computations in GLES2.\n"
@@ -45585,31 +45686,31 @@ msgid ""
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1226
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1229
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1232
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1235
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1238
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45617,7 +45718,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1241
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45627,7 +45728,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1244
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45636,7 +45737,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1247
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45645,20 +45746,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1250
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1253
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1256
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45667,7 +45768,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1259
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45675,7 +45776,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45684,7 +45785,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1266
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45694,20 +45795,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1275
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45716,13 +45817,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45732,46 +45833,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1294
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1297
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1300
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1303
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1306
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45781,7 +45882,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45793,7 +45894,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1317
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45801,7 +45902,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45809,7 +45910,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1324
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45818,7 +45919,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1327
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45832,7 +45933,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1332
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45842,7 +45943,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1335
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45851,7 +45952,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1338
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45861,54 +45962,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1341
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1344
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1347
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1350
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1353
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1356
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1359
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -45919,61 +46020,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1366
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1369
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1372
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1375
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1378
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1381
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1384
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1387
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -45984,7 +46085,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1394
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -45993,26 +46094,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400
-#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1409
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1412
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -46023,20 +46124,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1419
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1426
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -46048,52 +46149,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1436
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1439
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1442
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1445
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1448
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1451
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1454
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -46101,7 +46202,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -46114,7 +46215,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46126,7 +46227,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46138,7 +46239,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46150,7 +46251,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46162,7 +46263,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1481
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46200,7 +46301,7 @@ msgstr ""
#: doc/classes/Quat.xml:4
msgid "Quaternion."
-msgstr ""
+msgstr "Cuaternion."
#: doc/classes/Quat.xml:7
msgid ""
@@ -46826,40 +46927,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46867,14 +46982,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49209,6 +49324,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49226,7 +49357,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49234,11 +49365,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49248,19 +49379,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54675,20 +54806,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54699,28 +54835,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54732,19 +54868,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -59812,7 +59948,7 @@ msgstr ""
#: modules/upnp/doc_classes/UPNPDevice.xml:66
msgid "OK."
-msgstr ""
+msgstr "OK."
#: modules/upnp/doc_classes/UPNPDevice.xml:72
msgid "Empty HTTP response."
@@ -59828,7 +59964,7 @@ msgstr ""
#: modules/upnp/doc_classes/UPNPDevice.xml:81
msgid "Disconnected."
-msgstr ""
+msgstr "Deconectat."
#: modules/upnp/doc_classes/UPNPDevice.xml:84
msgid "Unknown device."
diff --git a/doc/translations/ru.po b/doc/translations/ru.po
index 4dd2aa3653..39386f2f63 100644
--- a/doc/translations/ru.po
+++ b/doc/translations/ru.po
@@ -27,12 +27,13 @@
# Alexander Sinitsyn <almoig747@gmail.com>, 2021.
# Ð¢Ð¾Ð»Ñ Ð‘Ð¾Ð³Ð¾Ð¼Ð¾Ð»Ð¾Ð² <tolya.bogomolov2004@gmail.com>, 2021.
# Rustam Alieskerov <rustam.aleskerov7@gmail.com>, 2021.
+# Vladimir Svity <development.openworld@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-10-31 13:40+0000\n"
-"Last-Translator: Rustam Alieskerov <rustam.aleskerov7@gmail.com>\n"
+"PO-Revision-Date: 2021-11-11 16:02+0000\n"
+"Last-Translator: Сергей Волков <zerosar4@gmail.com>\n"
"Language-Team: Russian <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/ru/>\n"
"Language: ru\n"
@@ -41,7 +42,7 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -182,10 +183,10 @@ msgid ""
"s = asin(0.5)\n"
"[/codeblock]"
msgstr ""
-"Возвращает аркÑÐ¸Ð½ÑƒÑ Ñ‡Ð¸Ñла [code]s[/code] в радианах. ИÑпользуетÑÑ Ð´Ð»Ñ "
-"Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ ÑƒÐ³Ð»Ð°, ÑÐ¸Ð½ÑƒÑ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð³Ð¾ равен [code]s[/code]. ЧиÑло [code]s[/code] "
-"должно быть в промежутке между [code]-1.0[/code] и [code]1.0[/code] "
-"(включительно), иначе [method asin] вернет [constant NAN].\n"
+"Возвращает арккоÑÐ¸Ð½ÑƒÑ Ñ‡Ð¸Ñла [code]s[/code] в радианах. ИÑпользуетÑÑ Ð´Ð»Ñ "
+"Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ ÑƒÐ³Ð»Ð°, коÑÐ¸Ð½ÑƒÑ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð³Ð¾ равен [code]s[/code]. ЧиÑло [code]s[/code] "
+"должно быть между [code]-1.0[/code] и [code]1.0[/code] (включительно), в "
+"противном Ñлучае [method asin] вернет [constant NAN].\n"
"[codeblock]\n"
"# s равно 0.523599, или 30 градуÑов, еÑли конвертировать Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ "
"rad2deg(s)\n"
@@ -4608,22 +4609,31 @@ msgstr ""
"Возвращает [code]true[/code] еÑли Ñтот [AABB] полноÑтью закрывает другой."
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
-msgstr "Возвращает раÑширенный [AABB], включающий данную точку."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
+msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr "Возвращает объем [AABB]."
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr "Возвращает позицию 8-ми точек [AABB] в проÑтранÑтве."
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr "Возвращает Ñамую длинную нормализованную оÑÑŒ [AABB]."
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
@@ -4631,15 +4641,15 @@ msgstr ""
"Возвращает Ð¸Ð½Ð´ÐµÐºÑ Ñамой длинной оÑи [AABB] (в ÑоответÑтвии Ñ ÐºÐ¾Ð½Ñтантой "
"[Vector3] [code]AXIS_*[/code])."
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr "Возвращает ÑкалÑрную длину Ñамой длинной оÑи [AABB]."
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr "Возвращает нормализованную наикратчайшую оÑÑŒ [AABB]."
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
@@ -4647,11 +4657,11 @@ msgstr ""
"Возвращает Ð¸Ð½Ð´ÐµÐºÑ Ñамой короткой оÑи [AABB] (в ÑоответÑтвии Ñ Ð¿ÐµÑ€ÐµÑ‡Ð¸Ñлением "
"[Vector3]::AXIS*)."
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr "Возвращает ÑкалÑрную длину наикратчайшей оÑи [AABB]."
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
@@ -4659,7 +4669,7 @@ msgstr ""
"Возвращает точку опоры в заданном направлении. Это полезно Ð´Ð»Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚Ð¼Ð¾Ð² "
"Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¸Ñ Ñтолкновений."
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
@@ -4667,19 +4677,19 @@ msgstr ""
"Возвращает копию [AABB], выращенную на заданное количеÑтво единиц в Ñторону "
"вÑех Ñторон."
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr "Возвращает [code]true[/code], еÑли [AABB] плоÑкий или пуÑтой."
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr "Возвращает [code]true[/code], еÑли [AABB] пуÑÑ‚."
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr "Возвращает [code]true[/code], еÑли [AABB] Ñодержит точку."
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
@@ -4687,17 +4697,17 @@ msgstr ""
"Возвращает переÑечение двух [AABB]. ПуÑтой AABB (размером 0,0,0) "
"возвращаетÑÑ Ð¿Ñ€Ð¸ ошибке."
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr "Возвращает [code]true[/code], еÑли [AABB] переÑекаетÑÑ Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼."
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
"Возвращает [code]true[/code], еÑли [AABB] находитÑÑ Ð¿Ð¾ обе Ñтороны от "
"плоÑкоÑти."
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
@@ -4705,7 +4715,7 @@ msgstr ""
"Возвращает [code]true[/code], еÑли [AABB] переÑекает отрезок прÑмой между "
"[code]from[/code] и [code]to[/code]."
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
@@ -4715,14 +4725,14 @@ msgstr ""
"приблизительно равны, Ð²Ñ‹Ð·Ñ‹Ð²Ð°Ñ [method @GDScript.is_equal_approx] Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ "
"компонента."
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
"Возвращает больший [AABB], Ñодержащий как Ñтот [AABB], так и [code]with[/"
"code]."
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
@@ -4730,11 +4740,11 @@ msgstr ""
"Конечный угол. РаÑÑчитываетÑÑ ÐºÐ°Ðº [code]position + size[/code]. УÑтановка "
"Ñтого Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½Ð¸Ñ‚ размер."
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr "Ðачальный угол. Обычно имеет Ð¼ÐµÐ½ÑŒÑˆÐ¸Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ, чем у [member end]."
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
#, fuzzy
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
@@ -6024,7 +6034,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -11632,17 +11642,21 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -11651,24 +11665,24 @@ msgid ""
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -11682,62 +11696,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -11745,35 +11759,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -11781,13 +11795,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -11799,78 +11813,78 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
#, fuzzy
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr "Возвращает Ð°Ñ€ÐºÑ‚Ð°Ð½Ð³ÐµÐ½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð²."
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:131
+#: doc/classes/BakedLightmap.xml:132
msgid ""
"Returns if lightmapper can't be created. Unless you are using a custom "
"lightmapper, please report this as bug."
msgstr ""
-#: doc/classes/BakedLightmap.xml:134
+#: doc/classes/BakedLightmap.xml:135
msgid ""
"There is no root node to start baking from. Either provide [code]from_node[/"
"code] argument or attach this node to a parent that should be used as root."
msgstr ""
-#: doc/classes/BakedLightmap.xml:137
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:140
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:143
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:146
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -12334,8 +12348,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -26495,21 +26512,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -26518,14 +26546,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -26535,36 +26567,36 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
#, fuzzy
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
@@ -26572,46 +26604,46 @@ msgstr ""
"ЕÑли [code]true[/code], Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ñ [member animation] воÑпроизводитÑÑ Ð² данный "
"момент."
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -30842,7 +30874,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -32180,7 +32214,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -32245,22 +32280,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -32275,7 +32312,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -32283,19 +32320,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -32366,7 +32403,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -32424,7 +32462,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -35991,7 +36031,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -39318,7 +39358,7 @@ msgstr "Возвращает чиÑло Ñлементов в маÑÑиве."
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -39348,14 +39388,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -39365,7 +39405,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -41885,17 +41925,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -41913,11 +41979,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -42112,7 +42178,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -42915,6 +42983,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -42932,7 +43018,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -43046,7 +43132,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -45620,24 +45708,30 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:282
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:285
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:288
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -45647,7 +45741,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:291
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -45657,27 +45751,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:294
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:297
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:300
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:303
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -45685,81 +45779,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:306
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:309
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:312
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:315
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:318
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:321
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:324
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:327
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:330
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:333
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:336
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:339
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:342
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -45767,80 +45861,80 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:345
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:348
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:351
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:354
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:357
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:360
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:363
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:366
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:369
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:372
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:375
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:378
+#: doc/classes/ProjectSettings.xml:380
#, fuzzy
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr "ЕÑли [code]true[/code], текÑтура будет центрирована."
-#: doc/classes/ProjectSettings.xml:381
+#: doc/classes/ProjectSettings.xml:383
#, fuzzy
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
@@ -45848,32 +45942,32 @@ msgstr ""
"ЕÑли [code]true[/code], Ð°Ð½Ð¸Ð¼Ð°Ñ†Ð¸Ñ [member animation] воÑпроизводитÑÑ Ð² данный "
"момент."
-#: doc/classes/ProjectSettings.xml:384
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:387
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:390
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:393
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:396
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:399
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -45884,91 +45978,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:404
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:407
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:410
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:413
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:416
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:419
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:422
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:425
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:428
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:431
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:434
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:437
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:440
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:443
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:446
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:449
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:452
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -45977,13 +46071,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:456
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:459
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -45993,7 +46087,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:464
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -46001,19 +46095,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:469
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:473
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:477
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -46027,45 +46121,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:482
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:485
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:489
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:492
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:495
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:498
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:501
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -46074,7 +46168,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:504
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -46085,7 +46179,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:508
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -46101,14 +46195,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:516
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:519
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -46116,49 +46210,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:522
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:525
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:530
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:533
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:536
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:539
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:542
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:545
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:548
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -46167,7 +46261,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:552
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -46175,7 +46269,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:556
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -46183,7 +46277,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:560
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -46193,7 +46287,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:564
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -46202,7 +46296,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:568
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -46211,7 +46305,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:572
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -46221,7 +46315,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:576
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -46229,7 +46323,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:580
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -46239,7 +46333,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:584
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -46249,7 +46343,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:588
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -46257,7 +46351,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:592
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -46266,7 +46360,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:596
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -46274,7 +46368,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:600
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -46286,477 +46380,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:606
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:609
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:612
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:615
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:618
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:621
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:624
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:627
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:630
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:633
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:636
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:639
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:642
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:645
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:648
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:651
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:654
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:657
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:660
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:663
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:666
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:669
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:672
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:675
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:678
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:681
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:684
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:687
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:690
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:693
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:696
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:699
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:702
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:705
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:708
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:711
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:714
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:717
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:720
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:723
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:726
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:729
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:732
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:735
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:738
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:741
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:744
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:747
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:750
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:753
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:756
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:759
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:762
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:765
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:768
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:771
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:774
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:777
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:780
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:783
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:786
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:789
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:792
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:795
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:798
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:801
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:804
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:807
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:810
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:813
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:816
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:819
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:822
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:825
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:828
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:831
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:834
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:837
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:840
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:843
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:846
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:849
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:852
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:855
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:858
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:861
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:864
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:867
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:870
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:873
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:876
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:879
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:882
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:885
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:888
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:891
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:894
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:897
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:900
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:903
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:906
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:909
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:912
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:915
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:918
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:921
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:924
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:927
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:930
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:933
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:936
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:939
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:942
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:947
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:950
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -46764,92 +46858,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:953
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:956
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:959
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:962
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:965
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:968
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:971
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:974
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:977
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:980
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:983
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:986
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:989
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:992
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:995
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:998
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1001
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1004
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -46859,33 +46953,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1008
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1011
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1014
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1018
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1022
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -46898,7 +46992,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1026
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -46910,7 +47004,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1034
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -46922,7 +47016,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1042
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -46935,7 +47029,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1046
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -46943,28 +47037,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1050
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1054
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1057
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1060
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -46974,25 +47068,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1064
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1067
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1070
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1073
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -47005,7 +47099,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1077
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -47017,7 +47111,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1085
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -47029,7 +47123,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1093
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -47042,13 +47136,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1097
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1100
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -47056,11 +47150,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1104
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1107
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -47074,7 +47168,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1113
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -47083,7 +47177,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1117
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -47099,7 +47193,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1122
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -47109,7 +47203,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1126
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -47119,7 +47213,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1130
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -47130,7 +47224,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1134
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -47140,7 +47234,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1138
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -47148,7 +47242,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1142
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -47159,7 +47253,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1146
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -47174,7 +47268,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1152
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -47183,13 +47277,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1157
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1160
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -47198,7 +47292,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1163
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -47208,7 +47302,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1166
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -47220,7 +47314,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1169
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -47230,24 +47324,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1172
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1175
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1178
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1181
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -47256,7 +47350,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1184
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -47264,7 +47358,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1187
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -47273,7 +47367,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1190
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -47283,7 +47377,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1194
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -47291,31 +47385,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1198
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1201
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1204
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1207
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1210
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -47323,7 +47417,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1213
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -47333,21 +47427,21 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1216
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1219
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
"iOS specific override for [member rendering/gles2/compatibility/"
"disable_half_float], due to poor support for half-float vertex compression "
"on many devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
"If [code]true[/code] and available on the target Android device, enables "
"high floating point precision for all shader computations in GLES2.\n"
@@ -47355,31 +47449,31 @@ msgid ""
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1226
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1229
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1232
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1235
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1238
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -47387,7 +47481,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1241
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -47397,7 +47491,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1244
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -47406,7 +47500,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1247
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -47415,20 +47509,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1250
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1253
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1256
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -47437,7 +47531,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1259
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -47445,7 +47539,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -47454,7 +47548,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1266
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -47464,20 +47558,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1275
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -47486,13 +47580,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -47502,46 +47596,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1294
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1297
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1300
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1303
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1306
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -47551,7 +47645,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -47563,7 +47657,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1317
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -47571,7 +47665,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -47579,7 +47673,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1324
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -47588,7 +47682,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1327
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -47602,7 +47696,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1332
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -47612,7 +47706,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1335
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -47621,7 +47715,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1338
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -47631,54 +47725,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1341
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1344
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1347
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1350
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1353
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1356
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1359
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -47689,61 +47783,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1366
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1369
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1372
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1375
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1378
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1381
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1384
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1387
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -47754,7 +47848,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1394
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -47763,26 +47857,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400
-#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1409
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1412
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -47793,20 +47887,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1419
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1426
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -47818,52 +47912,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1436
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1439
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1442
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1445
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1448
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1451
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1454
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -47871,7 +47965,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -47884,7 +47978,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -47896,7 +47990,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -47908,7 +48002,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -47920,7 +48014,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -47932,7 +48026,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1481
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -48648,40 +48742,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -48689,14 +48797,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -51035,6 +51143,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -51052,7 +51176,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -51060,11 +51184,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -51074,19 +51198,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -56533,20 +56657,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -56557,28 +56686,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -56590,19 +56719,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -71713,6 +71842,11 @@ msgstr ""
msgid ""
"If [code]true[/code], child nodes are sorted, otherwise sorting is disabled."
msgstr ""
+"ЕÑли [code]true[/code], дочерние узлы будут отÑортированы, иначе Ñортировка "
+"будет отключена."
+
+#~ msgid "Returns this [AABB] expanded to include a given point."
+#~ msgstr "Возвращает раÑширенный [AABB], включающий данную точку."
#~ msgid "Returns the label used for built-in text."
#~ msgstr "Возвращает метку (Label), иÑпользуемую Ð´Ð»Ñ Ð²Ñтроенного текÑта."
diff --git a/doc/translations/sk.po b/doc/translations/sk.po
index a456ae45ff..13df41f55c 100644
--- a/doc/translations/sk.po
+++ b/doc/translations/sk.po
@@ -6,12 +6,13 @@
# Richard Urban <redasuio1@gmail.com>, 2020.
# Pierre Stempin <pierre.stempin@gmail.com>, 2020.
# Mario-projects-dev <m.vitek.mv@gmail.com>, 2021.
+# vrecusko <vrecusko20@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-04-11 22:03+0000\n"
-"Last-Translator: Mario-projects-dev <m.vitek.mv@gmail.com>\n"
+"PO-Revision-Date: 2021-11-11 16:02+0000\n"
+"Last-Translator: vrecusko <vrecusko20@gmail.com>\n"
"Language-Team: Slovak <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/sk/>\n"
"Language: sk\n"
@@ -19,7 +20,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-"X-Generator: Weblate 4.6-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -51,7 +52,7 @@ msgstr ""
#: doc/tools/make_rst.py
msgid "Constants"
-msgstr ""
+msgstr "Konštanty"
#: doc/tools/make_rst.py
msgid "Property Descriptions"
@@ -3591,112 +3592,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4774,7 +4784,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -10173,17 +10183,21 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10192,24 +10206,24 @@ msgid ""
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10223,62 +10237,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10286,35 +10300,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10322,13 +10336,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10340,77 +10354,77 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr ""
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:131
+#: doc/classes/BakedLightmap.xml:132
msgid ""
"Returns if lightmapper can't be created. Unless you are using a custom "
"lightmapper, please report this as bug."
msgstr ""
-#: doc/classes/BakedLightmap.xml:134
+#: doc/classes/BakedLightmap.xml:135
msgid ""
"There is no root node to start baking from. Either provide [code]from_node[/"
"code] argument or attach this node to a parent that should be used as root."
msgstr ""
-#: doc/classes/BakedLightmap.xml:137
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:140
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:143
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:146
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10866,8 +10880,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -24879,21 +24896,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -24902,14 +24930,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -24919,80 +24951,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -29208,7 +29240,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30520,7 +30554,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30585,22 +30620,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30615,7 +30652,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30623,19 +30660,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30706,7 +30743,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30764,7 +30802,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -34307,7 +34347,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37620,7 +37660,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37650,14 +37690,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37667,7 +37707,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40152,17 +40192,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40180,11 +40246,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40379,7 +40445,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41181,6 +41249,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41198,7 +41284,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41312,7 +41398,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -43853,24 +43941,30 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:282
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:285
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:288
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43880,7 +43974,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:291
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43890,27 +43984,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:294
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:297
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:300
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:303
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -43918,81 +44012,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:306
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:309
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:312
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:315
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:318
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:321
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:324
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:327
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:330
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:333
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:336
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:339
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:342
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -44000,109 +44094,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:345
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:348
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:351
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:354
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:357
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:360
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:363
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:366
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:369
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:372
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:375
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:378
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:381
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:384
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:387
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:390
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:393
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:396
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:399
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44113,91 +44207,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:404
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:407
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:410
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:413
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:416
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:419
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:422
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:425
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:428
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:431
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:434
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:437
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:440
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:443
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:446
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:449
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:452
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44206,13 +44300,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:456
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:459
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44222,7 +44316,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:464
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44230,19 +44324,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:469
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:473
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:477
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44256,45 +44350,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:482
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:485
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:489
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:492
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:495
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:498
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:501
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44303,7 +44397,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:504
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44314,7 +44408,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:508
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44330,14 +44424,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:516
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:519
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44345,49 +44439,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:522
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:525
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:530
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:533
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:536
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:539
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:542
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:545
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:548
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44396,7 +44490,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:552
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44404,7 +44498,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:556
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44412,7 +44506,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:560
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44422,7 +44516,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:564
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44431,7 +44525,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:568
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44440,7 +44534,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:572
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44450,7 +44544,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:576
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44458,7 +44552,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:580
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44468,7 +44562,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:584
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44478,7 +44572,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:588
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44486,7 +44580,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:592
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44495,7 +44589,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:596
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44503,7 +44597,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:600
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44515,477 +44609,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:606
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:609
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:612
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:615
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:618
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:621
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:624
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:627
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:630
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:633
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:636
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:639
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:642
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:645
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:648
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:651
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:654
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:657
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:660
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:663
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:666
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:669
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:672
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:675
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:678
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:681
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:684
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:687
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:690
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:693
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:696
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:699
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:702
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:705
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:708
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:711
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:714
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:717
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:720
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:723
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:726
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:729
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:732
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:735
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:738
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:741
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:744
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:747
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:750
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:753
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:756
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:759
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:762
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:765
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:768
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:771
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:774
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:777
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:780
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:783
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:786
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:789
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:792
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:795
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:798
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:801
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:804
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:807
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:810
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:813
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:816
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:819
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:822
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:825
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:828
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:831
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:834
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:837
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:840
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:843
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:846
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:849
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:852
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:855
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:858
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:861
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:864
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:867
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:870
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:873
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:876
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:879
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:882
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:885
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:888
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:891
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:894
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:897
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:900
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:903
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:906
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:909
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:912
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:915
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:918
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:921
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:924
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:927
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:930
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:933
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:936
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:939
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:942
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:947
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:950
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -44993,92 +45087,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:953
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:956
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:959
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:962
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:965
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:968
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:971
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:974
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:977
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:980
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:983
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:986
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:989
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:992
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:995
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:998
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1001
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1004
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -45088,33 +45182,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1008
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1011
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1014
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1018
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1022
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45127,7 +45221,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1026
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45139,7 +45233,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1034
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45151,7 +45245,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1042
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45164,7 +45258,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1046
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45172,28 +45266,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1050
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1054
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1057
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1060
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45203,25 +45297,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1064
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1067
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1070
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1073
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45234,7 +45328,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1077
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45246,7 +45340,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1085
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45258,7 +45352,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1093
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45271,13 +45365,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1097
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1100
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45285,11 +45379,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1104
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1107
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45303,7 +45397,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1113
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45312,7 +45406,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1117
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45328,7 +45422,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1122
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45338,7 +45432,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1126
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45348,7 +45442,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1130
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45359,7 +45453,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1134
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45369,7 +45463,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1138
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45377,7 +45471,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1142
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45388,7 +45482,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1146
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45403,7 +45497,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1152
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45412,13 +45506,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1157
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1160
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45427,7 +45521,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1163
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45437,7 +45531,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1166
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45449,7 +45543,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1169
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45459,24 +45553,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1172
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1175
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1178
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1181
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45485,7 +45579,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1184
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45493,7 +45587,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1187
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45502,7 +45596,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1190
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45512,7 +45606,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1194
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45520,31 +45614,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1198
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1201
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1204
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1207
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1210
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45552,7 +45646,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1213
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45562,21 +45656,21 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1216
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1219
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
"iOS specific override for [member rendering/gles2/compatibility/"
"disable_half_float], due to poor support for half-float vertex compression "
"on many devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
"If [code]true[/code] and available on the target Android device, enables "
"high floating point precision for all shader computations in GLES2.\n"
@@ -45584,31 +45678,31 @@ msgid ""
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1226
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1229
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1232
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1235
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1238
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45616,7 +45710,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1241
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45626,7 +45720,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1244
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45635,7 +45729,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1247
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45644,20 +45738,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1250
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1253
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1256
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45666,7 +45760,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1259
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45674,7 +45768,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45683,7 +45777,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1266
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45693,20 +45787,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1275
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45715,13 +45809,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45731,46 +45825,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1294
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1297
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1300
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1303
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1306
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45780,7 +45874,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45792,7 +45886,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1317
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45800,7 +45894,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45808,7 +45902,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1324
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45817,7 +45911,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1327
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45831,7 +45925,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1332
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45841,7 +45935,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1335
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45850,7 +45944,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1338
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45860,54 +45954,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1341
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1344
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1347
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1350
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1353
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1356
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1359
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -45918,61 +46012,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1366
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1369
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1372
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1375
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1378
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1381
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1384
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1387
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -45983,7 +46077,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1394
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -45992,26 +46086,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400
-#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1409
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1412
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -46022,20 +46116,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1419
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1426
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -46047,52 +46141,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1436
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1439
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1442
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1445
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1448
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1451
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1454
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -46100,7 +46194,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -46113,7 +46207,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46125,7 +46219,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46137,7 +46231,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46149,7 +46243,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46161,7 +46255,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1481
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46825,40 +46919,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46866,14 +46974,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49208,6 +49316,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49225,7 +49349,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49233,11 +49357,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49247,19 +49371,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54674,20 +54798,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54698,28 +54827,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54731,19 +54860,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
diff --git a/doc/translations/sr_Cyrl.po b/doc/translations/sr_Cyrl.po
index 0bb22e02e9..19ba5471c9 100644
--- a/doc/translations/sr_Cyrl.po
+++ b/doc/translations/sr_Cyrl.po
@@ -5,12 +5,13 @@
#
# Младен Габић <cupakabra@protonmail.com>, 2020.
# Pierre Stempin <pierre.stempin@gmail.com>, 2020.
+# ÐлекÑић Владица <vlajkousk@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2020-10-12 09:28+0000\n"
-"Last-Translator: Pierre Stempin <pierre.stempin@gmail.com>\n"
+"PO-Revision-Date: 2021-11-07 22:24+0000\n"
+"Last-Translator: ÐлекÑић Владица <vlajkousk@gmail.com>\n"
"Language-Team: Serbian (cyrillic) <https://hosted.weblate.org/projects/godot-"
"engine/godot-class-reference/sr_Cyrl/>\n"
"Language: sr_Cyrl\n"
@@ -19,27 +20,24 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 4.3-dev\n"
+"X-Generator: Weblate 4.9-dev\n"
#: doc/tools/make_rst.py
-#, fuzzy
msgid "Description"
msgstr "ОпиÑ"
#: doc/tools/make_rst.py
#, fuzzy
msgid "Tutorials"
-msgstr "Туториали"
+msgstr "Подучавања"
#: doc/tools/make_rst.py
-#, fuzzy
msgid "Properties"
msgstr "ОÑобине"
#: doc/tools/make_rst.py
-#, fuzzy
msgid "Methods"
-msgstr "Методе"
+msgstr "ПоÑтупци"
#: doc/tools/make_rst.py
#, fuzzy
@@ -47,9 +45,8 @@ msgid "Theme Properties"
msgstr "ОÑобине Теме"
#: doc/tools/make_rst.py
-#, fuzzy
msgid "Signals"
-msgstr "Сигнали"
+msgstr "Знаци"
#: doc/tools/make_rst.py
#, fuzzy
@@ -57,9 +54,8 @@ msgid "Enumerations"
msgstr "ПопиÑивање"
#: doc/tools/make_rst.py
-#, fuzzy
msgid "Constants"
-msgstr "КонÑтанте"
+msgstr "Ðепроменљиве"
#: doc/tools/make_rst.py
#, fuzzy
@@ -74,14 +70,18 @@ msgstr "ОпиÑи Метода"
#: modules/gdscript/doc_classes/@GDScript.xml:4
#, fuzzy
msgid "Built-in GDScript functions."
-msgstr "Уграђене ГДСкрипта функције."
+msgstr "Уграђена ГДСкрипта извршења."
#: modules/gdscript/doc_classes/@GDScript.xml:7
+#, fuzzy
msgid ""
"List of core built-in GDScript functions. Math functions and other "
"utilities. Everything else is provided by objects. (Keywords: builtin, built "
"in, global functions.)"
msgstr ""
+"СпиÑак Ñржних уграђених ГДСкрипта извршења. Математичка извршења и оÑтале "
+"уÑлуге. Све оÑтало је обезбеђено предметима. (Кључне речи: уграђено, "
+"уграђено, Ñвеобухватна извршења.)"
#: modules/gdscript/doc_classes/@GDScript.xml:19
msgid ""
@@ -3602,112 +3602,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4785,7 +4794,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -10184,17 +10193,21 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10203,24 +10216,24 @@ msgid ""
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10234,62 +10247,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10297,35 +10310,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10333,13 +10346,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10351,77 +10364,77 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr ""
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:131
+#: doc/classes/BakedLightmap.xml:132
msgid ""
"Returns if lightmapper can't be created. Unless you are using a custom "
"lightmapper, please report this as bug."
msgstr ""
-#: doc/classes/BakedLightmap.xml:134
+#: doc/classes/BakedLightmap.xml:135
msgid ""
"There is no root node to start baking from. Either provide [code]from_node[/"
"code] argument or attach this node to a parent that should be used as root."
msgstr ""
-#: doc/classes/BakedLightmap.xml:137
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:140
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:143
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:146
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10877,8 +10890,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -24890,21 +24906,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -24913,14 +24940,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -24930,80 +24961,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -29219,7 +29250,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30531,7 +30564,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30596,22 +30630,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30626,7 +30662,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30634,19 +30670,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30717,7 +30753,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30775,7 +30812,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -34318,7 +34357,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37631,7 +37670,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37661,14 +37700,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37678,7 +37717,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40163,17 +40202,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40191,11 +40256,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40390,7 +40455,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41192,6 +41259,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41209,7 +41294,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41323,7 +41408,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -43864,24 +43951,30 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:282
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:285
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:288
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43891,7 +43984,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:291
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43901,27 +43994,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:294
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:297
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:300
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:303
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -43929,81 +44022,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:306
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:309
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:312
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:315
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:318
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:321
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:324
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:327
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:330
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:333
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:336
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:339
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:342
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -44011,109 +44104,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:345
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:348
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:351
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:354
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:357
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:360
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:363
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:366
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:369
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:372
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:375
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:378
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:381
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:384
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:387
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:390
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:393
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:396
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:399
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44124,91 +44217,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:404
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:407
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:410
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:413
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:416
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:419
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:422
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:425
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:428
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:431
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:434
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:437
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:440
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:443
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:446
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:449
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:452
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44217,13 +44310,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:456
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:459
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44233,7 +44326,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:464
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44241,19 +44334,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:469
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:473
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:477
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44267,45 +44360,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:482
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:485
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:489
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:492
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:495
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:498
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:501
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44314,7 +44407,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:504
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44325,7 +44418,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:508
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44341,14 +44434,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:516
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:519
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44356,49 +44449,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:522
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:525
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:530
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:533
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:536
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:539
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:542
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:545
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:548
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44407,7 +44500,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:552
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44415,7 +44508,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:556
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44423,7 +44516,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:560
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44433,7 +44526,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:564
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44442,7 +44535,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:568
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44451,7 +44544,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:572
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44461,7 +44554,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:576
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44469,7 +44562,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:580
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44479,7 +44572,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:584
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44489,7 +44582,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:588
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44497,7 +44590,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:592
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44506,7 +44599,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:596
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44514,7 +44607,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:600
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44526,477 +44619,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:606
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:609
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:612
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:615
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:618
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:621
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:624
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:627
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:630
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:633
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:636
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:639
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:642
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:645
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:648
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:651
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:654
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:657
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:660
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:663
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:666
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:669
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:672
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:675
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:678
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:681
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:684
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:687
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:690
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:693
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:696
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:699
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:702
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:705
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:708
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:711
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:714
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:717
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:720
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:723
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:726
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:729
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:732
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:735
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:738
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:741
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:744
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:747
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:750
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:753
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:756
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:759
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:762
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:765
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:768
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:771
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:774
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:777
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:780
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:783
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:786
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:789
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:792
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:795
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:798
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:801
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:804
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:807
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:810
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:813
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:816
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:819
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:822
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:825
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:828
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:831
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:834
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:837
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:840
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:843
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:846
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:849
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:852
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:855
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:858
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:861
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:864
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:867
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:870
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:873
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:876
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:879
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:882
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:885
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:888
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:891
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:894
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:897
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:900
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:903
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:906
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:909
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:912
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:915
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:918
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:921
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:924
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:927
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:930
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:933
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:936
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:939
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:942
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:947
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:950
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -45004,92 +45097,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:953
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:956
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:959
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:962
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:965
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:968
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:971
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:974
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:977
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:980
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:983
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:986
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:989
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:992
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:995
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:998
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1001
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1004
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -45099,33 +45192,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1008
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1011
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1014
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1018
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1022
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45138,7 +45231,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1026
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45150,7 +45243,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1034
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45162,7 +45255,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1042
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45175,7 +45268,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1046
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45183,28 +45276,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1050
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1054
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1057
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1060
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45214,25 +45307,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1064
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1067
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1070
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1073
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45245,7 +45338,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1077
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45257,7 +45350,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1085
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45269,7 +45362,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1093
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45282,13 +45375,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1097
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1100
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45296,11 +45389,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1104
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1107
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45314,7 +45407,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1113
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45323,7 +45416,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1117
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45339,7 +45432,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1122
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45349,7 +45442,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1126
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45359,7 +45452,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1130
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45370,7 +45463,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1134
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45380,7 +45473,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1138
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45388,7 +45481,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1142
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45399,7 +45492,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1146
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45414,7 +45507,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1152
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45423,13 +45516,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1157
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1160
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45438,7 +45531,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1163
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45448,7 +45541,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1166
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45460,7 +45553,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1169
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45470,24 +45563,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1172
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1175
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1178
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1181
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45496,7 +45589,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1184
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45504,7 +45597,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1187
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45513,7 +45606,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1190
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45523,7 +45616,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1194
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45531,31 +45624,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1198
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1201
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1204
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1207
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1210
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45563,7 +45656,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1213
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45573,21 +45666,21 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1216
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1219
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
"iOS specific override for [member rendering/gles2/compatibility/"
"disable_half_float], due to poor support for half-float vertex compression "
"on many devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
"If [code]true[/code] and available on the target Android device, enables "
"high floating point precision for all shader computations in GLES2.\n"
@@ -45595,31 +45688,31 @@ msgid ""
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1226
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1229
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1232
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1235
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1238
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45627,7 +45720,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1241
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45637,7 +45730,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1244
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45646,7 +45739,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1247
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45655,20 +45748,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1250
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1253
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1256
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45677,7 +45770,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1259
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45685,7 +45778,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45694,7 +45787,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1266
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45704,20 +45797,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1275
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45726,13 +45819,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45742,46 +45835,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1294
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1297
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1300
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1303
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1306
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45791,7 +45884,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45803,7 +45896,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1317
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45811,7 +45904,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45819,7 +45912,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1324
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45828,7 +45921,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1327
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45842,7 +45935,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1332
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45852,7 +45945,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1335
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45861,7 +45954,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1338
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45871,54 +45964,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1341
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1344
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1347
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1350
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1353
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1356
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1359
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -45929,61 +46022,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1366
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1369
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1372
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1375
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1378
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1381
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1384
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1387
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -45994,7 +46087,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1394
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -46003,26 +46096,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400
-#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1409
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1412
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -46033,20 +46126,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1419
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1426
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -46058,52 +46151,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1436
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1439
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1442
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1445
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1448
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1451
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1454
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -46111,7 +46204,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -46124,7 +46217,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46136,7 +46229,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46148,7 +46241,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46160,7 +46253,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46172,7 +46265,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1481
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46836,40 +46929,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46877,14 +46984,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49219,6 +49326,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49236,7 +49359,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49244,11 +49367,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49258,19 +49381,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54685,20 +54808,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54709,28 +54837,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54742,19 +54870,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
diff --git a/doc/translations/sv.po b/doc/translations/sv.po
index 1f920b3172..d201e0a1f4 100644
--- a/doc/translations/sv.po
+++ b/doc/translations/sv.po
@@ -3587,112 +3587,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4764,7 +4773,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -10141,15 +10150,19 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10158,24 +10171,24 @@ msgid ""
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10189,62 +10202,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10252,35 +10265,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10288,13 +10301,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10306,77 +10319,77 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr ""
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:131
+#: doc/classes/BakedLightmap.xml:132
msgid ""
"Returns if lightmapper can't be created. Unless you are using a custom "
"lightmapper, please report this as bug."
msgstr ""
-#: doc/classes/BakedLightmap.xml:134
+#: doc/classes/BakedLightmap.xml:135
msgid ""
"There is no root node to start baking from. Either provide [code]from_node[/"
"code] argument or attach this node to a parent that should be used as root."
msgstr ""
-#: doc/classes/BakedLightmap.xml:137
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:140
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:143
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:146
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10824,8 +10837,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -24770,20 +24786,31 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr ""
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -24792,14 +24819,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -24809,80 +24840,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -29075,7 +29106,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30374,7 +30407,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30439,22 +30473,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30469,7 +30505,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30477,19 +30513,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30557,7 +30593,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30615,7 +30652,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -34140,7 +34179,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37435,7 +37474,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37465,14 +37504,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37482,7 +37521,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -39960,17 +39999,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -39988,11 +40053,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40187,7 +40252,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -40989,6 +41056,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41006,7 +41091,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41120,7 +41205,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -43660,24 +43747,30 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:282
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:285
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:288
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43687,7 +43780,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:291
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43697,27 +43790,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:294
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:297
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:300
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:303
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -43725,81 +43818,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:306
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:309
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:312
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:315
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:318
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:321
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:324
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:327
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:330
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:333
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:336
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:339
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:342
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -43807,109 +43900,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:345
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:348
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:351
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:354
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:357
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:360
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:363
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:366
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:369
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:372
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:375
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:378
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:381
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:384
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:387
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:390
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:393
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:396
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:399
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -43920,91 +44013,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:404
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:407
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:410
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:413
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:416
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:419
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:422
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:425
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:428
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:431
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:434
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:437
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:440
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:443
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:446
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:449
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:452
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44013,13 +44106,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:456
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:459
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44029,7 +44122,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:464
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44037,19 +44130,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:469
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:473
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:477
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44063,45 +44156,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:482
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:485
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:489
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:492
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:495
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:498
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:501
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44110,7 +44203,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:504
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44121,7 +44214,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:508
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44137,14 +44230,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:516
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:519
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44152,49 +44245,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:522
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:525
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:530
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:533
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:536
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:539
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:542
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:545
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:548
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44203,7 +44296,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:552
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44211,7 +44304,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:556
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44219,7 +44312,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:560
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44229,7 +44322,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:564
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44238,7 +44331,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:568
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44247,7 +44340,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:572
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44257,7 +44350,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:576
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44265,7 +44358,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:580
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44275,7 +44368,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:584
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44285,7 +44378,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:588
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44293,7 +44386,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:592
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44302,7 +44395,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:596
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44310,7 +44403,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:600
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44322,477 +44415,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:606
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:609
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:612
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:615
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:618
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:621
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:624
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:627
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:630
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:633
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:636
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:639
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:642
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:645
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:648
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:651
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:654
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:657
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:660
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:663
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:666
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:669
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:672
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:675
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:678
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:681
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:684
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:687
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:690
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:693
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:696
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:699
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:702
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:705
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:708
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:711
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:714
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:717
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:720
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:723
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:726
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:729
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:732
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:735
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:738
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:741
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:744
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:747
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:750
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:753
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:756
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:759
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:762
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:765
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:768
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:771
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:774
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:777
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:780
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:783
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:786
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:789
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:792
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:795
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:798
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:801
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:804
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:807
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:810
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:813
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:816
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:819
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:822
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:825
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:828
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:831
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:834
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:837
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:840
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:843
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:846
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:849
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:852
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:855
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:858
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:861
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:864
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:867
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:870
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:873
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:876
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:879
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:882
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:885
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:888
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:891
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:894
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:897
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:900
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:903
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:906
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:909
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:912
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:915
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:918
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:921
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:924
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:927
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:930
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:933
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:936
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:939
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:942
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:947
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:950
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -44800,92 +44893,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:953
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:956
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:959
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:962
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:965
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:968
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:971
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:974
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:977
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:980
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:983
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:986
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:989
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:992
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:995
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:998
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1001
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1004
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -44895,33 +44988,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1008
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1011
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1014
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1018
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1022
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44934,7 +45027,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1026
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44946,7 +45039,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1034
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44958,7 +45051,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1042
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44971,7 +45064,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1046
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -44979,28 +45072,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1050
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1054
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1057
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1060
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45010,25 +45103,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1064
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1067
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1070
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1073
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45041,7 +45134,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1077
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45053,7 +45146,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1085
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45065,7 +45158,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1093
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45078,13 +45171,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1097
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1100
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45092,11 +45185,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1104
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1107
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45110,7 +45203,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1113
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45119,7 +45212,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1117
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45135,7 +45228,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1122
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45145,7 +45238,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1126
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45155,7 +45248,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1130
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45166,7 +45259,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1134
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45176,7 +45269,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1138
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45184,7 +45277,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1142
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45195,7 +45288,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1146
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45210,7 +45303,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1152
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45219,13 +45312,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1157
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1160
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45234,7 +45327,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1163
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45244,7 +45337,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1166
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45256,7 +45349,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1169
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45266,24 +45359,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1172
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1175
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1178
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1181
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45292,7 +45385,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1184
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45300,7 +45393,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1187
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45309,7 +45402,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1190
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45319,7 +45412,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1194
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45327,31 +45420,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1198
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1201
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1204
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1207
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1210
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45359,7 +45452,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1213
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45369,21 +45462,21 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1216
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1219
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
"iOS specific override for [member rendering/gles2/compatibility/"
"disable_half_float], due to poor support for half-float vertex compression "
"on many devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
"If [code]true[/code] and available on the target Android device, enables "
"high floating point precision for all shader computations in GLES2.\n"
@@ -45391,31 +45484,31 @@ msgid ""
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1226
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1229
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1232
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1235
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1238
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45423,7 +45516,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1241
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45433,7 +45526,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1244
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45442,7 +45535,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1247
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45451,20 +45544,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1250
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1253
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1256
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45473,7 +45566,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1259
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45481,7 +45574,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45490,7 +45583,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1266
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45500,20 +45593,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1275
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45522,13 +45615,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45538,46 +45631,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1294
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1297
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1300
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1303
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1306
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45587,7 +45680,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45599,7 +45692,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1317
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45607,7 +45700,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45615,7 +45708,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1324
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45624,7 +45717,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1327
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45638,7 +45731,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1332
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45648,7 +45741,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1335
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45657,7 +45750,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1338
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45667,54 +45760,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1341
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1344
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1347
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1350
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1353
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1356
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1359
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -45725,61 +45818,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1366
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1369
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1372
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1375
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1378
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1381
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1384
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1387
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -45790,7 +45883,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1394
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -45799,26 +45892,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400
-#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1409
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1412
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -45829,20 +45922,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1419
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1426
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -45854,52 +45947,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1436
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1439
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1442
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1445
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1448
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1451
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1454
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -45907,7 +46000,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -45920,7 +46013,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -45932,7 +46025,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -45944,7 +46037,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -45956,7 +46049,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -45968,7 +46061,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1481
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46627,40 +46720,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46668,14 +46775,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49002,6 +49109,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49019,7 +49142,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49027,11 +49150,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49041,19 +49164,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54438,20 +54561,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54462,28 +54590,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54495,19 +54623,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
diff --git a/doc/translations/th.po b/doc/translations/th.po
index 9d6197823a..028fd593bb 100644
--- a/doc/translations/th.po
+++ b/doc/translations/th.po
@@ -3690,112 +3690,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4873,7 +4882,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -10274,17 +10283,21 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10293,24 +10306,24 @@ msgid ""
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10324,62 +10337,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10387,35 +10400,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10423,13 +10436,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10441,77 +10454,77 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr ""
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:131
+#: doc/classes/BakedLightmap.xml:132
msgid ""
"Returns if lightmapper can't be created. Unless you are using a custom "
"lightmapper, please report this as bug."
msgstr ""
-#: doc/classes/BakedLightmap.xml:134
+#: doc/classes/BakedLightmap.xml:135
msgid ""
"There is no root node to start baking from. Either provide [code]from_node[/"
"code] argument or attach this node to a parent that should be used as root."
msgstr ""
-#: doc/classes/BakedLightmap.xml:137
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:140
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:143
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:146
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10967,8 +10980,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -24982,21 +24998,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -25005,14 +25032,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -25022,80 +25053,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -29321,7 +29352,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30634,7 +30667,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30703,22 +30737,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30733,7 +30769,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30741,19 +30777,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30821,10 +30857,12 @@ msgid ""
msgstr ""
#: doc/classes/KinematicBody2D.xml:87
+#, fuzzy
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30886,7 +30924,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -34430,7 +34470,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37774,7 +37814,7 @@ msgstr "คืนค่าชื่อของอุปà¸à¸£à¸“์เสีย
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37804,14 +37844,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37821,7 +37861,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40310,17 +40350,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40338,11 +40404,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40537,7 +40603,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41340,6 +41408,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41357,7 +41443,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41471,7 +41557,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -44013,24 +44101,30 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:282
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:285
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:288
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44040,7 +44134,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:291
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44050,27 +44144,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:294
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:297
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:300
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:303
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -44078,81 +44172,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:306
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:309
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:312
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:315
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:318
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:321
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:324
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:327
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:330
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:333
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:336
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:339
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:342
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -44160,109 +44254,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:345
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:348
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:351
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:354
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:357
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:360
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:363
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:366
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:369
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:372
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:375
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:378
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:381
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:384
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:387
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:390
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:393
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:396
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:399
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44273,91 +44367,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:404
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:407
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:410
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:413
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:416
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:419
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:422
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:425
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:428
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:431
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:434
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:437
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:440
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:443
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:446
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:449
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:452
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44366,13 +44460,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:456
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:459
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44382,7 +44476,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:464
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44390,19 +44484,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:469
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:473
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:477
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44416,45 +44510,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:482
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:485
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:489
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:492
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:495
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:498
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:501
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44463,7 +44557,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:504
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44474,7 +44568,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:508
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44490,14 +44584,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:516
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:519
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44505,49 +44599,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:522
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:525
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:530
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:533
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:536
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:539
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:542
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:545
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:548
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44556,7 +44650,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:552
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44564,7 +44658,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:556
+#: doc/classes/ProjectSettings.xml:558
#, fuzzy
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
@@ -44577,7 +44671,7 @@ msgstr ""
"ได้เนื่องจาà¸à¸ˆà¸³à¹€à¸›à¹‡à¸™à¸ªà¸³à¸«à¸£à¸±à¸š logic ในà¸à¸²à¸£ [Control] ต่างๆ อย่างไรà¸à¹‡à¸•าม event "
"ที่à¸à¸³à¸«à¸™à¸”ให้à¸à¸±à¸šà¸à¸²à¸£ action สามารถà¹à¸à¹‰à¹„ขได้"
-#: doc/classes/ProjectSettings.xml:560
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44587,7 +44681,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:564
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44596,7 +44690,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:568
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44605,7 +44699,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:572
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44615,7 +44709,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:576
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44623,7 +44717,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:580
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44633,7 +44727,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:584
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44643,7 +44737,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:588
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44651,7 +44745,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:592
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44660,7 +44754,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:596
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44668,7 +44762,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:600
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44680,477 +44774,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:606
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:609
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:612
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:615
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:618
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:621
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:624
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:627
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:630
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:633
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:636
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:639
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:642
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:645
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:648
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:651
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:654
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:657
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:660
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:663
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:666
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:669
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:672
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:675
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:678
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:681
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:684
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:687
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:690
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:693
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:696
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:699
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:702
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:705
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:708
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:711
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:714
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:717
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:720
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:723
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:726
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:729
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:732
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:735
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:738
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:741
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:744
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:747
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:750
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:753
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:756
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:759
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:762
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:765
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:768
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:771
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:774
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:777
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:780
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:783
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:786
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:789
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:792
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:795
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:798
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:801
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:804
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:807
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:810
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:813
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:816
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:819
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:822
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:825
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:828
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:831
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:834
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:837
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:840
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:843
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:846
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:849
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:852
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:855
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:858
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:861
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:864
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:867
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:870
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:873
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:876
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:879
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:882
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:885
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:888
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:891
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:894
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:897
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:900
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:903
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:906
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:909
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:912
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:915
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:918
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:921
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:924
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:927
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:930
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:933
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:936
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:939
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:942
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:947
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:950
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -45158,92 +45252,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:953
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:956
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:959
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:962
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:965
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:968
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:971
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:974
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:977
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:980
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:983
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:986
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:989
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:992
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:995
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:998
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1001
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1004
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -45253,33 +45347,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1008
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1011
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1014
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1018
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1022
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45292,7 +45386,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1026
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45304,7 +45398,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1034
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45316,7 +45410,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1042
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45329,7 +45423,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1046
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45337,28 +45431,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1050
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1054
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1057
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1060
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45368,25 +45462,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1064
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1067
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1070
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1073
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45399,7 +45493,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1077
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45411,7 +45505,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1085
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45423,7 +45517,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1093
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45436,13 +45530,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1097
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1100
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45450,11 +45544,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1104
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1107
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45468,7 +45562,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1113
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45477,7 +45571,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1117
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45493,7 +45587,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1122
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45503,7 +45597,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1126
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45513,7 +45607,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1130
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45524,7 +45618,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1134
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45534,7 +45628,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1138
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45542,7 +45636,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1142
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45553,7 +45647,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1146
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45568,7 +45662,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1152
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45577,13 +45671,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1157
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1160
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45592,7 +45686,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1163
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45602,7 +45696,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1166
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45614,7 +45708,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1169
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45624,24 +45718,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1172
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1175
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1178
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1181
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45650,7 +45744,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1184
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45658,7 +45752,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1187
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45667,7 +45761,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1190
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45677,7 +45771,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1194
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45685,31 +45779,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1198
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1201
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1204
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1207
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1210
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45717,7 +45811,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1213
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45727,21 +45821,21 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1216
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1219
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
"iOS specific override for [member rendering/gles2/compatibility/"
"disable_half_float], due to poor support for half-float vertex compression "
"on many devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
"If [code]true[/code] and available on the target Android device, enables "
"high floating point precision for all shader computations in GLES2.\n"
@@ -45749,31 +45843,31 @@ msgid ""
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1226
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1229
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1232
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1235
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1238
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45781,7 +45875,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1241
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45791,7 +45885,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1244
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45800,7 +45894,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1247
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45809,20 +45903,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1250
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1253
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1256
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45831,7 +45925,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1259
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45839,7 +45933,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45848,7 +45942,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1266
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45858,20 +45952,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1275
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45880,13 +45974,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45896,46 +45990,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1294
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1297
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1300
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1303
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1306
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45945,7 +46039,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45957,7 +46051,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1317
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45965,7 +46059,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45973,7 +46067,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1324
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45982,7 +46076,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1327
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45996,7 +46090,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1332
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -46006,7 +46100,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1335
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -46015,7 +46109,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1338
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -46025,54 +46119,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1341
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1344
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1347
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1350
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1353
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1356
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1359
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -46083,61 +46177,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1366
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1369
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1372
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1375
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1378
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1381
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1384
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1387
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -46148,7 +46242,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1394
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -46157,26 +46251,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400
-#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1409
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1412
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -46187,20 +46281,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1419
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1426
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -46212,52 +46306,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1436
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1439
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1442
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1445
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1448
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1451
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1454
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -46265,7 +46359,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -46278,7 +46372,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46290,7 +46384,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46302,7 +46396,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46314,7 +46408,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46326,7 +46420,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1481
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46990,40 +47084,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -47031,14 +47139,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49373,6 +49481,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49390,7 +49514,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49398,11 +49522,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49412,19 +49536,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54840,20 +54964,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54864,28 +54993,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54897,19 +55026,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
diff --git a/doc/translations/et.po b/doc/translations/tl.po
index b4bd240ceb..f72fe4d604 100644
--- a/doc/translations/et.po
+++ b/doc/translations/tl.po
@@ -1,61 +1,68 @@
-# LANGUAGE translation of the Godot Engine class reference.
+# Tagalog translation of the Godot Engine class reference.
# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur.
# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md).
# This file is distributed under the same license as the Godot source code.
#
-# karl kivi <karl97kivi@gmail.com>, 2021.
+# Napstaguy04 <brokenscreen3@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"Language: et\n"
+"PO-Revision-Date: 2021-11-15 21:14+0000\n"
+"Last-Translator: Napstaguy04 <brokenscreen3@gmail.com>\n"
+"Language-Team: Tagalog <https://hosted.weblate.org/projects/godot-engine/"
+"godot-class-reference/tl/>\n"
+"Language: tl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1 && n != 2 && n != 3 && (n % 10 == 4 "
+"|| n % 10 == 6 || n % 10 == 9);\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
-msgstr ""
+msgstr "Paglalarawan"
#: doc/tools/make_rst.py
msgid "Tutorials"
-msgstr ""
+msgstr "Mga Tutorial"
#: doc/tools/make_rst.py
msgid "Properties"
-msgstr ""
+msgstr "Mga Katangian"
#: doc/tools/make_rst.py
msgid "Methods"
-msgstr ""
+msgstr "Mga Method"
#: doc/tools/make_rst.py
msgid "Theme Properties"
-msgstr ""
+msgstr "Mga Katangian ng Theme"
#: doc/tools/make_rst.py
msgid "Signals"
-msgstr ""
+msgstr "Mga Hudyat"
#: doc/tools/make_rst.py
msgid "Enumerations"
-msgstr ""
+msgstr "Mga Enumerasyon"
#: doc/tools/make_rst.py
msgid "Constants"
-msgstr ""
+msgstr "Mga Konstant"
#: doc/tools/make_rst.py
msgid "Property Descriptions"
-msgstr ""
+msgstr "Mga Paglalarawan ng Katangian"
#: doc/tools/make_rst.py
msgid "Method Descriptions"
-msgstr ""
+msgstr "Panglalarawan ng mga Method"
#: modules/gdscript/doc_classes/@GDScript.xml:4
msgid "Built-in GDScript functions."
-msgstr ""
+msgstr "Mga built-in na function ng GDScript."
#: modules/gdscript/doc_classes/@GDScript.xml:7
msgid ""
@@ -63,6 +70,9 @@ msgid ""
"utilities. Everything else is provided by objects. (Keywords: builtin, built "
"in, global functions.)"
msgstr ""
+"Talaan ng mga built-in function ng GDScript. Mga function sa matematika at "
+"iba pang mga utility. Lahat ng iba pa ay ibinibigay ng mga objects. (Mga "
+"keyword: builtin, built in, global function.)"
#: modules/gdscript/doc_classes/@GDScript.xml:19
msgid ""
@@ -77,6 +87,16 @@ msgid ""
"red = Color8(255, 0, 0)\n"
"[/codeblock]"
msgstr ""
+"Ibinabalik ang kulay na ginawa mula sa pula, berde, asul, at alpha integer "
+"na mga channel. Ang bawat channel ay dapat may 8 bits ng impormasyon mula 0 "
+"hanggang 255.\n"
+"[code]r8[/code] pulang channel\n"
+"[code]g8[/code] lungtiang channel\n"
+"[code]b8[/code] bughaw na channel\n"
+"[code]a8[/code] alpha channel\n"
+"[codeblock]\n"
+"pula = Color8(255, 0, 0)\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:34
msgid ""
@@ -87,6 +107,13 @@ msgid ""
"[/codeblock]\n"
"Supported color names are the same as the constants defined in [Color]."
msgstr ""
+"Ibinabalik ang kulay ayon sa karaniwang [code]name[/code] na may "
+"[code]alpha[/code] mula 0 hanggang 1.\n"
+"[codeblock]\n"
+"pula = ColorN(\"red\",1)\n"
+"[/codeblock]\n"
+"Ang mga pangalan ng mga sinusuportahang kulay ay tumutugma sa mga constant "
+"na tinukoy sa [Kulay]."
#: modules/gdscript/doc_classes/@GDScript.xml:45
msgid ""
@@ -96,6 +123,11 @@ msgid ""
"a = abs(-1) # a is 1\n"
"[/codeblock]"
msgstr ""
+"Ibinabalik ang absolute value ng [code]s[/code] parameter (hal: positive "
+"value).\n"
+"[codeblock]\n"
+"a = abs(-1) # a ay 1\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:55
msgid ""
@@ -108,6 +140,14 @@ msgid ""
"c = acos(0.866025)\n"
"[/codeblock]"
msgstr ""
+"Ibinabalik ang arc cosine ng [code]s[/code] sa radians. Gamitin ito para "
+"makuha ang cosine angle [code]s[/code]. [code]s[/code] ay dapat nasa pagitan "
+"ng [code]-1.0[/code] at [code]1.0[/code] (napapabilang o inclusive), o kung "
+"hindi, [method acos] ay babalik ng [constant NAN].\n"
+"[codeblock]\n"
+"# ang c ay 0.523599 o 30 degrees kung iko-convert sa rad2deg(s)\n"
+"c = acos(0.866025)\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:66
msgid ""
@@ -255,11 +295,11 @@ msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml:211
msgid "Converts from decibels to linear energy (audio)."
-msgstr ""
+msgstr "Kino-convert ang mga decibel sa linear na enerhiya (audio)."
#: modules/gdscript/doc_classes/@GDScript.xml:218
msgid "Deprecated alias for [method step_decimals]."
-msgstr ""
+msgstr "Hindi ginagamit na alias para sa [method step_decimals]."
#: modules/gdscript/doc_classes/@GDScript.xml:227
msgid ""
@@ -271,6 +311,13 @@ msgid ""
"a = dectime(60, 10, 0.1)) # a is 59.0\n"
"[/codeblock]"
msgstr ""
+"[b]Puna:[/b] [code]dectime[/code] ay hindi na ginagamit at aalisin na sa "
+"Godot 4.0, maaring gamitin nalang ang [method move_toward].\n"
+"Ibinabalik ang resulta ng [code]value[/code] na ibinawas ng [code]step[/"
+"code] ng [code]amount[/code].\n"
+"[codeblock]\n"
+"a = dectime(60, 10, 0.1)) #59.0 ang kakalabasan ng a\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:238
msgid ""
@@ -279,12 +326,19 @@ msgid ""
"r = deg2rad(180) # r is 3.141593\n"
"[/codeblock]"
msgstr ""
+"Kino-convert ang anggulo (degrees) sa radians.\n"
+"[codeblock]\n"
+"r = deg2rad(180) # r = 3.141593\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:248
msgid ""
"Converts a dictionary (previously created with [method inst2dict]) back to "
"an instance. Useful for deserializing."
msgstr ""
+"Kino-convert ang isang [code]dictionary[/code] (dating nilikha gamit ng "
+"[method inst2dict] ) pabalik sa isang instance. Kapaki-pakinabang para sa "
+"deserialization."
#: modules/gdscript/doc_classes/@GDScript.xml:256
msgid ""
@@ -318,6 +372,15 @@ msgid ""
"a = exp(2) # Approximately 7.39\n"
"[/codeblock]"
msgstr ""
+"Ang natural na exponential function. Tinataas ang mathematical constant "
+"[b]e[/b] sa power ng [code]s[/code] at binabalik ito.\n"
+"[b]e[/b] ay may tinatayang value na 2.71828, at maaring kunin ito sa "
+"[code]exp(1)[/code].\n"
+"Para sa mga exponents para sa mga ibang bases, gamitin ang method sa baba "
+"[method pow].\n"
+"[codeblock]\n"
+"a = exp(2) # Tinatayang 7.39\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:286
msgid ""
@@ -333,6 +396,17 @@ msgid ""
"[code]s[/code] is a non-negative number, you can use [code]int(s)[/code] "
"directly."
msgstr ""
+"Ri-naround ang [code]s[/code] pababa (patungo sa negatibong walang hanggan) "
+"at ibinabalik ang pinakamalaking integer na hindi hihigit sa [code]s[/"
+"code].\n"
+"[codeblock]\n"
+"a = floor(2.99) # katumbas ng 2.0\n"
+"a = floor(-2.99) # katumbas ng 2.0\n"
+"a = floor(-2.99) # katumbas ng -3.0\n"
+"[/codeblock]\n"
+"[b] Tandaan: [/b] Ang method na 'to ay nagbabalik ng float. Kung kailangan "
+"mo ng integer at kung [code]s[/code] ay hindi negative, maaari mong "
+"direktang gamitin ang [code]int(s)[/code]."
#: modules/gdscript/doc_classes/@GDScript.xml:301
msgid ""
@@ -343,6 +417,12 @@ msgid ""
"[/codeblock]\n"
"For the integer remainder operation, use the % operator."
msgstr ""
+"Ibinabalik ang the floating-point ng labi (remainder) ng [code]a/b[/code], "
+"habang pinapanatili ang sign ng [code]a[/code].\n"
+"[codeblock]\n"
+"r = fmod(7, 5.5) # katumbas ng 1.5\n"
+"[/codeblock]\n"
+"Para sa operasyon sa integer remainder, gamitin ang operator %."
#: modules/gdscript/doc_classes/@GDScript.xml:313
msgid ""
@@ -2473,39 +2553,39 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:896
msgid "Left mouse button."
-msgstr ""
+msgstr "Kaliwang pindutan ng mouse."
#: doc/classes/@GlobalScope.xml:899
msgid "Right mouse button."
-msgstr ""
+msgstr "Kanang pindutan ng mouse."
#: doc/classes/@GlobalScope.xml:902
msgid "Middle mouse button."
-msgstr ""
+msgstr "Gitnang pindutan ng mouse."
#: doc/classes/@GlobalScope.xml:905
msgid "Extra mouse button 1 (only present on some mice)."
-msgstr ""
+msgstr "ika-1 Dagdag na pindutan ng mouse (Mahahanap lang sa iilang mouse)."
#: doc/classes/@GlobalScope.xml:908
msgid "Extra mouse button 2 (only present on some mice)."
-msgstr ""
+msgstr "ika-2 Dagdag na pindutan ng mouse (Mahahanap lang sa iilang mouse)."
#: doc/classes/@GlobalScope.xml:911
msgid "Mouse wheel up."
-msgstr ""
+msgstr "Pagtaas ng mouse wheel."
#: doc/classes/@GlobalScope.xml:914
msgid "Mouse wheel down."
-msgstr ""
+msgstr "Pagbaba ng mouse wheel."
#: doc/classes/@GlobalScope.xml:917
msgid "Mouse wheel left button (only present on some mice)."
-msgstr ""
+msgstr "Kaliwang pindutan sa mouse wheel (Mahahanap lang sa iilang mouse)."
#: doc/classes/@GlobalScope.xml:920
msgid "Mouse wheel right button (only present on some mice)."
-msgstr ""
+msgstr "Kanang pindutan sa mouse wheel (Mahahanap lang sa iilang mouse)."
#: doc/classes/@GlobalScope.xml:923
msgid "Left mouse button mask."
@@ -2533,47 +2613,47 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:941
msgid "Gamepad button 0."
-msgstr ""
+msgstr "Ika-0 pindutan ng gamepad."
#: doc/classes/@GlobalScope.xml:944
msgid "Gamepad button 1."
-msgstr ""
+msgstr "Ika-1 pindutan ng gamepad."
#: doc/classes/@GlobalScope.xml:947
msgid "Gamepad button 2."
-msgstr ""
+msgstr "Ika-2 pindutan ng gamepad."
#: doc/classes/@GlobalScope.xml:950
msgid "Gamepad button 3."
-msgstr ""
+msgstr "Ika-3 pindutan ng gamepad."
#: doc/classes/@GlobalScope.xml:953
msgid "Gamepad button 4."
-msgstr ""
+msgstr "Ika-4 pindutan ng gamepad."
#: doc/classes/@GlobalScope.xml:956
msgid "Gamepad button 5."
-msgstr ""
+msgstr "Ika-5 pindutan ng gamepad."
#: doc/classes/@GlobalScope.xml:959
msgid "Gamepad button 6."
-msgstr ""
+msgstr "Ika-6 pindutan ng gamepad."
#: doc/classes/@GlobalScope.xml:962
msgid "Gamepad button 7."
-msgstr ""
+msgstr "Ika-7 pindutan ng gamepad."
#: doc/classes/@GlobalScope.xml:965
msgid "Gamepad button 8."
-msgstr ""
+msgstr "Ika-8 pindutan ng gamepad."
#: doc/classes/@GlobalScope.xml:968
msgid "Gamepad button 9."
-msgstr ""
+msgstr "Ika-9 pindutan ng gamepad."
#: doc/classes/@GlobalScope.xml:971
msgid "Gamepad button 10."
-msgstr ""
+msgstr "Ika-10 pindutan ng gamepad."
#: doc/classes/@GlobalScope.xml:974
msgid "Gamepad button 11."
@@ -2625,15 +2705,15 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:1010
msgid "Represents the maximum number of joystick buttons supported."
-msgstr ""
+msgstr "Kumakatawan sa pinakamaraming bilang ng joystick na sinusuportahan."
#: doc/classes/@GlobalScope.xml:1013
msgid "DualShock circle button."
-msgstr ""
+msgstr "Pabilog na pindutang Dualshock."
#: doc/classes/@GlobalScope.xml:1016
msgid "DualShock X button."
-msgstr ""
+msgstr "Pindutang X ng Dualshock."
#: doc/classes/@GlobalScope.xml:1019
msgid "DualShock square button."
@@ -2681,11 +2761,11 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:1052
msgid "Push down on the touchpad or main joystick on a VR controller."
-msgstr ""
+msgstr "Pumindot sa touchpad o sa main joystick sa VR controller."
#: doc/classes/@GlobalScope.xml:1055
msgid "Trigger on a VR controller."
-msgstr ""
+msgstr "Trigger sa VR Controller."
#: doc/classes/@GlobalScope.xml:1058
msgid ""
@@ -3050,7 +3130,7 @@ msgstr ""
#: doc/classes/@GlobalScope.xml:1334
msgid "Linking failed error."
-msgstr ""
+msgstr "Nabigo ang pagkakawing."
#: doc/classes/@GlobalScope.xml:1337
msgid "Script failed error."
@@ -3580,112 +3660,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4757,7 +4846,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -10134,15 +10223,19 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10151,24 +10244,24 @@ msgid ""
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10182,62 +10275,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10245,35 +10338,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10281,13 +10374,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10299,77 +10392,77 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr ""
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:131
+#: doc/classes/BakedLightmap.xml:132
msgid ""
"Returns if lightmapper can't be created. Unless you are using a custom "
"lightmapper, please report this as bug."
msgstr ""
-#: doc/classes/BakedLightmap.xml:134
+#: doc/classes/BakedLightmap.xml:135
msgid ""
"There is no root node to start baking from. Either provide [code]from_node[/"
"code] argument or attach this node to a parent that should be used as root."
msgstr ""
-#: doc/classes/BakedLightmap.xml:137
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:140
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:143
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:146
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10817,8 +10910,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -24763,20 +24859,31 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr ""
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -24785,14 +24892,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -24802,80 +24913,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -29068,7 +29179,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30367,7 +30480,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30432,22 +30546,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30462,7 +30578,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30470,19 +30586,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30550,7 +30666,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30608,7 +30725,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -34133,7 +34252,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37428,7 +37547,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37458,14 +37577,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37475,7 +37594,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -39953,17 +40072,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -39981,11 +40126,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40180,7 +40325,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -40982,6 +41129,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -40999,7 +41164,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41113,7 +41278,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -43653,24 +43820,30 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:282
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:285
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:288
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43680,7 +43853,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:291
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -43690,27 +43863,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:294
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:297
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:300
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:303
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -43718,81 +43891,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:306
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:309
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:312
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:315
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:318
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:321
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:324
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:327
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:330
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:333
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:336
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:339
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:342
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -43800,109 +43973,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:345
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:348
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:351
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:354
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:357
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:360
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:363
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:366
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:369
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:372
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:375
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:378
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:381
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:384
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:387
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:390
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:393
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:396
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:399
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -43913,91 +44086,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:404
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:407
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:410
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:413
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:416
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:419
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:422
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:425
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:428
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:431
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:434
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:437
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:440
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:443
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:446
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:449
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:452
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44006,13 +44179,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:456
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:459
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44022,7 +44195,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:464
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44030,19 +44203,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:469
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:473
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:477
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44056,45 +44229,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:482
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:485
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:489
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:492
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:495
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:498
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:501
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44103,7 +44276,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:504
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44114,7 +44287,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:508
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44130,14 +44303,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:516
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:519
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44145,49 +44318,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:522
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:525
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:530
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:533
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:536
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:539
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:542
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:545
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:548
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44196,7 +44369,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:552
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44204,7 +44377,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:556
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44212,7 +44385,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:560
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44222,7 +44395,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:564
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44231,7 +44404,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:568
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44240,7 +44413,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:572
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44250,7 +44423,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:576
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44258,7 +44431,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:580
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44268,7 +44441,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:584
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44278,7 +44451,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:588
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44286,7 +44459,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:592
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44295,7 +44468,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:596
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44303,7 +44476,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:600
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44315,477 +44488,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:606
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:609
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:612
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:615
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:618
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:621
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:624
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:627
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:630
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:633
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:636
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:639
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:642
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:645
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:648
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:651
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:654
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:657
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:660
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:663
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:666
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:669
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:672
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:675
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:678
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:681
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:684
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:687
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:690
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:693
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:696
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:699
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:702
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:705
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:708
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:711
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:714
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:717
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:720
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:723
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:726
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:729
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:732
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:735
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:738
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:741
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:744
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:747
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:750
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:753
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:756
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:759
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:762
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:765
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:768
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:771
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:774
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:777
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:780
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:783
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:786
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:789
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:792
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:795
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:798
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:801
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:804
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:807
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:810
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:813
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:816
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:819
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:822
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:825
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:828
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:831
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:834
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:837
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:840
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:843
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:846
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:849
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:852
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:855
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:858
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:861
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:864
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:867
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:870
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:873
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:876
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:879
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:882
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:885
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:888
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:891
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:894
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:897
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:900
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:903
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:906
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:909
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:912
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:915
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:918
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:921
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:924
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:927
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:930
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:933
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:936
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:939
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:942
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:947
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:950
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -44793,92 +44966,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:953
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:956
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:959
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:962
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:965
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:968
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:971
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:974
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:977
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:980
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:983
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:986
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:989
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:992
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:995
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:998
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1001
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1004
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -44888,33 +45061,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1008
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1011
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1014
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1018
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1022
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44927,7 +45100,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1026
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44939,7 +45112,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1034
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -44951,7 +45124,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1042
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -44964,7 +45137,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1046
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -44972,28 +45145,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1050
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1054
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1057
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1060
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45003,25 +45176,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1064
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1067
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1070
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1073
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45034,7 +45207,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1077
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45046,7 +45219,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1085
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45058,7 +45231,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1093
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45071,13 +45244,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1097
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1100
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45085,11 +45258,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1104
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1107
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45103,7 +45276,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1113
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45112,7 +45285,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1117
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45128,7 +45301,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1122
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45138,7 +45311,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1126
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45148,7 +45321,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1130
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45159,7 +45332,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1134
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45169,7 +45342,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1138
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45177,7 +45350,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1142
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45188,7 +45361,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1146
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45203,7 +45376,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1152
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45212,13 +45385,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1157
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1160
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45227,7 +45400,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1163
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45237,7 +45410,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1166
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45249,7 +45422,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1169
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45259,24 +45432,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1172
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1175
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1178
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1181
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45285,7 +45458,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1184
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45293,7 +45466,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1187
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45302,7 +45475,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1190
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45312,7 +45485,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1194
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45320,31 +45493,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1198
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1201
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1204
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1207
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1210
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45352,7 +45525,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1213
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45362,21 +45535,21 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1216
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1219
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
"iOS specific override for [member rendering/gles2/compatibility/"
"disable_half_float], due to poor support for half-float vertex compression "
"on many devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
"If [code]true[/code] and available on the target Android device, enables "
"high floating point precision for all shader computations in GLES2.\n"
@@ -45384,31 +45557,31 @@ msgid ""
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1226
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1229
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1232
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1235
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1238
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45416,7 +45589,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1241
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45426,7 +45599,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1244
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45435,7 +45608,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1247
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45444,20 +45617,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1250
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1253
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1256
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45466,7 +45639,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1259
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45474,7 +45647,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45483,7 +45656,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1266
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45493,20 +45666,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1275
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45515,13 +45688,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45531,46 +45704,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1294
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1297
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1300
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1303
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1306
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45580,7 +45753,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45592,7 +45765,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1317
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45600,7 +45773,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45608,7 +45781,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1324
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45617,7 +45790,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1327
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45631,7 +45804,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1332
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -45641,7 +45814,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1335
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -45650,7 +45823,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1338
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -45660,54 +45833,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1341
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1344
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1347
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1350
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1353
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1356
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1359
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -45718,61 +45891,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1366
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1369
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1372
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1375
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1378
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1381
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1384
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1387
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -45783,7 +45956,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1394
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -45792,26 +45965,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400
-#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1409
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1412
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -45822,20 +45995,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1419
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1426
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -45847,52 +46020,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1436
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1439
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1442
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1445
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1448
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1451
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1454
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -45900,7 +46073,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -45913,7 +46086,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -45925,7 +46098,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -45937,7 +46110,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -45949,7 +46122,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -45961,7 +46134,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1481
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46620,40 +46793,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -46661,14 +46848,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -48995,6 +49182,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49012,7 +49215,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49020,11 +49223,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49034,19 +49237,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54431,20 +54634,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54455,28 +54663,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54488,19 +54696,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
@@ -69327,3 +69535,5 @@ msgstr ""
msgid ""
"If [code]true[/code], child nodes are sorted, otherwise sorting is disabled."
msgstr ""
+"Kung [code]true[/code], ang mga child nodes ay inaayos, kung hindi ang pag-"
+"so-sort ay hindi pinapagana."
diff --git a/doc/translations/tr.po b/doc/translations/tr.po
index 4880d83be6..a7c62d6cf1 100644
--- a/doc/translations/tr.po
+++ b/doc/translations/tr.po
@@ -15,12 +15,14 @@
# Cem Eren Fukara <cefukara@hotmail.com>, 2021.
# The Recon <reconmovyie@gmail.com>, 2021.
# ali aydın <alimxaydin@gmail.com>, 2021.
+# yigithan <yigithanermet38@gmail.com>, 2021.
+# Yusuf Yavuzyigit <yusufyavuzyigit25@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-05-27 12:33+0000\n"
-"Last-Translator: ali aydın <alimxaydin@gmail.com>\n"
+"PO-Revision-Date: 2021-11-17 12:59+0000\n"
+"Last-Translator: Yusuf Yavuzyigit <yusufyavuzyigit25@gmail.com>\n"
"Language-Team: Turkish <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/tr/>\n"
"Language: tr\n"
@@ -28,7 +30,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.7-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -36,7 +38,7 @@ msgstr "Açıklama"
#: doc/tools/make_rst.py
msgid "Tutorials"
-msgstr "Öğretici Örnekler"
+msgstr "Öğreticiler"
#: doc/tools/make_rst.py
msgid "Properties"
@@ -44,7 +46,7 @@ msgstr "Özellikler"
#: doc/tools/make_rst.py
msgid "Methods"
-msgstr "Metotlar"
+msgstr "Metodlar"
#: doc/tools/make_rst.py
msgid "Theme Properties"
@@ -52,7 +54,7 @@ msgstr "Tema Özellikleri"
#: doc/tools/make_rst.py
msgid "Signals"
-msgstr "Sinyaller"
+msgstr "sinyaller"
#: doc/tools/make_rst.py
msgid "Enumerations"
@@ -125,7 +127,6 @@ msgstr ""
"Desteklenen renk adları,[Color]'de tanımlanan sabitlerle aynıdır."
#: modules/gdscript/doc_classes/@GDScript.xml:45
-#, fuzzy
msgid ""
"Returns the absolute value of parameter [code]s[/code] (i.e. positive "
"value).\n"
@@ -135,12 +136,10 @@ msgid ""
msgstr ""
"[code]s[/code] parametresinin mutlak değerini (pozitif değerini) döndürür.\n"
"[codeblock]\n"
-"# a'nın döndüreceği değer 1'dir\n"
-"a = abs(-1)\n"
+"a = abs(-1) # a'nın döndüreceği değer 1'dir\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:55
-#, fuzzy
msgid ""
"Returns the arc cosine of [code]s[/code] in radians. Use to get the angle of "
"cosine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and "
@@ -152,14 +151,15 @@ msgid ""
"[/codeblock]"
msgstr ""
"[code]s[/code] değerinin radyan türünde cosinüsünü döndürür. [code]s[/code] "
-"cosinüs değerinin açısı elde etmek için kullanılır.\n"
+"cosinüs değerinin açısı elde etmek için kullanılır. [code]s[/code] "
+"[code]-1.0[/code] ile [code]1.0[/code] (dahil) arasında olmalıdır aksi halde "
+"[method acos], [constant NAN] dödürür.\n"
"[codeblock]\n"
-"# c 0.523599 ya da rad2deg(s) ile dönüştürülürse 30 olur\n"
+"# c rad2deg(s) ile dönüştürülürse 0.523599 ya da 30 derece olur\n"
"c = acos(0.866025)\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:66
-#, fuzzy
msgid ""
"Returns the arc sine of [code]s[/code] in radians. Use to get the angle of "
"sine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and "
@@ -171,9 +171,11 @@ msgid ""
"[/codeblock]"
msgstr ""
"[code]s[/code] değerinin radyan cinsinden arcsinüsünü döndürür. [code]s[/"
-"code] değerinin açısını bulmak için kullanılır.\n"
+"code] değerinin açısını bulmak için kullanılır. [code]s[/code] [code]-1.0[/"
+"code] ile [code]1.0[/code] (dahil) arasında olmalıdır aksi halde [method "
+"asin], [constant NAN] dödürür.\n"
"[codeblock]\n"
-"# s 0.523599 ya da rad2deg(s) ile dönüştürülürse dereceye 30\n"
+"# s rad2deg(s) ile dönüştürülürse 0.523599 ya da 30 derece olur\n"
"s = asin(0.5)\n"
"[/codeblock]"
@@ -300,12 +302,13 @@ msgid ""
"[/codeblock]\n"
"See also [method floor], [method round], [method stepify], and [int]."
msgstr ""
-"[code]s[/code] deperini yukarı yuvarlar (pozitif sonsuzluğa doğru), [code]s[/"
+"[code]s[/code] değerini yukarı yuvarlar (pozitif sonsuzluğa doğru), [code]s[/"
"code] değerinden büyük olan en küçük tam sayıyı döndürür.\n"
"[codeblock]\n"
-"i = ceil(1.45) # i 2 olur\n"
-"i = ceil(1.001) # i 2 olur\n"
-"[/codeblock]"
+"i = ceil(1.45) # i 2.0 olur\n"
+"i = ceil(1.001) # i 2.0 olur\n"
+"[/codeblock]\n"
+"Ayrıca bakınız [method floor], [method round], [method stepify] ve [int]."
#: modules/gdscript/doc_classes/@GDScript.xml:147
msgid ""
@@ -328,7 +331,6 @@ msgstr ""
"Bu [method ord]'un tersidir."
#: modules/gdscript/doc_classes/@GDScript.xml:162
-#, fuzzy
msgid ""
"Clamps [code]value[/code] and returns a value not less than [code]min[/code] "
"and not more than [code]max[/code].\n"
@@ -339,15 +341,11 @@ msgid ""
"[/codeblock]"
msgstr ""
"[code]değer[/code]'i bir aralığa sığdırır ve [code]min[/code]'den büyük ve "
-"[code]maks[/code]'den küçük değer döndürür.\n"
+"[code]maks[/code]'dan küçük bir değer döndürür.\n"
"[codeblock]\n"
-"speed = 1000\n"
-"# a 20 olur\n"
-"a = clamp(speed, 1, 20)\n"
-"\n"
-"speed = -10\n"
-"# a 1 olur\n"
-"a = clamp(speed, 1, 20)\n"
+"a = clamp(1000, 1, 20) # a 20'dir\n"
+"a = clamp(-10, 1, 20) # a 1'dir\n"
+"a = clamp(15, 1, 20) # a 15'dir\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:175
@@ -375,7 +373,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:190
-#, fuzzy
msgid ""
"Returns the cosine of angle [code]s[/code] in radians.\n"
"[codeblock]\n"
@@ -383,13 +380,13 @@ msgid ""
"a = cos(PI) # a is -1.0\n"
"[/codeblock]"
msgstr ""
-"Radyan cinsinden [code]s[/code] açısının sinüs değerini döndürür.\n"
+"[code]s[/code] açısının radyan cinsinden kosinüs değerini döndürür.\n"
"[codeblock]\n"
-"sin(0.523599) # sonuç: 0.5\n"
+"a = cos(TAU) # a 1.0'dır\n"
+"a = cos(PI) # a -1.0'dır\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:201
-#, fuzzy
msgid ""
"Returns the hyperbolic cosine of [code]s[/code] in radians.\n"
"[codeblock]\n"
@@ -398,8 +395,7 @@ msgid ""
msgstr ""
"[code]s[/code] değerinin hiperbolik kosinüsünü radyan cinsinden döndürür.\n"
"[codeblock]\n"
-"# 1.543081 yazdırır\n"
-"print(cosh(1))\n"
+"print(cosh(1)) # 1.543081 yazdırır\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:211
@@ -2094,9 +2090,8 @@ msgid "The [Engine] singleton."
msgstr "[Engine] tekil nesnesi."
#: doc/classes/@GlobalScope.xml:31
-#, fuzzy
msgid "The [Geometry] singleton."
-msgstr "[Geometry2D] tekil nesnesi."
+msgstr "[Geometry] tekil nesnesi."
#: doc/classes/@GlobalScope.xml:34
msgid "The [IP] singleton."
@@ -2159,7 +2154,7 @@ msgstr "[PhysicsServer2D] tekil nesnesi."
#: doc/classes/@GlobalScope.xml:72
msgid "The [ProjectSettings] singleton."
-msgstr ""
+msgstr "[ProjectSettings] tekil nesnesi."
#: doc/classes/@GlobalScope.xml:75
msgid "The [ResourceLoader] singleton."
@@ -4372,112 +4367,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -5556,7 +5560,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -10956,17 +10960,21 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10975,24 +10983,24 @@ msgid ""
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -11006,62 +11014,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -11069,35 +11077,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -11105,13 +11113,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -11123,78 +11131,78 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
#, fuzzy
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr "Verilen bir değerin ark-tanjantını döndürür."
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:131
+#: doc/classes/BakedLightmap.xml:132
msgid ""
"Returns if lightmapper can't be created. Unless you are using a custom "
"lightmapper, please report this as bug."
msgstr ""
-#: doc/classes/BakedLightmap.xml:134
+#: doc/classes/BakedLightmap.xml:135
msgid ""
"There is no root node to start baking from. Either provide [code]from_node[/"
"code] argument or attach this node to a parent that should be used as root."
msgstr ""
-#: doc/classes/BakedLightmap.xml:137
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:140
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:143
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:146
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -11650,8 +11658,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -25680,21 +25691,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -25703,14 +25725,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -25720,82 +25746,82 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
#, fuzzy
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
"Eğer [code]true[/code] ise düğümler sıraya sokulur, yoksa sıraya sokulmaz."
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -30016,7 +30042,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -31331,7 +31359,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -31396,22 +31425,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -31426,7 +31457,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -31434,19 +31465,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -31517,7 +31548,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -31575,7 +31607,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -35131,7 +35165,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -38447,7 +38481,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -38477,14 +38511,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -38494,7 +38528,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -41003,17 +41037,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -41031,11 +41091,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -41230,7 +41290,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -42033,6 +42095,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -42050,7 +42130,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -42164,7 +42244,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -44711,24 +44793,30 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:282
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:285
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:288
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44738,7 +44826,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:291
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44748,27 +44836,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:294
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:297
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:300
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:303
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -44776,81 +44864,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:306
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:309
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:312
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:315
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:318
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:321
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:324
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:327
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:330
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:333
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:336
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:339
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:342
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -44858,109 +44946,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:345
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:348
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:351
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:354
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:357
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:360
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:363
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:366
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:369
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:372
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:375
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:378
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:381
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:384
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:387
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:390
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:393
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:396
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:399
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44971,91 +45059,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:404
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:407
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:410
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:413
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:416
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:419
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:422
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:425
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:428
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:431
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:434
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:437
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:440
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:443
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:446
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:449
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:452
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -45064,13 +45152,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:456
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:459
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -45080,7 +45168,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:464
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -45088,19 +45176,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:469
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:473
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:477
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -45114,45 +45202,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:482
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:485
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:489
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:492
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:495
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:498
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:501
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -45161,7 +45249,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:504
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -45172,7 +45260,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:508
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -45188,14 +45276,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:516
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:519
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -45203,49 +45291,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:522
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:525
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:530
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:533
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:536
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:539
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:542
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:545
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:548
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -45254,7 +45342,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:552
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45262,7 +45350,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:556
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45270,7 +45358,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:560
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -45280,7 +45368,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:564
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -45289,7 +45377,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:568
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -45298,7 +45386,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:572
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -45308,7 +45396,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:576
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45316,7 +45404,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:580
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -45326,7 +45414,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:584
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -45336,7 +45424,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:588
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45344,7 +45432,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:592
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -45353,7 +45441,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:596
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -45361,7 +45449,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:600
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -45373,477 +45461,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:606
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:609
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:612
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:615
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:618
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:621
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:624
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:627
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:630
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:633
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:636
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:639
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:642
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:645
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:648
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:651
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:654
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:657
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:660
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:663
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:666
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:669
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:672
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:675
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:678
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:681
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:684
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:687
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:690
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:693
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:696
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:699
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:702
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:705
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:708
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:711
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:714
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:717
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:720
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:723
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:726
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:729
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:732
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:735
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:738
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:741
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:744
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:747
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:750
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:753
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:756
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:759
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:762
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:765
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:768
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:771
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:774
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:777
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:780
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:783
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:786
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:789
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:792
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:795
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:798
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:801
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:804
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:807
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:810
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:813
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:816
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:819
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:822
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:825
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:828
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:831
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:834
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:837
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:840
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:843
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:846
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:849
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:852
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:855
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:858
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:861
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:864
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:867
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:870
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:873
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:876
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:879
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:882
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:885
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:888
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:891
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:894
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:897
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:900
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:903
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:906
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:909
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:912
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:915
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:918
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:921
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:924
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:927
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:930
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:933
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:936
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:939
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:942
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:947
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:950
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -45851,92 +45939,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:953
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:956
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:959
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:962
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:965
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:968
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:971
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:974
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:977
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:980
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:983
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:986
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:989
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:992
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:995
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:998
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1001
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1004
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -45946,33 +46034,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1008
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1011
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1014
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1018
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1022
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45985,7 +46073,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1026
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45997,7 +46085,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1034
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -46009,7 +46097,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1042
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -46022,7 +46110,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1046
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -46030,28 +46118,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1050
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1054
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1057
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1060
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -46061,25 +46149,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1064
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1067
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1070
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1073
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -46092,7 +46180,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1077
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -46104,7 +46192,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1085
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -46116,7 +46204,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1093
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -46129,13 +46217,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1097
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1100
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -46143,11 +46231,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1104
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1107
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -46161,7 +46249,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1113
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -46170,7 +46258,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1117
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -46186,7 +46274,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1122
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -46196,7 +46284,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1126
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -46206,7 +46294,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1130
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -46217,7 +46305,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1134
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -46227,7 +46315,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1138
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -46235,7 +46323,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1142
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -46246,7 +46334,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1146
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -46261,7 +46349,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1152
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -46270,13 +46358,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1157
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1160
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -46285,7 +46373,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1163
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -46295,7 +46383,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1166
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -46307,7 +46395,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1169
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -46317,24 +46405,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1172
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1175
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1178
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1181
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -46343,7 +46431,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1184
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -46351,7 +46439,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1187
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -46360,7 +46448,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1190
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -46370,7 +46458,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1194
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -46378,31 +46466,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1198
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1201
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1204
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1207
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1210
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -46410,7 +46498,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1213
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -46420,21 +46508,21 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1216
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1219
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
"iOS specific override for [member rendering/gles2/compatibility/"
"disable_half_float], due to poor support for half-float vertex compression "
"on many devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
"If [code]true[/code] and available on the target Android device, enables "
"high floating point precision for all shader computations in GLES2.\n"
@@ -46442,31 +46530,31 @@ msgid ""
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1226
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1229
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1232
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1235
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1238
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -46474,7 +46562,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1241
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -46484,7 +46572,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1244
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -46493,7 +46581,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1247
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -46502,20 +46590,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1250
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1253
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1256
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -46524,7 +46612,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1259
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -46532,7 +46620,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -46541,7 +46629,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1266
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -46551,20 +46639,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1275
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -46573,13 +46661,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -46589,46 +46677,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1294
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1297
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1300
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1303
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1306
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -46638,7 +46726,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -46650,7 +46738,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1317
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -46658,7 +46746,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -46666,7 +46754,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1324
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -46675,7 +46763,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1327
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -46689,7 +46777,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1332
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -46699,7 +46787,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1335
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -46708,7 +46796,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1338
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -46718,54 +46806,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1341
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1344
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1347
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1350
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1353
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1356
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1359
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -46776,61 +46864,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1366
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1369
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1372
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1375
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1378
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1381
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1384
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1387
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -46841,7 +46929,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1394
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -46850,26 +46938,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400
-#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1409
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1412
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -46880,20 +46968,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1419
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1426
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -46905,52 +46993,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1436
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1439
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1442
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1445
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1448
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1451
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1454
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -46958,7 +47046,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -46971,7 +47059,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46983,7 +47071,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46995,7 +47083,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -47007,7 +47095,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -47019,7 +47107,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1481
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -47690,40 +47778,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -47731,14 +47833,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -50073,6 +50175,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -50090,7 +50208,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -50098,11 +50216,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -50112,19 +50230,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -55543,20 +55661,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -55567,28 +55690,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -55600,19 +55723,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
diff --git a/doc/translations/uk.po b/doc/translations/uk.po
index e0e7c14b32..03ed5ff6ef 100644
--- a/doc/translations/uk.po
+++ b/doc/translations/uk.po
@@ -8,12 +8,13 @@
# Pierre Stempin <pierre.stempin@gmail.com>, 2020.
# Wataru Onuki <bettawat@yahoo.co.jp>, 2020.
# IllusiveMan196 <hamsterrv@gmail.com>, 2021.
+# Valerii Bosiak <valerii540@protonmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-07-31 19:53+0000\n"
-"Last-Translator: IllusiveMan196 <hamsterrv@gmail.com>\n"
+"PO-Revision-Date: 2021-11-11 16:02+0000\n"
+"Last-Translator: Valerii Bosiak <valerii540@protonmail.com>\n"
"Language-Team: Ukrainian <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/uk/>\n"
"Language: uk\n"
@@ -22,7 +23,7 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 4.8-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -30,7 +31,7 @@ msgstr "ОпиÑ"
#: doc/tools/make_rst.py
msgid "Tutorials"
-msgstr "Туторіали"
+msgstr "Уроки"
#: doc/tools/make_rst.py
msgid "Properties"
@@ -119,7 +120,6 @@ msgstr ""
"Підтримувані імена кольорів збігаютьÑÑ Ð· конÑтантами, визначеними у [Color]."
#: modules/gdscript/doc_classes/@GDScript.xml:45
-#, fuzzy
msgid ""
"Returns the absolute value of parameter [code]s[/code] (i.e. positive "
"value).\n"
@@ -130,8 +130,7 @@ msgstr ""
"Повертає абÑолютне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñƒ [code]s[/code] (тобто Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð±ÐµÐ· "
"знака, працює Ð´Ð»Ñ Ñ†Ñ–Ð»Ð¸Ñ… чиÑел Ñ– чиÑел із рухомою крапкою).\n"
"[codeblock]\n"
-"# a дорівнює 1\n"
-"a = abs(-1)\n"
+"a = abs(-1) # a дорівнює 1\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:55
@@ -391,12 +390,18 @@ msgid ""
"r = deg2rad(180) # r is 3.141593\n"
"[/codeblock]"
msgstr ""
+"Перетворює кут виражений в градуÑах в радіани.\n"
+"[codeblock]\n"
+"r = deg2rad(180) # r це 3.141593\n"
+"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:248
msgid ""
"Converts a dictionary (previously created with [method inst2dict]) back to "
"an instance. Useful for deserializing."
msgstr ""
+"Конвертує Ñловник (попередню Ñтворений з [method inst2dict]) зворотно в "
+"екземплÑÑ€. КориÑно Ð´Ð»Ñ Ð´ÐµÑеріалізації."
#: modules/gdscript/doc_classes/@GDScript.xml:256
msgid ""
@@ -3710,112 +3715,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4894,7 +4908,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -10300,17 +10314,21 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/uk/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10319,24 +10337,24 @@ msgid ""
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10350,62 +10368,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10413,35 +10431,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10449,13 +10467,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10467,78 +10485,78 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
#, fuzzy
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr "Повертає Ð°Ñ€ÐºÑ‚Ð°Ð½Ð³ÐµÐ½Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ñ–Ð²."
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:131
+#: doc/classes/BakedLightmap.xml:132
msgid ""
"Returns if lightmapper can't be created. Unless you are using a custom "
"lightmapper, please report this as bug."
msgstr ""
-#: doc/classes/BakedLightmap.xml:134
+#: doc/classes/BakedLightmap.xml:135
msgid ""
"There is no root node to start baking from. Either provide [code]from_node[/"
"code] argument or attach this node to a parent that should be used as root."
msgstr ""
-#: doc/classes/BakedLightmap.xml:137
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:140
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:143
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:146
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10994,8 +11012,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -25017,21 +25038,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/uk/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -25040,14 +25072,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -25057,80 +25093,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -29355,7 +29391,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30668,7 +30706,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30733,22 +30772,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30763,7 +30804,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30771,19 +30812,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30854,7 +30895,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30912,7 +30954,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -34467,7 +34511,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37783,7 +37827,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37813,14 +37857,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37830,7 +37874,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40333,17 +40377,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40361,11 +40431,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40560,7 +40630,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41363,6 +41435,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41380,7 +41470,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41494,7 +41584,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -44039,24 +44131,30 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:282
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:285
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:288
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44066,7 +44164,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:291
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44076,27 +44174,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:294
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:297
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:300
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:303
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -44104,81 +44202,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:306
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:309
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:312
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:315
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:318
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:321
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:324
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:327
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:330
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:333
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:336
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:339
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:342
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -44186,109 +44284,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:345
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:348
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:351
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:354
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:357
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:360
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:363
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:366
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:369
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:372
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:375
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:378
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:381
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:384
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:387
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:390
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:393
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:396
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:399
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44299,91 +44397,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:404
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:407
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:410
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:413
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:416
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:419
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:422
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:425
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:428
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:431
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:434
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:437
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:440
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:443
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:446
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:449
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:452
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44392,13 +44490,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:456
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:459
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44408,7 +44506,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:464
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44416,19 +44514,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:469
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:473
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:477
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44442,45 +44540,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:482
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:485
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:489
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:492
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:495
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:498
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:501
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44489,7 +44587,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:504
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44500,7 +44598,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:508
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44516,14 +44614,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:516
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:519
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44531,49 +44629,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:522
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:525
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:530
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:533
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:536
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:539
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:542
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:545
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:548
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44582,7 +44680,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:552
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44590,7 +44688,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:556
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44598,7 +44696,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:560
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44608,7 +44706,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:564
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44617,7 +44715,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:568
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44626,7 +44724,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:572
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44636,7 +44734,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:576
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44644,7 +44742,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:580
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44654,7 +44752,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:584
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44664,7 +44762,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:588
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44672,7 +44770,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:592
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44681,7 +44779,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:596
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44689,7 +44787,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:600
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44701,477 +44799,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:606
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:609
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:612
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:615
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:618
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:621
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:624
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:627
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:630
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:633
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:636
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:639
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:642
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:645
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:648
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:651
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:654
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:657
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:660
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:663
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:666
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:669
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:672
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:675
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:678
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:681
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:684
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:687
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:690
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:693
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:696
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:699
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:702
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:705
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:708
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:711
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:714
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:717
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:720
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:723
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:726
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:729
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:732
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:735
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:738
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:741
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:744
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:747
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:750
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:753
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:756
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:759
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:762
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:765
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:768
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:771
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:774
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:777
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:780
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:783
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:786
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:789
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:792
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:795
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:798
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:801
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:804
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:807
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:810
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:813
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:816
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:819
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:822
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:825
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:828
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:831
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:834
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:837
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:840
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:843
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:846
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:849
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:852
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:855
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:858
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:861
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:864
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:867
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:870
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:873
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:876
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:879
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:882
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:885
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:888
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:891
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:894
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:897
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:900
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:903
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:906
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:909
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:912
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:915
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:918
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:921
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:924
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:927
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:930
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:933
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:936
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:939
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:942
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:947
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:950
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -45179,92 +45277,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:953
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:956
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:959
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:962
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:965
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:968
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:971
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:974
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:977
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:980
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:983
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:986
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:989
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:992
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:995
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:998
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1001
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1004
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -45274,33 +45372,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1008
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1011
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1014
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1018
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1022
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45313,7 +45411,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1026
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45325,7 +45423,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1034
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45337,7 +45435,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1042
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45350,7 +45448,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1046
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45358,28 +45456,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1050
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1054
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1057
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1060
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45389,25 +45487,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1064
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1067
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1070
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1073
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45420,7 +45518,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1077
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45432,7 +45530,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1085
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45444,7 +45542,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1093
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45457,13 +45555,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1097
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1100
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45471,11 +45569,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1104
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1107
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45489,7 +45587,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1113
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45498,7 +45596,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1117
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45514,7 +45612,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1122
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45524,7 +45622,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1126
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45534,7 +45632,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1130
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45545,7 +45643,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1134
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45555,7 +45653,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1138
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45563,7 +45661,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1142
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45574,7 +45672,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1146
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45589,7 +45687,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1152
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45598,13 +45696,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1157
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1160
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45613,7 +45711,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1163
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45623,7 +45721,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1166
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45635,7 +45733,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1169
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45645,24 +45743,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1172
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1175
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1178
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1181
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45671,7 +45769,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1184
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45679,7 +45777,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1187
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45688,7 +45786,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1190
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45698,7 +45796,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1194
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45706,31 +45804,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1198
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1201
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1204
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1207
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1210
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45738,7 +45836,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1213
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45748,21 +45846,21 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1216
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1219
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
"iOS specific override for [member rendering/gles2/compatibility/"
"disable_half_float], due to poor support for half-float vertex compression "
"on many devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
"If [code]true[/code] and available on the target Android device, enables "
"high floating point precision for all shader computations in GLES2.\n"
@@ -45770,31 +45868,31 @@ msgid ""
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1226
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1229
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1232
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1235
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1238
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45802,7 +45900,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1241
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45812,7 +45910,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1244
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45821,7 +45919,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1247
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45830,20 +45928,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1250
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1253
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1256
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45852,7 +45950,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1259
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45860,7 +45958,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45869,7 +45967,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1266
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45879,20 +45977,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1275
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45901,13 +45999,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45917,46 +46015,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1294
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1297
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1300
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1303
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1306
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45966,7 +46064,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45978,7 +46076,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1317
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45986,7 +46084,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45994,7 +46092,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1324
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -46003,7 +46101,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1327
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -46017,7 +46115,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1332
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -46027,7 +46125,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1335
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -46036,7 +46134,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1338
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -46046,54 +46144,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1341
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1344
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1347
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1350
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1353
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1356
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1359
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -46104,61 +46202,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1366
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1369
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1372
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1375
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1378
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1381
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1384
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1387
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -46169,7 +46267,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1394
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -46178,26 +46276,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400
-#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1409
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1412
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -46208,20 +46306,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1419
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1426
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -46233,52 +46331,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1436
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1439
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1442
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1445
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1448
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1451
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1454
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -46286,7 +46384,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -46299,7 +46397,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46311,7 +46409,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46323,7 +46421,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46335,7 +46433,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46347,7 +46445,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1481
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -47011,40 +47109,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -47052,14 +47164,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49394,6 +49506,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49411,7 +49539,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49419,11 +49547,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49433,19 +49561,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54862,20 +54990,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54886,28 +55019,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54919,19 +55052,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
diff --git a/doc/translations/vi.po b/doc/translations/vi.po
index a8cde40b8e..ab89a8ef09 100644
--- a/doc/translations/vi.po
+++ b/doc/translations/vi.po
@@ -7,12 +7,13 @@
# IoeCmcomc <hopdaigia2004@gmail.com>, 2021.
# Hung <hungthitkhia@gmail.com>, 2021.
# Giacat Buile <hatconan20024@gmail.com>, 2021.
+# Quinn Le <quinnsgn@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-09-14 16:36+0000\n"
-"Last-Translator: IoeCmcomc <hopdaigia2004@gmail.com>\n"
+"PO-Revision-Date: 2021-11-12 13:49+0000\n"
+"Last-Translator: Quinn Le <quinnsgn@gmail.com>\n"
"Language-Team: Vietnamese <https://hosted.weblate.org/projects/godot-engine/"
"godot-class-reference/vi/>\n"
"Language: vi\n"
@@ -20,7 +21,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -131,7 +132,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:55
-#, fuzzy
msgid ""
"Returns the arc cosine of [code]s[/code] in radians. Use to get the angle of "
"cosine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and "
@@ -143,14 +143,13 @@ msgid ""
"[/codeblock]"
msgstr ""
"Trả vỠcôsin nghịch đảo của [code]s[/code] theo radian. Dùng để lấy góc của "
-"cốin [code]s[/code].\n"
+"côsin [code]s[/code].\n"
"[codeblock]\n"
"# c là 0.523599 hoặc 30 độ nếu chuyển sang bằng hàm rad2deg(s)\n"
"c = acos(0.866025)\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:66
-#, fuzzy
msgid ""
"Returns the arc sine of [code]s[/code] in radians. Use to get the angle of "
"sine [code]s[/code]. [code]s[/code] must be between [code]-1.0[/code] and "
@@ -162,14 +161,14 @@ msgid ""
"[/codeblock]"
msgstr ""
"Trả vỠsin nghịch đảo [code]s[/code] theo radian. Dùng để lấy góc của sin "
-"[code]s[/code].\n"
+"[code]s[/code]. s phải từ -1.0 đến 1.0, nếu không thì hàm sẽ trả [constant "
+"NAN].\n"
"[codeblock]\n"
"# s là 0.523599 hoặc 30 độ nếu chuyển sang bằng rad2deg(s)\n"
"s = asin(0.5)\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:78
-#, fuzzy
msgid ""
"Asserts that the [code]condition[/code] is [code]true[/code]. If the "
"[code]condition[/code] is [code]false[/code], an error is generated. When "
@@ -205,11 +204,11 @@ msgstr ""
"được.\n"
"[codeblock]\n"
"# giả sử ta muốn toc_do luôn ở giữa 0 và 20\n"
-"toc_di = -10\n"
-"assert(toc_do < 20) # Äúng, chương trfinh sẽ tiếp tục\n"
+"toc_do = -10\n"
+"assert(toc_do < 20) # Äúng, chương trình sẽ tiếp tục\n"
"assert(toc_do >= 0) # Sai, chương trình sẽ dừng\n"
-"assert(toc_do >= 0 && toc_do < 20) # Bạn có thể kiểm tra 2 Ä‘iá»u kiện trong 1 "
-"lần\n"
+"assert(toc_do >= 0 and toc_do < 20) # Bạn có thể kiểm tra 2 Ä‘iá»u kiện trong "
+"1 lần\n"
"assert(toc_do < 20, \"toc_do = %f, nhưng giới hạn tốc độ là 20\" % toc_do) # "
"Hiện tin nhắn với chi tiết cụ thể\n"
"[/codeblock]"
@@ -276,7 +275,6 @@ msgstr ""
"thành hệ toạ độ cực (khoảng cách từ gốc và góc giữa điểm và gốc)."
#: modules/gdscript/doc_classes/@GDScript.xml:135
-#, fuzzy
msgid ""
"Rounds [code]s[/code] upward (towards positive infinity), returning the "
"smallest whole number that is not less than [code]s[/code].\n"
@@ -286,12 +284,14 @@ msgid ""
"[/codeblock]\n"
"See also [method floor], [method round], [method stepify], and [int]."
msgstr ""
-"Làm tròn [code]s[/code] lên (tiến tới dương vô cực), trả vỠsố nguyên không "
-"nhỠhơn [code]s[/code].\n"
+"Làm tròn [code]s[/code] lên (tiến tới dương vô cực), trả vỠsố dược làm tròn "
+"gần nhất nhưng không nhỠhơn [code]s[/code].\n"
"[codeblock]\n"
-"i = ceil(1.45) # i là 2\n"
-"i = ceil(1.001) # i là 2\n"
-"[/codeblock]"
+"a = ceil(1.45) # a là 2.0\n"
+"a = ceil(1.001) # a là 2.0\n"
+"[/codeblock]\n"
+"Ngoài ra còn có thể xem [method floor], [method round], [method stepify] và "
+"[int]."
#: modules/gdscript/doc_classes/@GDScript.xml:147
msgid ""
@@ -313,7 +313,6 @@ msgstr ""
"Äây là ngược lại cá»§a hàm [method ord]."
#: modules/gdscript/doc_classes/@GDScript.xml:162
-#, fuzzy
msgid ""
"Clamps [code]value[/code] and returns a value not less than [code]min[/code] "
"and not more than [code]max[/code].\n"
@@ -326,13 +325,9 @@ msgstr ""
"Cố định [code]gia_tri[/code] và trả vỠgiá trị không nhỠhơn [code]min[/"
"code] và không lớn hơn [code]max[/code].\n"
"[codeblock]\n"
-"toc_do = 1000\n"
-"# a là 20\n"
-"a = clamp(toc_do, 1, 20)\n"
-"\n"
-"toc_do = -10\n"
-"# a là 1\n"
-"a = clamp(toc_do, 1, 20)\n"
+"a = clamp(1000, 1, 20) #a bằng 20\n"
+"a = clamp(-10, 1, 20) #a bằng 1\n"
+"a = clamp(15, 1, 20) #a bằng 15\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:175
@@ -360,7 +355,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:190
-#, fuzzy
msgid ""
"Returns the cosine of angle [code]s[/code] in radians.\n"
"[codeblock]\n"
@@ -370,9 +364,8 @@ msgid ""
msgstr ""
"Trả vỠcôsin của góc [code]s[/code] theo radian.\n"
"[codeblock]\n"
-"# Xuất 1 rồi -1\n"
-"print(cos(PI * 2))\n"
-"print(cos(PI))\n"
+"a = cos(TAU) #a bằng 1.0\n"
+"a = cos(PI) #a bằng -1.0\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:201
@@ -398,7 +391,6 @@ msgid "Deprecated alias for [method step_decimals]."
msgstr ""
#: modules/gdscript/doc_classes/@GDScript.xml:227
-#, fuzzy
msgid ""
"[b]Note:[/b] [code]dectime[/code] has been deprecated and will be removed in "
"Godot 4.0, please use [method move_toward] instead.\n"
@@ -408,15 +400,15 @@ msgid ""
"a = dectime(60, 10, 0.1)) # a is 59.0\n"
"[/codeblock]"
msgstr ""
-"Trả vè kết quả hiệu của [code]gia_tri[/code] và [code]buoc[/code] * "
+"Ghi chú: [code]dectime[/code] sẽ không được dùng nữa và bị bỠtrong phiên "
+"bản Godot 4.0, thay vì đó hãy dùng [method move_toward].\n"
+"Trả vỠkết quả hiệu của [code]gia_tri[/code] và [code]buoc[/code] * "
"[code]luong[/code].\n"
"[codeblock]\n"
-"# a = 59\n"
-"a = dectime(60, 10, 0.1))\n"
+"a = dectime(60, 10, 0.1)) #a bằng 59.0\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:238
-#, fuzzy
msgid ""
"Converts an angle expressed in degrees to radians.\n"
"[codeblock]\n"
@@ -425,8 +417,7 @@ msgid ""
msgstr ""
"Chuyển một góc từ độ thành radian.\n"
"[codeblock]\n"
-"# r là 3.141593\n"
-"r = deg2rad(180)\n"
+"r = deg2rad(180) #r bằng 3.141593\n"
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:248
@@ -458,6 +449,23 @@ msgid ""
"See also [method smoothstep]. If you need to perform more advanced "
"transitions, use [Tween] or [AnimationPlayer]."
msgstr ""
+"Trả vỠmột giá trị được làm dịu của [code]x[/code] theo một hàm thay đổi giá "
+"trị theo thá»i gian được xác định bằng [code]duong_cong[/code]. Hàm này dá»±a "
+"trên một số mũ. [code]duong_cong[/code] có thể là bất kỳ số thập phân, với "
+"các giá trị xác định dẫn tới một hành vi cụ thể:\n"
+"[codeblock]\n"
+"- Nhá» hÆ¡n -1.0 (độc quyá»n): Ease in-out\n"
+"- -1.0: Linear\n"
+"- Từ -1.0 đến 0.0 (độc quyá»n): Ease out-in\n"
+"- 0.0: Constant\n"
+"- Từ 0.0 đến 1.0 (độc quyá»n): Ease in\n"
+"- 1.0: Linear\n"
+"- Lá»›n hÆ¡n 1.0 (độc quyá»n): Ease out\n"
+"[/codeblock]\n"
+"[url=https://raw.githubusercontent.com/godotengine/godot-docs/3.4/img/"
+"ease_cheatsheet.png]ease() bảng giá trị các đưá»ng cong[/url]\n"
+"Xem thêm [method smoothstep]. Nếu cần các cách chuyển nâng cao hơn thì dùng "
+"[Tween] hoặc [AnimationPlayer]."
#: modules/gdscript/doc_classes/@GDScript.xml:274
msgid ""
@@ -480,7 +488,6 @@ msgstr ""
"[/codeblock]"
#: modules/gdscript/doc_classes/@GDScript.xml:286
-#, fuzzy
msgid ""
"Rounds [code]s[/code] downward (towards negative infinity), returning the "
"largest whole number that is not more than [code]s[/code].\n"
@@ -494,16 +501,16 @@ msgid ""
"[code]s[/code] is a non-negative number, you can use [code]int(s)[/code] "
"directly."
msgstr ""
-"Làm tròn [code]s[/code] xuống (tiến tới âm vô cực), trả vỠsố nguyên không "
-"lớn hơn [code]s[/code].\n"
+"Làm tròn [code]s[/code] xuống (tiến tới âm vô cực), trả vỠsố nguyên gần "
+"nhất nhưng không lớn hơn [code]s[/code].\n"
"[codeblock]\n"
-"# a là 2.0\n"
-"a = floor(2.99)\n"
-"# a là -3.0\n"
-"a = floor(-2.99)\n"
+"a = floor(2.45) #a bằng 2.0\n"
+"a = floor(2.99) #a bằng 2.0\n"
+"a = floor(-2.99) #a bằng -3.0\n"
"[/codeblock]\n"
-"[b]Lưu ý:[/b] Hàm này trả vỠsố thực. Nếu cần số nguyên, bạn có thể dùng hàm "
-"[code]int(s)[/code] trực tiếp."
+"Xem thêm [method ceil], [method round], [method stepify] và [int].\n"
+"[b]Lưu ý:[/b] Hàm này trả vỠsố thực. Nếu cần số nguyên và [code]s[/code] là "
+"một số không âm, bạn có thể dùng hàm [code]int(s)[/code] trực tiếp."
#: modules/gdscript/doc_classes/@GDScript.xml:301
#, fuzzy
@@ -4012,112 +4019,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -5204,7 +5220,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -10583,15 +10599,19 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10600,24 +10620,24 @@ msgid ""
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10631,62 +10651,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10694,35 +10714,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10730,13 +10750,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10748,78 +10768,78 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
#, fuzzy
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr "Trả vỠtan nghịch đảo của tham số."
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:131
+#: doc/classes/BakedLightmap.xml:132
msgid ""
"Returns if lightmapper can't be created. Unless you are using a custom "
"lightmapper, please report this as bug."
msgstr ""
-#: doc/classes/BakedLightmap.xml:134
+#: doc/classes/BakedLightmap.xml:135
msgid ""
"There is no root node to start baking from. Either provide [code]from_node[/"
"code] argument or attach this node to a parent that should be used as root."
msgstr ""
-#: doc/classes/BakedLightmap.xml:137
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:140
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:143
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:146
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -11267,8 +11287,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -25228,20 +25251,31 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr ""
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -25250,14 +25284,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -25267,80 +25305,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -29537,7 +29575,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30838,7 +30878,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30903,22 +30944,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30933,7 +30976,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30941,19 +30984,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -31021,7 +31064,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -31079,7 +31123,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -34617,7 +34663,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37915,7 +37961,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37945,14 +37991,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37962,7 +38008,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40462,17 +40508,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40490,11 +40562,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40689,7 +40761,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41492,6 +41566,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41509,7 +41601,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41623,7 +41715,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -44172,24 +44266,30 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:282
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:285
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:288
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44199,7 +44299,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:291
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44209,27 +44309,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:294
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:297
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:300
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:303
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -44237,81 +44337,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:306
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:309
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:312
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:315
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:318
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:321
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:324
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:327
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:330
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:333
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:336
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:339
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:342
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -44319,111 +44419,111 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:345
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:348
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:351
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:354
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:357
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:360
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:363
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:366
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:369
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:372
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:375
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:378
+#: doc/classes/ProjectSettings.xml:380
#, fuzzy
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr "Nếu [code]true[/code], há»a tiết sẽ được căn ở trung tâm."
-#: doc/classes/ProjectSettings.xml:381
+#: doc/classes/ProjectSettings.xml:383
#, fuzzy
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr "Nếu [code]true[/code], há»a tiết sẽ được căn ở trung tâm."
-#: doc/classes/ProjectSettings.xml:384
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:387
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:390
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:393
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:396
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:399
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44434,91 +44534,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:404
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:407
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:410
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:413
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:416
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:419
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:422
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:425
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:428
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:431
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:434
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:437
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:440
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:443
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:446
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:449
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:452
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44527,13 +44627,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:456
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:459
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44543,7 +44643,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:464
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44551,19 +44651,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:469
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:473
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:477
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44577,45 +44677,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:482
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:485
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:489
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:492
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:495
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:498
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:501
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44624,7 +44724,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:504
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44635,7 +44735,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:508
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44651,14 +44751,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:516
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:519
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44666,49 +44766,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:522
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:525
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:530
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:533
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:536
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:539
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:542
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:545
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:548
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44717,7 +44817,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:552
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44725,7 +44825,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:556
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44733,7 +44833,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:560
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44743,7 +44843,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:564
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44752,7 +44852,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:568
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44761,7 +44861,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:572
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44771,7 +44871,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:576
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44779,7 +44879,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:580
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44789,7 +44889,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:584
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44799,7 +44899,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:588
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44807,7 +44907,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:592
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44816,7 +44916,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:596
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44824,7 +44924,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:600
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44836,477 +44936,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:606
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:609
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:612
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:615
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:618
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:621
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:624
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:627
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:630
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:633
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:636
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:639
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:642
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:645
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:648
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:651
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:654
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:657
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:660
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:663
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:666
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:669
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:672
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:675
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:678
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:681
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:684
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:687
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:690
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:693
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:696
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:699
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:702
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:705
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:708
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:711
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:714
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:717
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:720
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:723
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:726
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:729
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:732
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:735
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:738
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:741
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:744
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:747
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:750
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:753
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:756
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:759
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:762
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:765
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:768
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:771
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:774
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:777
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:780
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:783
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:786
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:789
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:792
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:795
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:798
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:801
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:804
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:807
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:810
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:813
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:816
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:819
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:822
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:825
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:828
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:831
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:834
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:837
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:840
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:843
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:846
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:849
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:852
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:855
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:858
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:861
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:864
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:867
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:870
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:873
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:876
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:879
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:882
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:885
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:888
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:891
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:894
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:897
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:900
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:903
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:906
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:909
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:912
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:915
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:918
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:921
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:924
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:927
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:930
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:933
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:936
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:939
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:942
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:947
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:950
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -45314,92 +45414,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:953
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:956
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:959
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:962
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:965
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:968
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:971
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:974
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:977
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:980
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:983
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:986
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:989
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:992
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:995
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:998
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1001
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1004
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -45409,33 +45509,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1008
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1011
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1014
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1018
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1022
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45448,7 +45548,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1026
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45460,7 +45560,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1034
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45472,7 +45572,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1042
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45485,7 +45585,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1046
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45493,28 +45593,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1050
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1054
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1057
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1060
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45524,25 +45624,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1064
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1067
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1070
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1073
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45555,7 +45655,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1077
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45567,7 +45667,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1085
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45579,7 +45679,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1093
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45592,13 +45692,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1097
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1100
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45606,11 +45706,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1104
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1107
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45624,7 +45724,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1113
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45633,7 +45733,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1117
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45649,7 +45749,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1122
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45659,7 +45759,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1126
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45669,7 +45769,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1130
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45680,7 +45780,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1134
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45690,7 +45790,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1138
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45698,7 +45798,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1142
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45709,7 +45809,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1146
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45724,7 +45824,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1152
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45733,13 +45833,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1157
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1160
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45748,7 +45848,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1163
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45758,7 +45858,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1166
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45770,7 +45870,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1169
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45780,24 +45880,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1172
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1175
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1178
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1181
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45806,7 +45906,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1184
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45814,7 +45914,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1187
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45823,7 +45923,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1190
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45833,7 +45933,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1194
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45841,31 +45941,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1198
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1201
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1204
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1207
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1210
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45873,7 +45973,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1213
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45883,21 +45983,21 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1216
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1219
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
"iOS specific override for [member rendering/gles2/compatibility/"
"disable_half_float], due to poor support for half-float vertex compression "
"on many devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
"If [code]true[/code] and available on the target Android device, enables "
"high floating point precision for all shader computations in GLES2.\n"
@@ -45905,31 +46005,31 @@ msgid ""
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1226
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1229
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1232
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1235
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1238
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45937,7 +46037,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1241
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45947,7 +46047,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1244
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45956,7 +46056,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1247
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45965,20 +46065,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1250
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1253
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1256
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45987,7 +46087,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1259
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45995,7 +46095,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -46004,7 +46104,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1266
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -46014,20 +46114,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1275
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -46036,13 +46136,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -46052,46 +46152,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1294
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1297
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1300
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1303
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1306
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -46101,7 +46201,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -46113,7 +46213,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1317
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -46121,7 +46221,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -46129,7 +46229,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1324
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -46138,7 +46238,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1327
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -46152,7 +46252,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1332
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -46162,7 +46262,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1335
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -46171,7 +46271,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1338
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -46181,54 +46281,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1341
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1344
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1347
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1350
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1353
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1356
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1359
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -46239,61 +46339,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1366
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1369
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1372
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1375
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1378
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1381
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1384
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1387
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -46304,7 +46404,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1394
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -46313,26 +46413,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400
-#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1409
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1412
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -46343,20 +46443,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1419
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1426
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -46368,52 +46468,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1436
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1439
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1442
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1445
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1448
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1451
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1454
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -46421,7 +46521,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -46434,7 +46534,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46446,7 +46546,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46458,7 +46558,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46470,7 +46570,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46482,7 +46582,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1481
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -47146,40 +47246,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -47187,14 +47301,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49521,6 +49635,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49538,7 +49668,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49546,11 +49676,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49560,19 +49690,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54962,20 +55092,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54986,28 +55121,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -55019,19 +55154,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
diff --git a/doc/translations/zh_CN.po b/doc/translations/zh_CN.po
index 9d8db6ea96..8ecab23167 100644
--- a/doc/translations/zh_CN.po
+++ b/doc/translations/zh_CN.po
@@ -61,8 +61,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine class reference\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-11-03 13:15+0000\n"
-"Last-Translator: suplife <2634557184@qq.com>\n"
+"PO-Revision-Date: 2021-11-19 08:44+0000\n"
+"Last-Translator: Haoyu Qiu <timothyqiu32@gmail.com>\n"
"Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/"
"godot-engine/godot-class-reference/zh_Hans/>\n"
"Language: zh_CN\n"
@@ -70,7 +70,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: doc/tools/make_rst.py
msgid "Description"
@@ -348,7 +348,7 @@ msgid ""
"[/codeblock]\n"
"This is the inverse of [method ord]."
msgstr ""
-"返回一个作为字符串的字符,该字符为给定Unicode代ç ç‚¹ï¼ˆä¸ŽASCIIç å…¼å®¹ï¼‰ã€‚\n"
+"返回一个作为字符串的字符,该字符为给定Unicodeç¼–ç ï¼ˆä¸ŽASCIIç å…¼å®¹ï¼‰ã€‚\n"
"[codeblock]\n"
"a = char(65) # a is \"A\"\n"
"a = char(65 + 32) # a is \"a\"\n"
@@ -366,7 +366,7 @@ msgid ""
"a = clamp(15, 1, 20) # a is 15\n"
"[/codeblock]"
msgstr ""
-"钳制 [code]value[/code],返回一个ä¸å°äºŽ [code]min[/code] 且ä¸å¤§äºŽ [code]max[/"
+"é™åˆ¶ [code]value[/code],返回一个ä¸å°äºŽ [code]min[/code] 且ä¸å¤§äºŽ [code]max[/"
"code]的值。\n"
"[codeblock]\n"
"a = clamp(1000, 1, 20) # a = 20\n"
@@ -4072,7 +4072,7 @@ msgstr "将属性åºåˆ—化并ä¿å­˜åˆ°åœºæ™¯æ–‡ä»¶ä¸­ï¼ˆé»˜è®¤ï¼‰ã€‚"
#: doc/classes/@GlobalScope.xml:1436
msgid "The property is shown in the editor inspector (default)."
-msgstr "å°†å±žæ€§å±•ç¤ºåœ¨ç¼–è¾‘å™¨çš„å±žæ€§æ£€æŸ¥å™¨é¢æ¿ä¸­ï¼ˆé»˜è®¤ï¼‰ã€‚"
+msgstr "å°†å±žæ€§å±•ç¤ºåœ¨ç¼–è¾‘å™¨çš„æ£€æŸ¥å™¨é¢æ¿ä¸­ï¼ˆé»˜è®¤ï¼‰ã€‚"
#: doc/classes/@GlobalScope.xml:1439 doc/classes/@GlobalScope.xml:1442
msgid "Deprecated usage flag, unused."
@@ -4080,7 +4080,7 @@ msgstr "废弃使用的标志,未使用。"
#: doc/classes/@GlobalScope.xml:1445
msgid "The property can be checked in the editor inspector."
-msgstr "该属性å¯ä»¥åœ¨ç¼–辑器的属性检查器中被勾选。"
+msgstr "该属性å¯ä»¥åœ¨ç¼–辑器的检查器中被勾选。"
#: doc/classes/@GlobalScope.xml:1448
msgid "The property is checked in the editor inspector."
@@ -4391,19 +4391,21 @@ msgstr ""
#: doc/classes/Transform2D.xml:11 doc/classes/Vector2.xml:11
#: doc/classes/Vector3.xml:11
msgid "https://docs.godotengine.org/en/3.4/tutorials/math/index.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/math/index.html"
+msgstr "https://docs.godotengine.org/zh_CN/stable/tutorials/math/index.html"
#: doc/classes/AABB.xml:13 doc/classes/Rect2.xml:13 doc/classes/Vector2.xml:12
#: doc/classes/Vector3.xml:12
msgid "https://docs.godotengine.org/en/3.4/tutorials/math/vector_math.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/math/vector_math.html"
+msgstr ""
+"https://docs.godotengine.org/zh_CN/stable/tutorials/math/vector_math.html"
#: doc/classes/AABB.xml:14 doc/classes/Rect2.xml:14 doc/classes/Vector2.xml:13
#: doc/classes/Vector3.xml:13
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/math/vectors_advanced.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/math/vectors_advanced.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/math/vectors_advanced."
+"html"
#: doc/classes/AABB.xml:22
msgid "Constructs an [AABB] from a position and size."
@@ -4421,86 +4423,95 @@ msgid ""
msgstr "该 [AABB] 完全包å«å¦ä¸€ä¸ªæ—¶ï¼Œè¿”回 [code]true[/code]。"
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
-msgstr "è¿”å›žè¢«æ‰©å±•è‡³åŒ…å«æŒ‡å®šç‚¹çš„该 [AABB]。"
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
+msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr "返回该 [AABB] 的体积。"
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr "获å–该 [AABB] çš„ 8 个端点的ä½ç½®ã€‚"
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr "返回该 [AABB] 归一化åŽçš„æœ€é•¿è½´ã€‚"
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
"返回该 [AABB] æœ€é•¿è½´çš„ç´¢å¼•ï¼ˆæ ¹æ® [Vector3] çš„ [code]AXIS_*[/code] 常é‡ï¼‰ã€‚"
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr "返回该 [AABB] 最长轴的标é‡é•¿åº¦ã€‚"
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr "返回该 [AABB] 归一化åŽçš„æœ€çŸ­è½´ã€‚"
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
"返回该 [AABB] æœ€çŸ­è½´çš„ç´¢å¼•ï¼ˆæ ¹æ® [Vector3] çš„ [code]AXIS_*[/code] 常é‡ï¼‰ã€‚"
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr "返回该 [AABB] 最短轴的标é‡é•¿åº¦ã€‚"
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr "返回指定方å‘上的支æŒç‚¹ã€‚常用于碰撞检测算法。"
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr "返回该 [AABB] çš„å‰¯æœ¬ï¼Œæ²¿ç€æ‰€æœ‰é¢çš„æ–¹å‘都增加了指定的大å°ã€‚"
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr "该 [AABB] ä¸ºå¹³é¢æˆ–者为空时,返回 [code]true[/code]。"
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr "该 [AABB] 为空时,返回 [code]true[/code]。"
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr "该 [AABB] åŒ…å«æŒ‡å®šç‚¹æ—¶ï¼Œè¿”回 [code]true[/code]。"
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr "返回两个 [AABB] 的交å åŒºåŸŸã€‚失败时返回空的 AABB(大å°ä¸º 0,0,0)。"
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr "该 [AABB] 与å¦ä¸€ä¸ªäº¤å æ—¶ï¼Œè¿”回 [code]true[/code]。"
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr "该 [AABB] åŒæ—¶ä½äºŽæŒ‡å®šå¹³é¢çš„两边时,返回 [code]true[/code]。"
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
@@ -4508,7 +4519,7 @@ msgstr ""
"该 [AABB] 与 [code]from[/code] å’Œ [code]to[/code] 所构æˆçš„çº¿æ®µæœ‰äº¤å æ—¶ï¼Œè¿”回 "
"[code]true[/code]。"
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
@@ -4517,23 +4528,23 @@ msgstr ""
"该 [AABB] 与 [code]aabb[/code] 近似相等时,返回 [code]true[/code]。通过将å„个"
"分é‡è°ƒç”¨ [method @GDScript.is_equal_approx] 确定。"
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr "è¿”å›žåŒæ—¶åŒ…å«è¯¥ [AABB] å’Œ [code]with[/code] 的更大的 [AABB]。"
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
"终点角。通过 [code]position + size[/code] 计算而æ¥ã€‚设置该值会修改大å°ã€‚"
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr "起点角。通常比 [member end] å°ã€‚"
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4658,7 +4669,7 @@ msgstr "接å—å¯¹è¯æ¡†æ—¶ï¼Œå³æŒ‰ä¸‹OK按钮时å‘出。"
#: doc/classes/AcceptDialog.xml:82
msgid "Emitted when a custom button is pressed. See [method add_button]."
-msgstr "按下自定义按钮时å‘出。 å‚阅[方法add_button]。"
+msgstr "按下自定义按钮时å‘出。 å‚阅[method add_button]。"
#: doc/classes/AESContext.xml:4
msgid "Interface to low level AES encryption features."
@@ -4820,7 +4831,8 @@ msgstr ""
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/2d/2d_sprite_animation.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/2d/2d_sprite_animation.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/2d/2d_sprite_animation."
+"html"
#: doc/classes/AnimatedSprite.xml:12 doc/classes/Area2D.xml:11
#: doc/classes/AudioStreamPlayer.xml:12 doc/classes/Button.xml:24
@@ -5109,7 +5121,8 @@ msgstr ""
#: doc/classes/Animation.xml:20 doc/classes/AnimationPlayer.xml:12
msgid "https://docs.godotengine.org/en/3.4/tutorials/animation/index.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/animation/index.html"
+msgstr ""
+"https://docs.godotengine.org/zh_CN/stable/tutorials/animation/index.html"
#: doc/classes/Animation.xml:28
msgid "Adds a track to the Animation."
@@ -5147,9 +5160,9 @@ msgid ""
"End offset is the number of seconds cut off at the ending of the audio "
"stream."
msgstr ""
-"返回由[code] key_idx [/code]标识的键的结æŸåç§»é‡ã€‚ [code] track_idx [/code]å¿…"
-"须是音轨的索引。\n"
-"结æŸå移是音频æµç»“æŸæ—¶æˆªæ–­çš„秒数。"
+"返回由 [code]key_idx[/code] 标识的键的结æŸåç§»é‡ã€‚[code]track_idx[/code] å¿…é¡»"
+"是音频轨é“的索引。\n"
+"结æŸåç§»æ˜¯éŸ³é¢‘æµæœ«å°¾æˆªæ–­çš„秒数。"
#: doc/classes/Animation.xml:71
msgid ""
@@ -5158,17 +5171,17 @@ msgid ""
"Start offset is the number of seconds cut off at the beginning of the audio "
"stream."
msgstr ""
-"返回由[code] key_idx [/code]标识的键的起始åç§»é‡ã€‚ [code] track_idx [/code]å¿…"
-"须是音轨的索引。\n"
-"èµ·å§‹åç§»é‡æ˜¯éŸ³é¢‘æµå¼€å§‹å¤„截断的秒数。"
+"返回由 [code]key_idx[/code] 标识的键的起始åç§»é‡ã€‚[code]track_idx[/code] å¿…é¡»"
+"是音频轨é“的索引。\n"
+"èµ·å§‹åç§»é‡æ˜¯éŸ³é¢‘æµå¼€å¤´æˆªæ–­çš„秒数。"
#: doc/classes/Animation.xml:80
msgid ""
"Returns the audio stream of the key identified by [code]key_idx[/code]. The "
"[code]track_idx[/code] must be the index of an Audio Track."
msgstr ""
-"返回由[code] key_idx [/code]标识的键的音频æµã€‚ [code] track_idx [/code]必须是"
-"音轨的索引。"
+"返回由 [code]key_idx[/code] 标识的键的音频æµã€‚[code]track_idx[/code] 必须是音"
+"频轨é“的索引。"
#: doc/classes/Animation.xml:91
msgid ""
@@ -5178,10 +5191,10 @@ msgid ""
"[code]start_offset[/code] is the number of seconds cut off at the beginning "
"of the audio stream, while [code]end_offset[/code] is at the ending."
msgstr ""
-"在给定的[code]æ—¶é—´[/code](以秒为å•ä½ï¼‰ä¸­æ’入音轨音调。 [code] track_idx [/"
-"code]必须是音轨的索引。\n"
-"[code] stream [/code]æ˜¯è¦æ’­æ”¾çš„[AudioStream]资æºã€‚ [code] start_offset [/"
-"code]是在音频æµçš„开头截断的秒数,而[code] end_offset [/code]在结尾。"
+"在 [code]time[/code] 秒处æ’入音频轨é“关键帧。[code] track_idx [/code] 必须是"
+"音频轨é“的索引。\n"
+"[code]stream[/code] æ˜¯è¦æ’­æ”¾çš„ [AudioStream] 资æºã€‚[code]start_offset[/code] "
+"是在音频æµçš„开头截断的秒数,而 [code]end_offset[/code] 则是在结尾的截断。"
#: doc/classes/Animation.xml:101
msgid ""
@@ -5189,8 +5202,8 @@ msgid ""
"[code]offset[/code]. The [code]track_idx[/code] must be the index of an "
"Audio Track."
msgstr ""
-"将由 [code]key_idx[/code] 标识的键的结æŸå移设置为值 [code]offset[/code]. "
-"[code]track_idx[/code] 必须是音轨的索引."
+"将由 [code]key_idx[/code] 标识的关键帧的结æŸå移设置为值 [code]offset[/"
+"code]ã€‚å‚æ•° [code]track_idx[/code] 必须是音频轨é“的索引。"
#: doc/classes/Animation.xml:110
msgid ""
@@ -5198,8 +5211,8 @@ msgid ""
"[code]offset[/code]. The [code]track_idx[/code] must be the index of an "
"Audio Track."
msgstr ""
-"将由 [code]key_idx[/code] 确定的键的起始åç§»é‡è®¾ç½®ä¸º [code]offset[/code]. "
-"[code]track_idx[/code] 必须是音频轨é“的索引."
+"将由 [code]key_idx[/code] 确定的关键帧的起始åç§»é‡è®¾ç½®ä¸º [code]offset[/"
+"code]ã€‚å‚æ•° [code]track_idx[/code] 必须是音频轨é“的索引。"
#: doc/classes/Animation.xml:119
msgid ""
@@ -5270,8 +5283,8 @@ msgid ""
"[code]out_handle[/code]. The [code]track_idx[/code] must be the index of a "
"Bezier Track."
msgstr ""
-"将由 [code]key_idx[/code] 确定的键的输出柄设置为 [code]out_handle[/code] 。"
-"[code]track_idx[/code] 必须是 Bezier轨é“的索引。"
+"将由 [code]key_idx[/code] 确定的关键帧的输出柄设置为 [code]out_handle[/"
+"code] ã€‚å‚æ•° [code]track_idx[/code] 必须是è´å¡žå°”曲线轨é“的索引。"
#: doc/classes/Animation.xml:190
msgid ""
@@ -5351,7 +5364,8 @@ msgstr "返回钥匙所在的时间。"
msgid ""
"Returns the transition curve (easing) for a specific key (see the built-in "
"math function [method @GDScript.ease])."
-msgstr "返回特定键的过渡曲线(缓动)(å‚阅内置数学函数[方法@GDScript.ease])。"
+msgstr ""
+"返回特定键的过渡曲线(缓动)(å‚阅内置数学函数[method @GDScript.ease])。"
#: doc/classes/Animation.xml:303
msgid "Returns the value of a given key in a given track."
@@ -5361,7 +5375,8 @@ msgstr "返回给定轨é“中给定键的值。"
msgid ""
"Gets the path of a track. For more information on the path format, see "
"[method track_set_path]."
-msgstr "获å–轨迹的路径。有关路径格å¼çš„详细信æ¯ï¼Œè¯·å‚阅[方法 track_set_path]。"
+msgstr ""
+"获å–轨迹的路径。有关路径格å¼çš„详细信æ¯ï¼Œè¯·å‚阅[method track_set_path]。"
#: doc/classes/Animation.xml:317
msgid "Gets the type of a track."
@@ -5432,7 +5447,8 @@ msgstr "设置现有键的时间。"
msgid ""
"Sets the transition curve (easing) for a specific key (see the built-in math "
"function [method @GDScript.ease])."
-msgstr "设置特定键的过渡曲线(缓动)(å‚阅内置数学函数[方法@GDScript.ease])。"
+msgstr ""
+"设置特定键的过渡曲线(缓动)(å‚阅内置数学函数[method @GDScript.ease])。"
#: doc/classes/Animation.xml:438
msgid "Sets the value of an existing key."
@@ -5548,7 +5564,7 @@ msgid ""
"value of a [Color])."
msgstr ""
"Bezier轨迹用于使用自定义曲线对数值进行æ’值。它们也å¯ä»¥ç”¨æ¥å¯¹å‘é‡å’Œé¢œè‰²çš„å­å±ž"
-"性进行动画处ç†ï¼ˆä¾‹å¦‚[颜色]çš„alpha值)。"
+"性进行动画处ç†ï¼ˆä¾‹å¦‚[Color]çš„alpha值)。"
#: doc/classes/Animation.xml:543
msgid ""
@@ -5556,12 +5572,12 @@ msgid ""
"[AudioStreamPlayer]. The stream can be trimmed and previewed in the "
"animation."
msgstr ""
-"éŸ³è½¨æ˜¯ç”¨æ¥æ’­æ”¾éŸ³é¢‘æµçš„任何一ç§ç±»åž‹çš„[AudioStreamPlayer]。该æµå¯ä»¥åœ¨åŠ¨ç”»ä¸­è¿›è¡Œ"
-"修剪和预览。"
+"音频轨é“å¯ä»¥ç”¨æ¥é€šè¿‡ä»»æ„类型的 [AudioStreamPlayer] 播放音频æµã€‚该æµå¯ä»¥åœ¨åŠ¨ç”»"
+"中进行修剪和预览。"
#: doc/classes/Animation.xml:546
msgid "Animation tracks play animations in other [AnimationPlayer] nodes."
-msgstr "动画曲目在其他 [动画播放器] 节点中播放动画。"
+msgstr "动画曲目在其他 [AnimationPlayer] 节点中播放动画。"
#: doc/classes/Animation.xml:549
msgid "No interpolation (nearest value)."
@@ -5631,7 +5647,8 @@ msgstr ""
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/animation/animation_tree.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/animation/animation_tree.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/animation/animation_tree."
+"html"
#: doc/classes/AnimationNode.xml:18
msgid ""
@@ -5863,7 +5880,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -6482,7 +6499,7 @@ msgid ""
"[/codeblock]"
msgstr ""
"设置此æ¡ä»¶ï¼Œå¼€å¯è‡ªåЍå‰è¿›ã€‚æä¾›çš„åç§°å°†æˆä¸º[AnimationTree]ä¸Šçš„ä¸€ä¸ªå¸ƒå°”å‚æ•°ï¼Œå¯"
-"ä»¥é€šè¿‡ä»£ç æŽ§åˆ¶ï¼Œå‚阅[url=https://docs.godotengine.org/en/3.4/tutorials/"
+"ä»¥é€šè¿‡ä»£ç æŽ§åˆ¶ï¼Œå‚阅[url=https://docs.godotengine.org/zh_CN/stable/tutorials/"
"animation/animation_tree.html#controlling-from-code][/url]。例如,如果"
"[member AnimationTree.tree_root]是一个[AnimationNodeStateMachine],[member "
"advance_condition]被设置为[code]\"idle\"[/code]。\n"
@@ -6636,8 +6653,8 @@ msgid ""
"a [Tween] node, but it requires doing everything by code.\n"
"Updating the target properties of animations occurs at process time."
msgstr ""
-"动画播放器用于[动画]资æºçš„通用播放。它包å«ä¸€ä¸ªåŠ¨ç”»å­—å…¸ï¼ˆä»¥å称为å‚考)和自定"
-"义动画转æ¢ä¹‹é—´çš„æ··åˆæ—¶é—´ã€‚此外,动画å¯ä»¥åœ¨ä¸åŒçš„通é“中播放和混åˆã€‚\n"
+"动画播放器用于[Animation]资æºçš„通用播放。它包å«ä¸€ä¸ªåŠ¨ç”»å­—å…¸ï¼ˆä»¥å称为å‚考)和"
+"自定义动画转æ¢ä¹‹é—´çš„æ··åˆæ—¶é—´ã€‚此外,动画å¯ä»¥åœ¨ä¸åŒçš„通é“中播放和混åˆã€‚\n"
"AnimationPlayer]比[Tween]更适åˆç”¨äºŽäº‹å…ˆçŸ¥é“最终值的动画。例如,由于编辑器æä¾›"
"的动画工具,用[AnimationPlayer]节点更容易完æˆå±å¹•的淡入淡出。这个特殊的例å­ä¹Ÿ"
"å¯ä»¥ç”¨[Tween]节点æ¥å®žçŽ°ï¼Œä½†è¿™éœ€è¦é€šè¿‡ä»£ç æ¥å®Œæˆä¸€åˆ‡ã€‚\n"
@@ -6862,7 +6879,7 @@ msgstr "当剿’­æ”¾çš„动画的ä½ç½®ï¼ˆä»¥ç§’为å•ä½ï¼‰ã€‚"
#: doc/classes/AnimationPlayer.xml:200
msgid "The call mode to use for Call Method tracks."
-msgstr "ç”¨äºŽâ€œå‘¼å«æ–¹æ³•â€è½¨é“çš„å‘¼å«æ¨¡å¼ã€‚"
+msgstr "æ–¹æ³•è°ƒç”¨è½¨é“æ‰€ä½¿ç”¨çš„调用模å¼ã€‚"
#: doc/classes/AnimationPlayer.xml:203
msgid ""
@@ -7522,7 +7539,6 @@ msgid "https://godotengine.org/asset-library/asset/127"
msgstr "https://godotengine.org/asset-library/asset/127"
#: doc/classes/Area.xml:17
-#, fuzzy
msgid ""
"Returns a list of intersecting [Area]s. The overlapping area's [member "
"CollisionObject.collision_layer] must be part of this area's [member "
@@ -7531,12 +7547,13 @@ msgid ""
"list is modified once during the physics step, not immediately after objects "
"are moved. Consider using signals instead."
msgstr ""
-"返回一个相交的[PhysicsBody]的列表。由于性能的原因(碰撞都是在åŒä¸€æ—¶é—´å¤„ç†"
-"çš„ï¼‰ï¼Œè¿™ä¸ªåˆ—è¡¨åœ¨ç‰©ç†æ­¥éª¤ä¸­è¢«ä¿®æ”¹ä¸€æ¬¡ï¼Œè€Œä¸æ˜¯åœ¨ç‰©ä½“被移动åŽç«‹å³ä¿®æ”¹ã€‚å¯ä»¥è€ƒè™‘"
-"ä½¿ç”¨ä¿¡å·æ¥ä»£æ›¿ã€‚"
+"返回相交的[Area]的列表。é‡å åŒºåŸŸçš„[member CollisionObject.collision_layer]å¿…"
+"须是这个区域[member CollisionObject.collision_mask]的一部分,这样æ‰èƒ½è¢«æ£€æµ‹"
+"到。\n"
+"å‡ºäºŽæ€§èƒ½çš„è€ƒè™‘ï¼Œå› ç¢°æ’žéƒ½æ˜¯åŒæ—¶å¤„ç†çš„ï¼Œè¿™ä¸ªåˆ—è¡¨åœ¨ç‰©ç†æ­¥éª¤ä¸­åªä¿®æ”¹ä¸€æ¬¡ï¼Œè€Œä¸æ˜¯"
+"在物体被移动åŽç«‹å³ä¿®æ”¹ã€‚è€ƒè™‘ä½¿ç”¨ä¿¡å·æ¥ä»£æ›¿ã€‚"
#: doc/classes/Area.xml:24
-#, fuzzy
msgid ""
"Returns a list of intersecting [PhysicsBody]s. The overlapping body's "
"[member CollisionObject.collision_layer] must be part of this area's [member "
@@ -7545,9 +7562,11 @@ msgid ""
"list is modified once during the physics step, not immediately after objects "
"are moved. Consider using signals instead."
msgstr ""
-"返回一个相交的[PhysicsBody]的列表。由于性能的原因(碰撞都是在åŒä¸€æ—¶é—´å¤„ç†"
-"çš„ï¼‰ï¼Œè¿™ä¸ªåˆ—è¡¨åœ¨ç‰©ç†æ­¥éª¤ä¸­è¢«ä¿®æ”¹ä¸€æ¬¡ï¼Œè€Œä¸æ˜¯åœ¨ç‰©ä½“被移动åŽç«‹å³ä¿®æ”¹ã€‚å¯ä»¥è€ƒè™‘"
-"ä½¿ç”¨ä¿¡å·æ¥ä»£æ›¿ã€‚"
+"返回相交的[PhysicsBody]的列表。é‡å ç‰©ä½“çš„[member CollisionObject."
+"collision_layer]必须是这个区域[member CollisionObject.collision_mask]的一部"
+"分,这样æ‰èƒ½è¢«æ£€æµ‹åˆ°ã€‚\n"
+"å‡ºäºŽæ€§èƒ½çš„è€ƒè™‘ï¼Œå› ç¢°æ’žéƒ½æ˜¯åŒæ—¶å¤„ç†çš„ï¼Œè¿™ä¸ªåˆ—è¡¨åœ¨ç‰©ç†æ­¥éª¤ä¸­åªä¿®æ”¹ä¸€æ¬¡ï¼Œè€Œä¸æ˜¯"
+"在物体被移动åŽç«‹å³ä¿®æ”¹ã€‚è€ƒè™‘ä½¿ç”¨ä¿¡å·æ¥ä»£æ›¿ã€‚"
#: doc/classes/Area.xml:32
msgid ""
@@ -7835,7 +7854,8 @@ msgstr ""
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/physics/using_area_2d.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/physics/using_area_2d.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/physics/using_area_2d."
+"html"
#: doc/classes/Area2D.xml:12 doc/classes/CollisionShape2D.xml:12
#: doc/classes/RectangleShape2D.xml:10
@@ -7849,7 +7869,6 @@ msgid "https://godotengine.org/asset-library/asset/120"
msgstr "https://godotengine.org/asset-library/asset/120"
#: doc/classes/Area2D.xml:19
-#, fuzzy
msgid ""
"Returns a list of intersecting [Area2D]s. The overlapping area's [member "
"CollisionObject2D.collision_layer] must be part of this area's [member "
@@ -7858,11 +7877,13 @@ msgid ""
"list is modified once during the physics step, not immediately after objects "
"are moved. Consider using signals instead."
msgstr ""
-"返回相交的 [Area2D] çš„åˆ—è¡¨ã€‚ç”±äºŽæ€§èƒ½åŽŸå› ï¼ˆç¢°æ’žéƒ½æ˜¯åŒæ—¶å¤„ç†çš„),该列表ä¸ä¼šåœ¨"
-"对象移动åŽç«‹å³æ›´æ–°ï¼Œåªä¼šåœ¨ç‰©ç†æ›´æ–°æ—¶è¿›è¡Œç»Ÿä¸€ä¿®æ”¹ã€‚å¯ä»¥è€ƒè™‘改用信å·ã€‚"
+"返回相交的[Area2D]的列表。é‡å åŒºåŸŸçš„[member CollisionObject2D."
+"collision_layer]必须是这个区域[member CollisionObject2D.collision_mask]的一部"
+"分,这样æ‰èƒ½è¢«æ£€æµ‹åˆ°ã€‚\n"
+"å‡ºäºŽæ€§èƒ½çš„è€ƒè™‘ï¼Œå› ç¢°æ’žéƒ½æ˜¯åŒæ—¶å¤„ç†çš„ï¼Œè¿™ä¸ªåˆ—è¡¨åœ¨ç‰©ç†æ­¥éª¤ä¸­åªä¿®æ”¹ä¸€æ¬¡ï¼Œè€Œä¸æ˜¯"
+"在物体被移动åŽç«‹å³ä¿®æ”¹ã€‚è€ƒè™‘ä½¿ç”¨ä¿¡å·æ¥ä»£æ›¿ã€‚"
#: doc/classes/Area2D.xml:26
-#, fuzzy
msgid ""
"Returns a list of intersecting [PhysicsBody2D]s. The overlapping body's "
"[member CollisionObject2D.collision_layer] must be part of this area's "
@@ -7871,8 +7892,11 @@ msgid ""
"list is modified once during the physics step, not immediately after objects "
"are moved. Consider using signals instead."
msgstr ""
-"返回相交的 [PhysicsBody2D] çš„åˆ—è¡¨ã€‚ç”±äºŽæ€§èƒ½åŽŸå› ï¼ˆç¢°æ’žéƒ½æ˜¯åŒæ—¶å¤„ç†çš„),该列表"
-"ä¸ä¼šåœ¨å¯¹è±¡ç§»åЍåŽç«‹å³æ›´æ–°ï¼Œåªä¼šåœ¨ç‰©ç†æ›´æ–°æ—¶è¿›è¡Œç»Ÿä¸€ä¿®æ”¹ã€‚å¯ä»¥è€ƒè™‘改用信å·ã€‚"
+"返回相交的[PhysicsBody2D]的列表。é‡å ç‰©ä½“çš„[member CollisionObject2D."
+"collision_layer]必须是这个区域[member CollisionObject2D.collision_mask]的一部"
+"分,这样æ‰èƒ½è¢«æ£€æµ‹åˆ°ã€‚\n"
+"å‡ºäºŽæ€§èƒ½çš„è€ƒè™‘ï¼Œå› ç¢°æ’žéƒ½æ˜¯åŒæ—¶å¤„ç†çš„ï¼Œè¿™ä¸ªåˆ—è¡¨åœ¨ç‰©ç†æ­¥éª¤ä¸­åªä¿®æ”¹ä¸€æ¬¡ï¼Œè€Œä¸æ˜¯"
+"在物体被移动åŽç«‹å³ä¿®æ”¹ã€‚è€ƒè™‘ä½¿ç”¨ä¿¡å·æ¥ä»£æ›¿ã€‚"
#: doc/classes/Area2D.xml:34
msgid ""
@@ -8706,8 +8730,8 @@ msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/content/procedural_geometry/"
"arraymesh.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/content/procedural_geometry/"
-"arraymesh.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/content/"
+"procedural_geometry/arraymesh.html"
#: doc/classes/ArrayMesh.xml:36
msgid ""
@@ -9072,7 +9096,7 @@ msgstr ""
#: doc/classes/ARVRInterface.xml:11 doc/classes/ARVROrigin.xml:13
#: doc/classes/ARVRPositionalTracker.xml:12 doc/classes/ARVRServer.xml:10
msgid "https://docs.godotengine.org/en/3.4/tutorials/vr/index.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/vr/index.html"
+msgstr "https://docs.godotengine.org/zh_CN/stable/tutorials/vr/index.html"
#: doc/classes/ARVRController.xml:4
msgid "A spatial node representing a spatially-tracked controller."
@@ -9906,9 +9930,9 @@ msgid ""
"[code]1.0[/code], then this equals the sum of Euclidean distances of all "
"segments in the path."
msgstr ""
-"A*å³A 星是一ç§è®¡ç®—机算法,广泛用于寻路和图é历,通过一组给定的边或线段,在顶"
-"点或点之间绘制短路径的过程。由于其性能和准确性,而被广泛使用。 Godot 的 A* 实"
-"现默认使用三维空间中的点和欧å¼è·ç¦»ã€‚\n"
+"A*(A 星)是一ç§è®¡ç®—机算法,广泛用于寻路和图é历,是通过一组给定的边(线"
+"段),在顶点(点)之间绘制短路径的过程。A* 因其性能和准确性而被广泛使用。"
+"Godot çš„ A* 实现默认使用三维空间中的点和欧å¼è·ç¦»ã€‚\n"
"您需è¦ä½¿ç”¨ [method add_point] 手动添加点,并使用 [method connect_points] 手动"
"创建线段。然åŽï¼Œå¯ä»¥ä½¿ç”¨ [method are_points_connected] 函数测试两点之间是å¦å­˜"
"在路径,通过 [method get_id_path] 获å–包å«ç´¢å¼•的路径,或使用 [method "
@@ -9933,8 +9957,8 @@ msgstr ""
"的信æ¯ã€‚\n"
"如果使用默认的 [method _estimate_cost] 和 [method _compute_cost] 方法,或者如"
"æžœæä¾›çš„ [method _estimate_cost] æ–¹æ³•è¿”å›žæˆæœ¬çš„下é™ï¼Œåˆ™ A* è¿”å›žçš„è·¯å¾„å°†æ˜¯æˆæœ¬"
-"最低的路径。这里,路径的代价等于路径中所有段的[method_compute_cost]结果之和乘"
-"以å„个段端点的[code]weight_scale[/code]æƒé‡ã€‚如果使用默认方法并且所有点的 "
+"最低的路径。这里,路径的代价等于路径中所有段的[method _compute_cost]结果之和"
+"乘以å„个段端点的[code]weight_scale[/code]æƒé‡ã€‚如果使用默认方法并且所有点的 "
"[code]weight_scale[/code] 设置为 [code]1.0[/code],则这等于路径中所有段的欧å¼"
"è·ç¦»ä¹‹å’Œã€‚"
@@ -10484,7 +10508,7 @@ msgid ""
"(\"w\" and \"h\" in the editor) resizes the texture so it fits within the "
"margin."
msgstr ""
-"区域周围的边è·ã€‚Rect2]çš„[member Rect2.size]傿•°ï¼ˆç¼–辑器中的 \"w \"å’Œ \"h\")"
+"区域周围的边è·ã€‚[Rect2]çš„[member Rect2.size]傿•°ï¼ˆç¼–辑器中的 \"w \"å’Œ \"h\")"
"调整纹ç†çš„大å°ï¼Œä½¿å…¶é€‚åˆäºŽè¾¹è·ã€‚"
#: doc/classes/AtlasTexture.xml:27
@@ -10860,7 +10884,8 @@ msgstr ""
#: doc/classes/AudioEffectHighShelfFilter.xml:9
#: doc/classes/AudioEffectLowShelfFilter.xml:9 doc/classes/AudioServer.xml:10
msgid "https://docs.godotengine.org/en/3.4/tutorials/audio/audio_buses.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/audio/audio_buses.html"
+msgstr ""
+"https://docs.godotengine.org/zh_CN/stable/tutorials/audio/audio_buses.html"
#: doc/classes/AudioEffectDistortion.xml:18
msgid "Distortion power. Value can range from 0 to 1."
@@ -11344,7 +11369,7 @@ msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/audio/"
"recording_with_microphone.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/audio/"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/audio/"
"recording_with_microphone.html"
#: doc/classes/AudioEffectRecord.xml:17
@@ -11755,7 +11780,8 @@ msgstr ""
#: doc/classes/AudioStreamPlayer2D.xml:12
#: doc/classes/AudioStreamPlayer3D.xml:13
msgid "https://docs.godotengine.org/en/3.4/tutorials/audio/audio_streams.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/audio/audio_streams.html"
+msgstr ""
+"https://docs.godotengine.org/zh_CN/stable/tutorials/audio/audio_streams.html"
#: doc/classes/AudioStream.xml:11 doc/classes/AudioStreamGenerator.xml:12
#: doc/classes/AudioStreamGeneratorPlayback.xml:10
@@ -12479,11 +12505,16 @@ msgid "Prerendered indirect light map for a scene."
msgstr "场景的预渲染间接光照贴图。"
#: doc/classes/BakedLightmap.xml:7
+#, fuzzy
msgid ""
"Baked lightmaps are an alternative workflow for adding indirect (or baked) "
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
@@ -12493,12 +12524,12 @@ msgstr ""
"[b]注æ„:[/b] 由于光照贴图的工作原ç†ï¼Œå¤§å¤šæ•°å±žæ€§åªæœ‰åœ¨å…‰ç…§è´´å›¾å†æ¬¡çƒ˜ç„™åŽæ‰ä¼š"
"看到效果。"
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
+msgstr ""
+"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/baked_lightmaps.html"
-#: doc/classes/BakedLightmap.xml:19
-#, fuzzy
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -12506,29 +12537,30 @@ msgid ""
"If no save path is provided it will try to match the path from the current "
"[member light_data]."
msgstr ""
-"烘焙光照贴图,从给定的 [code]from_node[/code] 根扫æå¹¶å°†ç»“æžœ "
-"[BakedLightmapData] ä¿å­˜åœ¨ [code]data_save_path[/code] 中。如果没有æä¾›ä¿å­˜è·¯"
-"径,它将å°è¯•åŒ¹é…æ¥è‡ªå½“å‰ [member light_data] 的路径。"
+"烘焙光照贴图,从给定的[code]from_node[/code]根节点扫æï¼Œå¹¶å°†äº§ç”Ÿçš„"
+"[BakedLightmapData]ä¿å­˜åœ¨[code]data_save_path[/code]中。如果没有æä¾›æ ¹èŠ‚ç‚¹ï¼Œ"
+"此节点的父节点将作为根节点。如果没有æä¾›ä¿å­˜è·¯å¾„,将å°è¯•匹é…当å‰[member "
+"light_data]的路径。"
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
"å¯ç”¨åŽï¼Œå…‰ç…§è´´å›¾ä¼šå°†æ‰€æœ‰ç½‘格的纹ç†åˆå¹¶ä¸ºä¸€ä¸ªå¤§çš„分层纹ç†ã€‚ GLES2 䏿”¯æŒã€‚"
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr "æ¯ä¸ªå…‰ç…§è´´å›¾å±‚的最大尺寸,仅在å¯ç”¨ [member atlas_generate] 时使用。"
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr "在烘焙过程中使用光线投射åç½®æ¥é¿å…浮点数精度问题。"
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -12549,17 +12581,17 @@ msgstr ""
"[b]注æ„:[/b] [member bounce_indirect_energy] 仅在[member bounces] 设置为大于"
"或等于[code]1[/code]的值时有效。"
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr "烘焙过程中考虑的光线å射次数。å‚阅 [member bounce_indirect_energy]。"
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr "用于实时æ•获动æ€å¯¹è±¡ä¿¡æ¯çš„网格大å°ã€‚"
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
@@ -12568,16 +12600,16 @@ msgstr ""
"å¯ç”¨åŽï¼Œå°†è®¡ç®—包å«åœºæ™¯ç…§æ˜Žä¿¡æ¯çš„八剿 ‘ã€‚ç„¶åŽæ­¤å…«å‰æ ‘将用于照亮场景中的动æ€å¯¹"
"象。"
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr "å置值,用于å‡å°‘æ•èŽ·çš„å…«å‰æ ‘中的光传播é‡ã€‚"
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr "æ•获数æ®çš„烘焙质é‡ã€‚"
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
@@ -12585,7 +12617,7 @@ msgstr ""
"如果烘焙åŽçš„网格没有UV2的尺寸æç¤ºï¼Œè¿™ä¸ªå€¼å°†è¢«ç”¨æ¥ç²—略计算出åˆé€‚的光照贴图尺"
"寸。"
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
@@ -12593,7 +12625,7 @@ msgstr ""
"[member environment_mode] 设置为 [constant ENVIRONMENT_MODE_CUSTOM_COLOR] 时"
"的环境颜色。"
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
@@ -12602,7 +12634,7 @@ msgstr ""
"[member environment_mode] 设置为 [constant ENVIRONMENT_MODE_CUSTOM_COLOR] 或 "
"[constant ENVIRONMENT_MODE_CUSTOM_SKY] æ—¶çš„èƒ½é‡æ¯”例系数。"
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
@@ -12610,11 +12642,11 @@ msgstr ""
"当 [member environment_mode] 设置为 [constant ENVIRONMENT_MODE_CUSTOM_SKY] 时"
"è¦ä½¿ç”¨çš„ [Sky] 资æºã€‚"
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr "烘焙自定义天空的旋转。"
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -12624,11 +12656,11 @@ msgstr ""
"所有光照贴图纹ç†å…ƒç´ çš„æœ€å°çŽ¯å¢ƒå…‰ã€‚è¿™ä¸è€ƒè™‘åœºæ™¯å‡ ä½•ä½“çš„ä»»ä½•é®æŒ¡ï¼Œå®ƒåªæ˜¯ç¡®ä¿æ‰€"
"有光照贴图纹ç†å…ƒç´ ä¸Šçš„光釿œ€å°ã€‚å¯ç”¨äºŽé˜´å½±é¢œè‰²çš„艺术控制。"
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr "决定烘焙时使用哪个环境。"
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
@@ -12637,17 +12669,17 @@ msgstr ""
"烘焙光照贴图的大å°ã€‚åªæœ‰è¯¥åŒºåŸŸå†…的网格æ‰ä¼šåŒ…å«åœ¨çƒ˜ç„™å…‰ç…§è´´å›¾ä¸­ï¼Œä¹Ÿç”¨ä½œåЍæ€å…‰"
"ç…§æ•获区域的边界。"
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr "已废弃,在以å‰çš„版本中,它决定了光照贴图的ä¿å­˜ä½ç½®ã€‚"
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr "计算出的光照数æ®ã€‚"
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
@@ -12656,7 +12688,7 @@ msgstr ""
"å†³å®šåœ¨ä¸æ­£ç¡®çš„光照烘烤中æ¯ä¸€ä¸ªçº¹ç†å…ƒç´ çš„采样é‡ã€‚å¯ä»¥åœ¨é¡¹ç›®è®¾ç½®ä¸­é…ç½®æ¯ä¸ªè´¨é‡"
"级别的采样é‡ã€‚"
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -12666,14 +12698,14 @@ msgstr ""
"在光照贴图纹ç†ä¸­å­˜å‚¨å…¨è‰²å€¼ã€‚ç¦ç”¨æ—¶ï¼Œå…‰ç…§è´´å›¾çº¹ç†å°†å­˜å‚¨å•个亮度通é“。如果场景"
"仅包å«ç™½å…‰æˆ–者您ä¸ä»‹æ„在间接照明中丢失颜色信æ¯ï¼Œåˆ™å¯ä»¥ç¦ç”¨ä»¥å‡å°‘ç£ç›˜ä½¿ç”¨é‡ã€‚"
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
"å¯ç”¨åŽï¼Œå°†ä½¿ç”¨å…‰ç…§è´´å›¾é™å™ªå™¨æ¥å‡å°‘基于Monte Carlo的全局照明固有的噪声。"
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -12692,27 +12724,27 @@ msgstr ""
"端或 [member ProjectSettings.rendering/quality/depth/hdr] 为 [code]false,也"
"会é™ä½Žå…‰ç…§è´´å›¾æ¡çº¹[/code]。"
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr "æœ€ä½Žçƒ˜ç„™è´¨é‡æ¨¡å¼ã€‚计算速度最快。"
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr "é»˜è®¤çƒ˜ç„™è´¨é‡æ¨¡å¼ã€‚"
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr "æ›´é«˜çš„çƒ˜ç„™è´¨é‡æ¨¡å¼ã€‚éœ€è¦æ›´é•¿çš„æ—¶é—´æ¥è®¡ç®—。"
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr "æœ€é«˜çš„çƒ˜çƒ¤è´¨é‡æ¨¡å¼ã€‚éœ€è¦æœ€é•¿çš„æ—¶é—´æ¥è®¡ç®—。"
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr "烘焙æˆåŠŸã€‚"
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
@@ -12720,51 +12752,55 @@ msgstr ""
"如果没有找到åˆé€‚çš„ä¿å­˜è·¯å¾„,则返回。这å¯èƒ½å‘生在没有指定[member image_path]或"
"者ä¿å­˜ä½ç½®æ— æ•ˆçš„æƒ…况下。"
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr "当剿œªä½¿ç”¨."
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr "当烘焙器ä¸èƒ½å°†æ¯ä¸ªç½‘格的纹ç†ä¿å­˜åˆ°æ–‡ä»¶æ—¶è¿”回。"
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr "生æˆçš„光照贴图尺寸过大。"
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr "有些网格包å«[code][0,1][/code]范围以外的UV2值。"
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr "å¦‚æžœç”¨æˆ·å–æ¶ˆäº†çƒ˜çƒ¤ï¼Œåˆ™è¿”回。"
-#: doc/classes/BakedLightmap.xml:131
+#: doc/classes/BakedLightmap.xml:132
msgid ""
"Returns if lightmapper can't be created. Unless you are using a custom "
"lightmapper, please report this as bug."
msgstr ""
+"如果ä¸èƒ½åˆ›å»ºå…‰ç…§è´´å›¾å™¨ï¼Œåˆ™è¿”回。除éžä½ ä½¿ç”¨çš„æ˜¯è‡ªå®šä¹‰çš„光照贴图器,å¦åˆ™è¯·å°†æ­¤"
+"报告为bug。"
-#: doc/classes/BakedLightmap.xml:134
+#: doc/classes/BakedLightmap.xml:135
msgid ""
"There is no root node to start baking from. Either provide [code]from_node[/"
"code] argument or attach this node to a parent that should be used as root."
msgstr ""
+"没有根节点å¯ä»¥å¼€å§‹çƒ˜ç„™ã€‚è¦ä¹ˆæä¾›[code]from_node[/code]傿•°ï¼Œè¦ä¹ˆå°†æ­¤èŠ‚ç‚¹é™„åŠ "
+"到一个被用作根节点的父节点。"
-#: doc/classes/BakedLightmap.xml:137
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr "烘焙过程中ä¸ä½¿ç”¨ä»»ä½•环境。"
-#: doc/classes/BakedLightmap.xml:140
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr "烘焙环境会自动从当å‰åœºæ™¯ä¸­èŽ·å–。"
-#: doc/classes/BakedLightmap.xml:143
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr "在烘焙过程中使用自定义天空作为环境。"
-#: doc/classes/BakedLightmap.xml:146
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr "烘焙过程中使用自定义纯色作为环境。"
@@ -13015,12 +13051,13 @@ msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/math/matrices_and_transforms."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/math/matrices_and_transforms."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/math/"
+"matrices_and_transforms.html"
#: doc/classes/Basis.xml:15 doc/classes/Transform.xml:13
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/using_transforms.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/3d/using_transforms.html"
+msgstr ""
+"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/using_transforms.html"
#: doc/classes/Basis.xml:16 doc/classes/Line2D.xml:11
#: doc/classes/Transform.xml:14 doc/classes/Transform2D.xml:13
@@ -13291,9 +13328,12 @@ msgstr "返回设置为[code]true[/code]çš„ä½å›¾å…ƒç´ çš„æ•°é‡ã€‚"
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
-msgstr "在ä½å›¾ä¸Šåº”ç”¨å½¢æ€æ‰©å±•ã€‚ç¬¬ä¸€ä¸ªå‚æ•°æ˜¯æ‰©å±•é‡ï¼ŒRect2是è¦åº”用扩展的区域。"
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
+msgstr ""
#: doc/classes/BitMap.xml:66
msgid ""
@@ -13782,6 +13822,8 @@ msgid ""
"text color of the button. Disabled, hovered, and pressed states take "
"precedence over this color."
msgstr ""
+"当[Button]获得焦点时使用的文本[Color]。åªå–代按钮的正常文本颜色。ç¦ç”¨ã€æ‚¬åœå’Œ"
+"按下状æ€ä¼˜å…ˆäºŽè¿™ä¸ªé¢œè‰²ã€‚"
#: doc/classes/Button.xml:80
msgid "Text [Color] used when the [Button] is being hovered."
@@ -13817,7 +13859,7 @@ msgid ""
"Only one allows being pressed.\n"
"[member BaseButton.toggle_mode] should be [code]true[/code]."
msgstr ""
-"[按钮]ç»„ã€‚æ‰€æœ‰ç›´æŽ¥å’Œé—´æŽ¥çš„å­æŒ‰é’®éƒ½æˆä¸º radiosã€‚åªæœ‰ä¸€ä¸ªå…许被按下。\n"
+"[Button]ç»„ã€‚æ‰€æœ‰ç›´æŽ¥å’Œé—´æŽ¥çš„å­æŒ‰é’®éƒ½æˆä¸º radiosã€‚åªæœ‰ä¸€ä¸ªå…许被按下。\n"
"[member BaseButton.toggle_mode]应该是[code]true[/code]。"
#: doc/classes/ButtonGroup.xml:16
@@ -14721,14 +14763,16 @@ msgstr ""
#: doc/classes/CanvasItem.xml:15 doc/classes/CanvasLayer.xml:10
#: doc/classes/InputEvent.xml:11 doc/classes/Viewport.xml:15
msgid "https://docs.godotengine.org/en/3.4/tutorials/2d/2d_transforms.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/2d/2d_transforms.html"
+msgstr ""
+"https://docs.godotengine.org/zh_CN/stable/tutorials/2d/2d_transforms.html"
#: doc/classes/CanvasItem.xml:16 doc/classes/Control.xml:18
#: doc/classes/Node2D.xml:10
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/2d/custom_drawing_in_2d.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/2d/custom_drawing_in_2d.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/2d/custom_drawing_in_2d."
+"html"
#: doc/classes/CanvasItem.xml:23
msgid ""
@@ -14926,8 +14970,8 @@ msgid ""
"for performance reasons. Transforms are accumulated and then set. Use this "
"if you need an up-to-date transform when doing physics operations."
msgstr ""
-"å¼ºåˆ¶æ›´æ–°å˜æ¢ã€‚由于性能原因,物ç†å­¦ä¸­çš„å˜æ¢å˜åŒ–䏿˜¯å³æ—¶çš„ã€‚å˜æ¢æ˜¯ç´¯ç§¯åŽå†è®¾ç½®"
-"çš„ã€‚å¦‚æžœæ‚¨åœ¨è¿›è¡Œç‰©ç†æ“ä½œæ—¶éœ€è¦æœ€æ–°çš„å˜æ¢ï¼Œè¯·ä½¿ç”¨æ­¤åŠŸèƒ½ã€‚"
+"å¼ºåˆ¶æ›´æ–°å˜æ¢ã€‚由于性能原因,物ç†ä¸­çš„å˜æ¢æ”¹å˜ä¸æ˜¯å³æ—¶çš„ã€‚å˜æ¢æ˜¯åœ¨ç´¯ç§¯åŽå†è®¾"
+"ç½®ã€‚å¦‚æžœä½ åœ¨è¿›è¡Œç‰©ç†æ“ä½œæ—¶éœ€è¦æœ€æ–°çš„å˜æ¢ï¼Œè¯·ä½¿ç”¨æ­¤åŠŸèƒ½ã€‚"
#: doc/classes/CanvasItem.xml:269
msgid "Returns the [RID] of the [World2D] canvas where this item is in."
@@ -14989,7 +15033,7 @@ msgid ""
"Returns [code]true[/code] if the node is set as top-level. See [method "
"set_as_toplevel]."
msgstr ""
-"如果节点设置为顶层,则返回[code] true [/code]。å‚阅[方法set_as_toplevel]。"
+"如果节点设置为顶层,则返回[code] true [/code]。å‚阅[method set_as_toplevel]。"
#: doc/classes/CanvasItem.xml:353
msgid ""
@@ -15295,7 +15339,8 @@ msgstr ""
#: doc/classes/CanvasLayer.xml:11
msgid "https://docs.godotengine.org/en/3.4/tutorials/2d/canvas_layers.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/2d/canvas_layers.html"
+msgstr ""
+"https://docs.godotengine.org/zh_CN/stable/tutorials/2d/canvas_layers.html"
#: doc/classes/CanvasLayer.xml:18
msgid "Returns the RID of the canvas used by this layer."
@@ -15437,8 +15482,8 @@ msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/gui/bbcode_in_richtextlabel."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/gui/bbcode_in_richtextlabel."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/gui/"
+"bbcode_in_richtextlabel.html"
#: doc/classes/CharFXTransform.xml:11 doc/classes/RichTextEffect.xml:17
msgid ""
@@ -15504,7 +15549,7 @@ msgid ""
msgstr ""
"包å«åœ¨å¼€å¤´çš„BBCodeæ ‡è®°ä¸­ä¼ é€’çš„å‚æ•°ã€‚é»˜è®¤æƒ…å†µä¸‹ï¼Œå‚æ•°æ˜¯å­—符串。如果它们的内容"
"与[bool],[int]或[float]之类的类型匹é…,它们将被自动转æ¢ã€‚æ ¼å¼ä¸º[code] "
-"#rrggbb [/code]或[code] #rgb [/code]的颜色代ç å°†è½¬æ¢ä¸ºä¸é€æ˜Žçš„[颜色]。字符串"
+"#rrggbb [/code]或[code] #rgb [/code]的颜色代ç å°†è½¬æ¢ä¸ºä¸é€æ˜Žçš„[Color]。字符串"
"傿•°å³ä½¿ä½¿ç”¨å¼•å·ä¹Ÿä¸èƒ½åŒ…å«ç©ºæ ¼ã€‚如果存在,引å·ä¹Ÿå°†å‡ºçŽ°åœ¨æœ€ç»ˆå­—ç¬¦ä¸²ä¸­ã€‚\n"
"例如,开头的BBCode标签[code] [example foo = hello bar = true baz = 42 color ="
"#ffffff] [/code]将映射到以下[Dictionary]:\n"
@@ -15558,9 +15603,8 @@ msgid "The check icon to display when the [CheckBox] is checked."
msgstr "选中[CheckBox]时显示的å¤é€‰å›¾æ ‡ã€‚"
#: doc/classes/CheckBox.xml:28
-#, fuzzy
msgid "The check icon to display when the [CheckBox] is checked and disabled."
-msgstr "选中并ç¦ç”¨[CheckButton]时显示的图标。"
+msgstr "当[CheckBox]被选中和ç¦ç”¨æ—¶è¦æ˜¾ç¤ºçš„勾选图标。"
#: doc/classes/CheckBox.xml:31
msgid ""
@@ -15590,6 +15634,8 @@ msgid ""
"text color of the checkbox. Disabled, hovered, and pressed states take "
"precedence over this color."
msgstr ""
+"[CheckBox] 文本获得焦点时的字体颜色。åªå–代å¤é€‰æ¡†çš„æ­£å¸¸æ–‡æœ¬é¢œè‰²ã€‚ç¦ç”¨ã€æ‚¬åœå’Œ"
+"按下状æ€ä¼˜å…ˆäºŽè¿™ä¸ªé¢œè‰²ã€‚"
#: doc/classes/CheckBox.xml:49
msgid "The [CheckBox] text's font color when it's hovered."
@@ -15644,10 +15690,9 @@ msgid "The check icon to display when the [CheckBox] is unchecked."
msgstr "未选中[CheckBox]时显示的å¤é€‰å›¾æ ‡ã€‚"
#: doc/classes/CheckBox.xml:86
-#, fuzzy
msgid ""
"The check icon to display when the [CheckBox] is unchecked and disabled."
-msgstr "未选中和ç¦ç”¨[CheckButton]时显示的图标。"
+msgstr "当[CheckBox]未被选中并被ç¦ç”¨æ—¶è¦æ˜¾ç¤ºçš„勾选图标。"
#: doc/classes/CheckButton.xml:4
msgid "Checkable button. See also [CheckBox]."
@@ -15702,6 +15747,8 @@ msgid ""
"normal text color of the button. Disabled, hovered, and pressed states take "
"precedence over this color."
msgstr ""
+"[CheckButton] æ–‡æœ¬èŽ·å¾—ç„¦ç‚¹æ—¶çš„å­—ä½“é¢œè‰²ã€‚ä»…æ›¿æ¢æŒ‰é’®çš„æ­£å¸¸æ–‡æœ¬é¢œè‰²ã€‚ç¦ç”¨ã€æ‚¬åœ"
+"和按下状æ€ä¼˜å…ˆäºŽæ­¤é¢œè‰²ã€‚"
#: doc/classes/CheckButton.xml:43
msgid "The [CheckButton] text's font color when it's hovered."
@@ -15869,10 +15916,10 @@ msgid ""
"[code]name[/code], [code]return: (class_name, hint, hint_string, name, type, "
"usage)[/code]."
msgstr ""
-"返回[code]signal[/code][code]class[/code]或其父级的数æ®ã€‚返回值是带有以下键"
-"的 [Dictionary]: [code]args[/code], [code]default_args[/code], [code]flags[/"
-"code], [code]id[/code], [code]name[/code], [code]return:(class_name, hint, "
-"hint_string, name, type, usage)[/code]。"
+"返回 [code]class[/code] 或其父级的[code]ä¿¡å·[/code]æ•°æ®ã€‚返回 [Dictionary] å¹¶"
+"带有以下键: [code]args[/code], [code]default_args[/code], [code]flags[/"
+"code], [code]id[/code], [code]name[/code], [code]return:(class_name, hint, "
+"hint_string, name, type, usage)[/code]。"
#: doc/classes/ClassDB.xml:113
msgid ""
@@ -15902,8 +15949,8 @@ msgid ""
"Returns whether [code]class[/code] (or its ancestry if [code]no_inheritance[/"
"code] is [code]false[/code]) has a method called [code]method[/code] or not."
msgstr ""
-"返回[code] class [/code](如果[code] no_inheritance [/code]为[code] false [/"
-"code],则返回其父级)是å¦å…·æœ‰ç§°ä¸º[code]method[/code]的方法。"
+"返回 [code]class[/code] æ˜¯å¦æœ‰å为 [code]method[/code] 的方法。(如果[code] "
+"no_inheritance [/code]为[code] false [/code],则返回其父级)。"
#: doc/classes/ClassDB.xml:147
msgid ""
@@ -16019,9 +16066,9 @@ msgid ""
"information."
msgstr ""
"相机的碰撞é®ç½©ã€‚åªæœ‰åœ¨å¯¹è±¡æœ‰è‡³å°‘一个碰撞层和碰撞这招匹对时æ‰èƒ½è¢«æ£€æµ‹åˆ°ã€‚详细"
-"ä¿¡æ¯è¯·å‚阅文档[url=https://docs.godotengine.org/en/3.4/tutorials/physics/"
-"physics_introduction.html#collision-layers-and-masks]Collision layers and "
-"masks[/url]。"
+"ä¿¡æ¯è¯·å‚阅文档[url=https://docs.godotengine.org/zh_CN/stable/tutorials/"
+"physics/physics_introduction.html#collision-layers-and-masks]Collision "
+"layers and masks[/url]。"
#: doc/classes/ClippedCamera.xml:81
msgid ""
@@ -16045,10 +16092,10 @@ msgid ""
"owners are not nodes and do not appear in the editor, but are accessible "
"through code using the [code]shape_owner_*[/code] methods."
msgstr ""
-"CollisionObject是物ç†å­¦å¯¹è±¡çš„基类。它å¯ä»¥å®¹çº³ä»»ä½•æ•°é‡çš„碰撞形状 [Shape]s。æ¯"
-"个形状必须分é…给一个形状所有者 [i]shape owner[/i]。CollisionObjectå¯ä»¥æœ‰ä»»æ„"
-"æ•°é‡çš„å½¢çŠ¶æ‰€æœ‰è€…ã€‚å½¢çŠ¶æ‰€æœ‰è€…ä¸æ˜¯èŠ‚ç‚¹ï¼Œä¹Ÿä¸ä¼šå‡ºçŽ°åœ¨ç¼–è¾‘å™¨ä¸­ï¼Œä½†æ˜¯å¯ä»¥é€šè¿‡ä»£ç "
-"使用[code] shape_owner_* [/code]方法进行访问。"
+"CollisionObject是物ç†å¯¹è±¡çš„基类。它å¯ä»¥å®¹çº³ä»»ä½•æ•°é‡çš„碰撞形状 [Shape]s。æ¯ä¸ª"
+"形状必须分é…给一个形状所有者 [i]shape owner[/i]。CollisionObjectå¯ä»¥æœ‰ä»»æ„æ•°"
+"é‡çš„å½¢çŠ¶æ‰€æœ‰è€…ã€‚å½¢çŠ¶æ‰€æœ‰è€…ä¸æ˜¯èŠ‚ç‚¹ï¼Œä¹Ÿä¸ä¼šå‡ºçŽ°åœ¨ç¼–è¾‘å™¨ä¸­ï¼Œä½†æ˜¯å¯ä»¥é€šè¿‡ä»£ç ä½¿"
+"用[code] shape_owner_* [/code]方法进行访问。"
#: doc/classes/CollisionObject.xml:20
msgid ""
@@ -16188,8 +16235,8 @@ msgstr ""
"个。å¦è§ [member collision_mask]。\n"
"[b]注æ„:[/b]如果对象A在对象B扫æçš„任何层中,或者对象B在对象A扫æçš„任何层中,"
"则检测到接触。有关更多信æ¯ï¼Œè¯·å‚阅文档中的 [url=https://docs.godotengine.org/"
-"en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks] 碰撞层和掩ç [/url]。"
+"zh_CN/latest/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks] 碰撞层和掩ç [/url]。"
#: doc/classes/CollisionObject.xml:178
msgid ""
@@ -16205,8 +16252,8 @@ msgstr ""
"å¦è§ [member collision_layer]]。\n"
"[b]注æ„:[/b]如果对象A在对象B扫æçš„任何层中,或者对象B在对象A扫æçš„任何层中,"
"则检测到接触。有关更多信æ¯ï¼Œè¯·å‚阅文档中的 [url=https://docs.godotengine.org/"
-"en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-"
-"masks] 碰撞层和掩ç [/url]。"
+"zh_CN/latest/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks] 碰撞层和掩ç [/url]。"
#: doc/classes/CollisionObject.xml:182
msgid ""
@@ -16339,7 +16386,7 @@ msgstr ""
"这个CollisionObject2D所在的物ç†å±‚。碰撞对象å¯ä»¥å­˜åœ¨äºŽ32个ä¸åŒå±‚中的一个或多"
"个。也è§[member collision_mask]。\n"
"[b]注æ„:[/b]如果对象A在对象B扫æçš„任何层中,或者对象B在对象A扫æçš„任何层中,"
-"则检测到接触。更多信æ¯è§æ–‡æ¡£[url=https://docs.godotengine.org/en/latest/"
+"则检测到接触。更多信æ¯è§æ–‡æ¡£[url=https://docs.godotengine.org/zh_CN/latest/"
"tutorials/physics/physics_introduction.html#collision-layers-and-masks] 碰撞"
"层和掩ç [/url]。"
@@ -16356,7 +16403,7 @@ msgstr ""
"这个CollisionObject2D所扫æçš„物ç†å±‚。碰撞对象å¯ä»¥æ‰«æ32个ä¸åŒå±‚中的一个或多"
"个。也è§[member collision_layer]。\n"
"[b]注æ„:[/b] 如果对象A在对象B扫æçš„任何层中,或者对象B在对象A扫æçš„任何层"
-"中,就会检测到接触。更多信æ¯è§æ–‡æ¡£[url=https://docs.godotengine.org/en/"
+"中,就会检测到接触。更多信æ¯è§æ–‡æ¡£[url=https://docs.godotengine.org/zh_CN/"
"latest/tutorials/physics/physics_introduction.html#collision-layers-and-"
"masks] 碰撞层和掩ç [/url]。"
@@ -16526,8 +16573,8 @@ msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/physics/physics_introduction."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/physics/physics_introduction."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/physics/"
+"physics_introduction.html"
#: doc/classes/CollisionShape.xml:19
msgid ""
@@ -16806,7 +16853,7 @@ msgid ""
"approximately equal, by running [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-"通过在æ¯ä¸ªç»„件上è¿è¡Œ[方法@GDScript.is_equal_approx],如果这个颜色和"
+"通过在æ¯ä¸ªç»„件上è¿è¡Œ[method @GDScript.is_equal_approx],如果这个颜色和"
"[code]color[/code]近似相等,返回[code]true[/code]。"
#: doc/classes/Color.xml:146
@@ -17816,6 +17863,8 @@ msgid ""
"normal text color of the button. Disabled, hovered, and pressed states take "
"precedence over this color."
msgstr ""
+"当[ColorPickerButton]获得焦点时使用的文本[Color]ã€‚åªæ›¿æ¢æŒ‰é’®çš„æ­£å¸¸æ–‡æœ¬é¢œè‰²ã€‚"
+"ç¦ç”¨ã€æ‚¬åœå’ŒæŒ‰ä¸‹çжæ€ä¼˜å…ˆäºŽè¿™ä¸ªé¢œè‰²ã€‚"
#: doc/classes/ColorPickerButton.xml:83
msgid "Text [Color] used when the [ColorPickerButton] is being hovered."
@@ -18361,7 +18410,7 @@ msgid ""
"[method get_icon], [method get_stylebox], and the [code]add_*_override[/"
"code] methods provided by this class."
msgstr ""
-"所有 UI 相关节点的基类。 [Control] 具有定义其范围的边界矩形ã€ç›¸å¯¹äºŽå…¶çˆ¶æŽ§ä»¶æˆ–"
+"所有 UI 相关节点的基类。[Control] 具有定义其范围的边界矩形ã€ç›¸å¯¹äºŽå…¶çˆ¶æŽ§ä»¶æˆ–"
"当å‰è§†çª—的锚点ä½ç½®ä»¥åŠè¡¨ç¤ºé”šç‚¹å移的边è·ã€‚ 当节点ã€å…¶ä»»ä½•父节点或å±å¹•尺寸å‘生"
"å˜åŒ–时,边è·ä¼šè‡ªåŠ¨æ›´æ–°ã€‚\n"
"更多关于 Godot çš„ UI 系统ã€é”šç‚¹ã€è¾¹è·å’Œå®¹å™¨çš„ä¿¡æ¯ï¼Œè¯·å‚阅手册中的相关教程。 "
@@ -18381,22 +18430,22 @@ msgstr ""
"它。\n"
"[Theme] èµ„æºæ›´æ”¹æŽ§ä»¶çš„外观。 如果您更改 [Control] 节点上的 [Theme],则会影å“"
"其所有å­èŠ‚ç‚¹ã€‚ è¦è¦†ç›–æŸäº›ä¸»é¢˜çš„傿•°ï¼Œè¯·è°ƒç”¨ [code]add_*_override[/code] 方法"
-"之一,例如 [method add_font_override]。 您å¯ä»¥ä½¿ç”¨å±žæ€§æ£€æŸ¥å™¨è¦†ç›–主题。\n"
-"[b]注æ„:[/b] 主题相关项 [i]䏿˜¯[/i] [Object] 对象属性。这æ„味ç€ä½ ä¸èƒ½ä½¿ç”¨ "
-"[method Object.get] å’Œ [method Object.set] 访问它们的值。相å,请使用 "
-"[method get_color]ã€[method get_constant]ã€[method get_font]ã€[method "
-"get_icon]ã€[method get_stylebox],以åŠè¿™ä¸ªç±»æä¾›çš„ [code]add_*_override[/"
-"code] 方法。"
+"之一,例如 [method add_font_override]。 您å¯ä»¥ä½¿ç”¨æ£€æŸ¥å™¨è¦†ç›–主题。\n"
+"[b]注æ„:[/b] 主题项目[i]䏿˜¯[/i] [Object] 的属性。这æ„味ç€ä½ æ— æ³•使用 "
+"[method Object.get] å’Œ [method Object.set] 访问它们的值。请æ¢ç”¨ [method "
+"get_color]ã€[method get_constant]ã€[method get_font]ã€[method get_icon]ã€"
+"[method get_stylebox],以åŠè¿™ä¸ªç±»æä¾›çš„ [code]add_*_override[/code] 方法。"
#: doc/classes/Control.xml:17
msgid "https://docs.godotengine.org/en/3.4/tutorials/gui/index.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/gui/index.html"
+msgstr "https://docs.godotengine.org/zh_CN/stable/tutorials/gui/index.html"
#: doc/classes/Control.xml:19
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/gui/control_node_gallery.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/gui/control_node_gallery.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/gui/control_node_gallery."
+"html"
#: doc/classes/Control.xml:20
msgid "https://github.com/godotengine/godot-demo-projects/tree/master/gui"
@@ -18634,10 +18683,10 @@ msgid ""
"$MyButton.add_stylebox_override(\"normal\", null)\n"
"[/codeblock]"
msgstr ""
-"使用指定的 [code]name[/code] 为主题 [StyleBox] åˆ›å»ºæœ¬åœ°è¦†ç›–é¡¹ã€‚èŽ·å–æŽ§ä»¶çš„ä¸»é¢˜"
-"项时,本地覆盖项始终优先。å¯ä»¥é€šè¿‡ä¸ºå…¶åˆ†é… [code]null[/code] 值æ¥åˆ é™¤è¦†ç›–。\n"
-"å‚阅[method get_stylebox]。\n"
-"[b]通过å¤åˆ¶æ¥ä¿®æ”¹StyleBox中的属性的示例:[/b]\n"
+"为主题 [StyleBox] 创建å为 [code]name[/code] çš„æœ¬åœ°è¦†ç›–é¡¹ã€‚èŽ·å–æŽ§ä»¶çš„ä¸»é¢˜é¡¹"
+"时,本地覆盖项始终优先。å¯ä»¥é€šè¿‡ä¸ºå…¶åˆ†é… [code]null[/code] 值æ¥åˆ é™¤è¦†ç›–。\n"
+"å‚阅 [method get_stylebox]。\n"
+"[b]通过å¤åˆ¶æ¥ä¿®æ”¹ StyleBox 中的属性的示例:[/b]\n"
"[codeblock]\n"
"# 下é¢çš„代ç ç‰‡æ®µå‡è®¾å­èŠ‚ç‚¹ MyButton 分é…了一个 StyleBoxFlat。\n"
"# èµ„æºæ˜¯è·¨å®žä¾‹å…±äº«çš„,所以我们需è¦å¤åˆ¶å®ƒ\n"
@@ -18646,7 +18695,7 @@ msgstr ""
"new_stylebox_normal.border_width_top = 3\n"
"new_stylebox_normal.border_color = Color(0, 1, 0.5)\n"
"$MyButton.add_stylebox_override(\"normal\", new_stylebox_normal)\n"
-"# åˆ é™¤æ ·å¼æ¡†è¦†ç›–。\n"
+"# 删除样å¼ç›’覆盖。\n"
"$MyButton.add_stylebox_override(\"normal\", null)\n"
"[/codeblock]"
@@ -18927,9 +18976,9 @@ msgid ""
"[code]theme_type[/code].\n"
"See [method get_color] for details."
msgstr ""
-"如果该 [Theme] 具有指定 [code]name[/code] å’Œ [code]theme_type[/code] çš„æ ·å¼æ¡†"
-"项目,则从树中第一个匹é…çš„ [Theme] 返回 [StyleBox]。\n"
-"有关详细信æ¯ï¼Œè¯·å‚阅 [method get_color]。"
+"è¿”å›žæ ‘ä¸­é¦–ä¸ªç¬¦åˆæ¡ä»¶çš„ [Theme] çš„ [StyleBox],这个 [Theme] 具有å称为 "
+"[code]name[/code] 并且主题类型为 [code]theme_type[/code] 的样å¼ç›’。\n"
+"详情请å‚阅 [method get_color]。"
#: doc/classes/Control.xml:368
msgid ""
@@ -19715,8 +19764,8 @@ msgstr ""
"缩放。\n"
"[b]注æ„:[/b] 这个属性主è¦ç”¨äºŽåŠ¨ç”»ç”¨é€”ã€‚å½“æŽ§ä»¶è¢«ç¼©æ”¾æ—¶ï¼ŒæŽ§ä»¶å†…çš„æ–‡æœ¬å°†çœ‹èµ·æ¥"
"是åƒç´ åŒ–或模糊的。è¦åœ¨ä½ çš„项目支æŒå¤šç§åˆ†è¾¨çŽ‡ï¼Œè¯·ä½¿ç”¨[url=https://docs."
-"godotengine.org/en/3.4/tutorials/viewports/multiple_resolutions.html]文档[/"
-"url]中æè¿°çš„åˆé€‚的视窗拉伸模å¼ï¼Œè€Œä¸æ˜¯å•独缩放控件。\n"
+"godotengine.org/zh_CN/stable/tutorials/viewports/multiple_resolutions.html]æ–‡"
+"æ¡£[/url]中æè¿°çš„åˆé€‚的视窗拉伸模å¼ï¼Œè€Œä¸æ˜¯å•独缩放控件。\n"
"[b]注æ„:[/b] 如果控件节点是[Container]节点的一个å­èŠ‚ç‚¹ï¼Œå½“åœºæ™¯å®žä¾‹åŒ–æ—¶ï¼Œç¼©æ”¾"
"将被é‡ç½®ä¸º[code]Vector2(1, 1)[/code]。è¦åœ¨å®žä¾‹åŒ–时设置控件的缩放,使用"
"[code]yield(get_tree(), \"idle_frame\")[/code]等待一帧,然åŽè®¾ç½®å…¶[member "
@@ -19826,20 +19875,20 @@ msgstr ""
#: doc/classes/Control.xml:864
msgid "The node cannot grab focus. Use with [member focus_mode]."
-msgstr "该节点无法获å–焦点。与[member focus_mode]一起使用。"
+msgstr "该节点无法获å–焦点。在 [member focus_mode] 中使用。"
#: doc/classes/Control.xml:867
msgid ""
"The node can only grab focus on mouse clicks. Use with [member focus_mode]."
-msgstr "该节点åªèƒ½æŠ“ä½é¼ æ ‡å•击的焦点。与[member focus_mode]一起使用。"
+msgstr "该节点åªèƒ½é€šè¿‡é¼ æ ‡ç‚¹å‡»èŽ·å–焦点。在 [member focus_mode] 中使用。"
#: doc/classes/Control.xml:870
msgid ""
"The node can grab focus on mouse click or using the arrows and the Tab keys "
"on the keyboard. Use with [member focus_mode]."
msgstr ""
-"该节点å¯ä»¥é›†ä¸­ç²¾åŠ›äºŽé¼ æ ‡å•击或使用键盘上的箭头和Tab键。与[member focus_mode]"
-"一起使用。"
+"该节点å¯ä»¥é€šè¿‡ä½¿ç”¨é¼ æ ‡ç‚¹å‡»æˆ–使用键盘上的箭头和 Tab 键获å–焦点。在 [member "
+"focus_mode] 中使用。"
#: doc/classes/Control.xml:873
msgid ""
@@ -20234,9 +20283,9 @@ msgid ""
"automatically marked as handled, and they will not propagate further to "
"other controls. This also results in blocking signals in other controls."
msgstr ""
-"如果å•击,控件将通过[method_gui_input]接收鼠标按钮输入事件。并且控件将接收"
-"[signal mouse_entered]å’Œ[signal mouse_exited]ä¿¡å·ã€‚这些事件将自动标记为已处"
-"ç†ï¼Œå¹¶ä¸”ä¸ä¼šè¿›ä¸€æ­¥ä¼ æ’­åˆ°å…¶ä»–控件。这也会导致其他控件中的信å·é˜»å¡žã€‚"
+"被点击时,控件将通过 [method _gui_input] 收到鼠标按钮输入事件。控件能够接收"
+"到 [signal mouse_entered] å’Œ [signal mouse_exited] ä¿¡å·ã€‚这些事件将自动被标记"
+"为已处ç†ï¼Œä¸ä¼šè¿›ä¸€æ­¥ä¼ æ’­åˆ°å…¶ä»–控件,因此相关的信å·ä¹Ÿä¸ä¼šåœ¨å…¶ä»–控件中触å‘。"
#: doc/classes/Control.xml:1029
msgid ""
@@ -20249,11 +20298,11 @@ msgid ""
"all, the event will still be handled automatically, so unhandled input will "
"not be fired."
msgstr ""
-"如果å•击,控件将通过[method_gui_input]接收鼠标按钮输入事件。并且控件将接收"
-"[signal mouse_entered]å’Œ[signal mouse_exited]ä¿¡å·ã€‚如果此控件未处ç†äº‹ä»¶ï¼Œåˆ™å°†"
-"è€ƒè™‘çˆ¶æŽ§ä»¶ï¼ˆå¦‚æžœæœ‰ï¼‰ï¼Œä¾æ­¤ç±»æŽ¨ï¼Œç›´åˆ°ä¸å†æœ‰å¯èƒ½å¤„ç†å®ƒçš„父控件为止。这也å…许信"
-"å·åœ¨å…¶ä»–控件中触å‘。å³ä½¿æ ¹æœ¬æ²¡æœ‰æŽ§ä»¶å¤„ç†è¿‡è¯¥äº‹ä»¶ï¼Œè¯¥äº‹ä»¶ä»å°†è‡ªåЍ处ç†ï¼Œå› æ­¤ä¸"
-"ä¼šè§¦å‘æœªå¤„ç†çš„输入。"
+"被点击时,控件将通过 [method _gui_input] 收到鼠标按钮输入事件。控件能够接收 "
+"[signal mouse_entered] å’Œ [signal mouse_exited] ä¿¡å·ã€‚如果此控件未处ç†äº‹ä»¶ï¼Œ"
+"则将考虑其父控件(如果有的è¯ï¼‰ï¼Œå¹¶ä¾æ­¤ç±»æŽ¨ï¼Œç›´åˆ°ä¸å†æœ‰å¯èƒ½å¤„ç†å®ƒçš„父控件为"
+"止。因此,相关的信å·å¯ä»¥åœ¨å…¶ä»–控件中触å‘。å³ä½¿æ ¹æœ¬æ²¡æœ‰æŽ§ä»¶å¤„ç†è¿‡è¯¥äº‹ä»¶ï¼Œè¯¥äº‹"
+"ä»¶ä»å°†è¢«è‡ªåЍ处ç†ï¼Œå› æ­¤ä¸ä¼šè§¦å‘未处ç†çš„输入。"
#: doc/classes/Control.xml:1032
msgid ""
@@ -20263,9 +20312,9 @@ msgid ""
"receiving these events or firing the signals. Ignored events will not be "
"handled automatically."
msgstr ""
-"控件将ä¸ä¼šé€šè¿‡[method_gui_input]接收鼠标按钮输入事件。该控件也ä¸ä¼šæŽ¥æ”¶"
-"[signal mouse_entered]或[signal mouse_exited]ä¿¡å·ã€‚è¿™ä¸ä¼šé˜»æ­¢å…¶ä»–控件接收这些"
-"事件或触å‘ä¿¡å·ã€‚忽略的事件将ä¸ä¼šè‡ªåЍ处ç†ã€‚"
+"该控件ä¸ä¼šé€šè¿‡ [method _gui_input] 收到鼠标按钮输入事件,也ä¸ä¼šæŽ¥æ”¶åˆ° "
+"[signal mouse_entered] å’Œ [signal mouse_exited] ä¿¡å·ã€‚è¿™ä¸ä¼šé˜»æ­¢å…¶ä»–控件接收"
+"这些事件或触å‘ä¿¡å·ã€‚被忽略的事件将ä¸ä¼šè¢«è‡ªåЍ处ç†ã€‚"
#: doc/classes/Control.xml:1035
msgid ""
@@ -20298,9 +20347,9 @@ msgid ""
"variables, like [member anchor_left]. To change all 4 anchors at once, use "
"[method set_anchors_preset]."
msgstr ""
-"å°†4个锚点的一侧之一对é½åˆ°èŠ‚ç‚¹çš„[code] Rect [/code]的左上角。与[code] anchor "
-"_ * [/code]æˆå‘˜å˜é‡ä¹‹ä¸€ä¸€èµ·ä½¿ç”¨ï¼Œä¾‹å¦‚[member anchor_left]。è¦ä¸€æ¬¡æ›´æ”¹æ‰€æœ‰4个"
-"锚点,请使用[method set_anchors_preset]。"
+"å°† 4 个锚点的æŸä¸€ä¾§å¸é™„到节点的 [code]Rect[/code] 的左上角。在 "
+"[code]anchor_*[/code] æˆå‘˜å˜é‡ä¸­ä½¿ç”¨ï¼Œä¾‹å¦‚ [member anchor_left]。è¦ä¸€æ¬¡æ›´æ”¹å…¨"
+"部 4 个锚点,请使用 [method set_anchors_preset]。"
#: doc/classes/Control.xml:1047
msgid ""
@@ -20309,9 +20358,9 @@ msgid ""
"member variables, like [member anchor_left]. To change all 4 anchors at "
"once, use [method set_anchors_preset]."
msgstr ""
-"å°†4ä¸ªé”šç‚¹çš„ä¸€ä¾§ä¹‹ä¸€æ•æ‰åˆ°å³ä¸‹è§’节点[code] Rect [/code]的末端。与[code] "
-"anchor _ * [/code]æˆå‘˜å˜é‡ä¹‹ä¸€ä¸€èµ·ä½¿ç”¨ï¼Œä¾‹å¦‚[member anchor_left]。è¦ä¸€æ¬¡æ›´æ”¹"
-"所有4个锚点,请使用[method set_anchors_preset]。"
+"å°† 4 个锚点的æŸä¸€ä¾§å¸é™„到节点的 [code]Rect[/code] çš„å³ä¸‹è§’。在 "
+"[code]anchor_*[/code] æˆå‘˜å˜é‡ä¸­ä½¿ç”¨ï¼Œä¾‹å¦‚ [member anchor_left]。è¦ä¸€æ¬¡æ›´æ”¹å…¨"
+"部 4 个锚点,请使用 [method set_anchors_preset]。"
#: doc/classes/ConvexPolygonShape.xml:4
msgid "Convex polygon shape for 3D physics."
@@ -20404,7 +20453,7 @@ msgstr "返回[enum Parameter]æŒ‡å®šçš„å‚æ•°çš„éšæœºæ€§ç³»æ•°ã€‚"
#: doc/classes/CPUParticles.xml:46 doc/classes/CPUParticles2D.xml:47
msgid ""
"Returns the enabled state of the given flag (see [enum Flags] for options)."
-msgstr "返回给定标志的å¯ç”¨çжæ€ï¼ˆæœ‰å…³é€‰é¡¹ï¼Œè¯·å‚阅[枚举标志])。"
+msgstr "返回给定标志的å¯ç”¨çжæ€ï¼ˆæœ‰å…³é€‰é¡¹ï¼Œè¯·å‚阅[enum Flags])。"
#: doc/classes/CPUParticles.xml:52 doc/classes/CPUParticles2D.xml:53
msgid "Restarts the particle emitter."
@@ -20425,7 +20474,7 @@ msgstr "设置[enum Parameter]æŒ‡å®šçš„å‚æ•°çš„éšæœºæ€§å› å­ã€‚"
#: doc/classes/CPUParticles.xml:84 doc/classes/CPUParticles2D.xml:85
msgid "Enables or disables the given flag (see [enum Flags] for options)."
-msgstr "å¯ç”¨æˆ–ç¦ç”¨ç»™å®šæ ‡å¿—(有关选项,请å‚阅[枚举标志])。"
+msgstr "å¯ç”¨æˆ–ç¦ç”¨ç»™å®šæ ‡å¿—(有关选项,请å‚阅[enum Flags])。"
#: doc/classes/CPUParticles.xml:90 doc/classes/CPUParticles2D.xml:91
#: doc/classes/Particles.xml:47 doc/classes/Particles2D.xml:33
@@ -20489,7 +20538,7 @@ msgstr "ç²’å­åŠ¨ç”»é€Ÿåº¦ã€‚"
#: doc/classes/CPUParticles.xml:124 doc/classes/CPUParticles2D.xml:125
msgid "Each particle's animation speed will vary along this [Curve]."
-msgstr "æ¯ä¸ªç²’å­çš„动画速度将沿此[曲线]å˜åŒ–。"
+msgstr "æ¯ä¸ªç²’å­çš„动画速度将沿此[Curve]å˜åŒ–。"
#: doc/classes/CPUParticles.xml:127 doc/classes/CPUParticles2D.xml:128
#: doc/classes/ParticlesMaterial.xml:112
@@ -21026,7 +21075,8 @@ msgstr ""
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/2d/particle_systems_2d.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/2d/particle_systems_2d.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/2d/particle_systems_2d."
+"html"
#: doc/classes/CPUParticles2D.xml:19
msgid ""
@@ -21348,7 +21398,7 @@ msgstr ""
"从[code]path[/code]加载一个密钥。如果[code]public_only[/code]是[code]true[/"
"code],将åªåŠ è½½å…¬é’¥ã€‚\n"
"[b]注æ„:[/b] 如果[code]public_only[/code]是[code]true[/code],[code]path[/"
-"code]应该是一个 \"*.pub \" 文件,å¦åˆ™æ˜¯ \"*.key \" 文件。"
+"code]应该是一个 \"*.pub\" 文件,å¦åˆ™æ˜¯ \"*.key\" 文件。"
#: doc/classes/CryptoKey.xml:34
msgid ""
@@ -21768,7 +21818,7 @@ msgstr ""
"è€Œä¸æ˜¯å¯è§†åŒ–的。一个å¯ç¢°æ’žç‰©ä½“å¯ä»¥ä½¿ç”¨è¿™äº›å±‚æ¥é€‰æ‹©å®ƒå¯ä»¥ä¸Žå“ªäº›ç‰©ä½“碰撞,使用 "
"collision_mask 属性。\n"
"如果对象A在对象B所扫æçš„任何层中,或者对象B在对象A所扫æçš„任何层中,就会检测"
-"åˆ°æŽ¥è§¦ã€‚è¯¦è§æ–‡æ¡£ä¸­çš„[url=https://docs.godotengine.org/en/3.4/tutorials/"
+"åˆ°æŽ¥è§¦ã€‚è¯¦è§æ–‡æ¡£ä¸­çš„[url=https://docs.godotengine.org/zh_CN/stable/tutorials/"
"physics/physics_introduction.html#collision-layers-and-masks]碰撞层和掩ç [/"
"url]。"
@@ -21780,7 +21830,7 @@ msgid ""
"documentation for more information."
msgstr ""
"æ­¤ CSG å½¢çŠ¶å°†è¦æ‰«æç¢°æ’žçš„物ç†å±‚。有关更多信æ¯ï¼Œè¯·å‚阅文档中的 [url=https://"
-"docs.godotengine.org/en/3.4/tutorials/physics/physics_introduction."
+"docs.godotengine.org/zh_CN/stable/tutorials/physics/physics_introduction."
"html#collision-layers-and-masks]碰撞层和掩ç [/url]。"
#: modules/csg/doc_classes/CSGShape.xml:68
@@ -21915,8 +21965,8 @@ msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/scripting/c_sharp/index."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/scripting/c_sharp/index."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/getting_started/scripting/c_sharp/"
+"index.html"
#: modules/mono/doc_classes/CSharpScript.xml:18
#: modules/gdnative/doc_classes/PluginScript.xml:13
@@ -22489,7 +22539,7 @@ msgid ""
"code], and its fractional part as [code]t[/code]."
msgstr ""
"返回顶点 [code]fofs[/code] çš„ä½ç½®ã€‚它使用 [code]fofs[/code] 的整数部分作为 "
-"[code]idx[/code] 和分数部分作为 [code]t[/code] 调用 [方法æ’值]。"
+"[code]idx[/code] 和分数部分作为 [code]t[/code] 调用 [method interpolate]。"
#: doc/classes/Curve2D.xml:115 doc/classes/Curve3D.xml:145
msgid ""
@@ -22743,7 +22793,7 @@ msgstr "ä¸€ç§æ˜¾ç¤ºæ›²çº¿çš„纹ç†ã€‚"
msgid ""
"Renders a given [Curve] provided to it. Simplifies the task of drawing "
"curves and/or saving them as image files."
-msgstr "渲染æä¾›ç»™å®ƒçš„[曲线]。简化了绘制曲线和/或ä¿å­˜ä¸ºå›¾åƒæ–‡ä»¶çš„任务。"
+msgstr "渲染æä¾›ç»™å®ƒçš„[Curve]。简化了绘制曲线和/或ä¿å­˜ä¸ºå›¾åƒæ–‡ä»¶çš„任务。"
#: doc/classes/CurveTexture.xml:15
msgid "The [code]curve[/code] rendered onto the texture."
@@ -22822,13 +22872,13 @@ msgstr "圆柱体的åŠå¾„。"
#: doc/classes/DampedSpringJoint2D.xml:4
msgid "Damped spring constraint for 2D physics."
-msgstr "二维物ç†å­¦çš„阻尼弹簧约æŸã€‚"
+msgstr "二维物ç†çš„阻尼弹簧约æŸã€‚"
#: doc/classes/DampedSpringJoint2D.xml:7
msgid ""
"Damped spring constraint for 2D physics. This resembles a spring joint that "
"always wants to go back to a given length."
-msgstr "二维物ç†å­¦çš„阻尼弹簧约æŸã€‚这类似于一个总是想回到给定长度的弹簧关节。"
+msgstr "二维物ç†çš„阻尼弹簧约æŸã€‚这类似于总是想回到给定长度的弹簧关节。"
#: doc/classes/DampedSpringJoint2D.xml:15
msgid ""
@@ -22845,7 +22895,7 @@ msgstr ""
msgid ""
"The spring joint's maximum length. The two attached bodies cannot stretch it "
"past this value."
-msgstr "弹簧接头的最大长度。两个连接体ä¸èƒ½è¶…过这个值。"
+msgstr "弹簧关节的最大长度。两个连接体ä¸èƒ½è¶…过这个值。"
#: doc/classes/DampedSpringJoint2D.xml:21
msgid ""
@@ -23071,7 +23121,7 @@ msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/"
"gdscript_basics.html#dictionary"
msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/"
+"https://docs.godotengine.org/zh_CN/stable/getting_started/scripting/gdscript/"
"gdscript_basics.html#dictionary"
#: doc/classes/Dictionary.xml:94
@@ -23108,8 +23158,8 @@ msgid ""
"key does not exist, the method returns the value of the optional default "
"argument, or [code]null[/code] if it is omitted."
msgstr ""
-"返回[å­—å…¸]中指定键的当å‰å€¼ã€‚如果键ä¸å­˜åœ¨ï¼Œåˆ™è¯¥æ–¹æ³•返回å¯é€‰é»˜è®¤å‚数的值;如果"
-"çœç•¥ï¼Œåˆ™è¿”回[code] null [/code]。"
+"返回[Dictionary]中指定键的当å‰å€¼ã€‚如果键ä¸å­˜åœ¨ï¼Œåˆ™è¯¥æ–¹æ³•返回å¯é€‰é»˜è®¤å‚æ•°çš„"
+"值;如果çœç•¥ï¼Œåˆ™è¿”回[code] null [/code]。"
#: doc/classes/Dictionary.xml:130
msgid ""
@@ -23198,7 +23248,8 @@ msgstr ""
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/3d/lights_and_shadows.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/3d/lights_and_shadows.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/lights_and_shadows."
+"html"
#: doc/classes/DirectionalLight.xml:16
msgid ""
@@ -23370,8 +23421,8 @@ msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/filesystem."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/filesystem."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/getting_started/step_by_step/"
+"filesystem.html"
#: doc/classes/Directory.xml:35
msgid ""
@@ -23465,10 +23516,10 @@ msgid ""
"mandatory in such a case)."
msgstr ""
"返回当å‰ç›®å½•中的下一个元素(文件或目录)(包括[code].[/code]å’Œ[code].[/"
-"code],除éž[code]skip_navigational[/code]被赋予[方法list_dir_begin])。\n"
+"code],除éž[code]skip_navigational[/code]被赋予[method list_dir_begin])。\n"
"返回的是文件或目录的åç§°ï¼ˆè€Œä¸æ˜¯å®ƒçš„完整路径)。一旦æµè¢«å®Œå…¨å¤„ç†ï¼Œè¯¥æ–¹æ³•返回"
-"一个空的String,并自动关闭æµï¼ˆå³åœ¨è¿™ç§æƒ…况下,[方法list_dir_end]将䏿˜¯å¼ºåˆ¶æ€§"
-"的)。"
+"一个空的String,并自动关闭æµï¼ˆå³åœ¨è¿™ç§æƒ…况下,[method list_dir_end]将䏿˜¯å¼ºåˆ¶"
+"性的)。"
#: doc/classes/Directory.xml:103
msgid ""
@@ -24562,7 +24613,6 @@ msgstr ""
"æºç±»åž‹å¯¼å…¥ã€‚"
#: doc/classes/EditorImportPlugin.xml:7
-#, fuzzy
msgid ""
"EditorImportPlugins provide a way to extend the editor's resource import "
"functionality. Use them to import resources from custom files or to provide "
@@ -24619,15 +24669,15 @@ msgid ""
"[/codeblock]"
msgstr ""
"EditorImportPluginsæä¾›äº†ä¸€ç§æ‰©å±•编辑器资æºå¯¼å…¥åŠŸèƒ½çš„æ–¹æ³•ã€‚ä½¿ç”¨å®ƒä»¬æ¥å¯¼å…¥è‡ªå®š"
-"义文件资æºï¼Œæˆ–者æˆä¸ºç¼–辑器现有导入器的替代å“。用[method EditorPlugin."
+"义文件中的资æºï¼Œæˆ–æˆä¸ºç¼–辑器现有导入器的替代å“。用[method EditorPlugin."
"add_import_plugin]注册你的[EditorPlugin]。\n"
"EditorImportPlugins通过与特定的文件扩展å和资æºç±»åž‹ç›¸å…³è”æ¥å·¥ä½œã€‚å‚阅 "
-"[method get_recognized_extensions] å’Œ [method get_resource_type]。它们å¯ä»¥é€‰"
-"择性地指定一些影å“导入过程的导入预置。EditorImportPlugins负责创建资æºå¹¶å°†å…¶ä¿"
-"存在[code].import[/code]目录中,å‚阅[member ProjectSettings.application/"
-"config/project_data_dir_name]。\n"
-"䏋颿˜¯ä¸€ä¸ªEditorImportPlugin的例å­ï¼Œå®ƒä»Žæ‰©å±•å为\".special \"或\".spec \"的文"
-"件中导入一个[Mesh]:\n"
+"[method get_recognized_extensions] å’Œ [method get_resource_type]。其å¯ä»¥é€‰æ‹©"
+"性地指定一些影å“导入过程的导入预置。EditorImportPlugins负责创建资æºå¹¶å°†å…¶ä¿å­˜"
+"在[code].import[/code]目录中,å‚阅[member ProjectSettings.application/config/"
+"use_hidden_project_data_directory]。\n"
+"䏋颿˜¯ä¸€ä¸ªEditorImportPlugin的例å­ï¼Œå®ƒä»Žæ‰©å±•å为 \".special\" 或 \".spec\" çš„"
+"文件中导入一个[Mesh]:\n"
"[codeblock]\n"
"tool\n"
"extends EditorImportPlugin\n"
@@ -24674,8 +24724,8 @@ msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/import_plugins."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/import_plugins."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/plugins/editor/"
+"import_plugins.html"
#: doc/classes/EditorImportPlugin.xml:58
msgid ""
@@ -24684,9 +24734,9 @@ msgid ""
"[code]default_value[/code], [code]property_hint[/code] (optional), "
"[code]hint_string[/code] (optional), [code]usage[/code] (optional)."
msgstr ""
-"获å–该索引下预设的选项和默认值。返回一个包å«ä»¥ä¸‹é”®åçš„Dictionaries数组。"
-"[code]name[/code], [code]default_value[/code], [code]property_hint[/code](å¯"
-"选), [code]hint_string[/code](å¯é€‰), [code]use[/code](å¯é€‰)。"
+"获å–该索引下预设的选项和默认值。返回一个字典数组,包å«ä»¥ä¸‹é”®å:[code]name[/"
+"code]ã€[code]default_value[/code]ã€[code]property_hint[/code](å¯é€‰ï¼‰ã€"
+"[code]hint_string[/code](å¯é€‰ï¼‰ã€[code]usage[/code](å¯é€‰ï¼‰ã€‚"
#: doc/classes/EditorImportPlugin.xml:64
msgid ""
@@ -24775,14 +24825,13 @@ msgstr ""
"[code]\"Animation\"[/code]。"
#: doc/classes/EditorImportPlugin.xml:124
-#, fuzzy
msgid ""
"Gets the extension used to save this resource in the [code].import[/code] "
"directory (see [member ProjectSettings.application/config/"
"use_hidden_project_data_directory])."
msgstr ""
"获å–用于在[code].import[/code]目录中ä¿å­˜æ­¤èµ„æºçš„æ‰©å±•å,å‚阅[member "
-"ProjectSettings.application/config/project_data_dir_name]。"
+"ProjectSettings.application/config/use_hidden_project_data_directory]。"
#: doc/classes/EditorImportPlugin.xml:130
msgid ""
@@ -24917,7 +24966,7 @@ msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/"
"inspector_plugins.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/plugins/editor/"
"inspector_plugins.html"
#: doc/classes/EditorInspectorPlugin.xml:23
@@ -25224,7 +25273,7 @@ msgstr ""
#: doc/classes/EditorPlugin.xml:10
msgid "https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/index.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/index.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/plugins/editor/index.html"
#: doc/classes/EditorPlugin.xml:18
msgid ""
@@ -25614,8 +25663,8 @@ msgid ""
" return forward\n"
"[/codeblock]"
msgstr ""
-"在当å‰ç¼–辑的场景中存在根节点时调用,实现[æ–¹æ³•å¥æŸ„]并在3D视窗中å‘生按键输入"
-"[InputEvent]。拦截按键输入[InputEvent],如果[code]return true [/code],则"
+"在当å‰ç¼–辑的场景中存在根节点时调用,实现[method handles]并在3D视窗中å‘生按键"
+"输入[InputEvent]。拦截按键输入[InputEvent],如果[code]return true [/code],则"
"[EditorPlugin]会使用键值[code]event[/code],å¦åˆ™å°†é”®å€¼[code]event[/code]转å‘"
"到其他Editor类。例å­ï¼š\n"
"[codeblock]\n"
@@ -26130,6 +26179,8 @@ msgid ""
"[code]edit[/code] is [code]true[/code], the signal was caused by the context "
"menu \"Edit\" option."
msgstr ""
+"当资æºå€¼è¢«è®¾ç½®ï¼Œå¹¶ä¸”用户点击它编辑时触å‘。当[code]edit[/code]为[code]true[/"
+"code]æ—¶ï¼Œè¯¥ä¿¡å·æ˜¯ç”±ä¸Šä¸‹æ–‡èœå•çš„ \"Edit\" 选项引起。"
#: doc/classes/EditorResourcePreview.xml:4
msgid "Helper to generate previews of resources or files."
@@ -26188,14 +26239,14 @@ msgid ""
"[code]receiver_func[/code] will still be called, but the preview will be "
"null."
msgstr ""
-"å°†ä½äºŽè·¯å¾„ [code]path [/code] çš„èµ„æºæ–‡ä»¶æŽ’队以进行预览。预览准备好åŽï¼Œå°†è°ƒç”¨"
-"接收器 [code]receiver [/code] 的 [code]receiver_func [/code] 。"
+"å°†ä½äºŽè·¯å¾„ [code]path[/code] çš„èµ„æºæ–‡ä»¶æŽ’队以进行预览。预览准备好åŽï¼Œå°†è°ƒç”¨æŽ¥"
+"收器 [code]receiver[/code] 的 [code]receiver_func[/code] 。"
"[code]receiver_func[/code] å¿…é¡»å¸¦æœ‰ä»¥ä¸‹å››ä¸ªå‚æ•°ï¼š[String] path, [Texture] "
"preview, [Texture] thumbnail_preview, [Variant] userdataã€‚ç”¨æˆ·æ•°æ® "
-"[code]userdata[/code] å¯ä»¥æ˜¯ä»»ä½•东西,并将在调用 [code]receiver_func[/code] "
-"返回。\n"
-"[b]注æ„:[/b] 如果无法创建预览,则ä»å°†è°ƒç”¨ [code]receiver_func [/code],但预"
-"览将无效。"
+"[code]userdata[/code] å¯ä»¥æ˜¯ä»»æ„的,并将在调用 [code]receiver_func[/code] è¿”"
+"回。\n"
+"[b]注æ„:[/b] 如果无法创建预览,则ä»å°†è°ƒç”¨ [code]receiver_func[/code],但预览"
+"将无效。"
#: doc/classes/EditorResourcePreview.xml:53
msgid "Removes a custom preview generator."
@@ -26393,7 +26444,7 @@ msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/workflow/assets/"
"importing_scenes.html#custom-script"
msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/workflow/assets/"
+"https://docs.godotengine.org/zh_CN/stable/getting_started/workflow/assets/"
"importing_scenes.html#custom-script"
#: doc/classes/EditorScenePostImport.xml:35
@@ -26619,7 +26670,7 @@ msgid ""
"[/codeblock]"
msgstr ""
"å°†è‡ªå®šä¹‰å±žæ€§ä¿¡æ¯æ·»åŠ åˆ°å±žæ€§ã€‚è¯¥è¯å…¸å¿…须包å«ï¼š\n"
-"-[code]åç§°[/code]:[字符串](属性å称)\n"
+"-[code]åç§°[/code]:[String](属性å称)\n"
"-[code]类型[/code]:[int](请å‚阅[enum Variant.Type])\n"
"-(å¯é€‰ï¼‰[code]æç¤º[/code]:[int](请å‚阅[enum PropertyHint])和[code] "
"hint_string [/code]:[String]\n"
@@ -26798,7 +26849,7 @@ msgid ""
"redraw]."
msgstr ""
"将碰撞三角形添加到å°å·¥å…·ä¸­ï¼Œä¾›æŒ‘选。也å¯ä»¥ä»Žæ™®é€šçš„[Mesh]生æˆ[TriangleMesh]。"
-"在[方法é‡ç»˜]时调用此函数。"
+"在[method redraw]时调用此函数。"
#: doc/classes/EditorSpatialGizmo.xml:33
msgid ""
@@ -26944,8 +26995,8 @@ msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/spatial_gizmos."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/spatial_gizmos."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/plugins/editor/"
+"spatial_gizmos.html"
#: doc/classes/EditorSpatialGizmoPlugin.xml:18
msgid ""
@@ -27274,7 +27325,7 @@ msgid ""
"The [Object] identifier stored in this [EncodedObjectAsID] instance. The "
"object instance can be retrieved with [method @GDScript.instance_from_id]."
msgstr ""
-"存储在这个[EncodedObjectAsID]实例中的[对象]标识符。对象实例å¯ä»¥ç”¨[method "
+"存储在这个[EncodedObjectAsID]实例中的[Object]标识符。对象实例å¯ä»¥ç”¨[method "
"@GDScript.instance_from_id]检索。"
#: doc/classes/Engine.xml:4
@@ -27522,8 +27573,8 @@ msgstr ""
"else:\n"
" simulate_physics()\n"
"[/codeblock]\n"
-"更多信æ¯è¯·å‚阅文档中[url=https://docs.godotengine.org/en/3.4/tutorials/misc/"
-"running_code_in_the_editor.html]在编辑器中è¿è¡Œä»£ç [/url]。\n"
+"更多信æ¯è¯·å‚阅文档中[url=https://docs.godotengine.org/zh_CN/stable/tutorials/"
+"misc/running_code_in_the_editor.html]在编辑器中è¿è¡Œä»£ç [/url]。\n"
"[b]注æ„:[/b]è¦æ£€æµ‹è„šæœ¬æ˜¯å¦ä»Žç¼–辑器[i]构建[/i]中è¿è¡Œï¼ˆä¾‹å¦‚按[code]F5[/code]"
"时),请使用带有[code]\"editor\"[/code]傿•°çš„[method OS.has_feature]代替。"
"[code]OS.has_feature(\"editor\")[/code]当代ç åœ¨ç¼–辑器中è¿è¡Œå’Œä»Žç¼–辑器中è¿è¡Œé¡¹"
@@ -27644,14 +27695,15 @@ msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/3d/"
"environment_and_post_processing.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/3d/"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/"
"environment_and_post_processing.html"
#: doc/classes/Environment.xml:16
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/3d/high_dynamic_range.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/3d/high_dynamic_range.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/high_dynamic_range."
+"html"
#: doc/classes/Environment.xml:17 doc/classes/Material.xml:10
#: doc/classes/Mesh.xml:10 doc/classes/MeshInstance.xml:10
@@ -28545,7 +28597,7 @@ msgstr ""
" file.close()\n"
" return content\n"
"[/codeblock]\n"
-"在上é¢çš„例å­ä¸­ï¼Œæ–‡ä»¶å°†è¢«ä¿å­˜åœ¨[url=https://docs.godotengine.org/en/3.4/"
+"在上é¢çš„例å­ä¸­ï¼Œæ–‡ä»¶å°†è¢«ä¿å­˜åœ¨[url=https://docs.godotengine.org/zh_CN/stable/"
"tutorials/io/data_paths.html]æ•°æ®è·¯å¾„[/url]æ–‡ä»¶ä¸­æŒ‡å®šçš„ç”¨æˆ·æ•°æ®æ–‡ä»¶å¤¹ä¸­ã€‚\n"
"[b]注æ„:[/b] è¦åœ¨å¯¼å‡ºåŽè®¿é—®é¡¹ç›®èµ„æºï¼Œå»ºè®®ä½¿ç”¨[ResourceLoader]è€Œä¸æ˜¯"
"[File]API,因为有些文件被转æ¢ä¸ºå¼•擎特定的格å¼ï¼Œå…¶åŽŸå§‹æºæ–‡ä»¶å¯èƒ½ä¸å­˜åœ¨äºŽå¯¼å‡ºçš„"
@@ -28735,8 +28787,8 @@ msgid ""
"timestamp can be converted to datetime by using [method OS."
"get_datetime_from_unix_time]."
msgstr ""
-"返回unixæ ¼å¼çš„æ—¶é—´æˆ³[code]file[/code]为文件的最åŽä¿®æ”¹æ—¶é—´ï¼Œæˆ–者返回一个[字符"
-"串]\"ERROR IN [code]file[/code]\"。这个unix时间戳å¯ä»¥é€šè¿‡ä½¿ç”¨[method OS."
+"返回unixæ ¼å¼çš„æ—¶é—´æˆ³[code]file[/code]为文件的最åŽä¿®æ”¹æ—¶é—´ï¼Œæˆ–者返回一个"
+"[String]\"ERROR IN [code]file[/code]\"。这个unix时间戳å¯ä»¥é€šè¿‡ä½¿ç”¨[method OS."
"get_datetime_from_unix_time]转æ¢ä¸ºæ•°æ®æ—¶é—´ã€‚"
#: doc/classes/File.xml:165
@@ -29221,7 +29273,7 @@ msgstr "å½“æ–‡ä»¶å­˜åœ¨æ—¶ï¼Œå¯¹è¯æ¡†ä¼šå‘出警告。"
msgid ""
"The dialog only allows accessing files under the [Resource] path "
"([code]res://[/code])."
-msgstr "è¯¥å¯¹è¯æ¡†åªå…许访问[资æº]路径下的文件([code]res://[/code])。"
+msgstr "è¯¥å¯¹è¯æ¡†åªå…许访问[Resource]路径下的文件([code]res://[/code])。"
#: doc/classes/FileDialog.xml:121
msgid ""
@@ -29524,16 +29576,16 @@ msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/plugins/gdnative/gdnative-c-"
"example.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/plugins/gdnative/gdnative-c-"
-"example.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/plugins/gdnative/"
+"gdnative-c-example.html"
#: modules/gdnative/doc_classes/GDNativeLibrary.xml:11
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/plugins/gdnative/gdnative-cpp-"
"example.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/plugins/gdnative/gdnative-cpp-"
-"example.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/plugins/gdnative/"
+"gdnative-cpp-example.html"
#: modules/gdnative/doc_classes/GDNativeLibrary.xml:17
msgid ""
@@ -29619,17 +29671,17 @@ msgid ""
"set_script] extends an existing object, if that object's class matches one "
"of the script's base classes."
msgstr ""
-"用GDScript编程语言实现的脚本。该脚本扩展了实例化该对象的所有对象的功能。\n"
-"[method new]创建脚本的新实例。如果该对象的类与脚本的基类之一匹é…,则[method "
-"Object.set_script]会扩展该对象。"
+"用GDScript编程语言实现的脚本。该脚本扩展了实例化该对象åŽå…¶æ‰€æœ‰å¯¹è±¡çš„功能。\n"
+"[method new] 创建脚本的新实例。如果一个对象的类与脚本的基类之一匹é…,则 "
+"[method Object.set_script] 会扩展该对象。"
#: modules/gdscript/doc_classes/GDScript.xml:11
msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/index."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/index."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/getting_started/scripting/gdscript/"
+"index.html"
#: modules/gdscript/doc_classes/GDScript.xml:17
msgid "Returns byte code for the script source code."
@@ -30717,12 +30769,14 @@ msgid ""
"lighting, but the resulting lightmap will not be saved. Useful for emissive "
"only materials or shadow casters."
msgstr ""
+"当ç¦ç”¨æ—¶ï¼Œè®¡ç®—间接光照时将考虑网格,但产生的光照贴图ä¸ä¼šè¢«ä¿å­˜ã€‚适用于仅有å‘"
+"å…‰æè´¨æˆ–阴影投射器。"
#: doc/classes/GeometryInstance.xml:46
msgid ""
"Scale factor for the generated baked lightmap. Useful for adding detail to "
"certain mesh instances."
-msgstr ""
+msgstr "生æˆçš„烘焙光照贴图的缩放系数。对增加æŸäº›ç½‘格实例的细节很有用。"
#: doc/classes/GeometryInstance.xml:49
msgid ""
@@ -30826,12 +30880,14 @@ msgid ""
"Will allow the GeometryInstance to be used when baking lights using a "
"[GIProbe] or [BakedLightmap]."
msgstr ""
+"å°†å…许在使用[GIProbe]或[BakedLightmap]进行ç¯å…‰çƒ˜ç„™æ—¶ä½¿ç”¨GeometryInstance几何"
+"实例。"
#: doc/classes/GeometryInstance.xml:106
msgid ""
"Unused in this class, exposed for consistency with [enum VisualServer."
"InstanceFlags]."
-msgstr ""
+msgstr "在此类中未使用,公开以与 [enum VisualServer.InstanceFlags] ä¿æŒä¸€è‡´ã€‚"
#: doc/classes/GIProbe.xml:4
msgid "Real-time global illumination (GI) probe."
@@ -30850,26 +30906,42 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-"[GIProbe]用于为场景æä¾›é«˜è´¨é‡çš„实时间接光。它们预先计算å‘å…‰å¯¹è±¡çš„æ•ˆæžœå’Œé™æ€å‡ "
-"ä½•å›¾å½¢çš„æ•ˆæžœï¼Œä»¥å®žæ—¶æ¨¡æ‹Ÿå¤æ‚光的行为。 [GIProbe]必须先烘烤æ‰èƒ½ä½¿ç”¨ï¼Œä½†æ˜¯ä¸€æ—¦"
-"烘烤,动æ€ç‰©ä½“就会从它们那里接收光。此外,ç¯å…‰å¯ä»¥æ˜¯å®Œå…¨åЍæ€çš„æˆ–烘烤的。\n"
-"在场景中使用[GIProbe]å¯èƒ½ä¼šå¾ˆæ˜‚è´µ(å ç”¨è¾ƒå¤šèµ„æº),å¯ä»¥ä½¿ç”¨[member "
-"ProjectSettings.rendering / quality / gi_probes / quality]é™ä½ŽæŽ¢é’ˆçš„è´¨é‡ï¼Œä»¥"
-"æ¢å–[ProjectSettings]中更好的性能。"
-
-#: doc/classes/GIProbe.xml:13
+"[GIProbe]是用æ¥ä¸ºåœºæ™¯æä¾›é«˜è´¨é‡çš„实时间接光照。它们预先计算å‘光物体的效果和é™"
+"æ€å‡ ä½•ä½“çš„æ•ˆæžœï¼Œä»¥å®žæ—¶æ¨¡æ‹Ÿå¤æ‚光线的行为。[GIProbe]在使用å‰éœ€è¦è¿›è¡Œçƒ˜ç„™ï¼Œè€Œ"
+"åŽï¼Œä¸€æ—¦çƒ˜ç„™ï¼ŒåЍæ€ç‰©ä½“就会从它们那里接收光线。此外,ç¯å…‰å¯ä»¥æ˜¯å®Œå…¨åЍæ€çš„,也"
+"å¯ä»¥æ˜¯çƒ˜ç„™çš„。\n"
+"在场景中使用[GIProbe]会很消耗资æºï¼Œå¯ä»¥åœ¨[ProjectSettings]中使用[member "
+"ProjectSettings.rendering/quality/voxel_cone_tracing/high_quality]æ¥è°ƒä½ŽæŽ¢å¤´"
+"的质é‡ï¼Œä»¥èŽ·å¾—æ›´å¥½çš„æ€§èƒ½ã€‚\n"
+"[b]注æ„:[/b]网格应该有足够厚的墙以é¿å…æ¼å…‰ï¼Œæ³¨ï¼Œé¿å…å•é¢å¢™ã€‚对于内部关å¡ï¼Œå°†"
+"你的关å¡å‡ ä½•体包围在一个足够大的盒å­é‡Œï¼Œå¹¶å°†çŽ¯è·¯è”æŽ¥èµ·æ¥ä»¥å…³é—­ç½‘格。\n"
+"[b]注æ„:[/b]由于渲染器的é™åˆ¶ï¼Œåœ¨[GIProbe]中使用å‘光的[ShaderMaterial]æ—¶ä¸èƒ½"
+"å‘å…‰ã€‚åªæœ‰å‘射型的[SpatialMaterial]å¯ä»¥åœ¨[GIProbe]中å‘射光线。"
+
+#: doc/classes/GIProbe.xml:15
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
+msgstr "https://docs.godotengine.org/zh_CN/stable/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
#, fuzzy
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
@@ -30879,20 +30951,24 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
-msgstr ""
-"从所有标有[constant GeometryInstance3D.GI_MODE_BAKED]的[GeometryInstance3D]和"
-"标有[constant Light3D.BAKE_DYNAMIC]或[constant Light3D.BAKE_STATIC]的"
-"[Light3D]烘烤效果。如果[code]create_visual_debug[/code]是[code]true[/code],"
-"在烘烤光线之åŽï¼Œè¿™å°†ç”Ÿæˆä¸€ä¸ª[MultiMesh],其中有一个立方体代表æ¯ä¸ªå®žä½“å•元,æ¯"
-"个立方体的颜色与该å•元的å照率颜色一致。这å¯ä»¥ç”¨æ¥å¯è§†åŒ–[GIProbe]的数æ®å¹¶è°ƒè¯•"
-"任何å¯èƒ½å‘生的问题。"
-
-#: doc/classes/GIProbe.xml:28
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
+msgstr ""
+"烘焙所有标有 [member GeometryInstance.use_in_baked_light] 的 "
+"[GeometryInstance] 和标有 [constant Light.BAKE_INDIRECT] 或 [constant Light."
+"BAKE_ALL] 的 [Light] 的效果。如果[code]create_visual_debug[/code]是"
+"[code]true[/code],在烘焙光线åŽï¼Œè¿™å°†ç”Ÿæˆä¸€ä¸ª[MultiMesh],其中有一个立方体代"
+"表æ¯ä¸ªå®žä½“å•元,æ¯ä¸ªç«‹æ–¹ä½“的颜色与该å•元的å射颜色一致。这å¯ä»¥ç”¨æ¥å¯è§†åŒ–"
+"[GIProbe]的数æ®ï¼Œä»¥è°ƒè¯•任何å¯èƒ½å‘生的问题。"
+
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr "在å¯ç”¨ [code]create_visual_debug[/code] 的情况下调用 [method bake] 。"
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -30901,30 +30977,33 @@ msgid ""
"[b]Note:[/b] [code]bias[/code] should usually be above 1.0 as that is the "
"size of the voxels."
msgstr ""
+"从 [GIProbe] å移光贡献的查找。这å¯ç”¨äºŽé¿å…自阴影,但å¯èƒ½ä¼šåœ¨è¾ƒé«˜çš„值下引入æ¼"
+"光。这个和 [member normal_bias] 应该使用,以尽é‡å‡å°‘自阴影和æ¼å…‰ã€‚\n"
+"[b]注æ„:[/b] [code]bias[/code] 通常应该在 1.0 以上,因为这是体素的大å°ã€‚"
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
-msgstr ""
+msgstr "[i]已废弃[/i]由于已知的错误,这个属性已被废弃,å¯ç”¨åŽä¸å†æœ‰ä»»ä½•效果。"
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr "æŒæœ‰æ­¤[GIProbe]的数æ®çš„[GIProbeData]资æºã€‚"
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
-msgstr ""
+msgstr "[GIProbe] 能识别的最大亮度。亮度将在此范围内缩放。"
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
-msgstr ""
+msgstr "能é‡å€å¢žå™¨ã€‚使 [GIProbe] 的照明贡献更亮。"
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
@@ -30933,25 +31012,25 @@ msgstr ""
"[GIProbe]所覆盖区域的大å°ã€‚如果你让外延å˜å¤§ï¼Œè€Œæ²¡æœ‰ç”¨[member subdiv]增加细"
"分,æ¯ä¸ªå•元的大å°å°†å¢žåŠ ï¼Œå¹¶å¯¼è‡´ä½Žç»†èŠ‚ç…§æ˜Žã€‚"
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr "如果为[code]true[/code],在计算照明时忽略天空的贡献。"
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
"æ ¹æ®ç‰©ä½“的法线方å‘,对[GIProbe]的查找进行å移。å¯ä»¥ç”¨æ¥å‡å°‘一些自阴影的å‡è±¡ã€‚"
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr "光在探针内部传播的程度。一个较高的值å¯ä»¥ä½¿å…‰ä¼ æ’­å¾—更远。"
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
@@ -30960,7 +31039,7 @@ msgstr ""
"对 [GIProbe] 所æ“作的网格进行细分的次数。数字越大,细节就越精细,因而视觉质é‡"
"就越高,而数字越å°ï¼Œæ€§èƒ½å°±è¶Šå¥½ã€‚"
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
@@ -30968,23 +31047,24 @@ msgstr ""
"使用64分区,这是最低的质é‡è®¾ç½®ï¼Œä½†ä¹Ÿæ˜¯æœ€å¿«çš„。如果你能使用它,特别是在低端硬"
"件上使用它。"
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr "使用128个分区。这是默认的质é‡è®¾ç½®ã€‚"
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr "使用256个分区。"
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
+#, fuzzy
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
"使用512个分区。这是最高的质é‡è®¾ç½®ï¼Œä½†ä¹Ÿæ˜¯æœ€æ…¢çš„。在低端硬件上,这å¯èƒ½ä¼šå¯¼è‡´"
"GPUåœé¡¿ã€‚"
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr "代表 [enum Subdiv] 举的大å°ã€‚"
@@ -30992,7 +31072,7 @@ msgstr "代表 [enum Subdiv] 举的大å°ã€‚"
msgid ""
"The [Color] of the light. Defaults to white. A black color causes the light "
"to have no effect."
-msgstr ""
+msgstr "ç¯çš„[Color]。默认为白色。黑色会导致ç¯å…‰æ— æ•ˆã€‚"
#: modules/gltf/doc_classes/GLTFLight.xml:16
msgid ""
@@ -31003,6 +31083,9 @@ msgid ""
"brightness. When creating a Godot [SpotLight], the ratio between the inner "
"and outer cone angles is used to calculate the attenuation of the light."
msgstr ""
+"èšå…‰ç¯ä¸­åœ†é”¥ä½“的内角。必须å°äºŽæˆ–等于外锥角。\n"
+"在这个角度内,光线处于全亮状æ€ã€‚在内锥角和外锥角之间,有一个从全亮到零亮度的"
+"过渡。当创建Godot [SpotLight]时,内锥角和外锥角之间的比率被用æ¥è®¡ç®—光的衰å‡ã€‚"
#: modules/gltf/doc_classes/GLTFLight.xml:20
msgid ""
@@ -31011,6 +31094,8 @@ msgid ""
"directional lights. When creating a Godot light, this value is converted to "
"a unitless multiplier."
msgstr ""
+"光的强度。对于点光æºå’Œèšå…‰ç¯ï¼Œç”¨çƒ›å…‰candelasï¼ˆæµæ˜Ž/立体光)表示;对于定å‘ç¯ï¼Œ"
+"用勒克斯luxï¼ˆæµæ˜Ž/平方米)表示。在创建Godotç¯æ—¶ï¼Œè¿™ä¸ªå€¼è¢«è½¬æ¢ä¸ºæ— å•ä½çš„乘数。"
#: modules/gltf/doc_classes/GLTFLight.xml:23
msgid ""
@@ -31022,6 +31107,10 @@ msgid ""
"directions. When creating a Godot [SpotLight], the outer cone angle is used "
"as the angle of the spotlight."
msgstr ""
+"èšå…‰ç¯ä¸‹åœ†é”¥ä½“的外角。必须大于或等于内角。\n"
+"在这个角度,光线会下é™åˆ°é›¶äº®åº¦ã€‚在内锥角和外锥角之间,有一个从全亮到零亮度的"
+"过渡。如果这个角度是一个åŠåœ†ï¼Œé‚£ä¹ˆèšå…‰ç¯å°±ä¼šå‘所有方å‘å‘射。创建Godot "
+"[SpotLight]时,外锥角被用作èšå…‰ç¯çš„角度。"
#: modules/gltf/doc_classes/GLTFLight.xml:27
msgid ""
@@ -31029,6 +31118,8 @@ msgid ""
"with no range defined behave like physical lights (which have infinite "
"range). When creating a Godot light, the range is clamped to 4096."
msgstr ""
+"ç¯å…‰çš„范围,超过这个范围ç¯å…‰æ— æ•ˆã€‚没有定义范围的GLTFç¯å…‰çš„行为与无é™èŒƒå›´çš„物"
+"ç†ç¯å…‰ä¸€æ ·ã€‚当创建Godotç¯å…‰æ—¶ï¼ŒèŒƒå›´é™åˆ¶åœ¨4096。"
#: modules/gltf/doc_classes/GLTFLight.xml:30
msgid ""
@@ -31036,6 +31127,8 @@ msgid ""
"and \"directional\", which correspond to Godot's [OmniLight], [SpotLight], "
"and [DirectionalLight] respectively."
msgstr ""
+"ç¯å…‰çš„类型。Godot接å—的值是 \"point\"ã€\"spot\"å’Œ \"directional\",分别对应于"
+"Godotçš„[OmniLight]ã€[SpotLight]å’Œ[DirectionalLight]。"
#: modules/mono/doc_classes/GodotSharp.xml:4
msgid "Bridge between Godot and the Mono runtime (Mono-enabled builds only)."
@@ -31156,9 +31249,8 @@ msgid "Returns the interpolated color specified by [code]offset[/code]."
msgstr "返回由åç§»[code]offset[/code]指定的æ’值颜色。"
#: doc/classes/Gradient.xml:51
-#, fuzzy
msgid "Removes the color at the index [code]point[/code]."
-msgstr "移除索引[code]offset[/code]å移处的颜色。"
+msgstr "移除索引[code]point[/code]处的颜色。"
#: doc/classes/Gradient.xml:59
msgid "Sets the color of the ramp color at index [code]point[/code]."
@@ -31169,14 +31261,12 @@ msgid "Sets the offset for the ramp color at index [code]point[/code]."
msgstr "为索引[code]point[/code]处的斜é¢é¢œè‰²è®¾ç½®å移。"
#: doc/classes/Gradient.xml:73
-#, fuzzy
msgid "Gradient's colors returned as a [PoolColorArray]."
-msgstr "æ¸å˜çš„颜色以[PackedColorArray]的形å¼è¿”回。"
+msgstr "æ¸å˜é¢œè‰²ä»¥ [PoolColorArray] 返回。"
#: doc/classes/Gradient.xml:76
-#, fuzzy
msgid "Gradient's offsets returned as a [PoolRealArray]."
-msgstr "æ¸å˜çš„åç§»é‡ä»¥[PackedFloat32Array]å½¢å¼è¿”回。"
+msgstr "æ¸å˜çš„åç§»é‡ä»¥ [PoolRealArray] 返回。"
#: doc/classes/GradientTexture.xml:4
msgid "Gradient-filled texture."
@@ -31190,9 +31280,9 @@ msgid ""
"gradient, but instead an interpolation of samples obtained from the gradient "
"at fixed steps (see [member width])."
msgstr ""
-"æ¸å˜æè´¨GradientTexture使用一个[Gradientæ•°æ®ã€‚梯度将使用从梯度获得的颜色从左"
-"到å³å¡«å……。这æ„味ç€çº¹ç†ä¸ä¸€å®šä»£è¡¨æ¢¯åº¦çš„精确拷è´ï¼Œè€Œæ˜¯ä»¥å›ºå®šçš„æ­¥é•¿ä»Žæ¢¯åº¦ä¸­èŽ·å¾—"
-"的样本æ’值(è§[member width])。"
+"GradientTexture使用[Gradient]æ¥å¡«å……çº¹ç†æ•°æ®ã€‚æ¸å˜å°†ä½¿ç”¨ä»Žä¸­èŽ·å¾—çš„é¢œè‰²ä»Žå·¦åˆ°å³"
+"填充。这æ„味ç€çº¹ç†ä¸ä¸€å®šä»£è¡¨æ¸å˜çš„精确副本,而是以固定的步长从æ¸å˜ä¸­èŽ·å¾—çš„æ ·"
+"本的æ’值,è§[member width]。"
#: doc/classes/GradientTexture.xml:15
msgid "The [Gradient] that will be used to fill the texture."
@@ -31282,7 +31372,6 @@ msgstr ""
"1\" }[/code]."
#: doc/classes/GraphEdit.xml:70
-#, fuzzy
msgid ""
"Gets the [HBoxContainer] that contains the zooming and grid snap controls in "
"the top left of the graph. You can use this method to reposition the toolbar "
@@ -31291,10 +31380,10 @@ msgid ""
"may cause a crash. If you wish to hide it or any of its children, use their "
"[member CanvasItem.visible] property."
msgstr ""
-"获å–包å«å›¾å½¢å·¦ä¸Šæ–¹çš„缩放和网格快照控制的[HBoxContainer]。\n"
-"警告。这个函数的预期用途是å…è®¸ä½ é‡æ–°å®šä½æˆ–添加你自己的自定义控件到容器中。这"
-"是一个内部控件,因此ä¸åº”该被释放。如果你想éšè—å®ƒæˆ–å®ƒçš„ä»»ä½•å­æŽ§ä»¶ï¼Œè¯·ä½¿ç”¨å®ƒä»¬"
-"的 [member CanvasItem.visible] 属性。"
+"获å–包å«å›¾å½¢å·¦ä¸Šè§’çš„ç¼©æ”¾å’Œç½‘æ ¼æ•æ‰æŽ§ä»¶çš„ [HBoxContainer]。你å¯ä»¥ä½¿ç”¨æ­¤æ–¹æ³•é‡"
+"新定ä½å·¥å…·æ æˆ–å‘其添加自定义控件。\n"
+"[b]警告:[/b] 这是一个必需的内部节点,删除和释放它å¯èƒ½ä¼šå¯¼è‡´å´©æºƒã€‚如果你希望"
+"éšè—它或其任何å­é¡¹ï¼Œè¯·ä½¿ç”¨å®ƒä»¬çš„ [member CanvasItem.visible] 属性。"
#: doc/classes/GraphEdit.xml:81
msgid ""
@@ -31345,20 +31434,18 @@ msgid "Sets the specified [code]node[/code] as the one selected."
msgstr "选中一个特定的节点[code]node[/code]."
#: doc/classes/GraphEdit.xml:136
-#, fuzzy
msgid "If [code]true[/code], the minimap is visible."
-msgstr "如果[code]true[/code],按钮的形状是å¯è§çš„。"
+msgstr "如果[code]true[/code],å°å›¾æ˜¯å¯è§çš„。"
#: doc/classes/GraphEdit.xml:139
-#, fuzzy
msgid "The opacity of the minimap rectangle."
-msgstr "选择的矩形的轮廓颜色。"
+msgstr "å°å›¾çŸ©å½¢çš„ä¸é€æ˜Žåº¦ã€‚"
#: doc/classes/GraphEdit.xml:142
msgid ""
"The size of the minimap rectangle. The map itself is based on the size of "
"the grid area and is scaled to fit this rectangle."
-msgstr ""
+msgstr "å°å›¾çŸ©å½¢çš„大å°ã€‚地图自身基于网格区域的大å°ï¼Œå¹¶è¢«ç¼©æ”¾ä»¥é€‚应这个矩形。"
#: doc/classes/GraphEdit.xml:146
msgid ""
@@ -31376,6 +31463,7 @@ msgid ""
"If [code]true[/code], makes a label with the current zoom level visible. The "
"zoom value is displayed in percents."
msgstr ""
+"如果[code]true[/code],则使当å‰ç¼©æ”¾çº§åˆ«çš„æ ‡ç­¾å¯è§ã€‚缩放值以百分比显示。"
#: doc/classes/GraphEdit.xml:155
msgid "The snapping distance in pixels."
@@ -31390,14 +31478,12 @@ msgid "The current zoom value."
msgstr "当å‰ç¼©æ”¾å€¼ã€‚"
#: doc/classes/GraphEdit.xml:164
-#, fuzzy
msgid "The upper zoom limit."
-msgstr "当å‰ç¼©æ”¾å€¼ã€‚"
+msgstr "缩放上é™ã€‚"
#: doc/classes/GraphEdit.xml:167
-#, fuzzy
msgid "The lower zoom limit."
-msgstr "触å‘的信å·ã€‚"
+msgstr "缩放下é™ã€‚"
#: doc/classes/GraphEdit.xml:170
msgid "The step of each zoom level."
@@ -31434,9 +31520,8 @@ msgid ""
msgstr "当用户将输出端å£è¿žæŽ¥åˆ°å›¾å½¢çš„ç©ºä½æ—¶å‘出。"
#: doc/classes/GraphEdit.xml:211
-#, fuzzy
msgid "Emitted when the user presses [code]Ctrl + C[/code]."
-msgstr "当用户按下[kbd]Ctrl + C[/kbd]æ—¶å‘出。"
+msgstr "当用户按[code]Ctrl + C[/code]时触å‘。"
#: doc/classes/GraphEdit.xml:216
msgid "Emitted when a GraphNode is attempted to be removed from the GraphEdit."
@@ -31462,9 +31547,8 @@ msgid "Emitted when a GraphNode is selected."
msgstr "当图形节点GraphNode被选择时å‘出。"
#: doc/classes/GraphEdit.xml:246
-#, fuzzy
msgid "Emitted when the user presses [code]Ctrl + V[/code]."
-msgstr "当用户按下[kbd]Ctrl + V[/kbd]æ—¶å‘出。"
+msgstr "当用户按下[code]Ctrl + V[/code]时触å‘。"
#: doc/classes/GraphEdit.xml:252
msgid ""
@@ -31886,7 +31970,6 @@ msgid ""
msgstr "网格容器,用于在类似网格的布局中排列Control派生的å­é¡¹ã€‚"
#: doc/classes/GridContainer.xml:7
-#, fuzzy
msgid ""
"GridContainer will arrange its Control-derived children in a grid like "
"structure, the grid columns are specified using the [member columns] "
@@ -31899,19 +31982,20 @@ msgid ""
"[b]Note:[/b] GridContainer only works with child nodes inheriting from "
"Control. It won't rearrange child nodes inheriting from Node2D."
msgstr ""
-"网格容器将其å­é¡¹æŽ’列在类似网格的结构中,网格列使用 [member columns] 属性指"
-"定,行数等于容器中的å­é¡¹æ•°é™¤ä»¥åˆ—数。例如,如果容器有 5 个å­é¡¹å’Œ 2 列,则容器"
-"中有 3 行。\n"
-"请注æ„,网格布局将为容器的æ¯ä¸ªå¤§å°ä¿ç•™åˆ—和行,并且空列将自动展开。"
+"GridContainer将把它的Control派生的å­çº§æŽ’布在一个类似网格的结构中,网格列是"
+"[member columns]属性指定,行的数é‡ç­‰äºŽå®¹å™¨ä¸­å­çº§çš„æ•°é‡é™¤ä»¥åˆ—的数é‡ã€‚例如,如"
+"果容器有5个å­çº§ï¼Œ2个列,容器中就会有3行。\n"
+"请注æ„,网格布局将ä¿ç•™æ¯ä¸ªå¤§å°çš„容器的列和行,并且空列将自动扩展。\n"
+"[b]注æ„:[/b] GridContaineråªå¯¹ç»§æ‰¿è‡ªControlçš„å­èŠ‚ç‚¹ç”Ÿæ•ˆã€‚å®ƒä¸ä¼šé‡æ–°æŽ’列继承"
+"自Node2Dçš„å­èŠ‚ç‚¹ã€‚"
#: doc/classes/GridContainer.xml:18
-#, fuzzy
msgid ""
"The number of columns in the [GridContainer]. If modified, [GridContainer] "
"reorders its Control-derived children to accommodate the new layout."
msgstr ""
-"在[GridContainer]中的列的数é‡ã€‚如果修改,[GridContainer]ä¼šé‡æ–°æŽ’列它的å­èŠ‚"
-"点,以适应新的布局。"
+"在[GridContainer]中的列的数é‡ã€‚如果修改,[GridContainer]ä¼šé‡æ–°æŽ’列其Controlæ´¾"
+"生的å­ä»£ï¼Œä»¥é€‚应新的布局。"
#: doc/classes/GridContainer.xml:26
msgid "The horizontal separation of children nodes."
@@ -31926,7 +32010,6 @@ msgid "Node for 3D tile-based maps."
msgstr "基于3D贴图格地图(3D tile-based maps)的节点。"
#: modules/gridmap/doc_classes/GridMap.xml:7
-#, fuzzy
msgid ""
"GridMap lets you place meshes on a grid interactively. It works both from "
"the editor and from scripts, which can help you create in-game level "
@@ -31943,18 +32026,22 @@ msgid ""
"light not affect the first layer, the whole GridMap won't be lit by the "
"light in question."
msgstr ""
-"GridMapå¯ä»¥è®©ä½ äº¤äº’å¼åœ°å°†ç½‘格放在一个网格上。它既å¯ä»¥ä»Žç¼–辑器中工作,也å¯ä»¥ä»Ž"
-"脚本中工作,这å¯ä»¥å¸®åŠ©ä½ åœ¨æ¸¸æˆä¸­åˆ›å»ºå…³å¡ç¼–辑器。\n"
-"GridMaps使用一个[MeshLibrary],其中包å«äº†ä¸€ä¸ªè´´å›¾æ ¼çš„列表。æ¯ä¸€ä¸ªç“¦ç‰‡éƒ½æ˜¯ä¸€ä¸ª"
-"带有æè´¨çš„网格,加上å¯é€‰çš„碰撞和导航形状。\n"
-"一个GridMap包å«ä¸€ä¸ªå•元格的集åˆã€‚æ¯ä¸ªç½‘æ ¼å•元指的是[MeshLibrary]中的一个贴图"
-"格。地图中的所有å•元都有相åŒçš„尺寸。\n"
-"在内部,一个GridMap被分割æˆä¸€ä¸ªç¨€ç–的八边形集åˆï¼Œä»¥ä¾¿æœ‰æ•ˆåœ°è¿›è¡Œæ¸²æŸ“和物ç†å¤„"
-"ç†ã€‚æ¯ä¸ªå…«è§’形都有相åŒçš„尺寸,å¯ä»¥åŒ…å«å¤šä¸ªå•元。"
+"GridMapå…许你以交互方å¼å°†meshes网格放置在网格上。它既å¯ä»¥åœ¨ç¼–辑器中进行,也å¯"
+"以从脚本中进行,这å¯ä»¥å¸®åŠ©ä½ åœ¨æ¸¸æˆä¸­åˆ›å»ºå…³å¡ç¼–辑器。\n"
+"GridMaps使用[MeshLibrary],其中包å«äº†ä¸€ä¸ªå›¾å—的列表。æ¯ä¸€ä¸ªå›¾å—都是一个带有æ"
+"质的网格,加上å¯é€‰çš„碰撞和导航形状。\n"
+"GridMap包å«ä¸€ä¸ªå•元格的集åˆã€‚æ¯ä¸ªç½‘æ ¼å•元指的是[MeshLibrary]中的一个图å—。地"
+"图中的所有å•元都有相åŒçš„尺寸。\n"
+"在内部,GridMap被分割æˆä¸€ä¸ªæ¾æ•£çš„八边形集åˆï¼Œä»¥ä¾¿æœ‰æ•ˆåœ°è¿›è¡Œæ¸²æŸ“和物ç†å¤„ç†ã€‚æ¯"
+"个八角形都有相åŒçš„尺寸,å¯ä»¥åŒ…å«å¤šä¸ªå•元。\n"
+"[b]注æ„:[/b] GridMap没有扩展[VisualInstance],因此ä¸èƒ½åŸºäºŽ[member "
+"VisualInstance.layer]进行éšè—æˆ–å‰”é™¤é®æŒ¡ã€‚如果你让ç¯å…‰ä¸å½±å“第一层,整个"
+"GridMapå°±ä¸ä¼šè¢«ç›¸å…³çš„ç¯å…‰ç…§äº®ã€‚"
#: modules/gridmap/doc_classes/GridMap.xml:14
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/using_gridmaps.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/3d/using_gridmaps.html"
+msgstr ""
+"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/using_gridmaps.html"
#: modules/gridmap/doc_classes/GridMap.xml:22
msgid "Clear all cells."
@@ -31965,23 +32052,22 @@ msgid ""
"Returns an array of [ArrayMesh]es and [Transform] references of all bake "
"meshes that exist within the current GridMap."
msgstr ""
+"返回当å‰GridMap中存在的所有烘焙网格的[ArrayMesh]å’Œ[Transform]引用的数组。"
#: modules/gridmap/doc_classes/GridMap.xml:48
-#, fuzzy
msgid ""
"The [MeshLibrary] item index located at the grid-based X, Y and Z "
"coordinates. If the cell is empty, [constant INVALID_CELL_ITEM] will be "
"returned."
msgstr ""
-"ä½äºŽç»™å®šç½‘æ ¼åæ ‡çš„[MeshLibrary]项的索引。如果该å•元格是空的,将返回[constant "
-"INVALID_CELL_ITEM]。"
+"[MeshLibrary] 项目索引ä½äºŽåŸºäºŽç½‘格的 Xã€Y å’Œ Z åæ ‡å¤„。如果å•元格为空,则返"
+"回 [constant INVALID_CELL_ITEM]。"
#: modules/gridmap/doc_classes/GridMap.xml:57
-#, fuzzy
msgid ""
"The orientation of the cell at the grid-based X, Y and Z coordinates. -1 is "
"returned if the cell is empty."
-msgstr "ç»™å®šç½‘æ ¼åæ ‡å¤„çš„å•元格方å‘。如果å•元格为空,则返回 [code]-1[/code]。"
+msgstr "å•元格在基于网格的 Xã€Y å’Œ Z åæ ‡å¤„的方å‘。如果å•元格为空,则返回 -1。"
#: modules/gridmap/doc_classes/GridMap.xml:64
msgid "Returns an individual bit on the [member collision_layer]."
@@ -32011,7 +32097,6 @@ msgid ""
msgstr "返回一个网格å•元在GridMapæœ¬åœ°åæ ‡ç©ºé—´ä¸­çš„ä½ç½®ã€‚"
#: modules/gridmap/doc_classes/GridMap.xml:116
-#, fuzzy
msgid ""
"Sets the mesh index for the cell referenced by its grid-based X, Y and Z "
"coordinates.\n"
@@ -32020,9 +32105,9 @@ msgid ""
"Optionally, the item's orientation can be passed. For valid orientation "
"values, see [method Basis.get_orthogonal_index]."
msgstr ""
-"è®¾ç½®ä»¥ç½‘æ ¼åæ ‡ä¸ºå‚考的å•元格的网格索引。\n"
-"一个负的项目索引,例如[constant INVALID_CELL_ITEM]会清除该å•元。\n"
-"或者,å¯ä»¥ä¼ é€’项目的方å‘。关于有效的方å‘值,请å‚阅[method Basis."
+"设置由基于网格的 Xã€Y å’Œ Z åæ ‡å¼•用的å•元格的网格索引。\n"
+"负的项目索引将清除å•元格,例如 [constant INVALID_CELL_ITEM]。\n"
+"或者,å¯ä»¥ä¼ é€’项目的方å‘。相关有效的方å‘值,请å‚阅 [method Basis."
"get_orthogonal_index]。"
#: modules/gridmap/doc_classes/GridMap.xml:135
@@ -32094,6 +32179,9 @@ msgid ""
"layers-and-masks]Collision layers and masks[/url] in the documentation for "
"more information."
msgstr ""
+"æ­¤ GridMap 检测碰撞的物ç†å±‚。å‚阅 [url=https://docs.godotengine.org/zh_CN/"
+"stable/tutorials/physics/physics_introduction.html#collision-layers-and-"
+"masks]碰撞层和掩ç [/url ] æ–‡æ¡£ï¼Œä»Žä¸­èŽ·å–æ›´å¤šä¿¡æ¯ã€‚"
#: modules/gridmap/doc_classes/GridMap.xml:184
msgid "The assigned [MeshLibrary]."
@@ -32102,7 +32190,7 @@ msgstr "指定的[MeshLibrary]。"
#: modules/gridmap/doc_classes/GridMap.xml:187
msgid ""
"Controls whether this GridMap will be baked in a [BakedLightmap] or not."
-msgstr ""
+msgstr "控制此 GridMap 是å¦ä¼šåœ¨ [BakedLightmap] 中烘焙。"
#: modules/gridmap/doc_classes/GridMap.xml:194
msgid "Emitted when [member cell_size] changes."
@@ -32212,8 +32300,8 @@ msgid ""
"Starts a new hash computation of the given [code]type[/code] (e.g. [constant "
"HASH_SHA256] to start computation of a SHA-256)."
msgstr ""
-"开始对给定的 [code] type[/code] (例如 [æ’定HASH_SHA256] 进行新的哈希计算, "
-"以开始计算 SHA-256) 。"
+"开始对给定的 [code] type[/code] (例如 [constant HASH_SHA256] 进行新的哈希计"
+"算, 以开始计算 SHA-256) 。"
#: doc/classes/HashingContext.xml:52
msgid "Updates the computation with the given [code]chunk[/code] of data."
@@ -32244,15 +32332,13 @@ msgid "The horizontal space between the [HBoxContainer]'s elements."
msgstr "[HBoxContainer]的元素之间的水平空间。"
#: doc/classes/HeightMapShape.xml:4
-#, fuzzy
msgid "Height map shape for 3D physics."
-msgstr "三维物ç†çš„高度图形状(仅é™å­å¼¹ï¼‰ã€‚"
+msgstr "3D 物ç†çš„高度图形状。"
#: doc/classes/HeightMapShape.xml:7
-#, fuzzy
msgid ""
"Height map shape resource, which can be added to a [PhysicsBody] or [Area]."
-msgstr "高度图形状资æºï¼Œå®ƒå¯ä»¥è¢«æ·»åŠ åˆ°[PhysicsBody3D]或[Area3D]。"
+msgstr "高度图形状资æºï¼Œå¯ä»¥æ·»åŠ åˆ°[PhysicsBody]或[Area]中。"
#: doc/classes/HeightMapShape.xml:15
msgid ""
@@ -32274,18 +32360,17 @@ msgid ""
msgstr "高度图数æ®çš„宽度。更改此设置将调整 [member map_data] 的大å°ã€‚"
#: doc/classes/HingeJoint.xml:4
-#, fuzzy
msgid "A hinge between two 3D PhysicsBodies."
-msgstr "两个 3D 实体之间的铰链。"
+msgstr "两个 3D 物ç†ä½“之间的铰链。"
#: doc/classes/HingeJoint.xml:7
-#, fuzzy
msgid ""
"A HingeJoint normally uses the Z axis of body A as the hinge axis, another "
"axis can be specified when adding it manually though. See also "
"[Generic6DOFJoint]."
msgstr ""
-"HingeJoint3D 通常使用主体 A çš„ Z 轴作为铰链轴,但手动添加时å¯ä»¥æŒ‡å®šå…¶ä»–轴。"
+"铰链关节通常使用物体 A çš„ Z 轴作为铰链轴,但手动添加时å¯ä»¥æŒ‡å®šå¦ä¸€ä¸ªè½´ã€‚å‚阅 "
+"[Generic6DOFJoint]。"
#: doc/classes/HingeJoint.xml:16 doc/classes/SpriteBase3D.xml:21
msgid "Returns the value of the specified flag."
@@ -32363,7 +32448,7 @@ msgstr "两个物体å‘ä¸åŒæ–¹å‘移动时被拉回到一起的速度。"
#: doc/classes/HMACContext.xml:4
msgid "Used to create an HMAC for a message using a key."
-msgstr ""
+msgstr "用æ¥ä¸ºä¸€ä¸ªä½¿ç”¨å¯†é’¥çš„ä¿¡æ¯åˆ›å»ºHMAC。"
#: doc/classes/HMACContext.xml:7
msgid ""
@@ -32414,18 +32499,65 @@ msgid ""
"[/codeblock]\n"
"[b]Note:[/b] Not available in HTML5 exports."
msgstr ""
+"HMACContext类对于高级的HMAC用例éžå¸¸æœ‰ç”¨ï¼Œä¾‹å¦‚æµå¼æ¶ˆæ¯ï¼Œå› ä¸ºå®ƒæ”¯æŒåœ¨ä¸€æ®µæ—¶é—´å†…"
+"创建消æ¯ï¼Œè€Œä¸æ˜¯ä¸€æ¬¡æ€§æä¾›ã€‚\n"
+"[codeblock]\n"
+"extends Node\n"
+"var ctx = HMACContext.new()\n"
+"\n"
+"func _ready():\n"
+" var key = \"supersecret\".to_utf8()\n"
+" var err = ctx.start(HashingContext.HASH_SHA256, key)\n"
+" assert(err == OK)\n"
+" var msg1 = \"this is \".to_utf8()\n"
+" var msg2 = \"vewy vewy secret\".to_utf8()\n"
+" err = ctx.update(msg1)\n"
+" assert(err == OK)\n"
+" err = ctx.update(msg2)\n"
+" assert(err == OK)\n"
+" var hmac = ctx.finish()\n"
+" print(hmac.hex_encode())\n"
+"[/codeblock]\n"
+"而在C#中,我们å¯ä»¥ä½¿ç”¨ä¸‹é¢çš„æ–¹æ³•。\n"
+"[codeblock]\n"
+"using Godot;\n"
+"using System;\n"
+"using System.Diagnostics;\n"
+"\n"
+"public class CryptoNode : Node\n"
+"{\n"
+" private HMACContext ctx = new HMACContext();\n"
+" public override void _Ready()\n"
+" {\n"
+" PoolByteArray key = String(\"supersecret\").to_utf8();\n"
+" Error err = ctx.Start(HashingContext.HASH_SHA256, key);\n"
+" GD.Assert(err == OK);\n"
+" PoolByteArray msg1 = String(\"this is \").to_utf8();\n"
+" PoolByteArray msg2 = String(\"vewy vew secret\").to_utf8();\n"
+" err = ctx.Update(msg1);\n"
+" GD.Assert(err == OK);\n"
+" err = ctx.Update(msg2);\n"
+" GD.Assert(err == OK);\n"
+" PoolByteArray hmac = ctx.Finish();\n"
+" GD.Print(hmac.HexEncode());\n"
+" }\n"
+"}\n"
+"[/codeblock]\n"
+"[b]注æ„:[/b] 在HTML5导出中ä¸å¯ç”¨ã€‚"
#: doc/classes/HMACContext.xml:58
msgid ""
"Returns the resulting HMAC. If the HMAC failed, an empty [PoolByteArray] is "
"returned."
-msgstr ""
+msgstr "返回生æˆçš„HMAC。如果HMAC失败,将返回一个空的[PoolByteArray]。"
#: doc/classes/HMACContext.xml:66
msgid ""
"Initializes the HMACContext. This method cannot be called again on the same "
"HMACContext until [method finish] has been called."
msgstr ""
+"åˆå§‹åŒ–HMACContext。在[method finish]被调用之å‰ï¼Œä¸èƒ½åœ¨åŒä¸€ä¸ªHMACContextä¸Šå†æ¬¡"
+"调用此方法。"
#: doc/classes/HMACContext.xml:73
msgid ""
@@ -32433,6 +32565,8 @@ msgid ""
"[method finish] is called to append [code]data[/code] to the message, but "
"cannot be called until [method start] has been called."
msgstr ""
+"æ›´æ–°è¦è¿›è¡ŒHMAC的消æ¯ã€‚在调用[method finish]å°†[code]data[/code]追加到消æ¯ä¸­ä¹‹"
+"å‰ï¼Œå¯ä»¥å¤šæ¬¡è°ƒç”¨ï¼Œä½†åœ¨è°ƒç”¨[method start]之å‰ä¸èƒ½è°ƒç”¨ã€‚"
#: doc/classes/HScrollBar.xml:4
msgid "Horizontal scroll bar."
@@ -32456,9 +32590,8 @@ msgid "Displayed when the mouse cursor hovers over the decrement button."
msgstr "当鼠标指针悬åœåœ¨é€’凿Œ‰é’®ä¸Šæ—¶æ˜¾ç¤ºã€‚"
#: doc/classes/HScrollBar.xml:23 doc/classes/VScrollBar.xml:27
-#, fuzzy
msgid "Displayed when the decrement button is being pressed."
-msgstr "当标题按钮被按下时使用的[StyleBox]。"
+msgstr "åœ¨æŒ‰ä¸‹é€’å‡æŒ‰é’®æ—¶æ˜¾ç¤ºã€‚"
#: doc/classes/HScrollBar.xml:26 doc/classes/VScrollBar.xml:30
msgid ""
@@ -32487,9 +32620,8 @@ msgid "Displayed when the mouse cursor hovers over the increment button."
msgstr "当鼠标指针悬åœåœ¨å¢žé‡æŒ‰é’®ä¸Šæ—¶æ˜¾ç¤ºã€‚"
#: doc/classes/HScrollBar.xml:41 doc/classes/VScrollBar.xml:45
-#, fuzzy
msgid "Displayed when the increment button is being pressed."
-msgstr "当标题按钮被按下时使用的[StyleBox]。"
+msgstr "åœ¨æŒ‰ä¸‹å¢žé‡æŒ‰é’®æ—¶æ˜¾ç¤ºã€‚"
#: doc/classes/HScrollBar.xml:44 doc/classes/VScrollBar.xml:48
msgid "Used as background of this [ScrollBar]."
@@ -32531,6 +32663,9 @@ msgid ""
"[b]Note:[/b] The [signal Range.changed] and [signal Range.value_changed] "
"signals are part of the [Range] class which this class inherits from."
msgstr ""
+"水平滑å—。å‚阅[Slider]。这个从左到å³ï¼Œæœ€å°åˆ°æœ€å¤§ã€‚\n"
+"[b]注æ„:[/b] [signal Range.changed]å’Œ[signal Range.value_changed]ä¿¡å·æ˜¯"
+"[Range]类的一部分,该类继承自它。"
#: doc/classes/HSlider.xml:18 doc/classes/VSlider.xml:22
msgid "The texture for the grabber (the draggable element)."
@@ -32588,12 +32723,10 @@ msgid "The space between sides of the container."
msgstr "容器两侧之间的空间。"
#: doc/classes/HTTPClient.xml:4
-#, fuzzy
msgid "Low-level hyper-text transfer protocol client."
-msgstr "超文本传输å议客户端。"
+msgstr "低级别的超文本传输å议客户端。"
#: doc/classes/HTTPClient.xml:7
-#, fuzzy
msgid ""
"Hyper-text transfer protocol client (sometimes called \"User Agent\"). Used "
"to make HTTP requests to download web content, upload files and other data "
@@ -32627,30 +32760,35 @@ msgid ""
"are otherwise valid. If this is a concern, you may want to use automatically "
"managed certificates with a short validity period."
msgstr ""
-"超文本传输å议客户端(有时称为“用户代ç†â€ï¼‰ï¼Œå¯ç”¨äºŽå‘出 HTTP 请求以下载 web 内"
-"容ã€ä¸Šä¼ æ–‡ä»¶å’Œå…¶ä»–æ•°æ®æˆ–与å„ç§æœåŠ¡é€šä¿¡ï¼Œä»¥åŠå…¶ä»–用例。请å‚阅 [HTTPRequest] 以"
-"èŽ·å–æ›´é«˜çº§åˆ«çš„æ›¿ä»£æ–¹æ¡ˆã€‚\n"
-"[b]注æ„:[/b] 此客户端åªéœ€è¿žæŽ¥åˆ°ä¸»æœºä¸€æ¬¡ï¼ˆè¯·å‚阅 [method connect_to_host])å³"
-"å¯å‘é€å¤šä¸ªè¯·æ±‚。因此,采用 URL 的方法通常åªé‡‡ç”¨ä¸»æœºåŽé¢çš„éƒ¨åˆ†ï¼Œè€Œä¸æ˜¯å®Œæ•´çš„ "
-"URL,因为客户机已ç»è¿žæŽ¥åˆ°ä¸»æœºã€‚请å‚阅 [method request] 以获å–完整的示例并开始"
-"使用。\n"
-"[HTTPClient] 应该在多个请求之间é‡ç”¨ï¼Œæˆ–者连接到ä¸åŒçš„ä¸»æœºï¼Œè€Œä¸æ˜¯æ¯ä¸ªè¯·æ±‚创建"
-"ä¸€ä¸ªå®¢æˆ·ç«¯ã€‚æ”¯æŒ SSL ä»¥åŠ SSL æœåС噍è¯ä¹¦éªŒè¯ã€‚2xx 范围内的 HTTP 状æ€ç è¡¨ç¤ºæˆ"
-"功,3xx é‡å®šå‘(å³â€œé‡è¯•,但在这里â€ï¼‰ï¼Œ4xx 请求出错,5xx æœåŠ¡å™¨ç«¯å‡ºé”™ã€‚\n"
-"有关 HTTP 的更多信æ¯è¯·å‚阅 https://developer.mozilla.org/en-US/docs/Web/HTTP "
-"(或者通过阅读 RFC 2616 追根溯æºï¼šhttps://tools.ietf.org/html/rfc2616)。\n"
-"[b]注æ„:[/b] 当执行从导出到 HTML5 的项目å‘出的 HTTP 请求时,请记ä½ï¼Œè¿œç¨‹æœåŠ¡"
-"器å¯èƒ½ç”±äºŽ [url=https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS]CORS[/"
-"url] çš„å…³ç³»è€Œç¦æ­¢æ¥è‡ªç«™å¤–的请求。如果æœåŠ¡å™¨æ˜¯ä½ è‡ªå·±æ­å»ºçš„,å¯ä»¥é€šè¿‡æ·»åŠ  "
-"[code]Access-Control-Allow-Origin: *[/code] HTTP 报头æ¥å…许站外请求。"
+"超文本传输å议客户端,有时称为 \"用户代ç†\"。用于å‘出HTTP请求,以下载网络内"
+"容ã€ä¸Šä¼ æ–‡ä»¶å’Œå…¶ä»–æ•°æ®ï¼Œæˆ–与å„ç§æœåŠ¡è¿›è¡Œé€šä¿¡ï¼Œä»¥åŠå…¶ä»–情况。[b]å‚阅"
+"[HTTPRequest]节点,以获得更高一级的替代方案[/b] 。\n"
+"[b]注æ„:[/b]这个客户端åªéœ€è¦è¿žæŽ¥ä¸»æœºä¸€æ¬¡å°±å¯ä»¥å‘é€å¤šä¸ªè¯·æ±‚,å‚阅[method "
+"connect_to_host]。因此,获å–URL的方法通常åªèŽ·å–主机åŽé¢çš„éƒ¨åˆ†ï¼Œè€Œä¸æ˜¯å®Œæ•´çš„"
+"URL,因为客户端已ç»è¿žæŽ¥åˆ°äº†ä¸€ä¸ªä¸»æœºã€‚å‚阅method request]以获得完整的例å­ï¼Œå¹¶"
+"开始使用。\n"
+"[HTTPClient]应该在多个请求中é‡å¤ä½¿ç”¨ï¼Œæˆ–者连接到ä¸åŒçš„ä¸»æœºï¼Œè€Œä¸æ˜¯æ¯ä¸ªè¯·æ±‚创"
+"建一个客户端。它支æŒSSLå’ŒSSLæœåС噍è¯ä¹¦éªŒè¯ã€‚HTTP状æ€ä»£ç åœ¨2xx范围内表示æˆåŠŸï¼Œ"
+"3xx表示é‡å®šå‘ï¼Œå³ \"é‡è¯•,但在这里\",4xx表示请求出了问题,5xx表示æœåŠ¡å™¨ç«¯å‡º"
+"了问题。\n"
+"关于HTTP的更多信æ¯ï¼Œå‚阅https://developer.mozilla.org/en-US/docs/Web/HTTP,或"
+"者阅读RFC 2616,直接从æºå¤´ä¸Šäº†è§£ï¼šhttps://tools.ietf.org/html/rfc2616。\n"
+"[b]注æ„:[/b] 当从导出到HTML5的项目中执行HTTP请求时,请记ä½è¿œç¨‹æœåС噍å¯èƒ½ç”±äºŽ"
+"[url=https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS]CORS[/url]而ä¸å…"
+"许æ¥è‡ªå›½å¤–的请求。如果是你托管的æœåŠ¡å™¨ï¼Œåº”è¯¥ä¿®æ”¹å…¶åŽå°ï¼Œä¸ºå…¶æ·»åŠ  "
+"[code]Access-Control-Allow-Origin:*[/code] HTTP头。\n"
+"[b]注æ„:[/b] SSL/TLS支æŒç›®å‰ä»…é™äºŽTLS 1.0ã€TLS 1.1å’ŒTLS 1.2。试图连接到一个"
+"åªæœ‰TLS 1.3çš„æœåŠ¡å™¨å°†è¿”å›žä¸€ä¸ªé”™è¯¯ã€‚\n"
+"[b]警告:[/b] ç›®å‰ä¸æ”¯æŒSSL/TLSè¯ä¹¦æ’¤é”€å’Œè¯ä¹¦ç»‘定。撤销的è¯ä¹¦åªè¦åœ¨å…¶ä»–æ–¹é¢æ˜¯"
+"有效的,就å¯ä»¥æŽ¥å—。如果这是个问题,你å¯èƒ½æƒ³ä½¿ç”¨è‡ªåŠ¨ç®¡ç†çš„æœ‰æ•ˆæœŸçŸ­çš„è¯ä¹¦ã€‚"
#: doc/classes/HTTPClient.xml:16
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/networking/http_client_class."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/networking/http_client_class."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/networking/"
+"http_client_class.html"
#: doc/classes/HTTPClient.xml:17 doc/classes/HTTPRequest.xml:71
#: doc/classes/StreamPeerSSL.xml:10
@@ -32658,8 +32796,8 @@ msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/networking/ssl_certificates."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/networking/ssl_certificates."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/networking/"
+"ssl_certificates.html"
#: doc/classes/HTTPClient.xml:23
msgid "Closes the current connection, allowing reuse of this [HTTPClient]."
@@ -32833,7 +32971,6 @@ msgstr ""
"http_escape]。"
#: doc/classes/HTTPClient.xml:146
-#, fuzzy
msgid ""
"Sends a raw request to the connected host.\n"
"The URL parameter is usually just the part after the host, so for "
@@ -32846,11 +32983,14 @@ msgid ""
"Method].\n"
"Sends the body data raw, as a byte array and does not encode it in any way."
msgstr ""
-"å‘连接的æœåС噍å‘é€åŽŸå§‹è¯·æ±‚ã€‚URL 傿•°ä»…为主机ååŽé¢çš„部分,å³è¯·æ±‚ "
-"[code]http://somehost.com/index.php[/code] 应该填写 [code]index.php[/"
-"code]。\n"
-"Headers 傿•°æ˜¯ HTTP 请求的报头。HTTP 方法å¯ä»¥æŸ¥çœ‹ [enum Method]。\n"
-"å‘é€åŽŸå§‹çš„è¯·æ±‚ä½“æ•°æ®ï¼Œç±»åž‹ä¸ºå­—节数组,ä¸ä¼šå†åšä»»ä½•å½¢å¼çš„ç¼–ç ã€‚"
+"å‘连接的主机å‘é€åŽŸå§‹è¯·æ±‚ã€‚\n"
+"URL傿•°é€šå¸¸åªæ˜¯ä¸»æœºåŽé¢çš„部分,所以对于[code]http://somehost.com/index.php[/"
+"code],它是[code]/index.php[/code]。当å‘HTTPä»£ç†æœåС噍å‘é€è¯·æ±‚时,它应该是一"
+"个ç»å¯¹çš„URL。对于[constant HTTPClient.METHOD_OPTIONS]请求,å…许[code]*[/"
+"code]。对于[constant HTTPClient.METHOD_CONNECT]请求,应该是标准组件,"
+"[code]host:port[/code]。\n"
+"å¤´ä¿¡æ¯æ˜¯HTTP请求头信æ¯ã€‚关于å¯ç”¨çš„HTTP方法,å‚阅[enum Method]。\n"
+"以字节数组的形å¼å‘é€åŽŸå§‹æ­£æ–‡æ•°æ®ï¼Œä¸ä»¥ä»»ä½•æ–¹å¼è¿›è¡Œç¼–ç ã€‚"
#: doc/classes/HTTPClient.xml:155
msgid ""
@@ -33570,7 +33710,6 @@ msgid "A node with the ability to send HTTP(S) requests."
msgstr "具有å‘é€ HTTP(S) 请求能力的节点。"
#: doc/classes/HTTPRequest.xml:7
-#, fuzzy
msgid ""
"A node with the ability to send HTTP requests. Uses [HTTPClient] "
"internally.\n"
@@ -33644,82 +33783,82 @@ msgid ""
" texture_rect.texture = texture\n"
"[/codeblock]"
msgstr ""
-"具有å‘é€ HTTP 请求能力的节点,内部使用 [HTTPClient]。\n"
-"å¯ä»¥ç”¨æ¥å‘é€ HTTP 请求,å³é€šè¿‡ HTTP 下载上传文件和网页内容。\n"
-"[b]与 REST API 通信示例,输出所返回的字段:[/b]\n"
+"有能力å‘é€HTTP请求的节点。内部使用[HTTPClient]。\n"
+"å¯ä»¥ç”¨æ¥è¿›è¡ŒHTTP请求,å³é€šè¿‡HTTP下载或上传文件或网络内容。\n"
+"[b]警告:[/b]å‚阅[HTTPClient]çš„æ³¨é‡Šå’Œè­¦å‘Šï¼Œä»¥äº†è§£å…¶å±€é™æ€§ï¼Œç‰¹åˆ«æ˜¯å…³äºŽSSL的安"
+"全性。\n"
+"[b]连接REST API并打å°å…¶è¿”回字段之一的例å­ï¼š[/b]\n"
"[codeblock]\n"
"func _ready():\n"
-" # 创建 HTTP 请求节点并连接完æˆä¿¡å·ã€‚\n"
+" # Create an HTTP request node and connect its completion signal.\n"
" var http_request = HTTPRequest.new()\n"
" add_child(http_request)\n"
" http_request.connect(\"request_completed\", self, "
"\"_http_request_completed\")\n"
"\n"
-" # 执行 GET 请求。下é¢çš„ URL ç›®å‰ä¼šè¿”回 JSON。\n"
+" # Perform a GET request. The URL below returns JSON as of writing.\n"
" var error = http_request.request(\"https://httpbin.org/get\")\n"
" if error != OK:\n"
-" push_error(\"HTTP 请求出错。\")\n"
+" push_error(\"An error occurred in the HTTP request.\")\n"
"\n"
-" # 执行 POST 请求。下é¢çš„ URL ç›®å‰ä¼šè¿”回 JSON。\n"
-" # 注æ„:ä¸è¦ä½¿ç”¨åŒä¸€ä¸ª HTTPRequest èŠ‚ç‚¹åŒæ—¶è¿›è¡Œå¤šä¸ªè¯·æ±‚\n"
-" # 下é¢çš„代ç ä»…ä¾›å‚考。\n"
+" # Perform a POST request. The URL below returns JSON as of writing.\n"
+" # Note: Don't make simultaneous requests using a single HTTPRequest "
+"node.\n"
+" # The snippet below is provided for reference only.\n"
" var body = {\"name\": \"Godette\"}\n"
-" var error = http_request.request(\"https://httpbin.org/post\", [], true, "
+" error = http_request.request(\"https://httpbin.org/post\", [], true, "
"HTTPClient.METHOD_POST, body)\n"
" if error != OK:\n"
-" push_error(\"HTTP 请求出错。\")\n"
+" push_error(\"An error occurred in the HTTP request.\")\n"
"\n"
"\n"
-"# HTTP è¯·æ±‚å®Œæˆæ—¶ä¼šè¢«è°ƒç”¨ã€‚\n"
+"# Called when the HTTP request is completed.\n"
"func _http_request_completed(result, response_code, headers, body):\n"
" var response = parse_json(body.get_string_from_utf8())\n"
"\n"
-" # 会输出(被 httpbin.org 识别到的)HTTPRequest 节点所使用的用户代ç†å­—符"
-"串。\n"
+" # Will print the user agent string used by the HTTPRequest node (as "
+"recognized by httpbin.org).\n"
" print(response.headers[\"User-Agent\"])\n"
"[/codeblock]\n"
-"[b]使用 HTTPRequest 加载并显示图片示例:[/b]\n"
+"[b]使用HTTPRequest加载和显示图片的例å­ï¼š[/b]\n"
"[codeblock]\n"
"func _ready():\n"
-" # 创建 HTTP 请求节点并连接完æˆä¿¡å·ã€‚\n"
+" # Create an HTTP request node and connect its completion signal.\n"
" var http_request = HTTPRequest.new()\n"
" add_child(http_request)\n"
" http_request.connect(\"request_completed\", self, "
"\"_http_request_completed\")\n"
"\n"
-" # 执行 HTTP 请求。下é¢çš„ URL ç›®å‰ä¼šè¿”回 PNG 图片。\n"
+" # Perform the HTTP request. The URL below returns a PNG image as of "
+"writing.\n"
" var error = http_request.request(\"https://via.placeholder.com/512\")\n"
" if error != OK:\n"
-" push_error(\"HTTP 请求出错。\")\n"
+" push_error(\"An error occurred in the HTTP request.\")\n"
"\n"
"\n"
-"# HTTP è¯·æ±‚å®Œæˆæ—¶ä¼šè¢«è°ƒç”¨ã€‚\n"
+"# Called when the HTTP request is completed.\n"
"func _http_request_completed(result, response_code, headers, body):\n"
" var image = Image.new()\n"
" var error = image.load_png_from_buffer(body)\n"
" if error != OK:\n"
-" push_error(\"无法加载图片\")\n"
+" push_error(\"Couldn't load the image.\")\n"
"\n"
" var texture = ImageTexture.new()\n"
" texture.create_from_image(image)\n"
"\n"
-" # 在 TextureRect 节点中显示该图片。\n"
+" # Display the image in a TextureRect node.\n"
" var texture_rect = TextureRect.new()\n"
" add_child(texture_rect)\n"
" texture_rect.texture = texture\n"
-"[/codeblock]\n"
-"[b]注æ„:[/b] 当执行从导出到 HTML5 的项目å‘出的 HTTP 请求时,请记ä½ï¼Œè¿œç¨‹æœåŠ¡"
-"器å¯èƒ½ç”±äºŽ [url=https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS]CORS[/"
-"url] çš„å…³ç³»è€Œç¦æ­¢æ¥è‡ªç«™å¤–的请求。如果æœåŠ¡å™¨æ˜¯ä½ è‡ªå·±æ­å»ºçš„,å¯ä»¥é€šè¿‡æ·»åŠ  "
-"[code]Access-Control-Allow-Origin: *[/code] HTTP 报头æ¥å…许站外请求。"
+"[/codeblock]"
#: doc/classes/HTTPRequest.xml:70
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/networking/http_request_class."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/networking/http_request_class."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/networking/"
+"http_request_class.html"
#: doc/classes/HTTPRequest.xml:77
msgid "Cancels the current request."
@@ -33747,7 +33886,6 @@ msgid ""
msgstr "返回内部 [HTTPClient] 的当å‰çжæ€ã€‚è§ [enum HTTPClient.Status]。"
#: doc/classes/HTTPRequest.xml:107
-#, fuzzy
msgid ""
"Creates request on the underlying [HTTPClient]. If there is no configuration "
"errors, it tries to connect using [method HTTPClient.connect_to_host] and "
@@ -33765,17 +33903,22 @@ msgid ""
"url] for more details). As a workaround, you can send data as a query string "
"in the URL. See [method String.http_escape] for an example."
msgstr ""
-"使用内部的 [HTTPClient] 创建请求。如果没有é…置错误,将使用 [method "
-"HTTPClient.connect_to_host] è¿žæŽ¥ï¼Œå¹¶å°†å‚æ•°ä¼ é€’ç»™ [method HTTPClient."
+"在底层的 [HTTPClient] 上创建请求。如果没有é…置错误,它会å°è¯•使用 [method "
+"HTTPClient.connect_to_host] è¿žæŽ¥å¹¶å°†å‚æ•°ä¼ é€’ç»™ [method HTTPClient."
"request]。\n"
-"æˆåŠŸåˆ›å»ºè¯·æ±‚æ—¶è¿”å›ž [constant OK]ï¼ˆå¹¶ä¸æ„å‘³ç€æœåС噍已å“应),ä¸åœ¨åœºæ™¯æ ‘中时返"
-"回 [constant ERR_UNCONFIGURED],ä»åœ¨å¤„ç†ä¸Šä¸€ä¸ªè¯·æ±‚时返回 [constant "
-"ERR_BUSY]ï¼Œç»™å‡ºçš„å­—ç¬¦ä¸²ä¸æ˜¯æœ‰æ•ˆçš„ URL æ ¼å¼æ—¶è¿”回 [constant "
-"ERR_INVALID_PARAMETER],未å¯ç”¨å¤šçº¿ç¨‹å¹¶ä¸” [HTTPClient] 无法连接到主机时返回 "
-"[constant ERR_CANT_CONNECT]。"
+"如果请求创建æˆåŠŸï¼Œåˆ™è¿”å›ž [constant OK]。 ï¼ˆå¹¶ä¸æ„å‘³ç€æœåС噍已å“应),"
+"[constant ERR_UNCONFIGURED] 如果ä¸åœ¨æ ‘中,[constant ERR_BUSY] 如果ä»åœ¨å¤„ç†å…ˆ"
+"å‰çš„请求,[constant ERR_INVALID_PARAMETER] å¦‚æžœç»™å®šçš„å­—ç¬¦ä¸²ä¸æ˜¯æœ‰æ•ˆçš„ URL æ ¼"
+"å¼ï¼Œæˆ– [constant ERR_CANT_CONNECT]如果ä¸ä½¿ç”¨çº¿ç¨‹å¹¶ä¸” [HTTPClient] 无法连接到"
+"主机。\n"
+"[b]注æ„:[/b]当[code]method[/code]为[constant HTTPClient.METHOD_GET]时,通过"
+"[code]request_data[/code]å‘é€çš„payloadå¯èƒ½ä¼šè¢«æœåŠ¡å™¨å¿½ç•¥ç”šè‡³å¯¼è‡´æœåŠ¡å™¨æ‹’ç»è¯·"
+"求,å‚阅 [url=https://datatracker.ietf.org/doc/html/"
+"rfc7231#section-4.3.1]RFC 7231 第 4.3.1 节[/url] 了解更多。作为一ç§è§£å†³æ–¹æ³•,"
+"ä½ å¯ä»¥å°†æ•°æ®ä½œä¸º URL 中的查询字符串å‘é€ã€‚å‚阅 [method String.http_escape] 示"
+"例。"
#: doc/classes/HTTPRequest.xml:120
-#, fuzzy
msgid ""
"Creates request on the underlying [HTTPClient] using a raw array of bytes "
"for the request body. If there is no configuration errors, it tries to "
@@ -33788,31 +33931,30 @@ msgid ""
"[constant ERR_CANT_CONNECT] if not using thread and the [HTTPClient] cannot "
"connect to host."
msgstr ""
-"使用内部的 [HTTPClient] 创建请求。如果没有é…置错误,将使用 [method "
-"HTTPClient.connect_to_host] è¿žæŽ¥ï¼Œå¹¶å°†å‚æ•°ä¼ é€’ç»™ [method HTTPClient."
-"request]。\n"
-"æˆåŠŸåˆ›å»ºè¯·æ±‚æ—¶è¿”å›ž [constant OK]ï¼ˆå¹¶ä¸æ„å‘³ç€æœåС噍已å“应),ä¸åœ¨åœºæ™¯æ ‘中时返"
-"回 [constant ERR_UNCONFIGURED],ä»åœ¨å¤„ç†ä¸Šä¸€ä¸ªè¯·æ±‚时返回 [constant "
-"ERR_BUSY]ï¼Œç»™å‡ºçš„å­—ç¬¦ä¸²ä¸æ˜¯æœ‰æ•ˆçš„ URL æ ¼å¼æ—¶è¿”回 [constant "
-"ERR_INVALID_PARAMETER],未å¯ç”¨å¤šçº¿ç¨‹å¹¶ä¸” [HTTPClient] 无法连接到主机时返回 "
-"[constant ERR_CANT_CONNECT]。"
+"在底层的[HTTPClient]上创建请求,使用一个原始字节数组作为请求主体。如果没有é…"
+"置错误,它会å°è¯•使用 [method HTTPClient.connect_to_host] è¿žæŽ¥å¹¶å°†å‚æ•°ä¼ é€’ç»™ "
+"[method HTTPClient.request]。\n"
+"如果请求创建æˆåŠŸï¼Œåˆ™è¿”å›ž [constant OK]。 ï¼ˆå¹¶ä¸æ„å‘³ç€æœåС噍已å“应),"
+"[constant ERR_UNCONFIGURED] 如果ä¸åœ¨æ ‘中,[constant ERR_BUSY] 如果ä»åœ¨å¤„ç†å…ˆ"
+"å‰çš„请求,[constant ERR_INVALID_PARAMETER] å¦‚æžœç»™å®šçš„å­—ç¬¦ä¸²ä¸æ˜¯æœ‰æ•ˆçš„ URL æ ¼"
+"å¼ï¼Œæˆ– [constant ERR_CANT_CONNECT]如果ä¸ä½¿ç”¨çº¿ç¨‹å¹¶ä¸” [HTTPClient] 无法连接到"
+"主机。"
#: doc/classes/HTTPRequest.xml:127
msgid "Maximum allowed size for response bodies."
msgstr "å…许的最大å“应体大å°ã€‚"
#: doc/classes/HTTPRequest.xml:130
-#, fuzzy
msgid ""
"The size of the buffer used and maximum bytes to read per iteration. See "
"[member HTTPClient.read_chunk_size].\n"
"Set this to a lower value (e.g. 4096 for 4 KiB) when downloading small files "
"to decrease memory usage at the cost of download speeds."
msgstr ""
-"æ¯æ¬¡è¿­ä»£æ—¶æ‰€ä½¿ç”¨çš„缓冲区大å°ï¼Œå³æ¯æ¬¡è¿­ä»£æ—¶æ‰€èƒ½è¯»å–çš„æœ€å¤§å­—èŠ‚æ•°ã€‚è§ [member "
-"HTTPClient.read_chunk_size]。\n"
-"下载大文件时将该值调大(例如下载 64 KiB 时设为 65536)å¯ä»¥ç”¨æ›´å¤§çš„内存消耗æ¢"
-"å–æ›´å¿«çš„下载速度。"
+"使用的缓冲区大å°å’Œæ¯æ¬¡è¿­ä»£è¯»å–的最大字节数。å‚阅 [member HTTPClient."
+"read_chunk_size]。\n"
+"ä¸‹è½½å°æ–‡ä»¶æ—¶å°†å…¶è®¾ç½®ä¸ºè¾ƒä½Žçš„值,以é™ä½Žå†…存使用é‡ï¼Œä½†ä¼šé™ä½Žä¸‹è½½é€Ÿåº¦ï¼Œä¾‹å¦‚ "
+"4096 表示 4 KiB。"
#: doc/classes/HTTPRequest.xml:134
msgid "The file to download into. Will output any received file into it."
@@ -33879,7 +34021,6 @@ msgid "Image datatype."
msgstr "å›¾åƒæ•°æ®ç±»åž‹ã€‚"
#: doc/classes/Image.xml:7
-#, fuzzy
msgid ""
"Native image datatype. Contains image data which can be converted to an "
"[ImageTexture] and provides commonly used [i]image processing[/i] methods. "
@@ -33891,9 +34032,12 @@ msgid ""
"[b]Note:[/b] The maximum image size is 16384×16384 pixels due to graphics "
"hardware limitations. Larger images may fail to import."
msgstr ""
-"åŽŸç”Ÿå›¾åƒæ•°æ®ç±»åž‹ã€‚包å«å¯è½¬æ¢ä¸º [Texture2D]å›¾åƒæ•°æ®ï¼Œä»¥åŠä¸Žä¹‹äº¤äº’çš„å¤šç§æ–¹æ³•。"
-"[Image] 的最大宽度和高度为 [constant MAX_WIDTH] 和 [constant MAX_HEIGHT] 。\n"
-"[b]注:[/b] 由于图形硬件的é™åˆ¶ï¼Œæœ€å¤§å›¾åƒå¤§å°ä¸º 16384×16384 åƒç´ ã€‚较大的图åƒå°†"
+"æœ¬åœ°å›¾åƒæ•°æ®ç±»åž‹ã€‚包å«å¯è½¬æ¢ä¸º [ImageTexture] çš„å›¾åƒæ•°æ®ï¼Œå¹¶æä¾›å¸¸ç”¨çš„ [i] 图"
+"åƒå¤„ç† [/i] 方法。 [Image] 的最大宽度和高度是 [constant MAX_WIDTH] å’Œ "
+"[constant MAX_HEIGHT]。\n"
+"[Image] ä¸èƒ½ç›´æŽ¥åˆ†é…给对象的 [code]texture[/code] 属性,例如 [Sprite],必须先"
+"手动转æ¢ä¸º [ImageTexture]。\n"
+"[b]注æ„:[/b]由于图形硬件é™åˆ¶ï¼Œæœ€å¤§å›¾åƒå°ºå¯¸ä¸º16384×16384åƒç´ ã€‚较大的图åƒå¯èƒ½"
"无法导入。"
#: doc/classes/Image.xml:12 doc/classes/ImageTexture.xml:31
@@ -33901,7 +34045,7 @@ msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/workflow/assets/"
"importing_images.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/workflow/assets/"
+"https://docs.godotengine.org/zh_CN/stable/getting_started/workflow/assets/"
"importing_images.html"
#: doc/classes/Image.xml:21
@@ -34033,7 +34177,7 @@ msgstr ""
msgid ""
"Stretches the image and enlarges it by a factor of 2. No interpolation is "
"done."
-msgstr ""
+msgstr "拉伸图åƒå¹¶å°†å…¶æ”¾å¤§2å€ï¼Œä¸è¿›è¡Œæ’值。"
#: doc/classes/Image.xml:140
msgid "Fills the image with a given [Color]."
@@ -34052,7 +34196,6 @@ msgid "Flips the image vertically."
msgstr "垂直翻转图åƒã€‚"
#: doc/classes/Image.xml:165
-#, fuzzy
msgid ""
"Generates mipmaps for the image. Mipmaps are precalculated lower-resolution "
"copies of the image that are automatically used if the image needs to be "
@@ -34064,14 +34207,16 @@ msgid ""
"result in noticeable stuttering during gameplay, even if [method "
"generate_mipmaps] is called from a [Thread]."
msgstr ""
-"为图åƒç”Ÿæˆmipmaps。Mipmaps是预先计算好的ã€åˆ†è¾¨çŽ‡è¾ƒä½Žçš„å›¾åƒå‰¯æœ¬ã€‚如果图åƒåœ¨æ¸²"
-"染时需è¦ç¼©å°ï¼Œå°±ä¼šè‡ªåŠ¨ä½¿ç”¨Mipmaps。这å¯ä»¥æé«˜å›¾åƒçš„è´¨é‡å’Œæ¸²æŸ“的性能。如果图åƒ"
-"被压缩,或者是自定义格å¼ï¼Œæˆ–者图åƒçš„宽度/高度为0,则返回一个错误。"
+"为图åƒç”Ÿæˆmipmaps。Mipmaps是预先计算好的图åƒçš„低分辨率副本,如果图åƒåœ¨æ¸²æŸ“æ—¶"
+"需è¦ç¼©å°ï¼Œå°±ä¼šè‡ªåŠ¨ä½¿ç”¨ã€‚å…¶æœ‰åŠ©äºŽæé«˜å›¾åƒè´¨é‡å’Œæ¸²æŸ“时的性能。如果图åƒè¢«åŽ‹ç¼©ï¼Œ"
+"或采用自定义格å¼ï¼Œæˆ–图åƒçš„宽度或高度为[code]0[/code],则此方法返回错误。\n"
+"[b]注æ„:[/b] Mipmapçš„ç”Ÿæˆæ˜¯åœ¨CPU上完æˆçš„,是å•线程的,并且[i]总是[/i]在主线"
+"程上完æˆã€‚è¿™æ„味ç€åœ¨æ¸¸æˆè¿‡ç¨‹ä¸­ç”Ÿæˆmipmaps会导致明显的å¡é¡¿ï¼Œå³ä½¿ä»Ž[Thread]调用"
+"[method generate_mipmaps]。"
#: doc/classes/Image.xml:172
-#, fuzzy
msgid "Returns a copy of the image's raw data."
-msgstr "返回图åƒçš„原始数æ®ã€‚"
+msgstr "返回图åƒåŽŸå§‹æ•°æ®çš„副本。"
#: doc/classes/Image.xml:178
msgid "Returns the image's format. See [enum Format] constants."
@@ -34090,26 +34235,26 @@ msgstr ""
"é‡ã€‚"
#: doc/classes/Image.xml:199
-#, fuzzy
msgid ""
"Returns the color of the pixel at [code](x, y)[/code] if the image is "
"locked. If the image is unlocked, it always returns a [Color] with the value "
"[code](0, 0, 0, 1.0)[/code]. This is the same as [method get_pixelv], but "
"two integer arguments instead of a Vector2 argument."
msgstr ""
-"返回 [code](x, y)[/code] 处åƒç´ çš„颜色。这与[method get_pixelv]相åŒï¼Œä½†æœ‰ä¸¤ä¸ª"
-"æ•´æ•°å‚æ•°ï¼Œè€Œä¸æ˜¯ä¸€ä¸ª[Vector2]傿•°ã€‚"
+"如果图åƒè¢«é”定,则返回 [code](x, y)[/code] 处åƒç´ çš„颜色。如果图åƒè¢«è§£é”,它总"
+"是返回 [code](0, 0, 0, 1.0)[/code] 值的 [Color]。这与 [method get_pixelv] 相"
+"åŒï¼Œä½†æœ‰ä¸¤ä¸ªæ•´æ•°å‚æ•°è€Œä¸æ˜¯ Vector2 傿•°ã€‚"
#: doc/classes/Image.xml:206
-#, fuzzy
msgid ""
"Returns the color of the pixel at [code]src[/code] if the image is locked. "
"If the image is unlocked, it always returns a [Color] with the value [code]"
"(0, 0, 0, 1.0)[/code]. This is the same as [method get_pixel], but with a "
"Vector2 argument instead of two integer arguments."
msgstr ""
-"返回[code](x,y)[/code]处åƒç´ çš„颜色。这与[method get_pixel]相åŒï¼Œä½†ç”¨ä¸€ä¸ª"
-"[Vector2]傿•°ä»£æ›¿äº†ä¸¤ä¸ªæ•´æ•°å‚数。"
+"如果图åƒè¢«é”定,返回[code]src[/code]处的åƒç´ çš„颜色。如果图åƒè¢«è§£é”,它总是返"
+"回[code](0, 0, 0, 1.0)[/code]值的[Color]。这与[method get_pixel]相åŒï¼Œåªæ˜¯ç”¨"
+"一个Vector2傿•°ä»£æ›¿äº†ä¸¤ä¸ªæ•´æ•°å‚数。"
#: doc/classes/Image.xml:213
msgid ""
@@ -34154,7 +34299,6 @@ msgstr ""
"åƒç´ çš„逿˜Žåº¦ï¼ˆalpha )高于0,则返回[code]false[/code]。"
#: doc/classes/Image.xml:262
-#, fuzzy
msgid ""
"Loads an image from file [code]path[/code]. See [url=https://docs."
"godotengine.org/en/3.4/getting_started/workflow/assets/importing_images."
@@ -34165,9 +34309,13 @@ msgid ""
"the [code]user://[/code] directory, and may not work in exported projects.\n"
"See also [ImageTexture] description for usage examples."
msgstr ""
-"从文件路径[code]path[/code]加载图åƒã€‚有关支æŒçš„å›¾åƒæ ¼å¼å’Œé™åˆ¶çš„列表,请å‚阅"
-"[url=https://docs.godotengine.org/zh_CN/latest/getting_started/workflow/"
-"assets/importing_images.html#supported-image-formats]支æŒçš„å›¾åƒæ ¼å¼[/url]。"
+"从文件[code]path[/code]加载图åƒã€‚å‚阅[url=https://docs.godotengine.org/zh_CN/"
+"stable/getting_started/workflow/assets/importing_images.html#supported-image-"
+"formats]支æŒçš„å›¾åƒæ ¼å¼[/url],了解支æŒçš„å›¾åƒæ ¼å¼å’Œé™åˆ¶ã€‚\n"
+"[b]警告:[/b] 这个方法åªèƒ½åœ¨ç¼–辑器中使用,或者在è¿è¡Œæ—¶éœ€è¦åŠ è½½å¤–éƒ¨å›¾åƒçš„æƒ…况"
+"下使用,比如ä½äºŽ[code]user://[/code]目录下的图åƒï¼Œåœ¨å¯¼å‡ºçš„项目中å¯èƒ½æ— æ³•å·¥"
+"作。\n"
+"有关使用实例,å‚阅[ImageTexture]æè¿°ã€‚"
#: doc/classes/Image.xml:271
msgid ""
@@ -34175,6 +34323,9 @@ msgid ""
"[b]Note:[/b] Godot's BMP module doesn't support 16-bit per pixel images. "
"Only 1-bit, 4-bit, 8-bit, 24-bit, and 32-bit per pixel images are supported."
msgstr ""
+"从BMP文件的二进制内容中加载图åƒã€‚\n"
+"[b]注æ„:[/b] Godotçš„BMP模å—䏿”¯æŒ16ä½åƒç´ çš„图åƒã€‚åªæ”¯æŒ1ä½ã€4ä½ã€8ä½ã€24ä½å’Œ"
+"32ä½åƒç´ çš„图åƒã€‚"
#: doc/classes/Image.xml:279
msgid "Loads an image from the binary contents of a JPEG file."
@@ -34197,6 +34348,8 @@ msgid ""
"Locks the data for reading and writing access. Sends an error to the console "
"if the image is not locked when reading or writing a pixel."
msgstr ""
+"é”定数æ®çš„读写访问。如果在读或写åƒç´ æ—¶ï¼Œå›¾åƒæ²¡æœ‰è¢«é”å®šï¼Œåˆ™å‘æŽ§åˆ¶å°å‘é€ä¸€ä¸ªé”™"
+"误。"
#: doc/classes/Image.xml:312
msgid ""
@@ -34216,25 +34369,24 @@ msgstr ""
"code]。"
#: doc/classes/Image.xml:327
-#, fuzzy
msgid ""
"Resizes the image to the given [code]width[/code] and [code]height[/code]. "
"New pixels are calculated using the [code]interpolation[/code] mode defined "
"via [enum Interpolation] constants."
msgstr ""
-"将图åƒè°ƒæ•´åˆ°ç»™å®šçš„[code]宽度[/code]å’Œ[code]高度[/code]。新的åƒç´ æ˜¯ç”¨"
-"[code]interpolation[/code](æ’值)计算的。è§[code]interpolation[/code]常é‡ã€‚"
+"调整图åƒå¤§å°åˆ°ç»™å®šçš„[code]width[/code]å’Œ[code]height[/code]。新åƒç´ é€šè¿‡[enum "
+"Interpolation]常数定义的[code]interpolation[/code]æ’值模å¼è®¡ç®—。"
#: doc/classes/Image.xml:335
-#, fuzzy
msgid ""
"Resizes the image to the nearest power of 2 for the width and height. If "
"[code]square[/code] is [code]true[/code] then set width and height to be the "
"same. New pixels are calculated using the [code]interpolation[/code] mode "
"defined via [enum Interpolation] constants."
msgstr ""
-"将图åƒçš„宽度和高度调整为最接近的 2 次幂。如果 [code]square[/code] 为 "
-"[code]true[/code],则将宽度和高度设置为相åŒã€‚"
+"将图åƒçš„宽度和高度调整到最接近的2次方。如果[code]square[/code]是[code]true[/"
+"code],那么设置宽度和高度为相åŒã€‚æ–°åƒç´ é€šè¿‡[enum Interpolation]常数定义的"
+"[code]interpolation[/code]æ’值模å¼è®¡ç®—。"
#: doc/classes/Image.xml:341
msgid ""
@@ -34242,7 +34394,6 @@ msgid ""
msgstr "将标准 RGBEï¼ˆçº¢ç»¿è“æŒ‡æ•°ï¼‰å›¾åƒè½¬æ¢ä¸º sRGB 图åƒã€‚"
#: doc/classes/Image.xml:349
-#, fuzzy
msgid ""
"Saves the image as an EXR file to [code]path[/code]. If [code]grayscale[/"
"code] is [code]true[/code] and the image has only one channel, it will be "
@@ -34254,16 +34405,17 @@ msgid ""
"called from an exported project."
msgstr ""
"将图åƒä½œä¸ºEXR文件ä¿å­˜åˆ°[code]path[/code]。如果[code]grayscale[/code]是"
-"[code]true[/code],并且图åƒåªæœ‰ä¸€ä¸ªé€šé“,它将被明确ä¿å­˜ä¸ºå•è‰²è€Œä¸æ˜¯ä¸€ä¸ªçº¢è‰²é€š"
-"é“。如果Godot在编译时没有å¯ç”¨TinyEXR模å—,这个函数将返回[constant "
-"ERR_UNAVAILABLE]。"
+"[code]true[/code]并且图åƒåªæœ‰ä¸€ä¸ªé€šé“,它将被明确地ä¿å­˜ä¸ºå•è‰²è€Œä¸æ˜¯çº¢è‰²é€šé“。"
+"如果Godot在编译时没有TinyEXR模å—,这个函数将返回[constant "
+"ERR_UNAVAILABLE]。\n"
+"[b]注æ„:[/b] TinyEXR模å—在éžç¼–辑器构建中被ç¦ç”¨ï¼Œè¿™æ„味ç€[method save_exr]从"
+"导出的项目中调用时将返回[constant ERR_UNAVAILABLE]。"
#: doc/classes/Image.xml:357
msgid "Saves the image as a PNG file to [code]path[/code]."
msgstr "将图åƒä½œä¸º PNG 文件ä¿å­˜åˆ° [code]path[/code]。"
#: doc/classes/Image.xml:371
-#, fuzzy
msgid ""
"Sets the [Color] of the pixel at [code](x, y)[/code] if the image is locked. "
"Example:\n"
@@ -34276,15 +34428,17 @@ msgid ""
"img.set_pixel(x, y, color) # Does not have an effect\n"
"[/codeblock]"
msgstr ""
-"设置[code](x, y)[/code]处的åƒç´ çš„[Color]。示例:\n"
+"如果图åƒè¢«é”定,设置[code](x, y)[/code]处åƒç´ çš„[Color]。例å­:\n"
"[codeblock]\n"
"var img = Image.new()\n"
"img.create(img_width, img_height, false, Image.FORMAT_RGBA8)\n"
-"img.set_pixel(x, y, color)\n"
+"img.lock()\n"
+"img.set_pixel(x, y, color) # Works\n"
+"img.unlock()\n"
+"img.set_pixel(x, y, color) # Does not have an effect\n"
"[/codeblock]"
#: doc/classes/Image.xml:387
-#, fuzzy
msgid ""
"Sets the [Color] of the pixel at [code](dst.x, dst.y)[/code] if the image is "
"locked. Note that the [code]dst[/code] values must be integers. Example:\n"
@@ -34297,12 +34451,15 @@ msgid ""
"img.set_pixelv(Vector2(x, y), color) # Does not have an effect\n"
"[/codeblock]"
msgstr ""
-"设置[code](dst.x, dst.y)[/code]处åƒç´ çš„[Color]。注æ„,[code]dst[/code]的值必"
-"须是整数。例å­ã€‚\n"
+"如果图åƒè¢«é”定,设置[code](dst.x, dst.y)[/code]处的åƒç´ çš„[Color]。注æ„,"
+"[code]dst[/code]值必须是整数。例:\n"
"[codeblock]\n"
"var img = Image.new()\n"
"img.create(img_width, img_height, false, Image.FORMAT_RGBA8)\n"
-"img.set_pixelv(Vector2(x, y), color)\n"
+"img.lock()\n"
+"img.set_pixelv(Vector2(x, y), color) # Works\n"
+"img.unlock()\n"
+"img.set_pixelv(Vector2(x, y), color) # Does not have an effect\n"
"[/codeblock]"
#: doc/classes/Image.xml:401
@@ -34318,7 +34475,6 @@ msgid "Unlocks the data and prevents changes."
msgstr "è§£é”æ•°æ®å¹¶é˜²æ­¢æ›´æ”¹ã€‚"
#: doc/classes/Image.xml:419
-#, fuzzy
msgid ""
"Holds all the image's color data in a given format. See [enum Format] "
"constants."
@@ -34343,15 +34499,14 @@ msgid ""
msgstr "OpenGL çº¹ç†æ ¼å¼ï¼Œå…·æœ‰ä¸¤ä¸ªå€¼ï¼Œäº®åº¦å’Œ alpha,æ¯ä¸ªå€¼ä»¥ 8 ä½å­˜å‚¨ã€‚"
#: doc/classes/Image.xml:436
-#, fuzzy
msgid ""
"OpenGL texture format [code]RED[/code] with a single component and a "
"bitdepth of 8.\n"
"[b]Note:[/b] When using the GLES2 backend, this uses the alpha channel "
"instead of the red channel for storage."
msgstr ""
-"OpenGL çº¹ç†æ ¼å¼ [code]RGB[/code] 具有三个部分,æ¯ä¸ªåˆ†é‡éƒ¨åˆ†çš„使·±åº¦ä¸º 8。\n"
-"[b]注æ„:[/b]创建 [ImageTexture] 时,会执行sRGB到线性色彩空间的转æ¢ã€‚"
+"OpenGL çº¹ç†æ ¼å¼ [code]RED[/code],具有å•个分é‡å’Œ 8 使·±åº¦ã€‚\n"
+"[b]注æ„:[/b] 当使用 GLES2 åŽç«¯æ—¶ï¼Œå®ƒä½¿ç”¨ alpha 通é“è€Œä¸æ˜¯çº¢è‰²é€šé“进行存储。"
#: doc/classes/Image.xml:440
msgid ""
@@ -34387,11 +34542,12 @@ msgstr ""
"OpenGL çº¹ç†æ ¼å¼ [code]RGBA[/code] 有四个部分,æ¯ä¸ªåˆ†é‡éƒ¨åˆ†çš„使·±åº¦ä¸º 4。"
#: doc/classes/Image.xml:454
-#, fuzzy
msgid ""
"OpenGL texture format [code]GL_RGB5_A1[/code] where 5 bits of depth for each "
"component of RGB and one bit for alpha."
-msgstr "OpenGL çº¹ç†æ ¼å¼ [code]RG[/code],具有两个部分,æ¯ä¸ªéƒ¨åˆ†çš„使·±åº¦ä¸º 8。"
+msgstr ""
+"OpenGLçº¹ç†æ ¼å¼[code]GL_RGB5_A1[/code],其中RGBæ¯ä¸ªåˆ†é‡çš„æ·±åº¦ä¸º5ä½ï¼Œalpha为1"
+"ä½ã€‚"
#: doc/classes/Image.xml:457
msgid ""
@@ -34719,7 +34875,6 @@ msgstr ""
"å¼é€šå¸¸ä¼šäº§ç”Ÿæ›´å¥½çš„结果,但代价是速度较慢."
#: doc/classes/Image.xml:564
-#, fuzzy
msgid ""
"Performs bilinear separately on the two most-suited mipmap levels, then "
"linearly interpolates between them.\n"
@@ -34733,13 +34888,14 @@ msgid ""
"On the other hand, if the image already has mipmaps, they will be used, and "
"a new set will be generated for the resulting image."
msgstr ""
-"在两个最åˆé€‚çš„mipmap层上分别执行åŒçº¿æ€§,ç„¶åŽåœ¨å®ƒä»¬ä¹‹é—´è¿›è¡Œçº¿æ€§æ’值.\n"
-"它比[INTERPOLATE_BILINEAR]æ…¢,ä½†èƒ½äº§ç”Ÿè´¨é‡æ›´é«˜çš„æ•ˆæžœ,并且å‡å°‘很多混å .\n"
-"å¦‚æžœå›¾åƒæ²¡æœ‰mipmaps,它们将被生æˆå¹¶åœ¨å†…部使用,但ä¸ä¼šå¯¹ç”Ÿæˆçš„图åƒç”Ÿæˆmipmaps.\n"
-"[b]注æ„: [/b]如果您打算对原始图åƒè¿›è¡Œå¤šä»½ç¼©æ”¾,最好æå‰å¯¹å…¶è°ƒç”¨ "
-"generate_mipmaps(),以é¿å…在åå¤ç”Ÿæˆå®ƒä»¬æ—¶æµªè´¹å¤„ç†èƒ½åŠ›.\n"
-"å¦ä¸€æ–¹é¢,如果图åƒå·²ç»æœ‰äº†mipmaps,就会使用它们,并为生æˆçš„图åƒç”Ÿæˆä¸€ç»„æ–°çš„"
-"mipmaps."
+"在两个最适åˆçš„mipmap级别上分别执行åŒçº¿æ€§ï¼Œç„¶åŽåœ¨å®ƒä»¬ä¹‹é—´è¿›è¡Œçº¿æ€§æ’值。\n"
+"它比[constant INTERPOLATE_BILINEAR]慢,但能产生更高质é‡çš„æ•ˆæžœï¼Œå‡å°‘锯齿伪"
+"影。\n"
+"å¦‚æžœå›¾åƒæ²¡æœ‰mipmaps,它们将被生æˆå¹¶åœ¨å†…部使用,但ä¸ä¼šåœ¨ç”Ÿæˆçš„图åƒä¹‹ä¸Šç”Ÿæˆ"
+"mipmaps。\n"
+"[b]注æ„:[/b] 如果你打算缩放原始图åƒçš„多个副本,最好事先对其调用[method "
+"generate_mipmaps],以é¿å…在生æˆå®ƒä»¬æ—¶å夿µªè´¹å¤„ç†èƒ½åŠ›ã€‚\n"
+"å¦ä¸€æ–¹é¢ï¼Œå¦‚果图åƒå·²ç»æœ‰äº†mipmaps,其将被使用,并为生æˆçš„图åƒç”Ÿæˆæ–°çš„一组。"
#: doc/classes/Image.xml:571
msgid ""
@@ -34874,17 +35030,15 @@ msgstr ""
"[b]注æ„:[/b]由于图形硬件é™åˆ¶ï¼Œæœ€å¤§çº¹ç†å°ºå¯¸ä¸º16384×16384åƒç´ ã€‚"
#: doc/classes/ImageTexture.xml:41
-#, fuzzy
msgid ""
"Create a new [ImageTexture] with [code]width[/code] and [code]height[/"
"code].\n"
"[code]format[/code] is a value from [enum Image.Format], [code]flags[/code] "
"is any combination of [enum Texture.Flags]."
msgstr ""
-"使用一个[code]width[/code] 宽度和 [code]height[/code]高度创建一个新的 "
-"[ImageTexture]图片纹ç†ã€‚\n"
-"[code]format[/code] is a value from [enum Image.Format], [code]flags[/code] "
-"is any combination of [enum Texture.Flags]."
+"创建具有[code]width[/code]和[code]height[/code]的新[ImageTexture]。\n"
+"[code]format[/code]是[enum Image.Format]中的一个值,[code]flags[/code]是"
+"[enum Texture.Flags]的任æ„组åˆã€‚"
#: doc/classes/ImageTexture.xml:50
msgid ""
@@ -34892,11 +35046,13 @@ msgid ""
"with [code]flags[/code] from [enum Texture.Flags]. An sRGB to linear color "
"space conversion can take place, according to [enum Image.Format]."
msgstr ""
+"通过使用 [enum Texture.Flags] 中的 [code]flags[/code] 分é…和设置æ¥è‡ª [Image] "
+"çš„æ•°æ®æ¥åˆå§‹åŒ–纹ç†ã€‚æ ¹æ® [enum Image.Format],å¯ä»¥è¿›è¡Œ sRGB 到线性颜色空间的"
+"转æ¢ã€‚"
#: doc/classes/ImageTexture.xml:56
-#, fuzzy
msgid "Returns the format of the texture, one of [enum Image.Format]."
-msgstr "返回 [ImageTexture] 的格å¼ï¼Œæ˜¯ [enum Image.Format] 中的一个。"
+msgstr "返回纹ç†çš„æ ¼å¼ï¼Œ[enum Image.Format] 之一。"
#: doc/classes/ImageTexture.xml:63
msgid ""
@@ -34920,20 +35076,24 @@ msgid ""
"texture frequently, which is faster than allocating additional memory for a "
"new texture each time."
msgstr ""
+"用新的 [Image] 替æ¢çº¹ç†çš„æ•°æ®ã€‚\n"
+"[b]注æ„:[/b]纹ç†å¿…须先用[method create_from_image]方法åˆå§‹åŒ–ï¼Œç„¶åŽæ‰èƒ½æ›´æ–°ã€‚"
+"新的图åƒå°ºå¯¸ã€æ ¼å¼å’Œ mipmap é…置应与现有纹ç†çš„图åƒé…置相匹é…,å¦åˆ™å¿…须使用 "
+"[method create_from_image] æ–¹æ³•é‡æ–°åˆ›å»ºã€‚\n"
+"如果需è¦é¢‘ç¹æ›´æ–°çº¹ç†ï¼Œè¯·åœ¨ [method create_from_image] ä¸Šä½¿ç”¨æ­¤æ–¹æ³•ï¼Œè¿™æ¯”æ¯æ¬¡"
+"为新纹ç†åˆ†é…é¢å¤–内存è¦å¿«ã€‚"
#: doc/classes/ImageTexture.xml:80 doc/classes/VisualServer.xml:2837
-#, fuzzy
msgid "Resizes the texture to the specified dimensions."
-msgstr "å°† [ImageTexture] 调整为指定的大å°ã€‚"
+msgstr "将纹ç†çš„大å°è°ƒæ•´ä¸ºæŒ‡å®šçš„尺寸。"
#: doc/classes/ImageTexture.xml:87
msgid "The storage quality for [constant STORAGE_COMPRESS_LOSSY]."
msgstr "[constant STORAGE_COMPRESS_LOSSY]的存储质é‡ã€‚"
#: doc/classes/ImageTexture.xml:90
-#, fuzzy
msgid "The storage type (raw, lossy, or compressed)."
-msgstr "按钮被按下的状æ€ã€‚"
+msgstr "存储类型,å³åŽŸå§‹ã€æœ‰æŸã€æˆ–压缩。"
#: doc/classes/ImageTexture.xml:95
msgid "[Image] data is stored raw and unaltered."
@@ -34944,18 +35104,17 @@ msgid ""
"[Image] data is compressed with a lossy algorithm. You can set the storage "
"quality with [member lossy_quality]."
msgstr ""
-"[图åƒ]æ•°æ®æ˜¯ç”¨æœ‰æŸç®—法压缩的。 ä½ å¯ä»¥ç”¨[member lossy_quality]设置存储质é‡ã€‚"
+"[Image]æ•°æ®æ˜¯ç”¨æœ‰æŸç®—法压缩的。 ä½ å¯ä»¥ç”¨[member lossy_quality]设置存储质é‡ã€‚"
#: doc/classes/ImageTexture.xml:101
msgid "[Image] data is compressed with a lossless algorithm."
-msgstr "[图åƒ]æ•°æ®æ˜¯ç”¨æ— æŸç®—法压缩的。"
+msgstr "[Image]æ•°æ®æ˜¯ç”¨æ— æŸç®—法压缩的。"
#: doc/classes/ImmediateGeometry.xml:4
msgid "Draws simple geometry from code."
msgstr "通过代ç ç»˜åˆ¶ç®€å•的几何形状。"
#: doc/classes/ImmediateGeometry.xml:7
-#, fuzzy
msgid ""
"Draws simple geometry from code. Uses a drawing mode similar to OpenGL 1.x.\n"
"See also [ArrayMesh], [MeshDataTool] and [SurfaceTool] for procedural "
@@ -34971,14 +35130,16 @@ msgid ""
"data, try increasing its buffer size limit under [member ProjectSettings."
"rendering/limits/buffers/immediate_buffer_size_kb]."
msgstr ""
-"通过代ç ç»˜åˆ¶ç®€å•的几何形状。使用类似于OpenGL 1.x.的绘制方å¼ã€‚\n"
-"关于几何形状的程åºåŒ–构建,å‚阅 [ArrayMesh],[MeshDataTool] ä»¥åŠ "
-"[SurfaceTool]。\n"
-"[b]注æ„:[/b] ImmediateGeometry3D 最适用于æ¯å¸§å˜åŒ–的少é‡ç½‘格数æ®ã€‚如果处ç†å¤§"
-"é‡ç½‘格数æ®å°†ä¼šå˜æ…¢ã€‚如果网格数æ®ä¸éœ€è¦ç»å¸¸å˜åŒ–,使用[ArrayMesh],"
-"[MeshDataTool] 或者 [SurfaceTool] 代替。\n"
-"[b]注æ„:[/b] 对于三角形基本模å¼çš„æ­£é¢ï¼ŒGodot使用顺时针[url=https://"
-"learnopengl.com/Advanced-OpenGL/Face-culling]缠绕顺åº[/url]。"
+"从代ç ä¸­ç»˜åˆ¶ç®€å•的几何图形。使用类似于OpenGL 1.x的绘制模å¼ã€‚\n"
+"请å‚阅[ArrayMesh]ã€[MeshDataTool]å’Œ[SurfaceTool]ï¼Œäº†è§£ç¨‹åºæ€§å‡ ä½•体的生æˆã€‚\n"
+"[b]注æ„:[/b] ImmediateGeometry3D最适åˆå¤„ç†æ¯ä¸€å¸§å˜åŒ–的少é‡ç½‘格数æ®ã€‚当处ç†å¤§"
+"é‡çš„ç½‘æ ¼æ•°æ®æ—¶ï¼Œå®ƒå°†ä¼šå¾ˆæ…¢ã€‚如果网格数æ®ä¸ç»å¸¸å˜åŒ–,请使用[ArrayMesh]ã€"
+"[MeshDataTool]或[SurfaceTool]代替。\n"
+"[b]注æ„:[/b] Godot对三角形基本å•元模å¼çš„æ­£é¢ä½¿ç”¨é¡ºæ—¶é’ˆ[url=https://"
+"learnopengl.com/Advanced-OpenGL/Face-culling]缠绕顺åº[/url]。\n"
+"[b]注æ„:[/b] 在处ç†å¤§é‡ç½‘æ ¼æ•°æ®æ—¶ï¼Œå¦‚果出现æ¼ç‚¹ï¼Œå¯ä»¥å°è¯•在[member "
+"ProjectSettings.rendering/limits/buffers/immediate_buffer_size_kb]增加其缓冲"
+"区大å°é™åˆ¶ã€‚"
#: doc/classes/ImmediateGeometry.xml:23
msgid ""
@@ -35046,7 +35207,7 @@ msgstr ""
#: doc/classes/Input.xml:10
msgid "https://docs.godotengine.org/en/3.4/tutorials/inputs/index.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/inputs/index.html"
+msgstr "https://docs.godotengine.org/zh_CN/stable/tutorials/inputs/index.html"
#: doc/classes/Input.xml:20
msgid ""
@@ -35084,6 +35245,12 @@ msgid ""
"once per frame). However, this can be useful in advanced cases where you "
"want precise control over the timing of event handling."
msgstr ""
+"将当å‰ç¼“冲区内的所有输入事件å‘é€ç»™æ¸¸æˆå¾ªçŽ¯ã€‚è¿™äº›äº‹ä»¶å¯èƒ½æ˜¯ç”±äºŽç´¯ç§¯è¾“å…¥"
+"([method set_use_accumulated_input]ï¼‰æˆ–æ•æ·è¾“入刷新([member "
+"ProjectSettings.input_devices/buffering/agile_event_flushing])而被缓冲的结"
+"果。\n"
+"引擎已ç»ä¼šåœ¨å…³é”®çš„æ‰§è¡Œç‚¹æ‰§è¡Œæ­¤æ“作,至少æ¯å¸§ä¸€æ¬¡ã€‚然而,在你想è¦ç²¾ç¡®æŽ§åˆ¶äº‹ä»¶"
+"å¤„ç†æ—¶é—´çš„高级情况下,这å¯èƒ½æ˜¯æœ‰ç”¨çš„。"
#: doc/classes/Input.xml:50
msgid ""
@@ -35097,6 +35264,13 @@ msgid ""
"measurement for each axis is m/s² while on iOS and UWP it's a multiple of "
"the Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
+"如果设备有加速度传感器,则返回设备的加速度。å¦åˆ™ï¼Œè¯¥æ–¹æ³•返回[constant "
+"Vector3.ZERO]。\n"
+"请注æ„,å³ä½¿ä½ çš„设备有一个加速度计,当从编辑器è¿è¡Œæ—¶ï¼Œè¯¥æ–¹æ³•也会返回一个空的"
+"[Vector3]。你必须将项目导出到一个支æŒçš„è®¾å¤‡ä¸Šï¼Œä»¥ä¾¿ä»ŽåŠ é€Ÿåº¦è®¡ä¸Šè¯»å–æ•°å€¼ã€‚\n"
+"[b]注æ„:[/b] 这个方法åªåœ¨iOSã€Androidå’ŒUWP上工作。在其他平å°ä¸Šï¼Œå®ƒæ€»æ˜¯è¿”回"
+"[constant Vector3.ZERO]。在Android上,æ¯ä¸ªè½´çš„æµ‹é‡å•使˜¯m/s²,而在iOSå’ŒUWP"
+"上,它是地çƒé‡åŠ›åŠ é€Ÿåº¦çš„å€æ•°[code]g[/code](~9.81 m/s²)。"
#: doc/classes/Input.xml:60
msgid ""
@@ -35107,9 +35281,13 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events."
msgstr ""
+"返回介于0和1之间的值,代表给定动作的原始强度,忽略动作的死区。在大多数情况"
+"下,你应该使用[method get_action_strength]æ¥ä»£æ›¿ã€‚\n"
+"如果[code]exact[/code]是[code]false[/code],它将忽略[InputEventKey]和"
+"[InputEventMouseButton]事件的输入修饰符,以åŠ[InputEventJoypadMotion]事件的方"
+"å‘。"
#: doc/classes/Input.xml:69
-#, fuzzy
msgid ""
"Returns a value between 0 and 1 representing the intensity of the given "
"action. In a joypad, for example, the further away the axis (analog sticks "
@@ -35120,9 +35298,12 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events."
msgstr ""
-"返回一个介于0å’Œ1ä¹‹é—´çš„å€¼ï¼Œä»£è¡¨ç»™å®šåŠ¨ä½œçš„å¼ºåº¦ã€‚ä»¥æ¸¸æˆæ‰‹æŸ„为例,推动轴(模拟摇"
-"æ†æˆ–L2ã€R2触å‘器)离盲区(dead zone)越远,数值就越接近1。如果动作被映射到一个"
-"没有轴作为控件的键盘,返回数值将是0或1。"
+"返回介于0å’Œ1之间的值,代表给定动作的强度。例如,在一个æ“纵æ¿ä¸Šï¼Œè½´ï¼ˆæ¨¡æ‹Ÿæ†æˆ–"
+"L2ã€R2触å‘器)离死区越远,数值就越接近1。如果动作被映射到一个没有轴作为键盘的"
+"控件上,返回的数值将是0或1。\n"
+"如果[code]exact[/code]是[code]false[/code],它将忽略[InputEventKey]和"
+"[InputEventMouseButton]事件的输入修饰符,以åŠ[InputEventJoypadMotion]事件的方"
+"å‘。"
#: doc/classes/Input.xml:78
msgid ""
@@ -35131,6 +35312,9 @@ msgid ""
"get_action_strength(\"positive_action\") - Input."
"get_action_strength(\"negative_action\")[/code]."
msgstr ""
+"通过指定两个动作æ¥èŽ·å–轴的输入,一个是负的,一个是正的。\n"
+"这是写[code]Input.get_action_strength(\"positive_action\")-Input."
+"get_action_strength(\"negative_action\")[/code]的简写。"
#: doc/classes/Input.xml:85
msgid ""
@@ -35151,6 +35335,11 @@ msgid ""
"measurement for each axis is m/s² while on iOS it's a multiple of the "
"Earth's gravitational acceleration [code]g[/code] (~9.81 m/s²)."
msgstr ""
+"如果设备有加速度传感器,则返回设备的é‡åŠ›ã€‚å¦åˆ™ï¼Œè¯¥æ–¹æ³•返回[constant Vector3."
+"ZERO]。\n"
+"[b]注æ„:[/b] 这个方法åªåœ¨Androidå’ŒiOS上工作。在其他平å°ä¸Šï¼Œå®ƒæ€»æ˜¯è¿”回"
+"[constant Vector3.ZERO]。在Android上,æ¯ä¸ªè½´çš„æµ‹é‡å•使˜¯m/s²,而在iOS上,它是"
+"地çƒé‡åŠ›åŠ é€Ÿåº¦çš„å€æ•°[code]g[/code](~9.81 m/s²)。"
#: doc/classes/Input.xml:104
msgid ""
@@ -35160,13 +35349,16 @@ msgid ""
"[b]Note:[/b] This method only works on Android and iOS. On other platforms, "
"it always returns [constant Vector3.ZERO]."
msgstr ""
+"如果设备有陀螺仪传感器,则返回围绕设备Xã€Yã€Z轴的旋转速率,å•ä½ä¸ºrad/s。å¦"
+"则,该方法返回[constant Vector3.ZERO]。\n"
+"[b]注æ„:[/b] 这个方法åªåœ¨Androidå’ŒiOS上工作。在其他平å°ä¸Šï¼Œæ€»æ˜¯è¿”回"
+"[constant Vector3.ZERO]。"
#: doc/classes/Input.xml:113
-#, fuzzy
msgid ""
"Returns the current value of the joypad axis at given index (see [enum "
"JoystickList])."
-msgstr "返回给定索引处的手柄(joypad)轴的当å‰å€¼ï¼ˆå‚阅 [enum JoyAxisList])。"
+msgstr "è¿”å›žç»™å®šç´¢å¼•çš„æ¸¸æˆæ‰‹æŸ„轴的当å‰å€¼ï¼Œå‚阅[enum JoystickList]。"
#: doc/classes/Input.xml:120
msgid "Returns the index of the provided axis name."
@@ -35183,13 +35375,11 @@ msgid "Returns the index of the provided button name."
msgstr "返回所æä¾›çš„æŒ‰é’®å称的索引。"
#: doc/classes/Input.xml:141
-#, fuzzy
msgid ""
"Receives a gamepad button from [enum JoystickList] and returns its "
"equivalent name as a string."
msgstr ""
-"从[enum JoyButtonList]ä¸­æŽ¥æ”¶ä¸€ä¸ªæ¸¸æˆæ‰‹æŸ„(gamepad)按钮,并以字符串形å¼è¿”回其对"
-"应的å称。"
+"从[enum JoystickList]ä¸­æŽ¥æ”¶æ¸¸æˆæ‰‹æŸ„按钮,并将其对应的å称作为一个字符串返回。"
#: doc/classes/Input.xml:148
msgid ""
@@ -35231,6 +35421,10 @@ msgid ""
"[b]Note:[/b] This method only works on Android, iOS and UWP. On other "
"platforms, it always returns [constant Vector3.ZERO]."
msgstr ""
+"如果设备有ç£åŠ›ä¼ æ„Ÿå™¨ï¼Œåˆ™è¿”å›žè®¾å¤‡æ‰€æœ‰è½´çš„ç£åœºå¼ºåº¦ï¼Œå¾®ç‰¹æ–¯æ‹‰ã€‚å¦åˆ™ï¼Œè¯¥æ–¹æ³•返回"
+"[constant Vector3.ZERO]。\n"
+"[b]注æ„:[/b] 这个方法åªåœ¨Androidã€iOSå’ŒUWP上有效。在其他平å°ä¸Šï¼Œæ€»æ˜¯è¿”回"
+"[constant Vector3.ZERO]。"
#: doc/classes/Input.xml:188
msgid ""
@@ -35256,9 +35450,13 @@ msgid ""
"action deadzones. However, you can override the deadzone to be whatever you "
"want (on the range of 0 to 1)."
msgstr ""
+"通过指定正负Xå’ŒY轴的四个动作æ¥èŽ·å–å‘é‡çŸ¢é‡ã€‚\n"
+"这个方法在获å–å‘é‡è¾“入时很有用,比如从æ“纵æ†ã€æ–¹å‘盘ã€ç®­å¤´æˆ–WASD。å‘é‡çš„长度"
+"被é™åˆ¶ä¸º1,并且有一个圆形的死区,这对于使用å‘é‡è¾“入进行è¿åŠ¨å¾ˆæœ‰ç”¨ã€‚\n"
+"默认情况下,死区根æ®åŠ¨ä½œæ­»åŒºçš„å¹³å‡å€¼è‡ªåŠ¨è®¡ç®—ã€‚ç„¶è€Œï¼Œä½ å¯ä»¥è¦†ç›–死区,获得你想"
+"è¦çš„,注,在0到1的范围内。"
#: doc/classes/Input.xml:215
-#, fuzzy
msgid ""
"Returns [code]true[/code] when the user starts pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user pressed down "
@@ -35269,13 +35467,15 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events."
msgstr ""
-"当用户开始按下动作事件时,返回[code]true[/code],è¿™æ„味ç€ä»…当用户按下按钮的帧"
-"上æ‰è¿”回[code]true[/code].\n"
-"这对于在按下æŸä¸ªåŠ¨ä½œæ—¶åªéœ€è¦è¿è¡Œä¸€æ¬¡ï¼Œè€Œä¸æ˜¯åœ¨æŒ‰ä¸‹æ—¶çš„æ¯ä¸€å¸§ä¸­è¿è¡Œçš„代ç å¾ˆæœ‰"
-"用。"
+"当用户开始按下动作事件时,返回[code]true[/code]ï¼Œä¹Ÿå°±æ˜¯è¯´ï¼Œåªæœ‰åœ¨ç”¨æˆ·æŒ‰ä¸‹æŒ‰é’®"
+"çš„é‚£ä¸€å¸§æ‰æ˜¯[code]true[/code]。\n"
+"这对那些åªéœ€è¦åœ¨åŠ¨ä½œè¢«æŒ‰ä¸‹æ—¶è¿è¡Œä¸€æ¬¡çš„代ç ä¸­å¾ˆæœ‰ç”¨ï¼Œè€Œä¸æ˜¯åœ¨æŒ‰ä¸‹æ—¶æ¯ä¸€å¸§éƒ½è¦"
+"è¿è¡Œã€‚\n"
+"如果[code]exact[/code]是[code]false[/code],它将忽略[InputEventKey]和"
+"[InputEventMouseButton]事件的输入修饰符,以åŠ[InputEventJoypadMotion]事件的方"
+"å‘。"
#: doc/classes/Input.xml:225
-#, fuzzy
msgid ""
"Returns [code]true[/code] when the user stops pressing the action event, "
"meaning it's [code]true[/code] only on the frame that the user released the "
@@ -35284,13 +35484,13 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events."
msgstr ""
-"当用户开始按下动作事件时,返回[code]true[/code],è¿™æ„味ç€ä»…当用户按下按钮的帧"
-"上æ‰è¿”回[code]true[/code].\n"
-"这对于在按下æŸä¸ªåŠ¨ä½œæ—¶åªéœ€è¦è¿è¡Œä¸€æ¬¡ï¼Œè€Œä¸æ˜¯åœ¨æŒ‰ä¸‹æ—¶çš„æ¯ä¸€å¸§ä¸­è¿è¡Œçš„代ç å¾ˆæœ‰"
-"用。"
+"å½“ç”¨æˆ·åœæ­¢æŒ‰ä¸‹åŠ¨ä½œäº‹ä»¶æ—¶ï¼Œè¿”å›ž[code]true[/code]ï¼Œä¹Ÿå°±æ˜¯è¯´ï¼Œåªæœ‰åœ¨ç”¨æˆ·é‡Šæ”¾æŒ‰é’®"
+"çš„é‚£ä¸€å¸§æ‰æ˜¯[code]true[/code]。\n"
+"如果[code]exact[/code]是[code]false[/code],它将忽略[InputEventKey]和"
+"[InputEventMouseButton]事件的输入修饰符,以åŠ[InputEventJoypadMotion]事件的方"
+"å‘。"
#: doc/classes/Input.xml:234
-#, fuzzy
msgid ""
"Returns [code]true[/code] if you are pressing the action event. Note that if "
"an action has multiple buttons assigned and more than one of them is "
@@ -35300,37 +35500,37 @@ msgid ""
"for [InputEventKey] and [InputEventMouseButton] events, and the direction "
"for [InputEventJoypadMotion] events."
msgstr ""
-"如果您按下动作事件,则返回[code]true[/code]。请注æ„,如果为一个动作分é…了多个按"
-"钮,并且按下了多个按钮,那么å³ä½¿ä»ç„¶æŒ‰ä¸‹åˆ†é…给该动作的æŸä¸ªå…¶ä»–按钮,释放一个按"
-"钮也将释放该动作。"
+"如果你正在按下动作事件,返回[code]true[/code]。请注æ„,如果一个动作有多个分é…"
+"çš„æŒ‰é’®ï¼Œå¹¶ä¸”ä¸æ­¢ä¸€ä¸ªè¢«æŒ‰ä¸‹ï¼Œé‡Šæ”¾ä¸€ä¸ªæŒ‰é’®å°†é‡Šæ”¾è¿™ä¸ªåŠ¨ä½œï¼Œå³ä½¿å…¶ä»–分é…给这个动"
+"作的按钮ä»ç„¶è¢«æŒ‰ä¸‹ã€‚\n"
+"如果[code]exact[/code]是[code]false[/code],它将忽略[InputEventKey]和"
+"[InputEventMouseButton]事件的输入修饰符,以åŠ[InputEventJoypadMotion]事件的方"
+"å‘。"
#: doc/classes/Input.xml:243
-#, fuzzy
msgid ""
"Returns [code]true[/code] if you are pressing the joypad button (see [enum "
"JoystickList])."
-msgstr "如果按下æ“çºµæ†æŒ‰é’®ï¼Œåˆ™è¿”回[code]true[/code](请å‚阅[JoystickList])。"
+msgstr ""
+"如果你正在按下手柄按钮,则返回[code]true[/code],å‚阅[enum JoystickList]。"
#: doc/classes/Input.xml:250
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the system knows the specified device. This "
"means that it sets all button and axis indices exactly as defined in [enum "
"JoystickList]. Unknown joypads are not expected to match these constants, "
"but you can still retrieve events from them."
msgstr ""
-"å¦‚æžœç³»ç»ŸçŸ¥é“æŒ‡å®šçš„设备,则返回[code]true[/code]。这æ„味ç€å®ƒå°†å®Œå…¨æŒ‰ç…§"
-"JoystickListä¸­çš„å®šä¹‰è®¾ç½®æ‰€æœ‰æŒ‰é’®å’Œè½´ç´¢å¼•ã€‚æœªçŸ¥çš„æ¸¸æˆæ‰‹æŸ„ä¸å¸Œæœ›ä¸Žè¿™äº›å¸¸é‡åŒ¹"
-"é…,但是您ä»ç„¶å¯ä»¥ä»Žä¸­æ£€ç´¢äº‹ä»¶ã€‚"
+"å¦‚æžœç³»ç»ŸçŸ¥é“æŒ‡å®šçš„设备,则返回[code]true[/code]。这æ„味ç€å®ƒå°†å®Œå…¨æŒ‰ç…§[enum "
+"JoystickList]中的定义设置所有按钮和轴的索引。未知的æ“纵æ†å¯èƒ½ä¸ä¼šä¸Žè¿™äº›å¸¸æ•°ç›¸"
+"匹é…,但你ä»ç„¶å¯ä»¥ä»Žä¸­æ£€ç´¢äº‹ä»¶ã€‚"
#: doc/classes/Input.xml:257
-#, fuzzy
msgid ""
"Returns [code]true[/code] if you are pressing the key. You can pass a [enum "
"KeyList] constant."
msgstr ""
-"如果你按当å‰é”®ç›˜å¸ƒå±€ä¸­çš„键,则返回 [code]true[/code]。您å¯ä»¥ä¼ å…¥ [enum "
-"KeyList] 常é‡å‚数。"
+"如果你正在按压该键,则返回[code]true[/code]。你å¯ä»¥ä¼ é€’[enum KeyList]常é‡ã€‚"
#: doc/classes/Input.xml:264
msgid ""
@@ -35362,8 +35562,8 @@ msgid ""
"Input.parse_input_event(a)\n"
"[/codeblock]"
msgstr ""
-"呿¸¸æˆæä¾›[InputEvent]。å¯ç”¨äºŽä»Žä»£ç ä¸­äººå·¥è§¦å‘输入事件。也会产生[Node."
-"_input()]调用。\n"
+"呿¸¸æˆæä¾› [InputEvent]。å¯ç”¨äºŽä»Žä»£ç äººä¸ºè§¦å‘输入事件。也会产生 [method Node."
+"_input()] 调用。\n"
"例:\n"
"[codeblock]\n"
"var a = InputEventAction.new()\n"
@@ -35385,6 +35585,9 @@ msgid ""
"[b]Note:[/b] This value can be immediately overwritten by the hardware "
"sensor value on Android and iOS."
msgstr ""
+"设置加速度传感器的加速度值。å¯ä»¥ç”¨äºŽåœ¨æ²¡æœ‰ç¡¬ä»¶ä¼ æ„Ÿå™¨çš„设备上进行调试,例如在"
+"PC上的编辑器中。\n"
+"[b]注æ„:[/b] 这个值在Androidå’ŒiOS上å¯ç«‹å³è¢«ç¡¬ä»¶ä¼ æ„Ÿå™¨çš„值所覆盖。"
#: doc/classes/Input.xml:313
msgid ""
@@ -35432,6 +35635,9 @@ msgid ""
"[b]Note:[/b] This value can be immediately overwritten by the hardware "
"sensor value on Android and iOS."
msgstr ""
+"设置加速度传感器的é‡åŠ›å€¼ã€‚å¯ç”¨äºŽåœ¨æ²¡æœ‰ç¡¬ä»¶ä¼ æ„Ÿå™¨çš„设备上进行调试,例如在PC上"
+"的编辑器中。\n"
+"[b]注æ„:[/b] 这个值在Androidå’ŒiOS上å¯ç«‹å³è¢«ç¡¬ä»¶ä¼ æ„Ÿå™¨çš„值覆盖。"
#: doc/classes/Input.xml:341
msgid ""
@@ -35441,6 +35647,9 @@ msgid ""
"[b]Note:[/b] This value can be immediately overwritten by the hardware "
"sensor value on Android and iOS."
msgstr ""
+"设置陀螺仪传感器的旋转速率值。å¯ç”¨äºŽåœ¨æ²¡æœ‰ç¡¬ä»¶ä¼ æ„Ÿå™¨çš„设备上进行调试,例如在"
+"PC上的编辑器中。\n"
+"[b]注æ„:[/b] 在Androidå’ŒiOS上,这个值å¯ç«‹å³è¢«ç¡¬ä»¶ä¼ æ„Ÿå™¨çš„值所覆盖。"
#: doc/classes/Input.xml:349
msgid ""
@@ -35450,6 +35659,9 @@ msgid ""
"[b]Note:[/b] This value can be immediately overwritten by the hardware "
"sensor value on Android and iOS."
msgstr ""
+"设置ç£åŠ›ä¼ æ„Ÿå™¨çš„ç£åœºå€¼ã€‚å¯ç”¨äºŽåœ¨æ²¡æœ‰ç¡¬ä»¶ä¼ æ„Ÿå™¨çš„设备上进行调试,例如在PC上的"
+"编辑器中。\n"
+"[b]注æ„:[/b] 在Androidå’ŒiOS上,这个值å¯ç«‹å³è¢«ç¡¬ä»¶ä¼ æ„Ÿå™¨çš„值所覆盖。"
#: doc/classes/Input.xml:357
msgid "Sets the mouse mode. See the constants for more information."
@@ -35500,14 +35712,14 @@ msgid "Stops the vibration of the joypad."
msgstr "åœæ­¢æ¸¸æˆæ‰‹æŸ„的振动。"
#: doc/classes/Input.xml:390
-#, fuzzy
msgid ""
"Vibrate Android and iOS devices.\n"
"[b]Note:[/b] It needs [code]VIBRATE[/code] permission for Android at export "
"settings. iOS does not support duration."
msgstr ""
-"振动Android和iOS设备。\n"
-"[b]注æ„:[/b]在导出设置时,它需è¦Androidçš„VIBRATEæƒé™ï¼ŒiOS䏿”¯æŒæŒç»­æ—¶é—´ã€‚"
+"振动 Android 和 iOS 设备。\n"
+"[b]注æ„:[/b]在导出设置时,它需è¦[code]VIBRATE[/code]安å“çš„æƒé™ã€‚ iOS䏿”¯æŒæŒ"
+"续时间。"
#: doc/classes/Input.xml:398
msgid "Sets the mouse position to the specified vector."
@@ -35532,6 +35744,9 @@ msgid ""
"[b]Note:[/b] If you want to process the mouse's movement in this mode, you "
"need to use [member InputEventMouseMotion.relative]."
msgstr ""
+"æ•获鼠标。鼠标将被éšè—,其ä½ç½®è¢«é”定在å±å¹•的中心。\n"
+"[b]注æ„:[/b] å¦‚æžœä½ æƒ³åœ¨è¿™ç§æ¨¡å¼ä¸‹å¤„ç†é¼ æ ‡çš„移动,需è¦ä½¿ç”¨[member "
+"InputEventMouseMotion.relative]。"
#: doc/classes/Input.xml:423
msgid "Makes the mouse cursor visible but confines it to the game window."
@@ -35666,7 +35881,8 @@ msgstr "å„ç§è¾“入事件的基类。å‚阅[method Node._input]。"
#: doc/classes/InputEventScreenTouch.xml:11
#: doc/classes/InputEventWithModifiers.xml:10
msgid "https://docs.godotengine.org/en/3.4/tutorials/inputs/inputevent.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/inputs/inputevent.html"
+msgstr ""
+"https://docs.godotengine.org/zh_CN/stable/tutorials/inputs/inputevent.html"
#: doc/classes/InputEvent.xml:20
msgid ""
@@ -35686,7 +35902,6 @@ msgid "Returns a [String] representation of the event."
msgstr "返回事件的一个[String]字符串表示。"
#: doc/classes/InputEvent.xml:35
-#, fuzzy
msgid ""
"Returns a value between 0.0 and 1.0 depending on the given actions' state. "
"Useful for getting the value of events of type [InputEventJoypadMotion].\n"
@@ -35694,8 +35909,11 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events."
msgstr ""
-"æ ¹æ®ç»™å®šçš„动作状æ€ï¼Œè¿”回0.0到1.0之间的值。对于获å–[InputEventJoypadMotion]ç±»"
-"型的事件的值很有用。"
+"æ ¹æ®ç»™å®šçš„动作的状æ€ï¼Œè¿”回0.0到1.0之间的值。对于获å–[InputEventJoypadMotion]"
+"类型的事件值时,很有用。\n"
+"如果[code]exact_match[/code]是[code]false[/code],它将忽略[InputEventKey]和"
+"[InputEventMouseButton]事件的输入修饰符,以åŠ[InputEventJoypadMotion]事件的方"
+"å‘。"
#: doc/classes/InputEvent.xml:44
msgid ""
@@ -35705,9 +35923,12 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events."
msgstr ""
+"如果这个输入事件与任何类型的预定义动作匹é…,则返回[code]true[/code]。\n"
+"如果[code]exact_match[/code]是[code]false[/code],它将忽略[InputEventKey]和"
+"[InputEventMouseButton]事件的输入修饰符,以åŠ[InputEventJoypadMotion]事件的方"
+"å‘。"
#: doc/classes/InputEvent.xml:54
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the given action is being pressed (and is not "
"an echo event for [InputEventKey] events, unless [code]allow_echo[/code] is "
@@ -35717,12 +35938,14 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events."
msgstr ""
-"如果给定的动作被按下,返回[code]true[/code](对于[InputEventKey]äº‹ä»¶ä¸æ˜¯ä¸€ä¸ª"
-"回显事件,除éžå…许回显[code]allow_echo[/code]为[code]true[/code])。与"
-"[InputEventMouseMotion]或[InputEventScreenDrag]类型的事件无关。"
+"如果给定的动作被按下,则返回[code]true[/code]ï¼Œå¹¶ä¸”ä¸æ˜¯ [InputEventKey] 事件"
+"çš„å›žæ˜¾äº‹ä»¶ï¼Œé™¤éž [code]allow_echo[/code] 是 [code]true[/code]。与"
+"[InputEventMouseMotion]或[InputEventScreenDrag]类型的事件无关。\n"
+"如果[code]exact_match[/code]是[code]false[/code],它将忽略[InputEventKey]和"
+"[InputEventMouseButton]事件的输入修饰符,以åŠ[InputEventJoypadMotion]事件的方"
+"å‘。"
#: doc/classes/InputEvent.xml:63
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the given action is released (i.e. not "
"pressed). Not relevant for events of type [InputEventMouseMotion] or "
@@ -35731,9 +35954,11 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events."
msgstr ""
-"如果给定的动作被按下,返回[code]true[/code](对于[InputEventKey]äº‹ä»¶ä¸æ˜¯ä¸€ä¸ª"
-"回显事件,除éžå…许回显[code]allow_echo[/code]为[code]true[/code])。与"
-"[InputEventMouseMotion]或[InputEventScreenDrag]类型的事件无关。"
+"å¦‚æžœç»™å®šçš„åŠ¨ä½œè¢«é‡Šæ”¾ï¼Œå³æœªè¢«æŒ‰ä¸‹ï¼Œåˆ™è¿”回[code]true[/code]。与"
+"[InputEventMouseMotion]或[InputEventScreenDrag]类型的事件无关。\n"
+"如果[code]exact_match[/code]是[code]false[/code],它将忽略[InputEventKey]和"
+"[InputEventMouseButton]事件的输入修饰符,以åŠ[InputEventJoypadMotion]事件的方"
+"å‘。"
#: doc/classes/InputEvent.xml:70
msgid ""
@@ -35769,6 +35994,13 @@ msgid ""
"modifiers for [InputEventKey] and [InputEventMouseButton] events, and the "
"direction for [InputEventJoypadMotion] events."
msgstr ""
+"如果指定的 [code]event[/code] 与此事件匹é…,则返回 [code]true[/code]。仅对动"
+"作事件有效,å³é”® ([InputEventKey])ã€æŒ‰é’® ([InputEventMouseButton] 或 "
+"[InputEventJoypadButton])ã€è½´ [InputEventJoypadMotion] 或动作 "
+"([InputEventAction]) 事件。\n"
+"如果 [code]exact_match[/code] 是 [code]false[/code],它会忽略 "
+"[InputEventKey] å’Œ [InputEventMouseButton] äº‹ä»¶çš„è¾“å…¥ä¿®é¥°ç¬¦ï¼Œä»¥åŠ "
+"[InputEventJoypadMotion] 事件的方å‘。"
#: doc/classes/InputEvent.xml:99
msgid ""
@@ -35811,7 +36043,8 @@ msgstr ""
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/inputs/inputevent.html#actions"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/inputs/inputevent.html#actions"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/inputs/inputevent."
+"html#actions"
#: doc/classes/InputEventAction.xml:18
msgid "The action's name. Actions are accessed via this [String]."
@@ -35826,15 +36059,14 @@ msgstr ""
"被释放。"
#: doc/classes/InputEventAction.xml:24
-#, fuzzy
msgid ""
"The action's strength between 0 and 1. This value is considered as equal to "
"0 if pressed is [code]false[/code]. The event strength allows faking analog "
"joypad motion events, by specifying how strongly the joypad axis is bent or "
"pressed."
msgstr ""
-"该动作的强度在0和1之间。如果按下的是[code]false[/code],则该值被视为等于0。事"
-"件强度å…许通过精确控制手柄轴弯曲或按下的强度æ¥ä¼ªé€ æ¨¡æ‹Ÿæ‰‹æŸ„è¿åŠ¨äº‹ä»¶ã€‚"
+"动作的强度介于 0 和 1 之间。如果按下的是 [code]false[/code],则该值被视为等"
+"于 0。事件强度å…许通过指定手柄轴弯曲或按压的强度æ¥ä»¿é€ æ¨¡æ‹Ÿæ‰‹æŸ„è¿åŠ¨äº‹ä»¶ã€‚"
#: doc/classes/InputEventGesture.xml:4
msgid "Base class for touch control gestures."
@@ -35862,9 +36094,8 @@ msgstr ""
"[InputEventJoypadMotion]。"
#: doc/classes/InputEventJoypadButton.xml:16
-#, fuzzy
msgid "Button identifier. One of the [enum JoystickList] button constants."
-msgstr "按钮标识符。枚举[enum JoyButtonList] 按钮常é‡ä¹‹ä¸€ã€‚"
+msgstr "按钮标识符。 [enum JoystickList] 按钮常é‡ä¹‹ä¸€ã€‚"
#: doc/classes/InputEventJoypadButton.xml:19
msgid ""
@@ -35897,9 +36128,8 @@ msgid ""
msgstr "存储关于æ“纵æ†è¿åŠ¨çš„ä¿¡æ¯ã€‚一个[InputEventJoypadMotion]一次代表一个轴。"
#: doc/classes/InputEventJoypadMotion.xml:16
-#, fuzzy
msgid "Axis identifier. Use one of the [enum JoystickList] axis constants."
-msgstr "轴的标识符。使用[enum JoyAxisList]轴常数中的一个。"
+msgstr "轴标识符。使用 [enum JoystickList] 轴常é‡ä¹‹ä¸€ã€‚"
#: doc/classes/InputEventJoypadMotion.xml:19
msgid ""
@@ -35921,7 +36151,6 @@ msgid ""
msgstr "å­˜å‚¨é”®ç›˜ä¸Šçš„æŒ‰é”®ã€‚æ”¯æŒæŒ‰é”®ã€æŒ‰é”®é‡Šæ”¾å’Œ[member echo]回显事件。"
#: doc/classes/InputEventKey.xml:16
-#, fuzzy
msgid ""
"Returns the physical scancode combined with modifier keys such as "
"[code]Shift[/code] or [code]Alt[/code]. See also [InputEventWithModifiers].\n"
@@ -35930,14 +36159,13 @@ msgid ""
"get_physical_scancode_with_modifiers())[/code] where [code]event[/code] is "
"the [InputEventKey]."
msgstr ""
-"返回与修饰键(如[kbd]Shift[/kbd]或[kbd]Alt[/kbd])相结åˆçš„物ç†é”®ç ã€‚也请å‚阅"
+"返回与修改键组åˆçš„物ç†é”®ç ï¼Œä¾‹å¦‚ [code]Shift[/code] 或 [code]Alt[/code]。å‚阅"
"[InputEventWithModifiers]。\n"
-"è¦èŽ·å¾—å¸¦æœ‰ä¿®é¥°ç¬¦çš„[InputEventKey]的人类å¯è¯»è¡¨ç¤ºï¼Œä½¿ç”¨[code]OS."
-"get_keycode_string(event.get_physical_keycode_with_modifiers())[/code],其中"
-"[code]event[/code] 是[InputEventKey]。"
+"è¦èŽ·å¾—å¸¦æœ‰ä¿®é¥°ç¬¦çš„ [InputEventKey] 的人类å¯è¯»è¡¨ç¤ºï¼Œè¯·ä½¿ç”¨ [code]OS."
+"get_scancode_string(event.get_physical_scancode_with_modifiers())[/code] å…¶"
+"中 [code]event[/code] 是 [InputEventKey]。"
#: doc/classes/InputEventKey.xml:23
-#, fuzzy
msgid ""
"Returns the scancode combined with modifier keys such as [code]Shift[/code] "
"or [code]Alt[/code]. See also [InputEventWithModifiers].\n"
@@ -35946,10 +36174,10 @@ msgid ""
"get_scancode_with_modifiers())[/code] where [code]event[/code] is the "
"[InputEventKey]."
msgstr ""
-"返回与修饰键相结åˆçš„é”®ç ï¼Œå¦‚[kbd]Shift[/kbd]或[kbd]Alt[/kbd]。å¦è¯·å‚阅带修饰"
-"符的输入[InputEventWithModifiers]。\n"
-"è¦èŽ·å¾—å¸¦æœ‰ä¿®é¥°ç¬¦çš„äººç±»å¯è¯»çš„ [InputEventKey] 表示,请使用 [code]OS."
-"get_keycode_string(event.get_keycode_with_modifiers())[/code] 其中 "
+"返回与 [code]Shift[/code] 或 [code]Alt[/code] 等修饰键组åˆçš„é”®ç ã€‚å‚阅"
+"[InputEventWithModifiers]。\n"
+"è¦èŽ·å¾—å¸¦æœ‰ä¿®é¥°ç¬¦çš„ [InputEventKey] 的人类å¯è¯»è¡¨ç¤ºï¼Œè¯·ä½¿ç”¨ [code]OS."
+"get_scancode_string(event.get_scancode_with_modifiers())[/code] 其中 "
"[code]event[/code] 是 [InputEventKey]。"
#: doc/classes/InputEventKey.xml:30
@@ -35961,7 +36189,6 @@ msgstr ""
"键。"
#: doc/classes/InputEventKey.xml:33
-#, fuzzy
msgid ""
"Key physical scancode, which corresponds to one of the [enum KeyList] "
"constants. Represent the physical location of a key on the 101/102-key US "
@@ -35970,10 +36197,11 @@ msgid ""
"get_scancode_string(event.physical_scancode)[/code] where [code]event[/code] "
"is the [InputEventKey]."
msgstr ""
-"键的物ç†é”®ç ï¼Œå¯¹åº”于[enum KeyList]常é‡ä¸­çš„一个。代表101/102键美国QWERTY键盘上"
-"一个键的物ç†ä½ç½®ã€‚\n"
-"è¦èŽ·å¾—[InputEventKey]的人类å¯è¯»çš„表示,使用[code]OS.get_keycode_string(event."
-"keycode)[/code],其中[code]event[/code]是[InputEventKey]。"
+"键的物ç†ç¼–ç ï¼Œå¯¹åº”于 [enum KeyList] 常é‡ä¹‹ä¸€ã€‚表示 101/102 键美国 QWERTY 键盘"
+"上按键的物ç†ä½ç½®ã€‚\n"
+"è¦èŽ·å¾— [InputEventKey] 的人类å¯è¯»è¡¨ç¤ºï¼Œè¯·ä½¿ç”¨ [code]OS."
+"get_scancode_string(event.physical_scancode)[/code] 其中 [code]event[/code] "
+"是 [InputEventKey]。"
#: doc/classes/InputEventKey.xml:37
msgid ""
@@ -35984,7 +36212,6 @@ msgstr ""
"被释放。"
#: doc/classes/InputEventKey.xml:40
-#, fuzzy
msgid ""
"The key scancode, which corresponds to one of the [enum KeyList] constants. "
"Represent key in the current keyboard layout.\n"
@@ -35992,20 +36219,19 @@ msgid ""
"get_scancode_string(event.scancode)[/code] where [code]event[/code] is the "
"[InputEventKey]."
msgstr ""
-"键的键ç ï¼Œå¯¹åº”于[enum KeyList]常é‡ä¸­çš„一个。代表当å‰é”®ç›˜å¸ƒå±€ä¸­çš„键。\n"
-"è¦èŽ·å¾—[InputEventKey]的人类å¯è¯»çš„表示,使用[code]OS.get_keycode_string(event."
-"keycode)[/code],其中[code]event[/code]是[InputEventKey]。"
+"é”®ç ï¼Œå¯¹åº”于 [enum KeyList] 常é‡ä¹‹ä¸€ã€‚表示当å‰é”®ç›˜å¸ƒå±€ä¸­çš„键。\n"
+"è¦èŽ·å¾— [InputEventKey] 的人类å¯è¯»è¡¨ç¤ºï¼Œè¯·ä½¿ç”¨ [code]OS."
+"get_scancode_string(event.scancode)[/code] 其中 [code]event[/code] 是 "
+"[InputEventKey]。"
#: doc/classes/InputEventKey.xml:44
-#, fuzzy
msgid ""
"The key Unicode identifier (when relevant). Unicode identifiers for the "
"composite characters and complex scripts may not be available unless IME "
"input mode is active. See [method OS.set_ime_active] for more information."
msgstr ""
-"键的 Unicode 标识符(相关时)。除éžIME输入模å¼å¤„于激活状æ€ï¼Œå¦åˆ™å¯èƒ½æ— æ³•为å¤"
-"åˆå­—ç¬¦å’Œå¤æ‚脚本æä¾› Unicode 标识符。有关更多信æ¯ï¼Œè¯·å‚阅 [方法Window."
-"set_ime_active] 。"
+"Unicodeé”®æ ‡è¯†ç¬¦ï¼ˆå¦‚æžœç›¸å…³ï¼‰ã€‚é™¤éž IME 输入模å¼å¤„于激活状æ€ï¼Œå¦åˆ™å¤åˆå­—符和å¤"
+"æ‚脚本的 Unicode 标识符å¯èƒ½æ— æ³•使用。更多信æ¯å‚阅[method OS.set_ime_active]。"
#: doc/classes/InputEventMouse.xml:4
msgid "Base input event type for mouse events."
@@ -36052,7 +36278,7 @@ msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/inputs/"
"mouse_and_input_coordinates.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/inputs/"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/inputs/"
"mouse_and_input_coordinates.html"
#: doc/classes/InputEventMouseButton.xml:16
@@ -36160,7 +36386,10 @@ msgid "The drag position."
msgstr "拖拽的ä½ç½®ã€‚"
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+#, fuzzy
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr "相对于其起始ä½ç½®çš„æ‹–动ä½ç½®ã€‚"
#: doc/classes/InputEventScreenDrag.xml:25
@@ -36251,7 +36480,8 @@ msgstr ""
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/inputs/inputevent.html#inputmap"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/inputs/inputevent.html#inputmap"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/inputs/inputevent."
+"html#inputmap"
#: doc/classes/InputMap.xml:18
msgid ""
@@ -36776,6 +37006,9 @@ msgid ""
"may cause a crash. If you wish to hide it or any of its children, use their "
"[member CanvasItem.visible] property."
msgstr ""
+"返回与列表相关的[Object]ID。\n"
+"[b]警告:[/b] 这是一个必è¦çš„内部节点,移除和释放它å¯èƒ½ä¼šå¯¼è‡´å´©æºƒã€‚如果你想éš"
+"è—它或它的任æ„å­èŠ‚ç‚¹ï¼Œè¯·ä½¿ç”¨å…¶çš„ [member CanvasItem.visible] 属性。"
#: doc/classes/ItemList.xml:131
msgid "Returns [code]true[/code] if one or more items are selected."
@@ -37133,7 +37366,7 @@ msgstr ""
"è¿™å…许与嵌入页é¢äº¤äº’或调用第三方 JavaScript API。\n"
"[b]注æ„:[/b] å¯ä»¥åœ¨æž„建时ç¦ç”¨æ­¤å•例以æé«˜å®‰å…¨æ€§ã€‚默认情况下,å¯ç”¨ "
"JavaScript å•例。官方导出模æ¿ä¹Ÿå¯ç”¨äº† JavaScript å•例。有关详细信æ¯ï¼Œè¯·å‚阅文"
-"档中的 [url=https://docs.godotengine.org/en/3.4/development/compiling/"
+"档中的 [url=https://docs.godotengine.org/zh_CN/stable/development/compiling/"
"compiling_for_web.html]为 Webå¹³å°ç¼–译[/url]。"
#: doc/classes/JavaScript.xml:11
@@ -37141,7 +37374,7 @@ msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/workflow/export/"
"exporting_for_web.html#calling-javascript-from-script"
msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/workflow/export/"
+"https://docs.godotengine.org/zh_CN/stable/getting_started/workflow/export/"
"exporting_for_web.html#calling-javascript-from-script"
#: doc/classes/JavaScript.xml:19
@@ -37150,6 +37383,8 @@ msgid ""
"JavaScript. The reference must be kept until the callback happens, or it "
"won't be called at all. See [JavaScriptObject] for usage."
msgstr ""
+"创建脚本函数的引用,å¯ä»¥è¢«JavaScriptç”¨ä½œå›žè°ƒã€‚è¿™ä¸ªå¼•ç”¨å¿…é¡»ä¿æŒåˆ°å›žè°ƒå‘生为"
+"止,å¦åˆ™å®ƒå°±ä¸ä¼šè¢«è°ƒç”¨ã€‚使用方法å‚阅[JavaScriptObject]。"
#: doc/classes/JavaScript.xml:26
msgid ""
@@ -37157,6 +37392,8 @@ msgid ""
"[code]object[/code] must a valid property of the JavaScript [code]window[/"
"code]. See [JavaScriptObject] for usage."
msgstr ""
+"使用[code]new[/code]构造函数创建新的JavaScript对象。[code]object[/code]必须是"
+"JavaScript[code]window[/code]的有效属性。使用方法å‚阅[JavaScriptObject]。"
#: doc/classes/JavaScript.xml:35
msgid ""
@@ -37171,6 +37408,14 @@ msgid ""
"[b]Note:[/b] Browsers might ask the user for permission or block the "
"download if multiple download requests are made in a quick succession."
msgstr ""
+"æç¤ºç”¨æˆ·ä¸‹è½½ä¸€ä¸ªåŒ…嫿Œ‡å®š[code]buffer[/code]缓冲区的文件。该文件将具有给定的"
+"[code]name[/code]和[code]mime[/code]类型。\n"
+"[b]注æ„:[/b] æµè§ˆå™¨å¯èƒ½ä¼šæ ¹æ®æ–‡ä»¶[code]name[/code]的扩展å,覆盖所æä¾›çš„"
+"[url=https://en.wikipedia.org/wiki/Media_type]MIME类型[/url]。\n"
+"[b]注æ„:[/b] 如果[method download_buffer]䏿˜¯ç”±ç”¨æˆ·äº¤äº’调用,如点击按钮,æµ"
+"览器å¯èƒ½ä¼šé˜»æ­¢ä¸‹è½½ã€‚\n"
+"[b]注æ„:[/b] 如果快速连续æå‡ºå¤šä¸ªä¸‹è½½è¯·æ±‚,æµè§ˆå™¨å¯èƒ½ä¼šè¦æ±‚ç”¨æˆ·åŒæ„或阻止下"
+"载。"
#: doc/classes/JavaScript.xml:46
msgid ""
@@ -37195,11 +37440,13 @@ msgid ""
"which will contain the JavaScript [code]arguments[/code]. See "
"[JavaScriptObject] for usage."
msgstr ""
+"返回å¯ä»¥è¢«è„šæœ¬ä½¿ç”¨çš„JavaScript对象的接å£ã€‚这个[code]interface[/code]必须是"
+"JavaScript[code]window[/code]的一个有效属性。回调必须接å—一个[Array]傿•°ï¼Œå®ƒ"
+"将包å«JavaScript [code]arguments[/code]。å‚阅[JavaScriptObject]的用法。"
#: doc/classes/JavaScriptObject.xml:4
-#, fuzzy
msgid "A wrapper class for native JavaScript objects."
-msgstr "所有[i]scene[/i]对象的基类。"
+msgstr "本地JavaScript对象的å°è£…类。"
#: doc/classes/JavaScriptObject.xml:7
msgid ""
@@ -37239,13 +37486,47 @@ msgid ""
"[/codeblock]\n"
"[b]Note:[/b] Only available in the HTML5 platform."
msgstr ""
+"JavaScriptObject用于与通过[method JavaScript.get_interface]ã€[method "
+"JavaScript.create_object]或[method JavaScript.create_callback]检索或创建的"
+"JavaScript对象交互。\n"
+"例:\n"
+"[codeblock]\n"
+"extends Node\n"
+"\n"
+"var _my_js_callback = JavaScript.create_callback(self, \"myCallback\") # "
+"This reference must be kept\n"
+"var console = JavaScript.get_interface(\"console\")\n"
+"\n"
+"func _init():\n"
+" var buf = JavaScript.create_object(\"ArrayBuffer\", 10) # new "
+"ArrayBuffer(10)\n"
+" print(buf) # prints [JavaScriptObject:OBJECT_ID]\n"
+" var uint8arr = JavaScript.create_object(\"Uint8Array\", buf) # new "
+"Uint8Array(buf)\n"
+" uint8arr[1] = 255\n"
+" prints(uint8arr[1], uint8arr.byteLength) # prints 255 10\n"
+" console.log(uint8arr) # prints in browser console \"Uint8Array(10) [ 0, "
+"255, 0, 0, 0, 0, 0, 0, 0, 0 ]\"\n"
+"\n"
+" # Equivalent of JavaScript: Array.from(uint8arr).forEach(myCallback)\n"
+" JavaScript.get_interface(\"Array\").from(uint8arr)."
+"forEach(_my_js_callback)\n"
+"\n"
+"func myCallback(args):\n"
+" # Will be called with the parameters passed to the \"forEach\" callback\n"
+" # [0, 0, [JavaScriptObject:1173]]\n"
+" # [255, 1, [JavaScriptObject:1173]]\n"
+" # ...\n"
+" # [0, 9, [JavaScriptObject:1180]]\n"
+" print(args)\n"
+"[/codeblock]\n"
+"[b]注æ„:[/b] åªåœ¨HTML5å¹³å°ä¸Šå¯ç”¨ã€‚"
#: doc/classes/JNISingleton.xml:4
-#, fuzzy
msgid ""
"Singleton that connects the engine with Android plugins to interface with "
"native Android code."
-msgstr "在 HTML5 导出中将引擎与æµè§ˆå™¨çš„ JavaScript 上下文连接的å•例。"
+msgstr "将引擎与 Android æ’件连接起æ¥ä»¥ä¸ŽåŽŸç”Ÿ Android 代ç äº¤äº’çš„å•例。"
#: doc/classes/JNISingleton.xml:7
msgid ""
@@ -37256,14 +37537,19 @@ msgid ""
"Java_Native_Interface]Java Native Interface - Wikipedia[/url] for more "
"information."
msgstr ""
+"JNISingleton 仅在 Android 导出中实现。它用于从用 Java 或 Kotlin 编写的 "
+"Android æ’件调用方法和连接信å·ã€‚方法和信å·å¯ä»¥è¢«è°ƒç”¨å¹¶è¿žæŽ¥åˆ° JNISingleton,就"
+"好åƒå®ƒæ˜¯ä¸€ä¸ªèŠ‚ç‚¹ä¸€æ ·ã€‚æœ‰å…³æ›´å¤šä¿¡æ¯ï¼Œè¯·å‚阅 [url=https://en.wikipedia.org/"
+"wiki/Java_Native_Interface]Java Native Interface - Wikipedia[/url] Java 本机"
+"接å£ç»´åŸºç™¾ç§‘。"
#: doc/classes/JNISingleton.xml:10
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/plugins/android/android_plugin."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/plugins/android/android_plugin."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/plugins/android/"
+"android_plugin.html"
#: doc/classes/Joint.xml:4
msgid "Base class for all 3D joints."
@@ -37389,6 +37675,34 @@ msgid ""
"}\n"
"[/codeblock]"
msgstr ""
+"å°† [Variant] var 转æ¢ä¸º JSON 文本并返回结果。用于åºåˆ—化数æ®ä»¥é€šè¿‡ç½‘络存储或å‘"
+"é€ã€‚\n"
+"[b]注:[/b] JSON 规范没有定义 integer 或 float 类型,而åªå®šä¹‰äº† [i]number[/"
+"i] 类型。因此,将 Variant 转æ¢ä¸º JSON 文本会将所有数值转æ¢ä¸º [float] 类型。\n"
+"使用 [code]indent[/code] 傿•°æ¥ç¾Žè§‚地打å°è¾“出。\n"
+"[b]示例输出:[/b]\n"
+"[codeblock]\n"
+"## JSON.print(my_dictionary)\n"
+"{\"name\":\"my_dictionary\",\"version\":\"1.0.0\",\"entities\":[{\"name\":"
+"\"entity_0\",\"value\":\"value_0\"},{\"name\":\"entity_1\",\"value\":"
+"\"value_1\"}]}\n"
+"\n"
+"## JSON.print(my_dictionary, \"\\t\")\n"
+"{\n"
+" \"name\": \"my_dictionary\",\n"
+" \"version\": \"1.0.0\",\n"
+" \"entities\": [\n"
+" {\n"
+" \"name\": \"entity_0\",\n"
+" \"value\": \"value_0\"\n"
+" },\n"
+" {\n"
+" \"name\": \"entity_1\",\n"
+" \"value\": \"value_1\"\n"
+" }\n"
+" ]\n"
+"}\n"
+"[/codeblock]"
#: doc/classes/JSONParseResult.xml:4
msgid "Data class wrapper for decoded JSON."
@@ -37464,7 +37778,7 @@ msgstr ""
#: doc/classes/JSONRPC.xml:4
msgid "A helper to handle dictionaries which look like JSONRPC documents."
-msgstr ""
+msgstr "用于处ç†çœ‹èµ·æ¥åƒJSONRPC文档的字典的助手。"
#: doc/classes/JSONRPC.xml:7
msgid ""
@@ -37475,6 +37789,10 @@ msgid ""
"standard on top of [Dictionary]; you will have to convert between a "
"[Dictionary] and [JSON] with other functions."
msgstr ""
+"[url=https://www.jsonrpc.org/]JSON-RPC[/url]是一个标准,它将一个方法调用包装"
+"在一个[JSON]对象中。该对象有一个特定的结构,并标识出哪个方法被调用,该函数的"
+"傿•°ï¼Œå¹¶æºå¸¦ä¸€ä¸ªIDæ¥è·Ÿè¸ªå“应。这个类在[Dictionary]之上实现了该标准;你必须用"
+"其他函数在[Dictionary]å’Œ[JSON]之间进行转æ¢ã€‚"
#: doc/classes/JSONRPC.xml:17
msgid ""
@@ -37484,6 +37802,9 @@ msgid ""
"- [code]params[/code]: An array or dictionary of parameters being passed to "
"the method."
msgstr ""
+"返回JSON-RPC通知形å¼çš„字典。通知是一次性的信æ¯ï¼Œä¸éœ€è¦æœ‰å“应。\n"
+"- [code]method[/code]:被调用的方法的å称。\n"
+"- [code]params[/code]:ä¼ é€’ç»™è¯¥æ–¹æ³•çš„å‚æ•°çš„æ•°ç»„或字典。"
#: doc/classes/JSONRPC.xml:28
msgid ""
@@ -37496,6 +37817,11 @@ msgid ""
"- [code]id[/code]: Uniquely identifies this request. The server is expected "
"to send a response with the same ID."
msgstr ""
+"以JSON-RPC请求的形å¼è¿”回字典。请求被å‘é€åˆ°æœåŠ¡å™¨ï¼Œå¹¶æœŸæœ›å¾—åˆ°å“应。ID 字段用于"
+"æœåŠ¡å™¨æŒ‡å®šå®ƒæ­£åœ¨å“应的确切请求。\n"
+"- [code]method[/code]:被调用的方法的å称。\n"
+"- [code]params[/code]:ä¼ é€’ç»™è¯¥æ–¹æ³•çš„å‚æ•°çš„æ•°ç»„或字典。\n"
+"- [code]id[/code]:唯一标识此请求。æœåŠ¡å™¨åº”å‘é€å…·æœ‰ç›¸åŒ ID çš„å“应。"
#: doc/classes/JSONRPC.xml:39
msgid ""
@@ -37505,6 +37831,10 @@ msgid ""
"- [code]result[/code]: The return value of the function which was called.\n"
"- [code]id[/code]: The ID of the request this response is targeted to."
msgstr ""
+"当æœåŠ¡å™¨æŽ¥æ”¶å¹¶å¤„ç†è¯·æ±‚时,它应该å‘é€å“åº”ã€‚å¦‚æžœä½ ä¸æƒ³è¦å›žå¤ï¼Œé‚£ä¹ˆä½ éœ€è¦å‘é€é€š"
+"知。\n"
+"- [code]result[/code]:被调用函数的返回值。\n"
+"- [code]id[/code]:此å“应针对的请求的 ID。"
#: doc/classes/JSONRPC.xml:50
msgid ""
@@ -37514,6 +37844,11 @@ msgid ""
"- [code]message[/code]: A custom message about this error.\n"
"- [code]id[/code]: The request this error is a response to."
msgstr ""
+"创建å“应,指示先å‰çš„回å¤ä»¥æŸç§æ–¹å¼å¤±è´¥ã€‚\n"
+"- [code]code[/code]:这是哪ç§é”™è¯¯å¯¹åº”的错误代ç ã€‚å‚阅 [enum ErrorCode] 常"
+"é‡ã€‚\n"
+"- [code]message[/code]:关于此错误的自定义消æ¯ã€‚\n"
+"- [code]id[/code]:这个错误是对请求的å“应。"
#: doc/classes/JSONRPC.xml:61
msgid ""
@@ -37526,19 +37861,24 @@ msgid ""
"[code]action[/code]: The action to be run, as a Dictionary in the form of a "
"JSON-RPC request or notification."
msgstr ""
+"给定采用 JSON-RPC 请求形å¼çš„字典:解压请求并è¿è¡Œå®ƒã€‚通过查看å为 \"method\" "
+"的字段并在 JSONRPC 对象中查找等效命å的函数æ¥è§£æžæ–¹æ³•。如果找到,则调用该方"
+"法。\n"
+"è¦æ·»åŠ æ–°çš„å—æ”¯æŒæ–¹æ³•,请扩展 JSONRPC 类并在你的å­ç±»ä¸Šè°ƒç”¨ [method "
+"process_action]。\n"
+"[code]action[/code]:è¦è¿è¡Œçš„动作,作为 JSON-RPC 请求或通知形å¼çš„字典。"
#: doc/classes/JSONRPC.xml:86
msgid ""
"A method call was requested but no function of that name existed in the "
"JSONRPC subclass."
-msgstr ""
+msgstr "请求了方法调用,但 JSONRPC å­ç±»ä¸­ä¸å­˜åœ¨è¯¥å称的函数。"
#: doc/classes/KinematicBody.xml:4
msgid "Kinematic body 3D node."
msgstr "3Dè¿åŠ¨ä½“èŠ‚ç‚¹ã€‚"
#: doc/classes/KinematicBody.xml:7
-#, fuzzy
msgid ""
"Kinematic bodies are special types of bodies that are meant to be user-"
"controlled. They are not affected by physics at all; to other types of "
@@ -37555,45 +37895,42 @@ msgid ""
"while performing collision tests. This makes them really useful to implement "
"characters that collide against a world, but don't require advanced physics."
msgstr ""
-"è¿åŠ¨å­¦å®žä½“æ˜¯æ—¨åœ¨ç”±ç”¨æˆ·æŽ§åˆ¶çš„ç‰¹æ®Šç±»åž‹çš„å®žä½“ã€‚å®ƒä»¬å®Œå…¨ä¸å—物ç†å½±å“;对于其他类"
-"åž‹çš„ç‰©ä½“ï¼Œä¾‹å¦‚è§’è‰²æˆ–åˆšä½“ï¼Œè¿™äº›ä¸Žé™æ€ç‰©ä½“相åŒã€‚但是,它们有两个主è¦ç”¨é€”:\n"
+"è¿åŠ¨ä½“æ˜¯ç‰¹æ®Šç±»åž‹çš„ç‰©ä½“ï¼ŒæŒ‡åœ¨è®©ç”¨æˆ·æŽ§åˆ¶ã€‚å®ƒä»¬å®Œå…¨ä¸å—物ç†å½±å“;对于其他类型的"
+"ç‰©ä½“ï¼Œå¦‚è§’è‰²æˆ–åˆšä½“ï¼Œå®ƒä»¬ä¸Žé™æ€ä½“是一样的。然而,它们有两个主è¦ç”¨é€”。\n"
"[b]模拟è¿åŠ¨ï¼š[/b]当这些物体被手动移动时,无论是从代ç è¿˜æ˜¯ä»Ž[AnimationPlayer]"
-"([member AnimationPlayer.playback_process_mode]设置为“物ç†â€ï¼‰ï¼Œç‰©ç†å°†è‡ªåŠ¨è®¡"
-"ç®—ä¼°è®¡å®ƒä»¬çš„çº¿æ€§å’Œè§’é€Ÿåº¦ã€‚è¿™ä½¿å¾—å®ƒä»¬å¯¹äºŽç§»åŠ¨å¹³å°æˆ–å…¶ä»– AnimationPlayer 控制的"
-"å¯¹è±¡ï¼ˆå¦‚é—¨ã€æ‰“开的桥等)éžå¸¸æœ‰ç”¨ã€‚\n"
-"[b]è¿åŠ¨å­¦ç‰¹å¾ï¼š[/b] KinematicBody2D 在执行碰撞测试时也有一个用于移动物体的 "
-"API([method move_and_collide] 和 [method move_and_slide] 方法)。这使得它们"
-"对于实现与世界å‘生碰撞但ä¸éœ€è¦é«˜çº§ç‰©ç†çš„角色éžå¸¸æœ‰ç”¨ã€‚"
+"(将[member AnimationPlayer.playback_process_mode]设置为 \"physics\"),物ç†"
+"å°†è‡ªåŠ¨ä¼°ç®—å…¶çº¿æ€§å’Œè§’é€Ÿåº¦ã€‚è¿™ä½¿å¾—å®ƒä»¬å¯¹äºŽç§»åŠ¨å¹³å°æˆ–å…¶ä»–AnimationPlayer控制的物"
+"体éžå¸¸æœ‰ç”¨ï¼Œæ¯”如一扇门ã€ä¸€åº§èƒ½æ‰“开的桥等。\n"
+"[b]è¿åŠ¨åž‹è§’è‰²ï¼š[/b] KinematicBody也有一个API用于移动物体([method "
+"move_and_collide]å’Œ[method move_and_slide]æ–¹æ³•ï¼‰ï¼ŒåŒæ—¶æ‰§è¡Œç¢°æ’žæµ‹è¯•。这使得它"
+"们在实现对世界进行碰撞,但ä¸éœ€è¦é«˜çº§ç‰©ç†çš„角色时éžå¸¸æœ‰ç”¨ã€‚"
#: doc/classes/KinematicBody.xml:12 doc/classes/KinematicBody2D.xml:12
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/physics/kinematic_character_2d."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/physics/kinematic_character_2d."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/physics/"
+"kinematic_character_2d.html"
#: doc/classes/KinematicBody.xml:23
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the specified [code]axis[/code] is locked. See "
"also [member move_lock_x], [member move_lock_y] and [member move_lock_z]."
msgstr ""
-"如果指定的[code]axis[/code]被é”定,则返回[code]true[/code]。å‚阅[member "
-"axis_lock_motion_x],[member axis_lock_motion_y]和[member "
-"axis_lock_motion_z]。"
+"如果指定的 [code]axis[/code] 被é”定,则返回 [code]true[/code]。å‚阅[member "
+"move_lock_x]ã€[member move_lock_y]å’Œ[member move_lock_z]。"
#: doc/classes/KinematicBody.xml:30
-#, fuzzy
msgid ""
"Returns the floor's collision angle at the last collision point according to "
"[code]up_direction[/code], which is [code]Vector3.UP[/code] by default. This "
"value is always positive and only valid after calling [method "
"move_and_slide] and when [method is_on_floor] returns [code]true[/code]."
msgstr ""
-"返回最åŽä¸€ä¸ªç¢°æ’žç‚¹åœ°æ¿çš„线速度。仅在调用 [method move_and_slide] 或 [method "
-"move_and_slide_with_snap] 且 [method is_on_floor] 返回 [code]true[/code] åŽæœ‰"
-"效。"
+"æ ¹æ®[code]up_direction[/code]返回最åŽä¸€ä¸ªç¢°æ’žç‚¹çš„地æ¿ç¢°æ’žè§’度,默认为"
+"[code]Vector3.UP[/code]。此值始终为正值,并且仅在调用 [method "
+"move_and_slide] åŽä¸”当 [method is_on_floor] 返回 [code]true[/code] 时有效。"
#: doc/classes/KinematicBody.xml:36 doc/classes/KinematicBody2D.xml:28
msgid ""
@@ -37618,15 +37955,14 @@ msgstr ""
"效。"
#: doc/classes/KinematicBody.xml:48
-#, fuzzy
msgid ""
"Returns a [KinematicCollision], which contains information about the latest "
"collision that occurred during the last call to [method move_and_slide]."
msgstr ""
-"返回在最åŽä¸€æ¬¡è°ƒç”¨[method move_and_slide]时实体å‘ç”Ÿç¢°æ’žå’Œæ”¹å˜æ–¹å‘的次数。"
+"返回 [KinematicCollision]ï¼Œå…¶ä¸­åŒ…å«æœ‰å…³ä¸Šæ¬¡è°ƒç”¨ [method move_and_slide] 期间"
+"å‘生的最新碰撞的信æ¯ã€‚"
#: doc/classes/KinematicBody.xml:55
-#, fuzzy
msgid ""
"Returns a [KinematicCollision], which contains information about a collision "
"that occurred during the last call to [method move_and_slide] or [method "
@@ -37634,68 +37970,66 @@ msgid ""
"single call to [method move_and_slide], you must specify the index of the "
"collision in the range 0 to ([method get_slide_count] - 1)."
msgstr ""
-"返回[KinematicCollision3D],它包å«åœ¨æœ€åŽä¸€ä¸ª[method move_and_slide]调用期间å‘"
-"生的碰撞的相关信æ¯ã€‚由于在[method move_and_slide]çš„å•个调用中,物体å¯èƒ½ä¼šå‘生"
-"多次碰撞,因此必须在0到([method get_slide_count] - 1)的范围内指定碰撞的索引。"
+"返回 [KinematicCollision]ï¼Œå…¶ä¸­åŒ…å«æœ‰å…³ä¸Šæ¬¡è°ƒç”¨ [method move_and_slide] 或 "
+"[method move_and_slide_with_snap] 期间å‘生的碰撞的信æ¯ã€‚由于物体å¯ä»¥åœ¨ä¸€æ¬¡è°ƒ"
+"用 [method move_and_slide] æ—¶å‘生多次碰撞,因此你必须在 0 到 ([method "
+"get_slide_count] - 1) 范围内指定碰撞的索引。"
#: doc/classes/KinematicBody.xml:61 doc/classes/KinematicBody2D.xml:59
-#, fuzzy
msgid ""
"Returns the number of times the body collided and changed direction during "
"the last call to [method move_and_slide] or [method "
"move_and_slide_with_snap]."
msgstr ""
-"返回在最åŽä¸€æ¬¡è°ƒç”¨[method move_and_slide]时实体å‘ç”Ÿç¢°æ’žå’Œæ”¹å˜æ–¹å‘的次数。"
+"返回上次调用 [method move_and_slide] 或 [method move_and_slide_with_snap] 期"
+"间物体å‘ç”Ÿç¢°æ’žå’Œæ”¹å˜æ–¹å‘的次数。"
#: doc/classes/KinematicBody.xml:67 doc/classes/KinematicBody2D.xml:65
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the body collided with the ceiling on the last "
"call of [method move_and_slide] or [method move_and_slide_with_snap]. "
"Otherwise, returns [code]false[/code]."
msgstr ""
-"返回最åŽä¸€ä¸ªç¢°æ’žç‚¹çš„地æ¿çš„è¡¨é¢æ³•çº¿ã€‚åªæœ‰åœ¨è°ƒç”¨[method move_and_slide]或"
-"[method move_and_slide_with_snap]åŽï¼Œä»¥åŠ[method is_on_floor]返回[code]true[/"
-"code]æ—¶æ‰æœ‰æ•ˆã€‚"
+"如果在最åŽä¸€æ¬¡è°ƒç”¨ [method move_and_slide] 或 [method "
+"move_and_slide_with_snap] 时物体与天花æ¿å‘生碰撞,则返回 [code]true[/code]。"
+"å¦åˆ™ï¼Œè¿”回 [code]false[/code]。"
#: doc/classes/KinematicBody.xml:73 doc/classes/KinematicBody2D.xml:71
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the body collided with the floor on the last "
"call of [method move_and_slide] or [method move_and_slide_with_snap]. "
"Otherwise, returns [code]false[/code]."
msgstr ""
-"返回最åŽä¸€ä¸ªç¢°æ’žç‚¹åœ°æ¿çš„线速度。仅在调用 [method move_and_slide] 或 [method "
-"move_and_slide_with_snap] 且 [method is_on_floor] 返回 [code]true[/code] åŽæœ‰"
-"效。"
+"如果在最åŽä¸€æ¬¡è°ƒç”¨ [method move_and_slide] 或 [method "
+"move_and_slide_with_snap] 时物体与地æ¿å‘生碰撞,则返回 [code]true[/code]。å¦"
+"则,返回 [code]false[/code]。"
#: doc/classes/KinematicBody.xml:79 doc/classes/KinematicBody2D.xml:77
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the body collided with a wall on the last call "
"of [method move_and_slide] or [method move_and_slide_with_snap]. Otherwise, "
"returns [code]false[/code]."
msgstr ""
-"返回最åŽä¸€ä¸ªç¢°æ’žç‚¹çš„地æ¿çš„è¡¨é¢æ³•çº¿ã€‚åªæœ‰åœ¨è°ƒç”¨[method move_and_slide]或"
-"[method move_and_slide_with_snap]åŽï¼Œä»¥åŠ[method is_on_floor]返回[code]true[/"
-"code]æ—¶æ‰æœ‰æ•ˆã€‚"
+"如果在最åŽä¸€æ¬¡è°ƒç”¨ [method move_and_slide] 或 [method "
+"move_and_slide_with_snap] 时物体与墙å£å‘生碰撞,则返回 [code]true[/code]。å¦"
+"则,返回 [code]false[/code]。"
#: doc/classes/KinematicBody.xml:89
#, fuzzy
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
-"沿ç€å‘é‡[code]rel_vec[/code]ç§»åŠ¨ç‰©ä½“ã€‚å¦‚æžœç‰©ä½“ç¢°æ’žï¼Œå®ƒå°†åœæ­¢ã€‚返回"
-"[KinematicCollision2D]ï¼Œå…¶ä¸­åŒ…å«æœ‰å…³ç¢°æ’žçš„ä¿¡æ¯ã€‚\n"
-"如果[code]test_only[/code]为[code]true[/code],则物体ä¸ä¼šç§»åŠ¨ï¼Œä½†ä¼šæä¾›å¯èƒ½çš„"
-"碰撞信æ¯ã€‚"
+"沿å‘é‡ [code]rel_vec[/code] ç§»åŠ¨ç‰©ä½“ã€‚å¦‚æžœç¢°æ’žï¼Œç‰©ä½“ä¼šåœæ­¢ã€‚返回 "
+"[KinematicCollision]ï¼Œå…¶ä¸­åŒ…å«æœ‰å…³ç¢°æ’žçš„ä¿¡æ¯ã€‚\n"
+"如果 [code]test_only[/code] 是 [code]true[/code],则物体ä¸ä¼šç§»åŠ¨ï¼Œä½†ä¼šç»™å‡ºå¯"
+"能å‘生的碰撞信æ¯ã€‚"
#: doc/classes/KinematicBody.xml:102
-#, fuzzy
msgid ""
"Moves the body along a vector. If the body collides with another, it will "
"slide along the other body rather than stop immediately. If the other body "
@@ -37732,28 +38066,30 @@ msgid ""
"automatically added to the body motion. If a collision occurs due to the "
"platform's motion, it will always be first in the slide collisions."
msgstr ""
-"沿ç€å‘é‡ç§»åŠ¨ç‰©ä½“ã€‚å¦‚æžœè¯¥ä½“ä¸Žå¦ä¸€ä¸ªç‰©ä½“相撞,它将沿ç€å¦ä¸€ä¸ªç‰©ä½“æ»‘åŠ¨ï¼Œè€Œä¸æ˜¯ç«‹"
-"å³åœæ­¢ã€‚如果å¦ä¸€ä¸ªç‰©ä½“是[KinematicBody3D]或[RigidBody3D],它也会被å¦ä¸€ä¸ªç‰©ä½“"
-"çš„è¿åŠ¨æ‰€å½±å“。你å¯ä»¥ç”¨å®ƒæ¥åˆ¶ä½œç§»åŠ¨æˆ–æ—‹è½¬çš„å¹³å°ï¼Œæˆ–者让节点推动其他节点。\n"
+"沿ç€å‘é‡ç§»åŠ¨ç‰©ä½“ã€‚å¦‚æžœè¿™ä¸ªç‰©ä½“ä¸Žå¦ä¸€ä¸ªç‰©ä½“相撞,它将沿ç€å¦ä¸€ä¸ªç‰©ä½“滑动,而ä¸"
+"是立å³åœæ­¢ã€‚如果å¦ä¸€ä¸ªç‰©ä½“是[KinematicBody]或[RigidBody],它也会被å¦ä¸€ä¸ªç‰©ä½“"
+"çš„è¿åŠ¨æ‰€å½±å“。你å¯ä»¥ç”¨å®ƒæ¥åˆ¶ä½œç§»åŠ¨å’Œæ—‹è½¬çš„å¹³å°ï¼Œæˆ–者让节点推动其他节点。\n"
"这个方法应该在[method Node._physics_process]中使用,或者在被[method Node."
"_physics_process]è°ƒç”¨çš„æ–¹æ³•ä¸­ä½¿ç”¨ï¼Œå› ä¸ºå®ƒåœ¨è®¡ç®—æ—¶ï¼Œè‡ªåŠ¨ä½¿ç”¨ç‰©ç†æ­¥éª¤çš„"
-"[code]delta[/code]值。å¦åˆ™ï¼Œæ¨¡æ‹Ÿçš„è¿è¡Œé€Ÿåº¦å°†ä¸æ­£ç¡®ã€‚\n"
-"[code]linear_velocity[/code] 是速度å‘é‡ï¼Œé€šå¸¸æ˜¯ç±³/秒。与[method "
-"move_and_collide]ä¸åŒçš„æ˜¯ï¼Œä½ [i]ä¸åº”该[/i]将其乘以[code]delta[/code]--物ç†å¼•"
+"[code]delta[/code]值。å¦åˆ™ï¼Œæ¨¡æ‹Ÿå°†ä»¥ä¸æ­£ç¡®çš„速度è¿è¡Œã€‚\n"
+"[code]linear_velocity[/code]是速度å‘é‡ï¼Œé€šå¸¸æ˜¯ç±³/秒。与[method "
+"move_and_collide]ä¸åŒçš„æ˜¯ï¼Œä½ [i]ä¸åº”该[/i]把它乘以[code]delta[/code]--物ç†å¼•"
"擎会处ç†åº”用速度。\n"
"[code]up_direction[/code] 是å‘上的方å‘,用æ¥ç¡®å®šä»€ä¹ˆæ˜¯å¢™ï¼Œä»€ä¹ˆæ˜¯åœ°æ¿æˆ–天花"
-"æ¿ã€‚如果设置为默认值[code]Vector3(0, 0, 0)[/code],所有都被认为是墙。\n"
+"æ¿ã€‚如果设置为默认值[code]Vector3(0, 0, 0)[/code],一切都被认为是墙。\n"
"如果[code]stop_on_slope[/code]是[code]true[/code],当你在"
-"[code]lineal_velocity[/code]中包å«é‡åŠ›ï¼Œå¹¶ä¸”ç‰©ä½“é™æ­¢æ—¶ï¼Œç‰©ä½“å°†ä¸ä¼šåœ¨æ–œå¡ä¸Šæ»‘"
+"[code]linear_velocity[/code]中包å«é‡åŠ›å¹¶ä¸”ç‰©ä½“é™æ­¢æ—¶ï¼Œç‰©ä½“å°†ä¸ä¼šåœ¨æ–œå¡ä¸Šæ»‘"
"动。\n"
-"如果物体å‘ç”Ÿç¢°æ’žï¼Œå®ƒå°†åœ¨åœæ­¢å‰ï¼Œæœ€å¤šæ”¹å˜[code]max_slides[/code]次方å‘。\n"
-"[code]floor_max_angle[/code]是一个最大的角度(弧度),在这个角度里,一个斜å¡"
+"如果物体å‘ç”Ÿç¢°æ’žï¼Œå®ƒæœ€å¤šä¼šæ”¹å˜æ–¹å‘[code]max_slides[/code]次æ‰ä¼šåœæ­¢ã€‚\n"
+"[code]floor_max_angle[/code]是一个最大的角度(弧度),在这个角度下,一个斜å¡"
"ä»ç„¶è¢«è®¤ä¸ºæ˜¯åœ°æ¿æˆ–天花æ¿ï¼Œè€Œä¸æ˜¯å¢™å£ã€‚默认值等于45度。\n"
"如果[code]infinite_inertia[/code]是[code]true[/code],物体将能够推动"
-"[RigidBody3D]节点,但它也ä¸ä¼šæ£€æµ‹åˆ°æ‰€æœ‰ä¸Žå®ƒä»¬çš„碰撞。如果[code]false[/code],"
-"它将åƒ[RigidBody3D]节点与[StaticBody3D]一样互动。\n"
-"返回[code]linear_velocity[/code]å‘é‡ï¼Œå¦‚æžœå‘生了滑动碰撞,则旋转和/或缩放。è¦"
-"获得å‘生碰撞的详细信æ¯ï¼Œè¯·ä½¿ç”¨[method get_slide_collision]。"
+"[RigidBody]节点,但它也ä¸ä¼šæ£€æµ‹åˆ°ä»»ä½•与它们的碰撞。如果[code]false[/code],它"
+"将与[RigidBody]节点åƒ[StaticBody]一样交互。\n"
+"返回[code]linear_velocity[/code]å‘é‡ï¼Œå¦‚æžœå‘生滑动碰撞,则旋转和/或缩放。è¦èŽ·"
+"å¾—å‘生碰撞的详细信æ¯ï¼Œè¯·ä½¿ç”¨[method get_slide_collision]。\n"
+"å½“ç‰©ä½“æŽ¥è§¦åˆ°ä¸€ä¸ªç§»åŠ¨çš„å¹³å°æ—¶ï¼Œå¹³å°çš„速度会自动加入到物体的è¿åŠ¨ä¸­ã€‚å¦‚æžœç”±äºŽå¹³"
+"å°çš„è¿åŠ¨è€Œå‘生碰撞,它将始终是滑动碰撞中的第一个。"
#: doc/classes/KinematicBody.xml:124
msgid ""
@@ -37770,40 +38106,41 @@ msgstr ""
"code]或者使用[method move_and_slide]æ¥å®žçŽ°ã€‚"
#: doc/classes/KinematicBody.xml:133
-#, fuzzy
msgid ""
"Locks or unlocks the specified [code]axis[/code] depending on the value of "
"[code]lock[/code]. See also [member move_lock_x], [member move_lock_y] and "
"[member move_lock_z]."
msgstr ""
"æ ¹æ®[code]lock[/code]的值,é”å®šæˆ–è§£é”æŒ‡å®šçš„[code]axis[/code]。å‚阅[member "
-"axis_lock_motion_x], [member axis_lock_motion_y] 和 [member "
-"axis_lock_motion_z]。"
+"move_lock_x]ã€[member move_lock_y]å’Œ[member move_lock_z]。"
#: doc/classes/KinematicBody.xml:142
+#, fuzzy
msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
"在ä¸ç§»åŠ¨ç‰©ä½“çš„æƒ…å†µä¸‹æ£€æŸ¥ç¢°æ’žæƒ…å†µã€‚å®žé™…ä¸Šæ˜¯å°†èŠ‚ç‚¹çš„ä½ç½®ã€æ¯”例和旋转设置为给定"
"çš„[Transform],然åŽå°è¯•沿ç€çŸ¢é‡[code]rel_vec[/code]移动物体。如果会å‘生碰撞,"
"返回[code]true[/code]。"
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr "é”定物体的Xè½´è¿åŠ¨ã€‚"
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr "é”定物体的Yè½´è¿åŠ¨ã€‚"
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr "é”定物体的Zè½´è¿åŠ¨ã€‚"
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -37817,8 +38154,15 @@ msgid ""
"scale to avoid visible jittering, or for stability with a stack of kinematic "
"bodies."
msgstr ""
+"在è¿åŠ¨å‡½æ•°ä¸­ç”¨äºŽç¢°æ’žæ¢å¤çš„é¢å¤–è¾¹è·ï¼Œå‚阅[method move_and_collide], [method "
+"move_and_slide], [method move_and_slide_with_snap]。\n"
+"如果物体离å¦ä¸€ä¸ªç‰©ä½“至少这么近,它就会认为它们正在å‘生碰撞,并在执行实际è¿åЍ"
+"之å‰è¢«æŽ¨å¼€ã€‚\n"
+"一个较高的值æ„味ç€å®ƒåœ¨æ£€æµ‹ç¢°æ’žæ—¶æ›´åŠ çµæ´»ï¼Œè¿™æœ‰åŠ©äºŽæŒç»­æ£€æµ‹å¢™å£å’Œåœ°æ¿ã€‚\n"
+"一个较低的值迫使碰撞算法使用更精确的检测,所以它å¯ä»¥ç”¨äºŽç‰¹åˆ«éœ€è¦ç²¾ç¡®æ€§çš„æƒ…"
+"况,例如在éžå¸¸ä½Žçš„æ¯”例下é¿å…å¯è§çš„æŠ–动,或者用于è¿åЍ体堆å çš„稳定性。"
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -37829,30 +38173,29 @@ msgstr ""
"为è¿åŠ¨è®¾ç½®åŠ¨ç”»æ—¶ï¼Œä¾‹å¦‚åœ¨ç§»åŠ¨å¹³å°ä¸Šï¼Œè¿™ä¸ªåŠŸèƒ½å¾ˆæœ‰ç”¨ã€‚è¯·[b]ä¸è¦[/b]与 [method "
"move_and_slide] 或 [method move_and_collide] 函数一起使用。"
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
-msgstr ""
+msgstr "é”定物体的Xè½´è¿åŠ¨ã€‚å·²è¢«åºŸå¼ƒçš„[member axis_lock_motion_x]的别å。"
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
-msgstr ""
+msgstr "é”定物体的Yè½´è¿åŠ¨ã€‚å·²è¢«åºŸå¼ƒçš„[member axis_lock_motion_y]的别å。"
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
-msgstr ""
+msgstr "é”定物体的Zè½´è¿åŠ¨ã€‚å·²è¢«åºŸå¼ƒçš„[member axis_lock_motion_z]的别å。"
#: doc/classes/KinematicBody2D.xml:4
msgid "Kinematic body 2D node."
msgstr "2Dè¿åŠ¨ä½“èŠ‚ç‚¹ã€‚"
#: doc/classes/KinematicBody2D.xml:7
-#, fuzzy
msgid ""
"Kinematic bodies are special types of bodies that are meant to be user-"
"controlled. They are not affected by physics at all; to other types of "
@@ -37869,47 +38212,45 @@ msgid ""
"while performing collision tests. This makes them really useful to implement "
"characters that collide against a world, but don't require advanced physics."
msgstr ""
-"è¿åŠ¨å­¦å®žä½“æ˜¯æ—¨åœ¨ç”±ç”¨æˆ·æŽ§åˆ¶çš„ç‰¹æ®Šç±»åž‹çš„å®žä½“ã€‚å®ƒä»¬å®Œå…¨ä¸å—物ç†å½±å“;对于其他类"
-"åž‹çš„ç‰©ä½“ï¼Œä¾‹å¦‚è§’è‰²æˆ–åˆšä½“ï¼Œè¿™äº›ä¸Žé™æ€ç‰©ä½“相åŒã€‚但是,它们有两个主è¦ç”¨é€”:\n"
-"[b]模拟è¿åŠ¨ï¼š[/b]当这些物体被手动移动时,无论是从代ç è¿˜æ˜¯ä»Ž[AnimationPlayer]"
-"([member AnimationPlayer.playback_process_mode]设置为“物ç†â€ï¼‰ï¼Œç‰©ç†å°†è‡ªåŠ¨è®¡"
-"ç®—ä¼°è®¡å®ƒä»¬çš„çº¿æ€§å’Œè§’é€Ÿåº¦ã€‚è¿™ä½¿å¾—å®ƒä»¬å¯¹äºŽç§»åŠ¨å¹³å°æˆ–å…¶ä»– AnimationPlayer 控制的"
-"å¯¹è±¡ï¼ˆå¦‚é—¨ã€æ‰“开的桥等)éžå¸¸æœ‰ç”¨ã€‚\n"
-"[b]è¿åŠ¨å­¦ç‰¹å¾ï¼š[/b] KinematicBody2D 在执行碰撞测试时也有一个用于移动物体的 "
-"API([method move_and_collide] 和 [method move_and_slide] 方法)。这使得它们"
-"对于实现与世界å‘生碰撞但ä¸éœ€è¦é«˜çº§ç‰©ç†çš„角色éžå¸¸æœ‰ç”¨ã€‚"
+"è¿åŠ¨ä½“æ˜¯ç‰¹æ®Šç±»åž‹çš„ç‰©ä½“ï¼Œæ—¨åœ¨è®©ç”¨æˆ·æŽ§åˆ¶ã€‚å®ƒä»¬å®Œå…¨ä¸å—物ç†å½±å“;对于其他类型的"
+"ç‰©ä½“ï¼Œå¦‚è§’è‰²æˆ–åˆšä½“ï¼Œå®ƒä»¬ä¸Žé™æ€ä½“一样。然而,它们有两个主è¦ç”¨é€”:\n"
+"[b]模拟è¿åŠ¨ï¼š[/b]当这些物体被手动移动时,无论是从代ç è¿˜æ˜¯ä»Ž"
+"[AnimationPlayer],将[member AnimationPlayer.playback_process_mode]设置为 "
+"\"physics\",物ç†å°†è‡ªåŠ¨è®¡ç®—å…¶çº¿æ€§å’Œè§’é€Ÿåº¦çš„ä¼°å€¼ã€‚è¿™ä½¿å¾—å®ƒä»¬å¯¹äºŽç§»åŠ¨å¹³å°æˆ–å…¶ä»–"
+"AnimationPlayer控制的物体éžå¸¸æœ‰ç”¨ï¼Œæ¯”如一扇门ã€ä¸€åº§èƒ½æ‰“开的桥等。\n"
+"[b]è¿åŠ¨åž‹è§’è‰²ï¼š[/b] KinematicBody2D也有一个API用于移动物体([method "
+"move_and_collide]å’Œ[method move_and_slide]æ–¹æ³•ï¼‰ï¼ŒåŒæ—¶è¿›è¡Œç¢°æ’žæµ‹è¯•。这使得它"
+"们在实现对世界进行碰撞,但ä¸éœ€è¦é«˜çº§ç‰©ç†çš„角色时éžå¸¸æœ‰ç”¨ã€‚"
#: doc/classes/KinematicBody2D.xml:13
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/physics/"
"using_kinematic_body_2d.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/physics/"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/physics/"
"using_kinematic_body_2d.html"
#: doc/classes/KinematicBody2D.xml:22
-#, fuzzy
msgid ""
"Returns the floor's collision angle at the last collision point according to "
"[code]up_direction[/code], which is [code]Vector2.UP[/code] by default. This "
"value is always positive and only valid after calling [method "
"move_and_slide] and when [method is_on_floor] returns [code]true[/code]."
msgstr ""
-"返回最åŽä¸€ä¸ªç¢°æ’žç‚¹åœ°æ¿çš„线速度。仅在调用 [method move_and_slide] 或 [method "
-"move_and_slide_with_snap] 且 [method is_on_floor] 返回 [code]true[/code] åŽæœ‰"
-"效。"
+"æ ¹æ®[code]up_direction[/code]返回最åŽä¸€ä¸ªç¢°æ’žç‚¹çš„地æ¿ç¢°æ’žè§’度,默认为"
+"[code]Vector2.UP[/code]。此值始终为正值,并且仅在调用 [method "
+"move_and_slide] åŽä¸”当 [method is_on_floor] 返回 [code]true[/code] 时有效。"
#: doc/classes/KinematicBody2D.xml:40
-#, fuzzy
msgid ""
"Returns a [KinematicCollision2D], which contains information about the "
"latest collision that occurred during the last call to [method "
"move_and_slide]."
msgstr ""
-"返回在最åŽä¸€æ¬¡è°ƒç”¨[method move_and_slide]时实体å‘ç”Ÿç¢°æ’žå’Œæ”¹å˜æ–¹å‘的次数。"
+"返回[KinematicCollision2D],它包å«åœ¨æœ€åŽä¸€æ¬¡è°ƒç”¨[method move_and_slide]æ—¶å‘生"
+"的最新碰撞信æ¯ã€‚"
#: doc/classes/KinematicBody2D.xml:47
-#, fuzzy
msgid ""
"Returns a [KinematicCollision2D], which contains information about a "
"collision that occurred during the last call to [method move_and_slide] or "
@@ -37923,22 +38264,24 @@ msgid ""
" print(\"Collided with: \", collision.collider.name)\n"
"[/codeblock]"
msgstr ""
-"返回一个[KinematicCollision2D],它包å«äº†åœ¨æœ€åŽä¸€æ¬¡[method move_and_slide]调用"
-"æ—¶å‘生的碰撞的信æ¯ã€‚由于在一次对[method move_and_slide]的调用中,身体å¯ä»¥å‘生"
-"多次碰撞,所以你必须在0到([method get_slide_count] - 1)的范围内指定碰撞的索"
-"引。\n"
-"[b]使用实例:[/b]\n"
+"返回 [KinematicCollision2D]ï¼Œå…¶ä¸­åŒ…å«æœ‰å…³ä¸Šæ¬¡è°ƒç”¨ [method move_and_slide] 或 "
+"[method move_and_slide_with_snap] 期间å‘生的碰撞的信æ¯ã€‚由于物体å¯ä»¥åœ¨ä¸€æ¬¡è°ƒ"
+"用 [method move_and_slide] æ—¶å‘生多次碰撞,因此你必须在 0 到 ([method "
+"get_slide_count] - 1) 范围内指定碰撞的索引。\n"
+"[b]用法示例:[/b]\n"
"[codeblock]\n"
"for i in get_slide_count():\n"
" var collision = get_slide_collision(i)\n"
-" print(\"Collided with: \" , collision.collider.name)\n"
+" print(\"Collided with: \", collision.collider.name)\n"
"[/codeblock]"
#: doc/classes/KinematicBody2D.xml:87
+#, fuzzy
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -37948,7 +38291,6 @@ msgstr ""
"碰撞信æ¯ã€‚"
#: doc/classes/KinematicBody2D.xml:100
-#, fuzzy
msgid ""
"Moves the body along a vector. If the body collides with another, it will "
"slide along the other body rather than stop immediately. If the other body "
@@ -37985,29 +38327,32 @@ msgid ""
"automatically added to the body motion. If a collision occurs due to the "
"platform's motion, it will always be first in the slide collisions."
msgstr ""
-"沿å‘é‡ç§»åŠ¨ç‰©ä½“ã€‚å¦‚æžœç‰©ä½“ä¸Žå¦ä¸€ä¸ªç‰©ä½“碰撞,它会沿ç€å¦ä¸€ä¸ªç‰©ä½“æ»‘åŠ¨è€Œä¸æ˜¯ç«‹å³åœ"
-"止。如果å¦ä¸€ä¸ªç‰©ä½“是[KinematicBody2D]或[RigidBody2D],它也会å—到å¦ä¸€ä¸ªç‰©ä½“çš„"
-"è¿åŠ¨çš„å½±å“。你å¯ä»¥ä½¿ç”¨å®ƒæ¥åˆ¶ä½œç§»åŠ¨æˆ–æ—‹è½¬å¹³å°ï¼Œæˆ–者让节点推动其他节点。\n"
-"此方法应在 [method Node._physics_process](或者在被[method Node."
-"_physics_process]è°ƒç”¨çš„æ–¹æ³•ï¼‰ä¸­ä½¿ç”¨å› ä¸ºå®ƒåœ¨è®¡ç®—ä¸­è‡ªåŠ¨ä½¿ç”¨ç‰©ç†æ­¥éª¤çš„"
-"[code]delta[/code]值。å¦åˆ™ï¼Œæ¨¡æ‹Ÿå°†ä»¥é”™è¯¯çš„速度è¿è¡Œã€‚\n"
-"[code]linear_velocity[/code]是线速度å‘é‡ï¼Œå•使˜¯åƒç´ æ¯ç§’。与[method "
-"move_and_collide]ä¸åŒçš„æ˜¯ï¼Œä½ [i]ä¸åº”该[/i]将它乘以[code]delta[/code]——物ç†å¼•"
+"沿ç€å‘é‡ç§»åŠ¨ç‰©ä½“ã€‚å¦‚æžœè¿™ä¸ªç‰©ä½“ä¸Žå¦ä¸€ä¸ªç‰©ä½“相撞,它将沿ç€å¦ä¸€ä¸ªç‰©ä½“滑动,而ä¸"
+"是立å³åœæ­¢ã€‚如果å¦ä¸€ä¸ªç‰©ä½“是[KinematicBody2D]或[RigidBody2D],它也会被å¦ä¸€ä¸ª"
+"物体的è¿åŠ¨æ‰€å½±å“。你å¯ä»¥ç”¨å®ƒæ¥åˆ¶ä½œç§»åŠ¨å’Œæ—‹è½¬çš„å¹³å°ï¼Œæˆ–者让节点推动其他节"
+"点。\n"
+"这个方法应该在[method Node._physics_process]中使用,或者在被[method Node."
+"_physics_process]è°ƒç”¨çš„æ–¹æ³•ä¸­ä½¿ç”¨ï¼Œå› ä¸ºå®ƒåœ¨è®¡ç®—æ—¶è‡ªåŠ¨ä½¿ç”¨ç‰©ç†æ­¥éª¤çš„"
+"[code]delta[/code]值。å¦åˆ™ï¼Œæ¨¡æ‹Ÿå°†ä»¥ä¸æ­£ç¡®çš„速度è¿è¡Œã€‚\n"
+"[code]linear_velocity[/code]是速度å‘é‡ï¼Œå•使˜¯åƒç´ æ¯ç§’。与[method "
+"move_and_collide]ä¸åŒçš„æ˜¯ï¼Œä½ [i]ä¸åº”该[/i]将它乘以[code]delta[/code]--物ç†å¼•"
"擎会处ç†åº”用速度。\n"
-"[code]up_direction[/code]是å‘上的方å‘,用æ¥åˆ¤æ–­ä»€ä¹ˆæ˜¯å¢™ï¼Œä»€ä¹ˆæ˜¯åœ°æ¿æˆ–天花æ¿ã€‚"
-"如果设置为默认值 [code]Vector2(0, 0)[/code],则一切都被视为墙。这对于俯视视角"
-"(topdown )的游æˆå¾ˆæœ‰ç”¨ã€‚\n"
-"如果 [code]stop_on_slope[/code] 是 [code]true[/code],当你在"
-"[code]linear_velocity[/code]中包å«é‡åŠ›å¹¶ä¸”ç‰©ä½“é™æ­¢æ—¶ï¼Œç‰©ä½“å°†ä¸ä¼šåœ¨æ–œå¡ä¸Šæ»‘"
+"[code]up_direction[/code] 是å‘上的方å‘,用æ¥ç¡®å®šä»€ä¹ˆæ˜¯å¢™ï¼Œä»€ä¹ˆæ˜¯åœ°æ¿æˆ–天花"
+"æ¿ã€‚如果设置为默认值[code]Vector2(0, 0)[/code],一切都被认为是墙。这对于自上"
+"而下的游æˆå¾ˆæœ‰ç”¨ã€‚\n"
+"如果[code]stop_on_slope[/code]是[code]true[/code],当你在"
+"[code]linear_velocity[/code]中包å«é‡åŠ›å¹¶ä¸”ç‰©ä½“é™æ­¢æ—¶ï¼Œç‰©ä½“å°±ä¸ä¼šåœ¨æ–œå¡ä¸Šæ»‘"
"动。\n"
-"如果物体å‘ç”Ÿç¢°æ’žï¼Œå®ƒå°†åœ¨åœæ­¢ä¹‹å‰æœ€å¤šæ”¹å˜æ–¹å‘ [code]max_slides[/code] 次。\n"
-"[code]floor_max_angle[/code] 是最大角度(以弧度为å•ä½ï¼‰ï¼Œåœ¨è¿™ä¸ªè§’度下,一个斜"
-"å¡ä»ç„¶è¢«è®¤ä¸ºæ˜¯åœ°æ¿ï¼ˆæˆ–天花æ¿ï¼‰ï¼Œè€Œä¸æ˜¯å¢™å£ã€‚默认值等于45度。\n"
-"如果 [code]infinite_inertia[/code] 无穷惯性是 [code]true[/code],物体将能够推"
-"动 [RigidBody2D] 节点,但它也ä¸ä¼šæ£€æµ‹åˆ°ä¸Žå®ƒä»¬çš„任何碰撞。如果 [code]false[/"
-"code],它将与 [RigidBody2D] 节点交互,就åƒä¸Ž [StaticBody2D] 一样。\n"
-"返回 [code]linear_velocity[/code] å‘é‡ï¼Œå¦‚æžœå‘生滑动碰撞,则旋转和/或缩放。è¦"
-"èŽ·å–æœ‰å…³å‘生的冲çªçš„详细信æ¯ï¼Œè¯·ä½¿ç”¨ [method get_slide_collision]。"
+"如果物体å‘ç”Ÿç¢°æ’žï¼Œå®ƒæœ€å¤šä¼šæ”¹å˜æ–¹å‘[code]max_slides[/code]次æ‰ä¼šåœæ­¢ã€‚\n"
+"[code]floor_max_angle[/code]是一个最大的角度(弧度),在这个角度下,一个斜å¡"
+"ä»ç„¶è¢«è®¤ä¸ºæ˜¯åœ°æ¿æˆ–天花æ¿ï¼Œè€Œä¸æ˜¯å¢™ã€‚默认值等于45度。\n"
+"如果[code]infinite_inertia[/code]是[code]true[/code],物体将能够推动"
+"[RigidBody2D]节点,但它也ä¸ä¼šæ£€æµ‹åˆ°ä»»ä½•与它们的碰撞。如果[code]false[/code],"
+"它将与[RigidBody2D]节点åƒ[StaticBody2D]一样交互。\n"
+"返回[code]linear_velocity[/code]å‘é‡ï¼Œå¦‚æžœå‘生滑动碰撞,则旋转和/或缩放。è¦èŽ·"
+"å¾—å‘生碰撞的详细信æ¯ï¼Œè¯·ä½¿ç”¨[method get_slide_collision]。\n"
+"å½“ç‰©ä½“æŽ¥è§¦åˆ°ä¸€ä¸ªç§»åŠ¨çš„å¹³å°æ—¶ï¼Œå¹³å°çš„速度会自动加入到物体的è¿åŠ¨ä¸­ã€‚å¦‚æžœç”±äºŽå¹³"
+"å°çš„è¿åŠ¨è€Œå‘生碰撞,它将始终是滑动碰撞中的第一个。"
#: doc/classes/KinematicBody2D.xml:122
msgid ""
@@ -38024,23 +38369,24 @@ msgstr ""
"或使用 [method move_and_slide]æ¥åšåˆ°è¿™ä¸€ç‚¹ã€‚"
#: doc/classes/KinematicBody2D.xml:132
+#, fuzzy
msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
"在ä¸ç§»åŠ¨ç‰©ä½“çš„æƒ…å†µä¸‹æ£€æŸ¥ç¢°æ’žã€‚å°†èŠ‚ç‚¹çš„åæ ‡ï¼Œæ¯”例和旋转虚拟地设置为给定"
"[Transform2D]çš„åæ ‡ï¼Œæ¯”例和旋转,然åŽå°è¯•沿ç€å‘é‡[code]rel_vec[/code]移动物"
"体。如果å‘生碰撞,则返回[code]true[/code]。"
#: doc/classes/KinematicCollision.xml:4
-#, fuzzy
msgid "Collision data for [KinematicBody] collisions."
-msgstr "[KinematicBody2D] 动æ€ç‰©ä½“2D碰撞器碰撞的数æ®ã€‚"
+msgstr "[KinematicBody] 碰撞的碰撞数æ®ã€‚"
#: doc/classes/KinematicCollision.xml:7
-#, fuzzy
msgid ""
"Contains collision data for [KinematicBody] collisions. When a "
"[KinematicBody] is moved using [method KinematicBody.move_and_collide], it "
@@ -38050,17 +38396,19 @@ msgid ""
"colliding object, the remaining motion, and the collision position. This "
"information can be used to calculate a collision response."
msgstr ""
-"包å«[KinematicBody2D]碰撞的碰撞数æ®ã€‚当使用 [method KinematicBody2D."
-"move_and_collide] 移动[KinematicBody2D]时,如果检测到与å¦ä¸€ä¸ªç‰©ä½“的碰撞,它将"
-"åœæ­¢ã€‚如果检测到碰撞,则返回KinematicCollision2D对象。\n"
-"è¯¥å¯¹è±¡åŒ…å«æœ‰å…³ç¢°æ’žçš„ä¿¡æ¯ï¼ŒåŒ…括碰撞对象,剩余è¿åŠ¨å’Œç¢°æ’žåæ ‡ã€‚该信æ¯å¯ç”¨äºŽè®¡ç®—"
-"碰撞å“应。"
+"包å«[KinematicBody]碰撞的碰撞数æ®ã€‚当[KinematicBody]使用[method "
+"KinematicBody.move_and_collide]移动时,如果它检测到与å¦ä¸€ä¸ªç‰©ä½“的碰撞就会åœ"
+"止。如果检测到碰撞,将返回一个KinematicCollision对象。\n"
+"这个对象包å«å…³äºŽç¢°æ’žçš„ä¿¡æ¯ï¼ŒåŒ…括碰撞的物体ã€å‰©ä½™çš„è¿åŠ¨å’Œç¢°æ’žçš„ä½ç½®ã€‚这些信æ¯"
+"å¯ä»¥ç”¨æ¥è®¡ç®—碰撞å“应。"
#: doc/classes/KinematicCollision.xml:17
msgid ""
"The collision angle according to [code]up_direction[/code], which is "
"[code]Vector3.UP[/code] by default. This value is always positive."
msgstr ""
+"æ ¹æ®[code]up_direction[/code]的碰撞角度,默认为[code]Vector3.UP[/code]。这个"
+"值总是为正。"
#: doc/classes/KinematicCollision.xml:23
#: doc/classes/KinematicCollision2D.xml:23
@@ -38079,9 +38427,8 @@ msgid "The colliding body's metadata. See [Object]."
msgstr "碰撞体的元数æ®ã€‚å‚阅[Object]。"
#: doc/classes/KinematicCollision.xml:32
-#, fuzzy
msgid "The colliding body's [RID] used by the [PhysicsServer]."
-msgstr "碰撞体的形状。"
+msgstr "[PhysicsServer] 使用的碰撞体的 [RID]。"
#: doc/classes/KinematicCollision.xml:35
#: doc/classes/KinematicCollision2D.xml:35
@@ -38089,9 +38436,8 @@ msgid "The colliding body's shape."
msgstr "碰撞体的形状。"
#: doc/classes/KinematicCollision.xml:38
-#, fuzzy
msgid "The colliding shape's index. See [CollisionObject]."
-msgstr "碰撞形状的索引。å‚阅[CollisionObject2D]。"
+msgstr "碰撞形状的索引。å‚阅[CollisionObject]。"
#: doc/classes/KinematicCollision.xml:41
#: doc/classes/KinematicCollision2D.xml:41
@@ -38148,10 +38494,12 @@ msgid ""
"The collision angle according to [code]up_direction[/code], which is "
"[code]Vector2.UP[/code] by default. This value is always positive."
msgstr ""
+"æ ¹æ®[code]up_direction[/code]的碰撞角度,默认为[code]Vector2.UP[/code]。这个"
+"值总是为正。"
#: doc/classes/KinematicCollision2D.xml:32
msgid "The colliding body's [RID] used by the [Physics2DServer]."
-msgstr ""
+msgstr "[Physics2DServer] 使用的碰撞体的 [RID]。"
#: doc/classes/KinematicCollision2D.xml:38
msgid "The colliding shape's index. See [CollisionObject2D]."
@@ -38166,7 +38514,6 @@ msgstr ""
"[RichTextLabel]。"
#: doc/classes/Label.xml:7
-#, fuzzy
msgid ""
"Label displays plain text on the screen. It gives you control over the "
"horizontal and vertical alignment and can wrap the text inside the node's "
@@ -38181,13 +38528,15 @@ msgid ""
"emoji) are [i]not[/i] supported on Windows. They will display as unknown "
"characters instead. This will be resolved in Godot 4.0."
msgstr ""
-"Label标签在å±å¹•上显示纯文本。你å¯ä»¥æŽ§åˆ¶æ°´å¹³å’Œåž‚ç›´çš„å¯¹é½æ–¹å¼ï¼Œå¹¶å¯ä»¥å°†æ–‡æœ¬åŒ…裹"
-"åœ¨èŠ‚ç‚¹çš„è¾¹ç•ŒçŸ©å½¢å†…ã€‚å®ƒä¸æ”¯æŒç²—ä½“ã€æ–œä½“或其他格å¼åŒ–,对于这点,请使用"
-"[RichTextLabel]代替。\n"
-"[b]注æ„:[/b] 与大多数其他[Control]相å,Labelçš„[member Control.mouse_filter]"
-"默认为[constant Control.MOUSE_FILTER_IGNORE],å³ï¼Œå®ƒå¯¹é¼ æ ‡è¾“入事件没有å应。"
-"è¿™æ„å‘³ç€æ ‡ç­¾ä¸ä¼šæ˜¾ç¤ºä»»ä½•é…置的[member Control.hint_tooltip],除éžä½ æ”¹å˜å…¶é¼ æ ‡"
-"过滤器。"
+"标签在å±å¹•上显示纯文本。å¯ä»¥æŽ§åˆ¶æ°´å¹³å’Œåž‚ç›´çš„å¯¹é½æ–¹å¼ï¼Œå¹¶ä¸”å¯ä»¥å°†æ–‡æœ¬åŒ…裹在节"
+"ç‚¹çš„è¾¹ç•ŒçŸ©å½¢å†…ã€‚å®ƒä¸æ”¯æŒç²—ä½“ã€æ–œä½“或其他格å¼ã€‚若使用,请改用 "
+"[RichTextLabel]。\n"
+"[b]注æ„:[/b] 与大多数其他 [Control] ä¸åŒï¼ŒLabel çš„ [member Control."
+"mouse_filter] 默认为 [constant Control.MOUSE_FILTER_IGNORE],å³å®ƒä¸å“应鼠标输"
+"入事件。这æ„å‘³ç€æ ‡ç­¾ä¸ä¼šæ˜¾ç¤ºä»»ä½•å·²é…置的 [member Control.hint_tooltip],除éž"
+"更改其鼠标过滤器。\n"
+"[b]注æ„:[/b] [code]0xffff[/code] 之åŽçš„ Unicode 字符在 Windows 上 [i]䏿”¯æŒ "
+"[/i],例如大多数表情符å·ï¼Œå®ƒä»¬å°†æ˜¾ç¤ºä¸ºæœªçŸ¥å­—符。这将在 Godot 4.0 中解决。"
#: doc/classes/Label.xml:18
msgid "Returns the amount of lines of text the Label has."
@@ -38227,13 +38576,11 @@ msgstr ""
"它将自动改å˜å…¶é«˜åº¦ä»¥æ˜¾ç¤ºæ‰€æœ‰çš„æ–‡æœ¬ã€‚"
#: doc/classes/Label.xml:48
-#, fuzzy
msgid ""
"If [code]true[/code], the Label only shows the text that fits inside its "
"bounding rectangle and will clip text horizontally."
msgstr ""
-"如果[code]true[/code]ï¼Œæ ‡ç­¾åªæ˜¾ç¤ºé€‚åˆå…¶è¾¹ç•ŒçŸ©å½¢çš„æ–‡æœ¬ã€‚它还å…许您自由地缩å°èŠ‚"
-"点。"
+"如果 [code]true[/code],则标签仅显示适åˆå…¶è¾¹ç•ŒçŸ©å½¢çš„æ–‡æœ¬ï¼Œå¹¶å°†æ°´å¹³å‰ªåˆ‡æ–‡æœ¬ã€‚"
#: doc/classes/Label.xml:51
msgid ""
@@ -38344,22 +38691,21 @@ msgid "The vertical offset of the text's shadow."
msgstr "文本阴影的垂直å移。"
#: doc/classes/LargeTexture.xml:4
-#, fuzzy
msgid ""
"[i]Deprecated.[/i] A [Texture] capable of storing many smaller textures with "
"offsets."
-msgstr "[Texture2D] 能够存储许多带有åç§»é‡çš„较å°çº¹ç†ã€‚"
+msgstr "[i]已弃用。[/i] 一ç§èƒ½å¤Ÿå­˜å‚¨è®¸å¤šå¸¦æœ‰åç§»é‡çš„较å°çº¹ç†çš„ [Texture]。"
#: doc/classes/LargeTexture.xml:7
-#, fuzzy
msgid ""
"[i]Deprecated (will be removed in Godot 4.0).[/i] A [Texture] capable of "
"storing many smaller textures with offsets.\n"
"You can dynamically add pieces ([Texture]s) to this [LargeTexture] using "
"different offsets."
msgstr ""
-"[Texture2D]能够存储许多带有åç§»é‡çš„å°çº¹ç†ã€‚\n"
-"ä½ å¯ä»¥ä½¿ç”¨ä¸åŒçš„åç§»é‡åЍæ€åœ°å°†ç¢Žç‰‡[Texture2D]添加到这个[LargeTexture]中。"
+"[i] 已弃用(将在 Godot 4.0 中移除)。 [/i] 一ç§èƒ½å¤Ÿå­˜å‚¨è®¸å¤šå…·æœ‰åç§»é‡çš„较å°çº¹"
+"ç†çš„ [Texture]。\n"
+"ä½ å¯ä»¥ä½¿ç”¨ä¸åŒçš„åç§»é‡å‘æ­¤ [LargeTexture] åŠ¨æ€æ·»åŠ [Texture]片段。"
#: doc/classes/LargeTexture.xml:18
msgid ""
@@ -38382,9 +38728,8 @@ msgid "Returns the offset of the piece with the index [code]idx[/code]."
msgstr "返回索引为[code]idx[/code]的片段的åç§»é‡ã€‚"
#: doc/classes/LargeTexture.xml:44
-#, fuzzy
msgid "Returns the [Texture] of the piece with the index [code]idx[/code]."
-msgstr "返回索引为[code]idx[/code]的片段的[Texture2D]。"
+msgstr "返回索引为 [code]idx[/code] 的片段的 [Texture]。"
#: doc/classes/LargeTexture.xml:52
msgid ""
@@ -38393,12 +38738,11 @@ msgid ""
msgstr "将索引为[code]idx[/code]的片段的åç§»é‡è®¾ç½®ä¸º[code]ofs[/code]。"
#: doc/classes/LargeTexture.xml:60
-#, fuzzy
msgid ""
"Sets the [Texture] of the piece with index [code]idx[/code] to "
"[code]texture[/code]."
msgstr ""
-"将索引为[code]idx[/code]的片段的[Texture2D]设置为[code]texture[/code]。"
+"将索引为 [code]idx[/code] 的片段的 [Texture] 设置为 [code]texture[/code]。"
#: doc/classes/LargeTexture.xml:67
msgid "Sets the size of this [LargeTexture]."
@@ -38409,25 +38753,22 @@ msgid "Provides a base class for different kinds of light nodes."
msgstr "为ä¸åŒç±»åž‹çš„光节点æä¾›åŸºç±»ã€‚"
#: doc/classes/Light.xml:7
-#, fuzzy
msgid ""
"Light is the [i]abstract[/i] base class for light nodes. As it can't be "
"instanced, it shouldn't be used directly. Other types of light nodes inherit "
"from it. Light contains the common variables and parameters used for "
"lighting."
msgstr ""
-"Light3D是光节点的[i]abstract[/i]抽象基类。因为它ä¸èƒ½è¢«å®žä¾‹åŒ–,所以ä¸åº”该被直"
-"接使用。其他类型的ç¯å…‰èŠ‚ç‚¹éƒ½æ˜¯ç»§æ‰¿è‡ªå®ƒã€‚Light3D包å«ç”¨äºŽç…§æ˜Žçš„常è§å˜é‡å’Œå‚数。"
+"Light是ç¯å…‰èŠ‚ç‚¹çš„[i]抽象[/i]基类。它ä¸èƒ½è¢«å®žä¾‹åŒ–,所以它ä¸åº”该被直接使用。其"
+"他类型的ç¯å…‰èŠ‚ç‚¹éƒ½æ˜¯ç»§æ‰¿è‡ªå®ƒã€‚ç¯å…‰åŒ…å«ç”¨äºŽç…§æ˜Žçš„常用å˜é‡å’Œå‚数。"
#: doc/classes/Light.xml:18
-#, fuzzy
msgid "Returns the value of the specified [enum Light.Param] parameter."
-msgstr "返回指定的[enum Light3D.Param]傿•°çš„值。"
+msgstr "返回指定的[enum Light.Param]傿•°çš„值。"
#: doc/classes/Light.xml:26
-#, fuzzy
msgid "Sets the value of the specified [enum Light.Param] parameter."
-msgstr "设置指定的[enum Light3D.Param]傿•°çš„值。"
+msgstr "设置指定的[enum Light.Param]傿•°çš„值。"
#: doc/classes/Light.xml:32
msgid ""
@@ -38452,21 +38793,21 @@ msgid "The light will affect objects in the selected layers."
msgstr "ç¯å…‰å°†å½±å“所选图层中的对象。"
#: doc/classes/Light.xml:44
-#, fuzzy
msgid ""
"The light's strength multiplier (this is not a physical unit). For "
"[OmniLight] and [SpotLight], changing this value will only change the light "
"color's intensity, not the light's radius."
msgstr ""
-"å…‰çš„å¼ºåº¦ä¹˜æ•°ï¼ˆè¿™ä¸æ˜¯ä¸€ä¸ªç‰©ç†å•ä½ï¼‰ã€‚对于[OmniLight3D]å’Œ[SpotLight3D]æ¥è¯´ï¼Œæ”¹"
-"å˜è¿™ä¸ªå€¼åªä¼šæ”¹å˜ç¯å…‰é¢œè‰²çš„强度,ä¸ä¼šæ”¹å˜ç¯å…‰çš„åŠå¾„。"
+"å…‰çš„å¼ºåº¦ä¹˜æ•°ï¼Œæ³¨ï¼Œè¿™ä¸æ˜¯ç‰©ç†å•ä½ã€‚对于 [OmniLight] å’Œ [SpotLight],更改此值åª"
+"会更改ç¯å…‰é¢œè‰²çš„强度,而ä¸ä¼šæ›´æ”¹ç¯å…‰çš„åŠå¾„。"
#: doc/classes/Light.xml:47
-#, fuzzy
msgid ""
"Secondary multiplier used with indirect light (light bounces). This works on "
"both [BakedLightmap] and [GIProbe]."
-msgstr "与间接光(光å弹)一起使用的二级å€å¢žå™¨ã€‚与[GIProbe]一起使用。"
+msgstr ""
+"与间接光(光å射)一起使用的辅助å€å¢žå™¨ã€‚这适用于 [BakedLightmap] å’Œ "
+"[GIProbe]。"
#: doc/classes/Light.xml:50
msgid ""
@@ -38476,16 +38817,15 @@ msgstr ""
"如果为 [code]true[/code]ï¼Œåˆ™å…‰çº¿çš„æ•ˆæžœä¼šé€†è½¬ï¼Œä½¿åŒºåŸŸå˜æš—并投射明亮的阴影。"
#: doc/classes/Light.xml:53
-#, fuzzy
msgid ""
"The size of the light in Godot units. Only considered in baked lightmaps and "
"only if [member light_bake_mode] is set to [constant BAKE_ALL]. Increasing "
"this value will make the shadows appear blurrier. This can be used to "
"simulate area lights to an extent."
msgstr ""
-"ç¯å…‰çš„大å°ï¼Œåœ¨Godot中的å•ä½ã€‚åªé€‚用于[OmniLight3D]så’Œ[SpotLight3D]s。增加这个"
-"值会使ç¯å…‰æ·¡å‡ºçš„é€Ÿåº¦å˜æ…¢ï¼Œé˜´å½±çœ‹èµ·æ¥æ›´æ¨¡ç³Šã€‚这在一定程度上å¯ä»¥ç”¨æ¥æ¨¡æ‹ŸåŒºåŸŸ"
-"光。"
+"ç¯å…‰çš„大å°ï¼Œä»¥Godotçš„å•ä½ã€‚åªåœ¨çƒ˜çƒ¤çš„光照贴图中考虑,并且åªåœ¨[member "
+"light_bake_mode]被设置为[constant BAKE_ALL]æ—¶è€ƒè™‘ã€‚å¢žåŠ è¿™ä¸ªå€¼ä¼šä½¿é˜´å½±çœ‹èµ·æ¥æ›´"
+"模糊。这å¯ä»¥åœ¨ä¸€å®šç¨‹åº¦ä¸Šç”¨äºŽæ¨¡æ‹ŸåŒºåŸŸç¯å…‰ã€‚"
#: doc/classes/Light.xml:56
msgid ""
@@ -38511,25 +38851,24 @@ msgid "The color of shadows cast by this light."
msgstr "光线投射的阴影的颜色。"
#: doc/classes/Light.xml:65
-#, fuzzy
msgid "Attempts to reduce [member shadow_bias] gap."
-msgstr "用于访问 [member shadow_bias] 的常é‡ã€‚"
+msgstr "å°è¯•å‡å°‘ [member shadow_bias] å·®è·ã€‚"
#: doc/classes/Light.xml:68
msgid "If [code]true[/code], the light will cast shadows."
msgstr "如果为[code]true[/code],光线会投下阴影。"
#: doc/classes/Light.xml:71
-#, fuzzy
msgid ""
"If [code]true[/code], reverses the backface culling of the mesh. This can be "
"useful when you have a flat mesh that has a light behind it. If you need to "
"cast a shadow on both sides of the mesh, set the mesh to use double-sided "
"shadows with [constant GeometryInstance.SHADOW_CASTING_SETTING_DOUBLE_SIDED]."
msgstr ""
-"如果为[code]true[/code],则åè½¬ç½‘æ ¼çš„èƒŒé¢æ¶ˆéšã€‚当您有一个åŽé¢æœ‰ç¯å…‰çš„å¹³é¢ç½‘æ ¼"
-"时,这å¯èƒ½å¾ˆæœ‰ç”¨ã€‚如果需è¦åœ¨ç½‘格的两侧投射阴影,请将网格设置为使用åŒé¢é˜´å½±ï¼Œ"
-"并使用[constant GeometryInstance3D.SHADOW_CASTING_SETTING_DOUBLE_SIDED]。"
+"如果 [code]true[/code],则å转网格的背é¢å‰”除。当你有一个åŽé¢æœ‰ç¯çš„å¹³é¢ç½‘æ ¼"
+"时,这会很有用。如果需è¦åœ¨ç½‘格的两侧投射阴影,请使用 [constant "
+"GeometryInstance.SHADOW_CASTING_SETTING_DOUBLE_SIDED] 将网格设置为使用åŒé¢é˜´"
+"影。"
#: doc/classes/Light.xml:76
msgid "Constant for accessing [member light_energy]."
@@ -38548,82 +38887,73 @@ msgid "Constant for accessing [member light_specular]."
msgstr "访问[member light_specular]的常数。"
#: doc/classes/Light.xml:88
-#, fuzzy
msgid ""
"Constant for accessing [member OmniLight.omni_range] or [member SpotLight."
"spot_range]."
msgstr ""
-"用于访问[member OmniLight3D.omni_range]或[member SpotLight3D.spot_range]的常"
-"数。"
+"用于访问 [member OmniLight.omni_range] 或 [member SpotLight.spot_range] 的常"
+"é‡ã€‚"
#: doc/classes/Light.xml:91
-#, fuzzy
msgid ""
"Constant for accessing [member OmniLight.omni_attenuation] or [member "
"SpotLight.spot_attenuation]."
msgstr ""
-"访问[member OmniLight3D.omni_attenuation]或[member SpotLight3D."
-"spot_attenuation]的常数。"
+"用于访问 [member OmniLight.omni_attenuation] 或 [member SpotLight."
+"spot_attenuation] 的常é‡ã€‚"
#: doc/classes/Light.xml:94
-#, fuzzy
msgid "Constant for accessing [member SpotLight.spot_angle]."
-msgstr "访问[member SpotLight3D.spot_angle]的常数。"
+msgstr "用于访问 [member SpotLight.spot_angle] 的常é‡ã€‚"
#: doc/classes/Light.xml:97
-#, fuzzy
msgid "Constant for accessing [member SpotLight.spot_angle_attenuation]."
-msgstr "访问[member SpotLight3D.spot_angle_Densation]的常数。"
+msgstr "用于访问 [member SpotLight.spot_angle_attenuation] 的常é‡ã€‚"
#: doc/classes/Light.xml:100
-#, fuzzy
msgid "Constant for accessing [member shadow_contact]."
-msgstr "用于访问 [member shadow_bias] 的常é‡ã€‚"
+msgstr "用于访问 [member shadow_contact] 的常é‡ã€‚"
#: doc/classes/Light.xml:103
-#, fuzzy
msgid ""
"Constant for accessing [member DirectionalLight."
"directional_shadow_max_distance]."
msgstr ""
-"访问[member DirectionalLight3D.directional_shadow_max_distance]的常数。"
+"用于访问 [member DirectionalLight.directional_shadow_max_distance] 的常é‡ã€‚"
#: doc/classes/Light.xml:106
-#, fuzzy
msgid ""
"Constant for accessing [member DirectionalLight.directional_shadow_split_1]."
-msgstr "访问[member DirectionalLight3D.directional_shadow_split_1]的常数。"
+msgstr "用于访问 [member DirectionalLight.directional_shadow_split_1] 的常é‡ã€‚"
#: doc/classes/Light.xml:109
-#, fuzzy
msgid ""
"Constant for accessing [member DirectionalLight.directional_shadow_split_2]."
-msgstr "访问[member DirectionalLight3D.directional_shadow_split_2]的常数。"
+msgstr "用于访问 [member DirectionalLight.directional_shadow_split_2] 的常é‡ã€‚"
#: doc/classes/Light.xml:112
-#, fuzzy
msgid ""
"Constant for accessing [member DirectionalLight.directional_shadow_split_3]."
-msgstr "访问[member DirectionalLight3D.directional_shadow_split_3]的常数。"
+msgstr "用于访问 [member DirectionalLight.directional_shadow_split_3] 的常é‡ã€‚"
#: doc/classes/Light.xml:115
-#, fuzzy
msgid ""
"Constant for accessing [member DirectionalLight."
"directional_shadow_normal_bias]."
msgstr ""
-"访问[member DirectionalLight3D.directional_shadow_max_distance]的常数。"
+"用于访问 [member DirectionalLight.directional_shadow_normal_bias] 的常é‡ã€‚"
#: doc/classes/Light.xml:118
msgid "Constant for accessing [member shadow_bias]."
msgstr "用于访问 [member shadow_bias] 的常é‡ã€‚"
#: doc/classes/Light.xml:121
-#, fuzzy
msgid ""
"Constant for accessing [member DirectionalLight."
"directional_shadow_bias_split_scale]."
-msgstr "访问[member DirectionalLight3D.directional_shadow_split_1]的常数。"
+msgstr ""
+"用于访问 [member DirectionalLight.directional_shadow_bias_split_scale] 的常"
+"é‡ã€‚"
#: doc/classes/Light.xml:127
msgid ""
@@ -38635,7 +38965,7 @@ msgstr ""
#: doc/classes/Light.xml:131
msgid "Only indirect lighting will be baked (default)."
-msgstr ""
+msgstr "åªä¼šçƒ˜ç„™é—´æŽ¥ç…§æ˜Žï¼ˆé»˜è®¤ï¼‰ã€‚"
#: doc/classes/Light.xml:134
msgid ""
@@ -38643,6 +38973,8 @@ msgid ""
"[b]Note:[/b] You should hide the light if you don't want it to appear twice "
"(dynamic and baked)."
msgstr ""
+"直接光和间接光都将被烘焙。\n"
+"[b]注æ„:[/b] å¦‚æžœä¸æƒ³è®©ç¯å…‰å‡ºçŽ°ä¸¤æ¬¡ï¼ˆåŠ¨æ€å’Œçƒ˜ç„™ï¼‰ï¼Œåˆ™åº”éšè—ç¯å…‰ã€‚"
#: doc/classes/Light2D.xml:4
msgid "Casts light in a 2D environment."
@@ -38663,7 +38995,8 @@ msgstr ""
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/2d/2d_lights_and_shadows.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/2d/2d_lights_and_shadows.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/2d/2d_lights_and_shadows."
+"html"
#: doc/classes/Light2D.xml:17
msgid "The Light2D's [Color]."
@@ -38751,9 +39084,8 @@ msgstr ""
"物æ‰ä¼šæŠ•射阴影。"
#: doc/classes/Light2D.xml:74
-#, fuzzy
msgid "[Texture] used for the Light2D's appearance."
-msgstr "[Texture2D] 用于 Light2D 的外观。"
+msgstr "用于Light2D外观的[Texture]。"
#: doc/classes/Light2D.xml:77
msgid "The [code]texture[/code]'s scale factor."
@@ -38791,11 +39123,10 @@ msgid "No filter applies to the shadow map. See [member shadow_filter]."
msgstr "没有过滤器适用于阴影贴图。å‚阅[member shadow_filter]。"
#: doc/classes/Light2D.xml:97
-#, fuzzy
msgid ""
"Percentage closer filtering (3 samples) applies to the shadow map. See "
"[member shadow_filter]."
-msgstr "百分比接近过滤(13个样本)适用于阴影贴图。å‚阅[member shadow_filter]。"
+msgstr "百分比接近过滤(3个样本)适用于阴影贴图。å‚阅[member shadow_filter]。"
#: doc/classes/Light2D.xml:100
msgid ""
@@ -38804,18 +39135,16 @@ msgid ""
msgstr "百分比接近过滤(5个样本)适用于阴影贴图。å‚阅[member shadow_filter]。"
#: doc/classes/Light2D.xml:103
-#, fuzzy
msgid ""
"Percentage closer filtering (7 samples) applies to the shadow map. See "
"[member shadow_filter]."
-msgstr "百分比接近过滤(5个样本)适用于阴影贴图。å‚阅[member shadow_filter]。"
+msgstr "百分比接近过滤(7个样本)适用于阴影贴图。å‚阅[member shadow_filter]。"
#: doc/classes/Light2D.xml:106
-#, fuzzy
msgid ""
"Percentage closer filtering (9 samples) applies to the shadow map. See "
"[member shadow_filter]."
-msgstr "百分比接近过滤(5个样本)适用于阴影贴图。å‚阅[member shadow_filter]。"
+msgstr "百分比接近过滤(9个样本)适用于阴影贴图。å‚阅[member shadow_filter]。"
#: doc/classes/Light2D.xml:109
msgid ""
@@ -38861,6 +39190,11 @@ msgid ""
"[member ProjectSettings.rendering/limits/buffers/"
"canvas_polygon_index_buffer_size_kb]."
msgstr ""
+"在二维空间中通过几个点的线。\n"
+"[b]注æ„:[/b]默认情况下,Godot一次最多åªèƒ½ç»˜åˆ¶4,096个多边形点。è¦å¢žåŠ è¿™ä¸ªé™"
+"制,请打开项目设置,增加[member ProjectSettings.rendering/limits/buffers/"
+"canvas_polygon_buffer_size_kb]和[member ProjectSettings.rendering/limits/"
+"buffers/canvas_polygon_index_buffer_size_kb]。"
#: doc/classes/Line2D.xml:20
msgid ""
@@ -38902,11 +39236,12 @@ msgid ""
msgstr "用æä¾›çš„[code]position[/code]ä½ç½®è¦†ç›–索引[code]i[/code]处点的ä½ç½®ã€‚"
#: doc/classes/Line2D.xml:61
-#, fuzzy
msgid ""
"If [code]true[/code], the line's border will be anti-aliased.\n"
"[b]Note:[/b] Line2D is not accelerated by batching when being anti-aliased."
-msgstr "如果为[code]true[/code],该直线的边界将应用å锯齿化。"
+msgstr ""
+"如果[code]true[/code],线æ¡çš„边界将抗锯齿。\n"
+"[b]注æ„:[/b] Line2D在抗锯齿时ä¸ä¼šè¢«æ‰¹é‡åŠ é€Ÿã€‚"
#: doc/classes/Line2D.xml:65
msgid ""
@@ -38935,17 +39270,16 @@ msgid "The style for the points between the start and the end."
msgstr "起点和终点之间点的样å¼ã€‚"
#: doc/classes/Line2D.xml:80
-#, fuzzy
msgid ""
"The points that form the lines. The line is drawn between every point set in "
"this array. Points are interpreted as local vectors."
-msgstr "æž„æˆçº¿æ¡çš„点。这æ¡çº¿æ˜¯åœ¨è¿™ä¸ªæ•°ç»„中æ¯ä¸ªç‚¹ä¹‹é—´ç»˜åˆ¶çš„。"
+msgstr "æž„æˆçº¿æ¡çš„点。在此数组中设置的æ¯ä¸ªç‚¹ä¹‹é—´ç»˜åˆ¶çº¿ã€‚点被解释为局部å‘é‡ã€‚"
#: doc/classes/Line2D.xml:83
msgid ""
"The smoothness of the rounded joints and caps. This is only used if a cap or "
"joint is set as round."
-msgstr "圆形接头和盖的平滑度。仅当盖或接头设置为圆形时æ‰ä½¿ç”¨æ­¤é€‰é¡¹ã€‚"
+msgstr "圆形接头和盖å­çš„å¹³æ»‘åº¦ã€‚ä»…å½“ç›–å­æˆ–接头设置为圆形时æ‰ä½¿ç”¨æ­¤é€‰é¡¹ã€‚"
#: doc/classes/Line2D.xml:86
msgid ""
@@ -38988,7 +39322,7 @@ msgstr ""
#: doc/classes/Line2D.xml:106
msgid "The line's joints will be bevelled/chamfered."
-msgstr "线的接头将进行斜切/倒角。"
+msgstr "线的接头将斜切/倒角。"
#: doc/classes/Line2D.xml:109
msgid "The line's joints will be rounded."
@@ -39028,7 +39362,6 @@ msgid "Control that provides single-line string editing."
msgstr "该控件æä¾›å•行字符串编辑。"
#: doc/classes/LineEdit.xml:7
-#, fuzzy
msgid ""
"LineEdit provides a single-line string editor, used for text fields.\n"
"It features many built-in shortcuts which will always be available "
@@ -39057,30 +39390,27 @@ msgid ""
"- Command + Right arrow: Like the End key, move the cursor to the end of the "
"line"
msgstr ""
-"LineEditæä¾›äº†å•行字符串编辑,用于文本字段。\n"
-"它具有许多内置的快æ·é”®ï¼Œè¿™äº›å¿«æ·é”®æ€»æ˜¯å¯ç”¨ï¼Œæ³¨ï¼Œ[kbd]Ctrl[/kbd]在这里映射到"
-"MacOS上的[kbd]Cmd[/kbd]:\n"
-"- [kbd]Ctrl + C[/kbd]:å¤åˆ¶\n"
-"- [kbd]Ctrl + X[/kbd]:剪切\n"
-"- [kbd]Ctrl + V[/kbd]或[kbd]Ctrl + Y[/kbd]:粘贴/\"拉动\"\n"
-"- [kbd]Ctrl + Z[/kbd]:撤销\n"
-"- [kbd]Ctrl + Shift + Z[/kbd]:é‡åš\n"
-"- [kbd]Ctrl + U[/kbd]:删除从光标ä½ç½®åˆ°è¡Œé¦–的文本\n"
-"- [kbd]Ctrl + K[/kbd]:删除从光标ä½ç½®åˆ°è¡Œå°¾çš„æ–‡æœ¬\n"
-"- [kbd]Ctrl + A[/kbd]:选择所有文本\n"
-"- [kbd]Up Arrow[/kbd]/[kbd]down Arrow[/kbd]:å‘上/å‘下箭头将光标移到行首/行"
-"å°¾\n"
-"在macOS上,有一些é¢å¤–的键盘快æ·é”®å¯ç”¨:\n"
-"- [kbd]Ctrl + F[/kbd]:与[kbd]å³ç®­å¤´[/kbd]相åŒï¼Œå°†å…‰æ ‡å‘å³ç§»åŠ¨ä¸€ä¸ªå­—ç¬¦\n"
-"- [kbd]Ctrl + B[/kbd]:与[kbd]左箭头[/kbd]相åŒï¼Œå‘左移动光标一个字符\n"
-"- [kbd]Ctrl + P[/kbd]:与[kbd]å‘上箭头[/kbd]相åŒï¼Œå°†å…‰æ ‡ç§»åˆ°å‰ä¸€è¡Œ\n"
-"- [kbd]Ctrl + N[/kbd]:与[kbd]å‘下箭头[/kbd]相åŒï¼Œå°†å…‰æ ‡ç§»åˆ°ä¸‹ä¸€è¡Œ\n"
-"- [kbd]Ctrl + D[/kbd]:与[kbd]Delete[/kbd]相åŒï¼Œåˆ é™¤å…‰æ ‡å³ä¾§çš„字符\n"
-"- [kbd]Ctrl+H[/kbd]:与[kbd]Backspace[/kbd]相åŒï¼Œåˆ é™¤å…‰æ ‡å·¦ä¾§çš„字符\n"
-"- [kbd]Ctrl+A[/kbd]:与[kbd]Home[/kbd]相åŒï¼Œå°†å…‰æ ‡ç§»åˆ°è¡Œé¦–\n"
-"- [kbd]Ctrl+E[/kbd]:与[kbd]End[/kbd]相åŒï¼Œå°†å…‰æ ‡ç§»åˆ°è¡Œå°¾\n"
-"- [kbd]Cmd + Left Arrow[/kbd]:与[kbd]Home[/kbd]相åŒï¼Œå°†å…‰æ ‡ç§»åˆ°è¯¥è¡Œçš„开头\n"
-"- [kbd]Cmd + right Arrow[/kbd]:与[kbd]End[/kbd]相åŒï¼Œå°†å…‰æ ‡ç§»åˆ°è¡Œå°¾"
+"LineEdit æä¾›äº†å•行字符串编辑器,用于文本字段。\n"
+"它具有许多始终å¯ç”¨çš„å†…ç½®å¿«æ·æ–¹å¼ï¼ˆåœ¨è¿™é‡Œ [code]Ctrl[/code] 映射到 macOS 上的 "
+"[code]Command[/code]):\n"
+"- Ctrl + C:å¤åˆ¶\n"
+"- Ctrl + X:剪切\n"
+"- Ctrl + V 或 Ctrl + Y:粘贴/\"拖拽\"\n"
+"- Ctrl + Z:撤消\n"
+"- Ctrl + Shift + Z:é‡åš\n"
+"- Ctrl + U:删除从光标ä½ç½®åˆ°è¡Œé¦–的文本\n"
+"- Ctrl + K:删除从光标ä½ç½®åˆ°è¡Œå°¾çš„æ–‡æœ¬\n"
+"- Ctrl + A:选择所有文本\n"
+"- Up/Down 箭头: :将光标移动到行的开头/结尾\n"
+"在 macOS 上,有一些é¢å¤–的键盘快æ·é”®å¯ç”¨ï¼š\n"
+"- Ctrl + F:åƒå³ç®­å¤´é”®ä¸€æ ·ï¼Œå°†å…‰æ ‡å‘å³ç§»åŠ¨ä¸€ä¸ªå­—ç¬¦\n"
+"- Ctrl + B:åƒå·¦ç®­å¤´é”®ä¸€æ ·ï¼Œå°†å…‰æ ‡å‘左移动一个字符\n"
+"- Ctrl + P:åƒå‘上箭头键一样,将光标移动到上一行\n"
+"- Ctrl + N:åƒå‘下箭头键一样,将光标移动到下一行\n"
+"- Ctrl + D:åƒDelete键一样,删除光标å³ä¾§çš„字符\n"
+"- Ctrl + H:åƒé€€æ ¼é”®ä¸€æ ·ï¼Œåˆ é™¤å…‰æ ‡å·¦ä¾§çš„字符\n"
+"- Command + å·¦ç®­å¤´ï¼šåƒ Home 键一样,将光标移动到行首\n"
+"- Command + å³ç®­å¤´ï¼šåƒ End 键一样,将光标移动到行尾"
#: doc/classes/LineEdit.xml:35
msgid ""
@@ -39095,11 +39425,10 @@ msgid "Erases the [LineEdit]'s [member text]."
msgstr "擦除 [LineEdit] 的 [member text]文本 。"
#: doc/classes/LineEdit.xml:47
-#, fuzzy
msgid ""
"Deletes one character at the cursor's current position (equivalent to "
"pressing the [code]Delete[/code] key)."
-msgstr "删除光标当å‰ä½ç½®çš„一个字符(相当于按[kbd]Delete[/kbd]输出键)。"
+msgstr "在光标的当å‰ä½ç½®åˆ é™¤ä¸€ä¸ªå­—符(相当于按[code]Delete[/code]键)。"
#: doc/classes/LineEdit.xml:55
msgid ""
@@ -39122,12 +39451,16 @@ msgid ""
"may cause a crash. If you wish to hide it or any of its children, use their "
"[member CanvasItem.visible] property."
msgstr ""
+"返回这个[LineEdit]çš„[PopupMenu]。默认情况下,这个èœå•在å³é”®ç‚¹å‡»[LineEdit]时显"
+"示。\n"
+"[b]警告:[/b] 这是一个必è¦çš„内部节点,移除和释放它å¯èƒ½ä¼šå¯¼è‡´å´©æºƒã€‚如果你想éš"
+"è—它或它的任何å­èŠ‚ç‚¹ï¼Œè¯·ä½¿ç”¨å…¶çš„ [member CanvasItem.visible] 属性。"
#: doc/classes/LineEdit.xml:74
msgid ""
"Returns the scroll offset due to [member caret_position], as a number of "
"characters."
-msgstr ""
+msgstr "返回由[member caret_position]引起的滚动å移,作为数字字符串。"
#: doc/classes/LineEdit.xml:81
msgid "Executes a given action as defined in the [enum MenuItems] enum."
@@ -39224,6 +39557,21 @@ msgid ""
"# `text_change_rejected` is emitted with \"bye\" as parameter.\n"
"[/codeblock]"
msgstr ""
+"在[LineEdit]内å¯è¾“入的最大字符é‡ã€‚如果[code]0[/code],则没有é™åˆ¶ã€‚\n"
+"当定义了é™åˆ¶æ—¶ï¼Œè¶…过[member max_length]的字符会被截断。这在设置最大长度时现有"
+"çš„ [member text] 内容,或在[LineEdit]中æ’入的新文本,包括粘贴时å‘生。如果任何"
+"输入的文本被截断,[signal text_change_rejected]ä¿¡å·å°†ä»¥è¢«æˆªæ–­çš„å­ä¸²ä¸ºå‚æ•°å‘é€"
+"出æ¥ã€‚\n"
+"[b]例如:[/b]\n"
+"[codeblock]\n"
+"text = \"Hello world\"\n"
+"max_length = 5\n"
+"# `text` becomes \"Hello\".\n"
+"max_length = 10\n"
+"text += \" goodbye\"\n"
+"# `text` becomes \"Hello good\".\n"
+"# `text_change_rejected` is emitted with \"bye\" as parameter.\n"
+"[/codeblock]"
#: doc/classes/LineEdit.xml:147
msgid ""
@@ -39294,6 +39642,8 @@ msgid ""
"appended text is truncated to fit [member max_length], and the part that "
"couldn't fit is passed as the [code]rejected_substring[/code] argument."
msgstr ""
+"当附加的文本超过了[member max_length]时触å‘。附加的文本被截断以适应[member "
+"max_length],ä¸èƒ½é€‚应的部分被作为[code]rejected_substring[/code]傿•°ä¼ é€’。"
#: doc/classes/LineEdit.xml:185 doc/classes/TextEdit.xml:506
msgid "Emitted when the text changes."
@@ -39446,13 +39796,14 @@ msgid "Simple button used to represent a link to some resource."
msgstr "简å•的按钮,用于表示对æŸäº›èµ„æºçš„链接。"
#: doc/classes/LinkButton.xml:7
-#, fuzzy
msgid ""
"This kind of button is primarily used when the interaction with the button "
"causes a context change (like linking to a web page).\n"
"See also [BaseButton] which contains common properties and methods "
"associated with this node."
-msgstr "è¿™ç§æŒ‰é’®ä¸»è¦ç”¨äºŽæŒ‰é’®çš„交互导致上下文更改(如链接到网页)时使用。"
+msgstr ""
+"è¿™ç§æŒ‰é’®ä¸»è¦ç”¨äºŽä¸ŽæŒ‰é’®çš„交互引起上下文å˜åŒ–时,如链接到网页。\n"
+"å‚阅[BaseButton],它包å«äº†è¯¥èŠ‚ç‚¹ç›¸å…³çš„å¸¸ç”¨å±žæ€§å’Œæ–¹æ³•ã€‚"
#: doc/classes/LinkButton.xml:21
msgid ""
@@ -39496,6 +39847,8 @@ msgid ""
"text color of the button. Disabled, hovered, and pressed states take "
"precedence over this color."
msgstr ""
+"当[LinkButton]获得焦点时使用的文本[Color]ã€‚åªæ›¿æ¢æŒ‰é’®çš„æ­£å¸¸æ–‡æœ¬é¢œè‰²ã€‚ç¦ç”¨ã€æ‚¬"
+"åœå’ŒæŒ‰ä¸‹çжæ€ä¼˜å…ˆäºŽè¿™ä¸ªé¢œè‰²ã€‚"
#: doc/classes/LinkButton.xml:49
msgid "Text [Color] used when the [LinkButton] is being hovered."
@@ -39514,15 +39867,13 @@ msgid "Overrides the location sounds are heard from."
msgstr "覆盖å¬åˆ°å£°éŸ³çš„ä½ç½®ã€‚"
#: doc/classes/Listener.xml:7
-#, fuzzy
msgid ""
"Once added to the scene tree and enabled using [method make_current], this "
"node will override the location sounds are heard from. This can be used to "
"listen from a location different from the [Camera]."
msgstr ""
-"一旦添加到场景树并å¯ç”¨[make_current]方法,该节点将覆盖å¬åˆ°å£°éŸ³çš„ä½ç½®ã€‚è¿™å¯ç”¨"
-"于从ä¸åŒäºŽ[Camera3D]çš„ä½ç½®æ”¶å¬ã€‚\n"
-"[b]注æ„:[/b]此节点还没有2D对等项。"
+"一旦被添加到场景树并使用[method make_current]å¯ç”¨ï¼Œè¿™ä¸ªèŠ‚ç‚¹å°†è¦†ç›–å¬åˆ°å£°éŸ³çš„ä½"
+"置。这å¯ä»¥ç”¨æ¥ä»Ž[Camera]ä¸åŒçš„ä½ç½®è†å¬ã€‚"
#: doc/classes/Listener.xml:15
msgid "Disables the listener to use the current camera's listener instead."
@@ -39533,24 +39884,22 @@ msgid "Returns the listener's global orthonormalized [Transform]."
msgstr "返回监å¬å™¨çš„全局正则化[Transform]。"
#: doc/classes/Listener.xml:27
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the listener was made current using [method "
"make_current], [code]false[/code] otherwise.\n"
"[b]Note:[/b] There may be more than one Listener marked as \"current\" in "
"the scene tree, but only the one that was made current last will be used."
msgstr ""
-"如果使用[make_current]方法使监å¬å™¨æˆä¸ºå½“å‰çжæ€ï¼Œè¿”回[code]true[/code],å¦åˆ™è¿”"
-"回[code]false[/code]。\n"
-"[b]注æ„:[/b] 在场景树中å¯èƒ½æœ‰ä¸æ­¢ä¸€ä¸ªListener3D被标记为 \"当å‰\"ï¼Œä½†åªæœ‰æœ€åŽ"
-"è¢«å˜æˆå½“å‰çš„那个æ‰ä¼šè¢«ä½¿ç”¨ã€‚"
+"如果使用[make_current]方法,使监å¬å™¨æˆä¸ºå½“å‰çжæ€ï¼Œåˆ™è¿”回[code]true[/code],å¦"
+"则返回[code]false[/code]。\n"
+"[b]注æ„:[/b] 在场景树中å¯èƒ½æœ‰ä¸€ä¸ªä»¥ä¸Šçš„监å¬å™¨è¢«æ ‡è®°ä¸º \"当å‰\"ï¼Œä½†åªæœ‰æœ€åŽå˜"
+"æˆå½“å‰çš„那个æ‰ä¼šè¢«ä½¿ç”¨ã€‚"
#: doc/classes/Listener.xml:34
msgid "Enables the listener. This will override the current camera's listener."
msgstr "å¯ç”¨ç›‘å¬å™¨ã€‚这将覆盖当å‰ç›¸æœºçš„监å¬å™¨ã€‚"
#: doc/classes/Listener2D.xml:7
-#, fuzzy
msgid ""
"Once added to the scene tree and enabled using [method make_current], this "
"node will override the location sounds are heard from. Only one [Listener2D] "
@@ -39560,20 +39909,21 @@ msgid ""
"screen will be used as a hearing point for the audio. [Listener2D] needs to "
"be inside [SceneTree] to function."
msgstr ""
-"一旦添加到场景树并å¯ç”¨[make_current]方法,该节点将覆盖å¬åˆ°å£°éŸ³çš„ä½ç½®ã€‚è¿™å¯ç”¨"
-"于从ä¸åŒäºŽ[Camera3D]çš„ä½ç½®æ”¶å¬ã€‚\n"
-"[b]注æ„:[/b]此节点还没有2D对等项。"
+"一旦被添加到场景树,并使用[method make_current]å¯ç”¨ï¼Œè¿™ä¸ªèŠ‚ç‚¹å°†è¦†ç›–å¬åˆ°å£°éŸ³çš„"
+"ä½ç½®ã€‚åªæœ‰ä¸€ä¸ª[Listener2D]å¯ä»¥æ˜¯å½“å‰çš„。使用[method make_current]å°†ç¦ç”¨ä»¥å‰çš„"
+"[Listener2D]。\n"
+"如果在当å‰çš„[Viewport]中没有激活的[Listener2D],å±å¹•中心将被用作音频的è†å¬"
+"点。[Listener2D]需è¦åœ¨[SceneTree]内æ‰èƒ½å‘挥作用。"
#: doc/classes/Listener2D.xml:16
msgid ""
"Disables the [Listener2D]. If it's not set as current, this method will have "
"no effect."
-msgstr ""
+msgstr "ç¦ç”¨[Listener2D]。如果未将其设置为当å‰ï¼Œæ­¤æ–¹æ³•将无效。"
#: doc/classes/Listener2D.xml:22
-#, fuzzy
msgid "Returns [code]true[/code] if this [Listener2D] is currently active."
-msgstr "如果该对等体当å‰å·²è¿žæŽ¥ï¼Œåˆ™è¿”回[code]true[/code]。"
+msgstr "如果此[Listener2D]当å‰å¤„于激活状æ€ï¼Œåˆ™è¿”回[code]true[/code]。"
#: doc/classes/Listener2D.xml:28
msgid ""
@@ -39583,13 +39933,15 @@ msgid ""
"This method will have no effect if the [Listener2D] is not added to "
"[SceneTree]."
msgstr ""
+"使[Listener2D]处于激活状æ€ï¼Œå°†å…¶è®¾ç½®ä¸ºå£°éŸ³çš„è†å¬ç‚¹ã€‚å¦‚æžœå·²ç»æœ‰å¦ä¸€ä¸ªæ¿€æ´»çš„"
+"[Listener2D],它将被ç¦ç”¨ã€‚\n"
+"如果[Listener2D]未添加到[SceneTree]中,此方法将无效。"
#: doc/classes/MainLoop.xml:4
msgid "Abstract base class for the game's main loop."
msgstr "游æˆä¸»å¾ªçŽ¯çš„æŠ½è±¡åŸºç±»ã€‚"
#: doc/classes/MainLoop.xml:7
-#, fuzzy
msgid ""
"[MainLoop] is the abstract base class for a Godot project's game loop. It is "
"inherited by [SceneTree], which is the default game loop implementation used "
@@ -39635,14 +39987,13 @@ msgid ""
"[/codeblock]"
msgstr ""
"[MainLoop]是Godot项目中游æˆå¾ªçŽ¯çš„æŠ½è±¡åŸºç±»ã€‚å®ƒè¢«[SceneTree]继承,åŽè€…是Godot项"
-"目中使用的默认游æˆå¾ªçŽ¯å®žçŽ°ï¼Œä¸è¿‡ä¹Ÿå¯ä»¥ç¼–写和使用自己的[MainLoop]å­ç±»æ¥ä»£æ›¿åœº"
-"景树中的实现。\n"
+"目中使用的游æˆå¾ªçŽ¯çš„é»˜è®¤å®žçŽ°ï¼Œä¸è¿‡ä¹Ÿå¯ä»¥ç¼–写和使用自己的[MainLoop]å­ç±»ï¼Œè€Œä¸"
+"是场景树。\n"
"在应用程åºå¯åŠ¨æ—¶ï¼Œå¿…é¡»å‘æ“作系统æä¾›ä¸€ä¸ª[MainLoop]实现;å¦åˆ™ï¼Œåº”用程åºå°†é€€"
-"出。这将自动å‘生,并且会自动创建一个[SceneTree],除éžä»Žå‘½ä»¤è¡Œæä¾›ä¸€ä¸ªä¸»è¦çš„"
-"[Script](例如用[code]godot -s my_loop.gd[/code]),并且它是一个[MainLoop]实"
+"出。除éžä»Žå‘½ä»¤è¡Œæä¾›ä¸€ä¸ªä¸»[Script](例如:[code]godot -s my_loop.gd[/"
+"code]),这将自动å‘生(并且创建一个[SceneTree]),并应该是一个[MainLoop]实"
"现。\n"
-"䏋颿˜¯ä¸€ä¸ªå®žçŽ°ç®€å•[MainLoop]的脚本例å­ã€‚\n"
-"[b]FIXME:[/b] 在DisplayServeræ‹†åˆ†å’Œè¾“å…¥é‡æž„åŽä¸å†æœ‰æ•ˆã€‚\n"
+"䏋颿˜¯å®žçŽ°ç®€å•[MainLoop]的脚本例å­:\n"
"[codeblock]\n"
"extends MainLoop\n"
"\n"
@@ -39662,9 +40013,9 @@ msgstr ""
"func _input_event(event):\n"
" # Record keys.\n"
" if event is InputEventKey and event.pressed and !event.echo:\n"
-" keys_typed.append(OS.get_keycode_string(event.keycode))\n"
+" keys_typed.append(OS.get_scancode_string(event.scancode))\n"
" # Quit on Escape press.\n"
-" if event.keycode == KEY_ESCAPE:\n"
+" if event.scancode == KEY_ESCAPE:\n"
" quit = true\n"
" # Quit on any mouse click.\n"
" if event is InputEventMouseButton:\n"
@@ -39677,14 +40028,13 @@ msgstr ""
"[/codeblock]"
#: doc/classes/MainLoop.xml:51
-#, fuzzy
msgid ""
"Called when files are dragged from the OS file manager and dropped in the "
"game window. The arguments are a list of file paths and the identifier of "
"the screen where the drag originated."
msgstr ""
-"当文件从æ“作系统的文件管ç†å™¨ä¸­è¢«æ‹–到游æˆçª—å£ä¸­æ—¶å‘å‡ºã€‚å‚æ•°æ˜¯ä¸€ä¸ªæ–‡ä»¶è·¯å¾„列表"
-"和拖动文件的å±å¹•标识符。"
+"当文件从æ“作系统的文件管ç†å™¨ä¸­è¢«æ‹–到游æˆçª—å£ä¸­æ—¶è¢«è°ƒç”¨ã€‚傿•°æ˜¯ä¸€ä¸ªæ–‡ä»¶è·¯å¾„列"
+"表和拖动å±å¹•的标识符。"
#: doc/classes/MainLoop.xml:57
msgid "Called before the program exits."
@@ -39694,7 +40044,7 @@ msgstr "在程åºé€€å‡ºå‰è°ƒç”¨ã€‚"
msgid ""
"Called when the user performs an action in the system global menu (e.g. the "
"Mac OS menu bar)."
-msgstr ""
+msgstr "当用户在系统全局èœå•(如Mac OSçš„èœå•æ ï¼‰ä¸­æ‰§è¡ŒåŠ¨ä½œæ—¶è¢«è°ƒç”¨ã€‚"
#: doc/classes/MainLoop.xml:72
msgid ""
@@ -39715,16 +40065,17 @@ msgstr "在åˆå§‹åŒ–时调用一次。"
#: doc/classes/MainLoop.xml:86
msgid "Called whenever an [InputEvent] is received by the main loop."
-msgstr ""
+msgstr "æ¯å½“主循环接收到[InputEvent]时,就会调用。"
#: doc/classes/MainLoop.xml:93
msgid ""
"Deprecated callback, does not do anything. Use [method _input_event] to "
"parse text input. Will be removed in Godot 4.0."
msgstr ""
+"废弃的回调,ä¸åšä»»ä½•事情。使用[method _input_event]æ¥è§£æžæ–‡æœ¬è¾“入。在Godot "
+"4.0中会被删除。"
#: doc/classes/MainLoop.xml:100
-#, fuzzy
msgid ""
"Called each physics frame with the time since the last physics frame as "
"argument ([code]delta[/code], in seconds). Equivalent to [method Node."
@@ -39733,10 +40084,10 @@ msgid ""
"ends the main loop, while [code]false[/code] lets it proceed to the next "
"frame."
msgstr ""
-"在æ¯ä¸ªç‰©ç†å¸§ä¸­è°ƒç”¨ï¼Œå‚数为自上一个物ç†å¸§ä»¥æ¥çš„æ—¶é—´ï¼ˆå•ä½ï¼šç§’)。相当于"
-"[method Node._physics_process]。\n"
-"如果实施,该方法必须返回一个布尔值。[code]true[/code] 结æŸä¸»å¾ªçŽ¯ï¼Œè€Œ"
-"[code]false[/code] 让它进入下一帧。"
+"在æ¯ä¸ªç‰©ç†å¸§ä¸­è°ƒç”¨ï¼Œå¹¶å°†è‡ªä¸Šä¸€ä¸ªç‰©ç†å¸§ä»¥æ¥çš„æ—¶é—´ä½œä¸ºå‚数,[code]delta[/"
+"code],å•ä½ä¸ºç§’。相当于[method Node._physics_process]。\n"
+"如果实现,该方法必须返回一个布尔值。[code]true[/code]结æŸä¸»å¾ªçŽ¯ï¼Œè€Œ"
+"[code]false[/code]让它进入下一帧。"
#: doc/classes/MainLoop.xml:107
msgid ""
@@ -39757,18 +40108,16 @@ msgid ""
msgstr "ä¸åº”手动调用,而应覆盖[method _initialize]。在Godot 4.0中会被删除。"
#: doc/classes/MainLoop.xml:127
-#, fuzzy
msgid ""
"Should not be called manually, override [method _input_event] instead. Will "
"be removed in Godot 4.0."
-msgstr "ä¸åº”手动调用,而应覆盖[method _idle]。在Godot 4.0中会被删除。"
+msgstr "ä¸åº”手动调用,而应é‡å†™[method _input_event]。在Godot 4.0中会被删除。"
#: doc/classes/MainLoop.xml:134
-#, fuzzy
msgid ""
"Should not be called manually, override [method _input_text] instead. Will "
"be removed in Godot 4.0."
-msgstr "ä¸åº”手动调用,而应覆盖[method _idle]。在Godot 4.0中会被删除。"
+msgstr "ä¸åº”手动调用,而应é‡å†™[method _input_text]。在Godot 4.0中会被删除。"
#: doc/classes/MainLoop.xml:141
msgid ""
@@ -39797,32 +40146,29 @@ msgstr ""
"在桌é¢å’Œç½‘络平å°ä¸Šå®žçŽ°ã€‚"
#: doc/classes/MainLoop.xml:164 doc/classes/Node.xml:799
-#, fuzzy
msgid ""
"Notification received from the OS when the game window is focused.\n"
"Implemented on all platforms."
msgstr ""
-"当鼠标进入游æˆçª—壿—¶ä»Žæ“作系统收到的通知。\n"
-"在桌é¢å’Œç½‘络平å°ä¸Šå®žçŽ°ã€‚"
+"当游æˆçª—å£èŽ·å¾—ç„¦ç‚¹æ—¶ï¼Œä»Žæ“作系统收到的通知。\n"
+"在所有平å°ä¸Šå®žçŽ°ã€‚"
#: doc/classes/MainLoop.xml:168 doc/classes/Node.xml:803
-#, fuzzy
msgid ""
"Notification received from the OS when the game window is unfocused.\n"
"Implemented on all platforms."
msgstr ""
-"当鼠标进入游æˆçª—壿—¶ä»Žæ“作系统收到的通知。\n"
-"在桌é¢å’Œç½‘络平å°ä¸Šå®žçŽ°ã€‚"
+"当游æˆçª—壿œªèŽ·å¾—ç„¦ç‚¹æ—¶ï¼Œä»Žæ“作系统收到的通知。\n"
+"在所有平å°ä¸Šå®žçŽ°ã€‚"
#: doc/classes/MainLoop.xml:172 doc/classes/Node.xml:807
-#, fuzzy
msgid ""
"Notification received from the OS when a quit request is sent (e.g. closing "
"the window with a \"Close\" button or Alt+F4).\n"
"Implemented on desktop platforms."
msgstr ""
-"当å‘é€å…³é—­è¯·æ±‚时从æ“作系统收到的通知(例如用 \"关闭 \"按钮或[kbd]Alt + F4[/"
-"kbd]关闭窗å£ï¼‰ã€‚\n"
+"å‘出退出请求时,从æ“作系统收到的通知(例如用 \"关闭\" 按钮或Alt+F4关闭窗"
+"å£ï¼‰ã€‚\n"
"在桌é¢å¹³å°ä¸Šå®žçŽ°ã€‚"
#: doc/classes/MainLoop.xml:176 doc/classes/Node.xml:811
@@ -39836,15 +40182,14 @@ msgstr ""
"安å“å¹³å°ç‰¹ä¾›ã€‚"
#: doc/classes/MainLoop.xml:180 doc/classes/Node.xml:815
-#, fuzzy
msgid ""
"Notification received from the OS when an unfocus request is sent (e.g. "
"another OS window wants to take the focus).\n"
"No supported platforms currently send this notification."
msgstr ""
-"当å‘é€å…³é—­è¯·æ±‚时从æ“作系统收到的通知(例如用 \"关闭 \"按钮或[kbd]Alt + F4[/"
-"kbd]关闭窗å£ï¼‰ã€‚\n"
-"在桌é¢å¹³å°ä¸Šå®žçŽ°ã€‚"
+"当喿¶ˆç„¦ç‚¹çš„请求被å‘逿—¶ï¼Œä»Žæ“作系统收到的通知(例如,å¦ä¸€ä¸ªæ“ä½œç³»ç»Ÿçª—å£æƒ³è¦"
+"得到焦点)。\n"
+"ç›®å‰æ²¡æœ‰æ”¯æŒçš„å¹³å°å‘é€è¿™ä¸ªé€šçŸ¥ã€‚"
#: doc/classes/MainLoop.xml:184 doc/classes/Node.xml:819
msgid ""
@@ -39895,21 +40240,19 @@ msgstr ""
"特定于macOSå¹³å°ã€‚"
#: doc/classes/MainLoop.xml:203 doc/classes/Node.xml:838
-#, fuzzy
msgid ""
"Notification received from the OS when the app is resumed.\n"
"Specific to the Android platform."
msgstr ""
-"应用æ¢å¤æ—¶ä»Žæ“作系统收到的通知。\n"
+"æ¢å¤åº”用时从æ“作系统收到的通知。\n"
"特定于安å“å¹³å°ã€‚"
#: doc/classes/MainLoop.xml:207 doc/classes/Node.xml:842
-#, fuzzy
msgid ""
"Notification received from the OS when the app is paused.\n"
"Specific to the Android platform."
msgstr ""
-"åº”ç”¨ç¨‹åºæš‚åœæ—¶ä»Žæ“作系统收到的通知。\n"
+"æš‚åœåº”用时从æ“作系统收到的通知。\n"
"特定于安å“å¹³å°ã€‚"
#: doc/classes/MarginContainer.xml:4
@@ -39917,7 +40260,6 @@ msgid "Simple margin container."
msgstr "简å•è¾¹è·å®¹å™¨ã€‚"
#: doc/classes/MarginContainer.xml:7
-#, fuzzy
msgid ""
"Adds a top, left, bottom, and right margin to all [Control] nodes that are "
"direct children of the container. To control the [MarginContainer]'s margin, "
@@ -39935,16 +40277,17 @@ msgid ""
"[/codeblock]"
msgstr ""
"为所有作为容器的直接å­èŠ‚ç‚¹çš„[Control]节点添加顶部ã€å·¦ä¾§ã€åº•部和å³ä¾§çš„è¾¹è·ã€‚è¦"
-"控制[MarginContainer]的边è·ï¼Œè¯·ä½¿ç”¨ä¸‹é¢åˆ—出的[code]margin_*[/code]主题属"
+"控制[MarginContainer]的边è·ï¼Œè¯·ä½¿ç”¨ä¸‹é¢åˆ—出的[code]margin_*[/code] 主题属"
"性。\n"
"[b]注æ„:[/b]è¦å°å¿ƒï¼Œ[Control]çš„margin值与常é‡margin值ä¸åŒã€‚如果你想通过代ç "
-"改å˜[MarginContainer]的自定义边è·å€¼ï¼Œä½ åº”该使用下é¢çš„例å­ã€‚\n"
-"[codeeblock]\n"
+"改å˜[MarginContainer]的自定义边è·å€¼ï¼Œåº”该使用下é¢çš„例å­:\n"
+"[codeblock]\n"
+"# 这个代ç ç¤ºä¾‹å‡å®šå½“å‰è„šæœ¬æ‰©å±•è‡ªMarginContainer。\n"
"var margin_value = 100\n"
-"set(\"custom_constants/margin_top\", margin_value)\n"
-"set(\"custom_constants/margin_left\", margin_value)\n"
-"set(\"custom_constants/margin_bottom\", margin_value)\n"
-"set(\"custom_constants/margin_right\", margin_value)\n"
+"add_constant_override(\"margin_top\", margin_value)\n"
+"add_constant_override(\"margin_left\", margin_value)\n"
+"add_constant_override(\"margin_bottom\", margin_value)\n"
+"add_constant_override(\"margin_right\", margin_value)\n"
"[/codeblock]"
#: doc/classes/MarginContainer.xml:26
@@ -39984,12 +40327,11 @@ msgid "Provides data transformation and encoding utility functions."
msgstr "æä¾›æ•°æ®è½¬æ¢å’Œç¼–ç çš„实用功能。"
#: doc/classes/Marshalls.xml:16
-#, fuzzy
msgid ""
"Returns a decoded [PoolByteArray] corresponding to the Base64-encoded string "
"[code]base64_str[/code]."
msgstr ""
-"返回对应于Base64ç¼–ç çš„字符串[code]base64_str[/code]的解ç [PackedByteArray]。"
+"返回对应于Base64ç¼–ç å­—符串[code]base64_str[/code]的解ç çš„[PoolByteArray]。"
#: doc/classes/Marshalls.xml:23
msgid ""
@@ -40013,9 +40355,8 @@ msgstr ""
"ä¿¡ä»»çš„æ¥æºï¼Œè¯·ä¸è¦ä½¿ç”¨è¿™ä¸ªé€‰é¡¹ï¼Œä»¥é¿å…潜在的安全å¨èƒï¼Œå¦‚è¿œç¨‹ä»£ç æ‰§è¡Œã€‚"
#: doc/classes/Marshalls.xml:39
-#, fuzzy
msgid "Returns a Base64-encoded string of a given [PoolByteArray]."
-msgstr "返回给定[PackedByteArray]çš„Base64ç¼–ç çš„字符串。"
+msgstr "返回给定[PoolByteArray]çš„Base64ç¼–ç çš„字符串。"
#: doc/classes/Marshalls.xml:46
msgid ""
@@ -40037,19 +40378,17 @@ msgid "Abstract base [Resource] for coloring and shading geometry."
msgstr "用于为几何体上色(Coloring)å’Œç€è‰²(Shading)çš„[Resource]抽象å­ç±»ã€‚"
#: doc/classes/Material.xml:7
-#, fuzzy
msgid ""
"Material is a base [Resource] used for coloring and shading geometry. All "
"materials inherit from it and almost all [VisualInstance] derived nodes "
"carry a Material. A few flags and parameters are shared between all material "
"types and are configured here."
msgstr ""
-"æè´¨æ˜¯ä¸€ä¸ªåŸºç¡€[Resource],用于给几何体上色(Coloring)å’Œç€è‰²(Shading)。所有的æ"
-"质都继承自它,几乎所有的[VisualInstance3D]派生节点都带有一个æè´¨ã€‚有几个标志"
-"å’Œå‚æ•°åœ¨æ‰€æœ‰æè´¨ç±»åž‹ä¹‹é—´æ˜¯å…±äº«çš„,并在这里é…置。"
+"æè´¨æ˜¯åŸºæœ¬[Resource],用于几何体ç€è‰²å™¨å’Œä¸Šè‰²ã€‚所有的æè´¨éƒ½ç»§æ‰¿è‡ªå®ƒï¼Œå‡ ä¹Žæ‰€æœ‰"
+"çš„[VisualInstance]派生节点都带有æè´¨ã€‚æœ‰å‡ ä¸ªæ ‡å¿—å’Œå‚æ•°åœ¨æ‰€æœ‰æè´¨ç±»åž‹ä¹‹é—´æ˜¯å…±"
+"享的,并在这里进行é…置。"
#: doc/classes/Material.xml:17
-#, fuzzy
msgid ""
"Sets the [Material] to be used for the next pass. This renders the object "
"again using a different material.\n"
@@ -40057,11 +40396,10 @@ msgid ""
"with type \"Spatial\"."
msgstr ""
"设置下一次使用的[Material]。这将使用ä¸åŒçš„æè´¨å†æ¬¡æ¸²æŸ“对象。\n"
-"[b]注æ„:[/b]åªé€‚用于[StandardMaterial3D]å’Œ[ShaderMaterial]çš„ \"Spatial \"ç±»"
+"[b]注æ„:[/b] è¿™åªé€‚用于[SpatialMaterial]å’Œ[ShaderMaterial]çš„ \"Spatial\"ç±»"
"型。"
#: doc/classes/Material.xml:21
-#, fuzzy
msgid ""
"Sets the render priority for transparent objects in 3D scenes. Higher "
"priority objects will be sorted in front of lower priority objects.\n"
@@ -40070,10 +40408,10 @@ msgid ""
"This is because opaque objects are not sorted, while transparent objects are "
"sorted from back to front (subject to priority)."
msgstr ""
-"设置3Dåœºæ™¯ä¸­é€æ˜Žç‰©ä½“的渲染优先级。高优先级的物体将被排åºåœ¨ä½Žä¼˜å…ˆçº§çš„物体å‰"
+"设置3Dåœºæ™¯ä¸­é€æ˜Žç‰©ä½“的渲染优先级。优先级高的物体将被排åºåœ¨ä¼˜å…ˆçº§ä½Žçš„物体å‰"
"é¢ã€‚\n"
-"[b]注æ„:[/b]è¿™åªé€‚ç”¨äºŽé€æ˜Žç‰©ä½“的排åºã€‚è¿™ä¸ä¼šå½±å“逿˜Žç‰©ä½“相对于ä¸é€æ˜Žç‰©ä½“的排"
-"åºæ–¹å¼ã€‚这是因为ä¸é€æ˜Žç‰©ä½“ä¸è¢«æŽ’åºï¼Œè€Œé€æ˜Žç‰©ä½“是从åŽå¾€å‰æŽ’åºçš„(å–决于优先"
+"[b]注æ„:[/b] è¿™åªé€‚ç”¨äºŽé€æ˜Žç‰©ä½“的排åºã€‚è¿™ä¸ä¼šå½±å“逿˜Žç‰©ä½“相对于ä¸é€æ˜Žç‰©ä½“çš„"
+"æŽ’åºæ–¹å¼ã€‚这是因为ä¸é€æ˜Žå¯¹è±¡ä¸è¢«æŽ’åºï¼Œè€Œé€æ˜Žå¯¹è±¡åˆ™ä»ŽåŽå¾€å‰æŽ’åºï¼ˆå–决于优先"
"级)。"
#: doc/classes/Material.xml:27
@@ -40089,7 +40427,6 @@ msgid "Special button that brings up a [PopupMenu] when clicked."
msgstr "特殊按钮,点击åŽä¼šå¼¹å‡ºä¸€ä¸ª[PopupMenu]。"
#: doc/classes/MenuButton.xml:7
-#, fuzzy
msgid ""
"Special button that brings up a [PopupMenu] when clicked.\n"
"New items can be created inside this [PopupMenu] using [code]get_popup()."
@@ -40100,11 +40437,12 @@ msgid ""
"See also [BaseButton] which contains common properties and methods "
"associated with this node."
msgstr ""
-"特殊按钮,点击åŽä¼šå‡ºçŽ°ä¸€ä¸ª[PopupMenu]。\n"
-"使用[code]get_popup().add_item(\"My Item Name\")[/code]å¯ä»¥åœ¨è¿™ä¸ª[PopupMenu]"
-"中创建新项。你也å¯ä»¥ç›´æŽ¥ä»Žç¼–辑器中创建它们。è¦åšåˆ°è¿™ä¸€ç‚¹ï¼Œé€‰æ‹©[MenuButton]节"
-"点,然åŽåœ¨2D编辑器顶部的工具æ ä¸­ï¼Œç‚¹å‡»[b]Items[/b],然åŽåœ¨å¼¹å‡ºçš„窗å£ä¸­ç‚¹å‡»"
-"[b]Add[/b]。你将能够赋予æ¯ä¸ªé¡¹æ–°çš„属性。"
+"特殊按钮,点击åŽä¼šå¼¹å‡ºä¸€ä¸ª[PopupMenu]。\n"
+"å¯ä»¥ä½¿ç”¨[code]get_popup().add_item(\"My Item Name\")[/code]在这个[PopupMenu]"
+"中创建新项目。你也å¯ä»¥ç›´æŽ¥ä»Žç¼–辑器中创建它们。è¦åšåˆ°è¿™ç‚¹ï¼Œé€‰æ‹©[MenuButton]节"
+"点,然åŽåœ¨2D编辑器顶部的工具æ ä¸­ï¼Œç‚¹å‡»[b]Items[/b],然åŽç‚¹å‡»å¼¹å‡ºçª—å£ä¸­çš„"
+"[b]Add[/b]。你将能够赋予æ¯ä¸ªé¡¹ç›®æ–°çš„属性。\n"
+"å‚阅[BaseButton],它包å«äº†ä¸Žè¯¥èŠ‚ç‚¹ç›¸å…³çš„å¸¸ç”¨å±žæ€§å’Œæ–¹æ³•ã€‚"
#: doc/classes/MenuButton.xml:17 doc/classes/OptionButton.xml:86
msgid ""
@@ -40113,6 +40451,9 @@ msgid ""
"may cause a crash. If you wish to hide it or any of its children, use their "
"[member CanvasItem.visible] property."
msgstr ""
+"返回这个按钮中包å«çš„[PopupMenu]。\n"
+"[b]警告:[/b] 这是一个必需的内部节点,移除和释放它å¯èƒ½ä¼šå¯¼è‡´å´©æºƒã€‚如果你想éš"
+"è—它或它的任何å­èŠ‚ç‚¹ï¼Œè¯·ä½¿ç”¨å…¶çš„[member CanvasItem.visible]属性。"
#: doc/classes/MenuButton.xml:25
msgid ""
@@ -40130,9 +40471,8 @@ msgstr ""
"code]çš„å¦ä¸€ä¸ª[MenuButton]上方时,它将关闭当å‰çš„[MenuButton]并打开å¦ä¸€ä¸ªã€‚"
#: doc/classes/MenuButton.xml:41
-#, fuzzy
msgid "Emitted when [PopupMenu] of this MenuButton is about to show."
-msgstr "当这个MenuButtonçš„[PopupMenu]å³å°†æ˜¾ç¤ºæ—¶å‘出。"
+msgstr "当此MenuButtonçš„[PopupMenu]å³å°†æ˜¾ç¤ºæ—¶è§¦å‘。"
#: doc/classes/MenuButton.xml:49
msgid "[StyleBox] used when the [MenuButton] is disabled."
@@ -40165,6 +40505,8 @@ msgid ""
"text color of the button. Disabled, hovered, and pressed states take "
"precedence over this color."
msgstr ""
+"当[MenuButton]获得焦点时使用的文本[Color]ã€‚åªæ›¿æ¢æŒ‰é’®çš„æ­£å¸¸æ–‡æœ¬é¢œè‰²ã€‚ç¦ç”¨ã€æ‚¬"
+"åœå’ŒæŒ‰ä¸‹çжæ€ä¼˜å…ˆäºŽè¿™ä¸ªé¢œè‰²ã€‚"
#: doc/classes/MenuButton.xml:67
msgid "Text [Color] used when the [MenuButton] is being hovered."
@@ -40215,6 +40557,12 @@ msgid ""
"If [code]simplify[/code] is [code]true[/code], the geometry can be further "
"simplified to reduce the amount of vertices. Disabled by default."
msgstr ""
+"从网格中计算出 [ConvexPolygonShape] 。\n"
+"如果 [code]clean[/code] 是 [code]true[/code] (默认),é‡å¤çš„和内部的顶点会被"
+"自动移除。你å¯ä»¥æŠŠå®ƒè®¾ä¸º [code]false[/code] æ¥ä½¿è¿™ä¸ªè¿‡ç¨‹æ›´å¿«ï¼Œå¦‚æžœä¸éœ€è¦çš„"
+"è¯ã€‚\n"
+"如果[code]simplify[/code]是[code]true[/code],å¯ä»¥è¿›ä¸€æ­¥ç®€åŒ–几何体以å‡å°‘顶点"
+"的数é‡ã€‚默认情况下是ç¦ç”¨çš„。"
#: doc/classes/Mesh.xml:30
msgid ""
@@ -40227,25 +40575,23 @@ msgstr ""
"[b]Note:[/b] 这个方法实际上ååºè¿”回顶点(例如输入顺时针,返回逆时针)。"
#: doc/classes/Mesh.xml:37
-#, fuzzy
msgid "Calculate a [ConcavePolygonShape] from the mesh."
-msgstr "从该网格中计算出一个[ConcavePolygonShape3D]凹多边形。"
+msgstr "从网格中计算出[ConcavePolygonShape]。"
#: doc/classes/Mesh.xml:43
msgid "Generate a [TriangleMesh] from the mesh."
msgstr "从网格生æˆ[TriangleMesh]。"
#: doc/classes/Mesh.xml:49
-#, fuzzy
msgid ""
"Returns the smallest [AABB] enclosing this mesh in local space. Not affected "
"by [code]custom_aabb[/code]. See also [method VisualInstance."
"get_transformed_aabb].\n"
"[b]Note:[/b] This is only implemented for [ArrayMesh] and [PrimitiveMesh]."
msgstr ""
-"返回能够包å«è¯¥ç½‘格的最å°[AABB]碰撞盒。它ä¸å—[code]custom_aabb[/code]属性影"
-"å“。\n"
-"[b]Note:[/b] 这个方法åªä¸º[ArrayMesh]å’Œ[PrimitiveMesh]实现。"
+"返回局部空间中包围这个网格的最å°çš„[AABB]。ä¸å—[code]custom_aabb[/code]的影"
+"å“。å‚阅 [method VisualInstance.get_transformed_aabb]。\n"
+"[b]注æ„:[/b]è¿™åªå¯¹[ArrayMesh]å’Œ[PrimitiveMesh]实现。"
#: doc/classes/Mesh.xml:56
msgid ""
@@ -40286,6 +40632,8 @@ msgid ""
"Sets a hint to be used for lightmap resolution in [BakedLightmap]. Overrides "
"[member BakedLightmap.default_texels_per_unit]."
msgstr ""
+"设置æç¤ºï¼Œç”¨äºŽ[BakedLightmap]中的光照贴图分辨率。é‡å†™[member BakedLightmap."
+"default_texels_per_unit]。"
#: doc/classes/Mesh.xml:102
msgid "Render array as points (one vertex equals one point)."
@@ -40300,9 +40648,8 @@ msgid "Render array as line strip."
msgstr "将顶点组渲染为线æ¡ã€‚"
#: doc/classes/Mesh.xml:111
-#, fuzzy
msgid "Render array as line loop (like line strip, but closed)."
-msgstr "将顶点组渲染为线æ¡ã€‚"
+msgstr "将数组渲染æˆçº¿çŠ¶çŽ¯ï¼ˆåƒçº¿æ¡ï¼Œä½†æ˜¯å°é—­çš„)。"
#: doc/classes/Mesh.xml:114
msgid "Render array as triangles (every three vertices a triangle is created)."
@@ -40313,9 +40660,8 @@ msgid "Render array as triangle strips."
msgstr "将顶点组渲染为三角形线框。"
#: doc/classes/Mesh.xml:120
-#, fuzzy
msgid "Render array as triangle fans."
-msgstr "将顶点组渲染为三角形线框。"
+msgstr "将数组渲染æˆä¸‰è§’形扇形。"
#: doc/classes/Mesh.xml:123 doc/classes/VisualServer.xml:3363
msgid "Blend shapes are normalized."
@@ -40368,12 +40714,11 @@ msgstr "网格组使用索引。"
msgid ""
"Used internally to calculate other [code]ARRAY_COMPRESS_*[/code] enum "
"values. Do not use."
-msgstr ""
+msgstr "内部用于计算其他[code]ARRAY_COMPRESS_*[/code]枚举值。ä¸è¦ä½¿ç”¨ã€‚"
#: doc/classes/Mesh.xml:159 doc/classes/VisualServer.xml:3300
-#, fuzzy
msgid "Flag used to mark a compressed (half float) vertex array."
-msgstr "曾ç»ç”¨äºŽæ ‡è®°åŽ‹ç¼©ï¼ˆåŠç²¾åº¦æµ®ç‚¹ï¼‰åˆ‡å‘数组的Flag。"
+msgstr "用于标记压缩(åŠç²¾åº¦æµ®ç‚¹ï¼‰é¡¶ç‚¹æ•°ç»„的标志。"
#: doc/classes/Mesh.xml:162 doc/classes/VisualServer.xml:3303
msgid "Flag used to mark a compressed (half float) normal array."
@@ -40398,14 +40743,12 @@ msgid ""
msgstr "曾用于标记第二套UVåæ ‡çš„压缩(åŠç²¾åº¦æµ®ç‚¹ï¼‰UVåæ ‡æ•°ç»„çš„Flag。"
#: doc/classes/Mesh.xml:177 doc/classes/VisualServer.xml:3318
-#, fuzzy
msgid "Flag used to mark a compressed bone array."
-msgstr "曾用于标记压缩索引数组的Flag。"
+msgstr "用于标记压缩骨骼数组的标志。"
#: doc/classes/Mesh.xml:180 doc/classes/VisualServer.xml:3321
-#, fuzzy
msgid "Flag used to mark a compressed (half float) weight array."
-msgstr "曾ç»ç”¨äºŽæ ‡è®°åŽ‹ç¼©ï¼ˆåŠç²¾åº¦æµ®ç‚¹ï¼‰åˆ‡å‘数组的Flag。"
+msgstr "用于标记压缩(åŠç²¾åº¦æµ®ç‚¹ï¼‰æƒé‡æ•°ç»„的标志。"
#: doc/classes/Mesh.xml:183 doc/classes/VisualServer.xml:3324
msgid "Flag used to mark a compressed index array."
@@ -40416,18 +40759,16 @@ msgid "Flag used to mark that the array contains 2D vertices."
msgstr "曾用于标记包å«2D顶点的数组的Flag。"
#: doc/classes/Mesh.xml:189 doc/classes/VisualServer.xml:3330
-#, fuzzy
msgid "Flag used to mark that the array uses 16-bit bones instead of 8-bit."
-msgstr "曾用于标记包å«2D顶点的数组的Flag。"
+msgstr "用于标记数组使用16ä½éª¨éª¼è€Œä¸æ˜¯8ä½çš„æ ‡å¿—。"
#: doc/classes/Mesh.xml:192 doc/classes/VisualServer.xml:3333
msgid ""
"Flag used to mark that the array uses an octahedral representation of normal "
"and tangent vectors rather than cartesian."
-msgstr ""
+msgstr "标志用于标记数组使用法线和切线å‘é‡çš„å…«é¢è¡¨ç¤ºæ³•ï¼Œè€Œä¸æ˜¯ç¬›å¡å°”å¼ã€‚"
#: doc/classes/Mesh.xml:195
-#, fuzzy
msgid ""
"Used to set flags [constant ARRAY_COMPRESS_VERTEX], [constant "
"ARRAY_COMPRESS_NORMAL], [constant ARRAY_COMPRESS_TANGENT], [constant "
@@ -40435,9 +40776,11 @@ msgid ""
"ARRAY_COMPRESS_TEX_UV2], [constant ARRAY_COMPRESS_WEIGHTS], and [constant "
"ARRAY_FLAG_USE_OCTAHEDRAL_COMPRESSION] quickly."
msgstr ""
-"曾用于快速设置 flags [constant ARRAY_COMPRESS_NORMAL], [constant "
-"ARRAY_COMPRESS_TANGENT], [constant ARRAY_COMPRESS_COLOR], [constant "
-"ARRAY_COMPRESS_TEX_UV] 和 [constant ARRAY_COMPRESS_TEX_UV2] 。"
+"用于快速设置标志[constant ARRAY_COMPRESS_VERTEX], [constant "
+"ARRAY_COMPRESS_NORMAL], [constant ARRAY_COMPRESS_TANGENT], [constant "
+"ARRAY_COMPRESS_COLOR], [constant ARRAY_COMPRESS_TEX_UV], [constant "
+"ARRAY_COMPRESS_TEX_UV2] , [constant ARRAY_COMPRESS_WEIGHTS], 和[constant "
+"ARRAY_FLAG_USE_OCTAHEDRAL_COMPRESSION] 。"
#: doc/classes/Mesh.xml:198
msgid "Array of vertices."
@@ -40480,7 +40823,6 @@ msgid "Helper tool to access and edit [Mesh] data."
msgstr "用于帮助编辑和使用 [Mesh] 网格数æ®çš„工具。"
#: doc/classes/MeshDataTool.xml:7
-#, fuzzy
msgid ""
"MeshDataTool provides access to individual vertices in a [Mesh]. It allows "
"users to read and edit vertex data of meshes. It also creates an array of "
@@ -40514,25 +40856,33 @@ msgid ""
"OpenGL/Face-culling]winding order[/url] for front faces of triangle "
"primitive modes."
msgstr ""
-"网格数æ®å·¥å…·(MeshDataTool) æä¾›äº†å¯¹[Mesh]中å•个顶点的访问。它å…许用户读å–和编"
-"辑网格的顶点数æ®ã€‚它还创建了一个é¢å’Œè¾¹çš„æ•°ç»„。\n"
-"è¦ä½¿ç”¨MeshDataTool,使用[method create_from_surface] æ¥åŠ è½½ä¸€ä¸ªMesh。当你结æŸ"
-"对数æ®çš„编辑åŽï¼Œä½¿ç”¨[method commit to surface] å°†æ•°æ®æäº¤åˆ°ä¸€ä¸ªç½‘æ ¼ä¸­ã€‚\n"
-"䏋颿˜¯ä¸€ä¸ªç”¨ä¾‹ï¼š\n"
+"MeshDataToolæä¾›å¯¹[Mesh]中å•个顶点的访问。它å…许用户读å–和编辑网格的顶点数"
+"æ®ã€‚还å¯ä»¥åˆ›å»ºé¢å’Œè¾¹çš„æ•°ç»„。\n"
+"è¦ä½¿ç”¨MeshDataTool,请使用[method create_from_surface]加载网格。当完æˆç¼–辑数"
+"æ®åŽï¼Œç”¨[method commit_to_surface]å°†æ•°æ®æäº¤ç»™Mesh。\n"
+"䏋颿˜¯å¦‚何使用MeshDataTool的例å­ã€‚\n"
"[codeblock]\n"
+"var mesh = ArrayMesh.new()\n"
+"mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, CubeMesh.new()."
+"get_mesh_arrays())\n"
"var mdt = MeshDataTool.new()\n"
"mdt.create_from_surface(mesh, 0)\n"
"for i in range(mdt.get_vertex_count()):\n"
" var vertex = mdt.get_vertex(i)\n"
-" ...\n"
+" # 在这个例å­ä¸­ï¼Œæˆ‘们将Mesh扩展了一个å•元,这样就会产生分离的é¢ï¼Œå› ä¸ºå®ƒæ˜¯"
+"å¹³é¢é˜´å½±ã€‚\n"
+" vertex += mdt.get_vertex_normal(i)\n"
+" # ä¿å­˜ä½ çš„æ”¹åŠ¨ã€‚\n"
" mdt.set_vertex(i, vertex)\n"
"mesh.surface_remove(0)\n"
"mdt.commit_to_surface(mesh)\n"
+"var mi = MeshInstance.new()\n"
+"mi.mesh = mesh\n"
+"add_child(mi)\n"
"[/codeblock]\n"
-"è‹¥è¦è¿›è¡Œç¨‹åºå‡ ä½•生æˆï¼Œå‚阅[ArrayMesh],[ImmediateGeometry3D]å’Œ"
-"[SurfaceTool]。\n"
-"[b]Note: [/b] Godot使用顺时针 [url=https://learnopengl.com/Advanced-OpenGL/"
-"Face-culling]winding order[/url]顺åºä¸ºä¸‰è§’形的默认å‰é¢ã€‚"
+"å‚阅[ArrayMesh]ã€[ImmediateGeometry]å’Œ[SurfaceTool]çš„ç¨‹åºæ€§å‡ ä½•体生æˆã€‚\n"
+"[b]注æ„:[/b] Godot对三角形原始模å¼çš„å‰ç«¯é¢ä½¿ç”¨é¡ºæ—¶é’ˆ[url=https://"
+"learnopengl.com/Advanced-OpenGL/Face-culling]缠绕顺åº[/url]。"
#: doc/classes/MeshDataTool.xml:36
msgid "Clears all data currently in MeshDataTool."
@@ -40719,7 +41069,6 @@ msgid "Node that instances meshes into a scenario."
msgstr "网格实例与场景相结åˆçš„节点。"
#: doc/classes/MeshInstance.xml:7
-#, fuzzy
msgid ""
"MeshInstance is a node that takes a [Mesh] resource and adds it to the "
"current scenario by creating an instance of it. This is the class most often "
@@ -40728,10 +41077,10 @@ msgid ""
"[Mesh] has to be instanced more than thousands of times at close proximity, "
"consider using a [MultiMesh] in a [MultiMeshInstance] instead."
msgstr ""
-"MeshInstance3D是一个节点,它获å–一个[Mesh]资æºï¼Œå¹¶é€šè¿‡åˆ›å»ºå®ƒçš„实例将其添加到"
-"当å‰åœºæ™¯ä¸­ã€‚这是最常用的渲染3D几何的类,å¯ä»¥ç”¨æ¥åœ¨è®¸å¤šåœ°æ–¹å®žä¾‹ä¸€ä¸ª[Mesh]。这"
-"å…许é‡ç”¨å‡ ä½•图形,å¯ä»¥èŠ‚çœèµ„æºã€‚当一个[Mesh]需è¦è¢«å®žä¾‹åŒ–ä¸Šåƒæ¬¡ä»¥ä¸Šæ—¶ï¼Œå¯ä»¥è€ƒ"
-"虑在[MultiMeshInstance3d]中使用[MultiMesh]。"
+"MeshInstance是一个节点,它获å–[Mesh]资æºå¹¶åˆ›å»ºä¸€ä¸ªå®žä¾‹ï¼Œå°†å…¶æ·»åŠ åˆ°å½“å‰åœºæ™¯"
+"ä¸­ã€‚è¿™æ˜¯æœ€å¸¸è¢«ç”¨æ¥æ¸²æŸ“3D几何体的类,这å¯ä»¥åœ¨å¾ˆå¤šåœ°æ–¹ä½¿ç”¨[Mesh]实例,它å…许é‡"
+"å¤ä½¿ç”¨å‡ ä½•体并节çœèµ„æºã€‚当[Mesh]å¿…é¡»åœ¨å¾ˆè¿‘çš„åœ°æ–¹è¢«å®žä¾‹åŒ–è¶…è¿‡æ•°åƒæ¬¡æ—¶ï¼Œå¯ä»¥è€ƒ"
+"虑在[MultiMeshInstance]中使用[MultiMesh]æ¥ä»£æ›¿ã€‚"
#: doc/classes/MeshInstance.xml:21
msgid ""
@@ -40744,38 +41093,41 @@ msgid ""
"If [code]simplify[/code] is [code]true[/code], the geometry can be further "
"simplified to reduce the amount of vertices. Disabled by default."
msgstr ""
+"这个助手创建[StaticBody]å­èŠ‚ç‚¹ï¼Œè¯¥èŠ‚ç‚¹å…·æœ‰ä»Žç½‘æ ¼å‡ ä½•å½¢çŠ¶è®¡ç®—çš„"
+"[ConvexPolygonShape]碰撞形状。其主è¦ç”¨äºŽæµ‹è¯•。\n"
+"如果[code]clean[/code]是[code]true[/code](默认),é‡å¤çš„顶点和内部顶点会被自"
+"动移除。å¯ä»¥æŠŠå®ƒè®¾ç½®ä¸º[code]false[/code],以便在ä¸éœ€è¦çš„æƒ…况下使这个过程更"
+"快。\n"
+"如果[code]simplify[/code]是[code]true[/code],å¯ä»¥è¿›ä¸€æ­¥ç®€åŒ–几何体以å‡å°‘顶点"
+"的数é‡ã€‚默认情况下是ç¦ç”¨çš„。"
#: doc/classes/MeshInstance.xml:29
-#, fuzzy
msgid ""
"This helper creates a [MeshInstance] child node with gizmos at every vertex "
"calculated from the mesh geometry. It's mainly used for testing."
msgstr ""
-"这个帮助类创建了一个[MeshInstance3D]å­èŠ‚ç‚¹ï¼Œåœ¨æ¯ä¸ªé¡¶ç‚¹ä¸Šéƒ½æœ‰ä»Žç½‘格几何计算出"
-"æ¥çš„辅助线框。它主è¦ç”¨äºŽæµ‹è¯•。"
+"这个辅助工具创建[MeshInstance]å­èŠ‚ç‚¹ï¼Œåœ¨æ¯ä¸ªé¡¶ç‚¹éƒ½æœ‰æ ¹æ®ç½‘格几何形状计算的辅"
+"助线框。其主è¦ç”¨äºŽæµ‹è¯•。"
#: doc/classes/MeshInstance.xml:35
-#, fuzzy
msgid ""
"This helper creates a [StaticBody] child node with multiple "
"[ConvexPolygonShape] collision shapes calculated from the mesh geometry via "
"convex decomposition. It's mainly used for testing."
msgstr ""
-"这个帮助类创建一个[StaticBody3D]å­èŠ‚ç‚¹ï¼Œè¯¥èŠ‚ç‚¹ä½¿ç”¨ä¸€ä¸ªä»Žç½‘æ ¼å‡ ä½•è®¡ç®—çš„"
-"[ConvexPolygonShape3D]碰撞形状。它主è¦ç”¨äºŽæµ‹è¯•。"
+"这个助手创建[StaticBody]å­èŠ‚ç‚¹ï¼Œè¯¥èŠ‚ç‚¹å…·æœ‰å¤šä¸ª[ConvexPolygonShape]碰撞形状,"
+"这些碰撞形状是通过凸é¢åˆ†è§£ä»Žç½‘格几何形状计算出æ¥çš„。其主è¦ç”¨äºŽæµ‹è¯•。"
#: doc/classes/MeshInstance.xml:41
-#, fuzzy
msgid ""
"This helper creates a [StaticBody] child node with a [ConcavePolygonShape] "
"collision shape calculated from the mesh geometry. It's mainly used for "
"testing."
msgstr ""
-"这个助手创建一个[StaticBody3D]å­èŠ‚ç‚¹ï¼Œä½¿ç”¨ä¸€ä¸ªä»Žç½‘æ ¼å‡ ä½•è®¡ç®—çš„"
-"[ConcavePolygonShape3D]碰撞形状。它主è¦ç”¨äºŽæµ‹è¯•。"
+"这个助手创建[StaticBody]å­èŠ‚ç‚¹ï¼Œå…¶ç¢°æ’žå½¢çŠ¶æ˜¯ç”±ç½‘æ ¼çš„å‡ ä½•å½¢çŠ¶è®¡ç®—å‡ºæ¥çš„"
+"[ConcavePolygonShape],其主è¦ç”¨äºŽæµ‹è¯•。"
#: doc/classes/MeshInstance.xml:48
-#, fuzzy
msgid ""
"Returns the [Material] that will be used by the [Mesh] when drawing. This "
"can return the [member GeometryInstance.material_override], the surface "
@@ -40783,33 +41135,30 @@ msgid ""
"[Material] defined in the [Mesh]. For example, if [member GeometryInstance."
"material_override] is used, all surfaces will return the override material."
msgstr ""
-"返回将在绘制时被[Mesh]使用的[Material]。这å¯ä»¥è¿”回[member GeometryInstance3D."
-"material_override],é¢ä¼šè¦†ç›–在[MeshInstance3D]中定义的[Material],或者在"
-"[Mesh]中定义的表é¢[Material]。例如,如果使用[member GeometryInstance3D."
-"Material_override]时,所有表é¢å°†è¿”回覆盖åŽçš„æè´¨ã€‚"
+"返回[Mesh]绘制时使用的[Material]。这å¯ä»¥è¿”回[member GeometryInstance."
+"material_override],这个[MeshInstance]中定义的表é¢è¦†ç›–[Material],或者[Mesh]"
+"中定义的表é¢[Material]。例如,如果使用[member GeometryInstance."
+"material_override],所有的表é¢éƒ½ä¼šè¿”回覆盖的æè´¨ã€‚"
#: doc/classes/MeshInstance.xml:55
-#, fuzzy
msgid "Returns the [Material] for a surface of the [Mesh] resource."
-msgstr "返回[Mesh]èµ„æºæŒ‡å®šè¡¨é¢çš„覆盖åŽçš„[Material]。"
+msgstr "返回[Mesh]资æºè¡¨é¢çš„[Material]。"
#: doc/classes/MeshInstance.xml:61
msgid "Returns the number of surface materials."
msgstr "è¿”å›žè¡¨é¢æè´¨çš„æ•°é‡ã€‚"
#: doc/classes/MeshInstance.xml:69
-#, fuzzy
msgid "Sets the [Material] for a surface of the [Mesh] resource."
-msgstr "返回[Mesh]èµ„æºæŒ‡å®šè¡¨é¢çš„覆盖åŽçš„[Material]。"
+msgstr "为[Mesh]资æºçš„表é¢è®¾ç½®[Material]。"
#: doc/classes/MeshInstance.xml:75
msgid "The [Mesh] resource for the instance."
msgstr "该实例的[Mesh]资æºã€‚"
#: doc/classes/MeshInstance.xml:78
-#, fuzzy
msgid "[NodePath] to the [Skeleton] associated with the instance."
-msgstr "通å‘与该实例关è”çš„[Skeleton3D]çš„[NodePath]。"
+msgstr "与实例相关è”[NodePath]çš„[Skeleton]。"
#: doc/classes/MeshInstance.xml:81
msgid "Sets the skin to be used by this instance."
@@ -40824,25 +41173,28 @@ msgid ""
"software_skinning_fallback] for details about how software skinning is "
"enabled."
msgstr ""
+"如果[code]true[/code],当使用软件蒙皮时,法线会被转æ¢ã€‚当ä¸éœ€è¦æ³•线时,设置为"
+"[code]false[/code]以获得更好的性能。\n"
+"关于如何å¯ç”¨è½¯ä»¶è’™çš®çš„细节,å‚阅[member ProjectSettings.rendering/quality/"
+"skinning/software_skinning_fallback]。"
#: doc/classes/MeshInstance2D.xml:4
msgid "Node used for displaying a [Mesh] in 2D."
msgstr "用于在2D中显示[Mesh]的节点。"
#: doc/classes/MeshInstance2D.xml:7
-#, fuzzy
msgid ""
"Node used for displaying a [Mesh] in 2D. Can be constructed from an existing "
"[Sprite] via a tool in the editor toolbar. Select \"Sprite\" then \"Convert "
"to Mesh2D\", select settings in popup and press \"Create Mesh2D\"."
msgstr ""
-"用于在2D中显示[Mesh]的节点。å¯ä»¥é€šè¿‡ç¼–辑器工具æ ä¸­çš„工具从现有的[Sprite2D]æž„"
-"建。选择“Sprite2Dâ€ï¼Œç„¶åŽâ€œConvert to Mesh2Dâ€ï¼Œåœ¨å¼¹å‡ºçª—å£ä¸­é€‰æ‹©è®¾ç½®ï¼Œç„¶åŽ"
-"按“Create Mesh2Dâ€ã€‚"
+"用于在2D中显示[Mesh]的节点。å¯ä»¥é€šè¿‡ç¼–辑器工具æ ä¸Šçš„工具从现有的[Sprite]æž„"
+"建。选择 \"Sprite\",然åŽé€‰æ‹© \"转æ¢ä¸ºMesh2D\",在弹出的窗å£ä¸­é€‰æ‹©è®¾ç½®å¹¶æŒ‰ä¸‹ "
+"\"创建Mesh2D\"。"
#: doc/classes/MeshInstance2D.xml:10
msgid "https://docs.godotengine.org/en/3.4/tutorials/2d/2d_meshes.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/2d/2d_meshes.html"
+msgstr "https://docs.godotengine.org/zh_CN/stable/tutorials/2d/2d_meshes.html"
#: doc/classes/MeshInstance2D.xml:16
msgid "The [Mesh] that will be drawn by the [MeshInstance2D]."
@@ -40862,13 +41214,12 @@ msgstr ""
"一页[/url],以获得æµè¡Œå¼•擎期望的标准法å‘图忠‡çš„æ¯”较。"
#: doc/classes/MeshInstance2D.xml:23 doc/classes/MultiMeshInstance2D.xml:23
-#, fuzzy
msgid ""
"The [Texture] that will be used if using the default [CanvasItemMaterial]. "
"Can be accessed as [code]TEXTURE[/code] in CanvasItem shader."
msgstr ""
-"如果使用默认的[CanvasItemMaterial], 本[Texture2D]将被使用。å¯ä»¥åœ¨CanvasItem"
-"ç€è‰²å™¨ä¸­è®¿é—®[code]TEXTURE[/code]。"
+"如果使用默认的[CanvasItemMaterial],就会使用[Texture]。å¯ä»¥åœ¨CanvasItemç€è‰²å™¨"
+"中作为[code]TEXTURE[/code]访问。"
#: doc/classes/MeshInstance2D.xml:29 doc/classes/MultiMeshInstance2D.xml:29
msgid "Emitted when the [member texture] is changed."
@@ -40912,9 +41263,8 @@ msgid "Returns the item's mesh."
msgstr "返回该 item 的网格模型。"
#: doc/classes/MeshLibrary.xml:52
-#, fuzzy
msgid "Returns the transform applied to the item's mesh."
-msgstr "返回应用于该项导航网格的转æ¢ã€‚"
+msgstr "è¿”å›žåº”ç”¨åˆ°é¡¹ç›®ç½‘æ ¼çš„å˜æ¢ã€‚"
#: doc/classes/MeshLibrary.xml:59
msgid "Returns the item's name."
@@ -40929,7 +41279,6 @@ msgid "Returns the transform applied to the item's navigation mesh."
msgstr "返回应用于该项导航网格的转æ¢ã€‚"
#: doc/classes/MeshLibrary.xml:80
-#, fuzzy
msgid ""
"When running in the editor, returns a generated item preview (a 3D rendering "
"in isometric perspective). When used in a running project, returns the "
@@ -40937,18 +41286,17 @@ msgid ""
"set_item_preview]. Returns an empty [Texture] if no preview was manually set "
"in a running project."
msgstr ""
-"在编辑器中è¿è¡Œæ—¶ï¼Œè¿”回生æˆçš„项目预览(ç­‰è·é€è§†çš„3D渲染)。当在一个正在è¿è¡Œçš„项"
-"目中使用时,返回手动定义的项目预览,å¯ä»¥ä½¿ç”¨[method set_item_preview]进行设"
-"置。如果在è¿è¡Œçš„项目中没有手动设置预览,则返回一个空的[Texture2D]。"
+"当在编辑器中è¿è¡Œæ—¶ï¼Œè¿”回生æˆçš„项目预览(等è·é€è§†çš„3D渲染)。当在è¿è¡Œçš„项目中"
+"使用时,返回手动定义的项目预览,å¯ä»¥ä½¿ç”¨[method set_item_preview]æ¥è®¾ç½®ã€‚如果"
+"在è¿è¡Œçš„项目中没有手动设置预览,返回空的[Texture]。"
#: doc/classes/MeshLibrary.xml:87
-#, fuzzy
msgid ""
"Returns an item's collision shapes.\n"
"The array consists of each [Shape] followed by its [Transform]."
msgstr ""
"返回项目的碰撞形状。\n"
-"数组由[Shape3D]和它的[Transform]组æˆã€‚"
+"这个数组由æ¯ä¸ª[Shape]和它的[Transform]组æˆã€‚"
#: doc/classes/MeshLibrary.xml:94
msgid "Gets an unused ID for a new item."
@@ -40963,9 +41311,8 @@ msgid "Sets the item's mesh."
msgstr "设置该项的网格。"
#: doc/classes/MeshLibrary.xml:117
-#, fuzzy
msgid "Sets the transform to apply to the item's mesh."
-msgstr "设置转æ¢åº”用于该项的导航网格。"
+msgstr "设置è¦åº”ç”¨åˆ°é¡¹ç›®ç½‘æ ¼çš„å˜æ¢ã€‚"
#: doc/classes/MeshLibrary.xml:125
msgid ""
@@ -40989,16 +41336,15 @@ msgid "Sets a texture to use as the item's preview icon in the editor."
msgstr "在编辑器中设置è¦ç”¨ä½œè¯¥é¡¹é¢„览图标的纹ç†ã€‚"
#: doc/classes/MeshLibrary.xml:158
-#, fuzzy
msgid ""
"Sets an item's collision shapes.\n"
"The array should consist of [Shape] objects, each followed by a [Transform] "
"that will be applied to it. For shapes that should not have a transform, use "
"[constant Transform.IDENTITY]."
msgstr ""
-"设置该项的碰撞形状。\n"
-"数组应该由[Shape3D]对象组æˆï¼Œæ¯ä¸ªå¯¹è±¡åŽé¢éƒ½æœ‰ä¸€ä¸ª[Transform],它将被应用到该"
-"Shape3D。对于ä¸åº”è¯¥æœ‰å˜æ¢çš„形状,使用 [constant Transform.IDENTITY]。"
+"设置项目的碰撞形状。\n"
+"数组应由[Shape]对象组æˆï¼Œæ¯ä¸ªå¯¹è±¡ä¹‹åŽéƒ½æœ‰åº”用于它的[Transform]。对于ä¸åº”有å˜"
+"æ¢çš„形状,使用[constant Transform.IDENTITY]。"
#: doc/classes/MeshTexture.xml:4
msgid "Simple texture that uses a mesh to draw itself."
@@ -41029,7 +41375,6 @@ msgid "Generic mobile VR implementation."
msgstr "通用移动VR实现。"
#: modules/mobile_vr/doc_classes/MobileVRInterface.xml:7
-#, fuzzy
msgid ""
"This is a generic mobile VR implementation where you need to provide details "
"about the phone and HMD used. It does not rely on any existing framework. "
@@ -41045,16 +41390,16 @@ msgid ""
" get_viewport().arvr = true\n"
"[/codeblock]"
msgstr ""
-"这是一个通用的移动VRå®žçŽ°ï¼Œä½ éœ€è¦æä¾›å…³äºŽæ‰‹æœºå’Œä½¿ç”¨çš„HMD的详细信æ¯ã€‚它ä¸ä¾èµ–于"
-"任何现有的框架。这是我们拥有的最基础的接å£ã€‚为了达到最佳效果,你需è¦ä¸€éƒ¨å¸¦æœ‰"
-"陀螺仪和加速计的手机。\n"
-"注æ„,å³ä½¿æ²¡æœ‰ä½ç½®è·Ÿè¸ªï¼Œæ‘„åƒå¤´ä¹Ÿä¼šå‡è®¾è€³æœºåœ¨1.85米的高度。你å¯ä»¥é€šè¿‡è®¾ç½®"
-"[member eye_height]æ¥æ”¹å˜å®ƒã€‚\n"
-"åˆå§‹åŒ–该接å£çš„æ–¹æ³•如下:\n"
+"这是通用的移动VRå®žçŽ°ï¼Œä½ éœ€è¦æä¾›å…³äºŽæ‰€ä½¿ç”¨çš„æ‰‹æœºå’ŒHMD的细节。它ä¸ä¾èµ–于任何现"
+"有的框架。这是我们拥有的最基本的接å£ã€‚为了达到最好的效果,你需è¦ä¸€ä¸ªæœ‰é™€èžºä»ª"
+"和加速器的手机。\n"
+"请注æ„,å³ä½¿æ²¡æœ‰ä½ç½®è·Ÿè¸ªï¼Œç›¸æœºä¹Ÿä¼šå‡å®šè€³æœºå¤„于1.85米的高度。你å¯ä»¥é€šè¿‡è®¾ç½®"
+"[member eye_height]æ¥æ”¹å˜è¿™ä¸€ç‚¹ã€‚\n"
+"ä½ å¯ä»¥æŒ‰ä»¥ä¸‹æ–¹å¼åˆå§‹åŒ–这个接å£:\n"
"[codeblock]\n"
-"var interface = XRServer.find_interface(\"Native mobile\")\n"
+"var interface = ARVRServer.find_interface(\"Native mobile\")\n"
"if interface and interface.initialize():\n"
-" get_viewport().xr = true\n"
+" get_viewport().arvr = true\n"
"[/codeblock]"
#: modules/mobile_vr/doc_classes/MobileVRInterface.xml:22
@@ -41068,11 +41413,10 @@ msgid "The width of the display in centimeters."
msgstr "显示器的宽度,以厘米为å•ä½ã€‚"
#: modules/mobile_vr/doc_classes/MobileVRInterface.xml:28
-#, fuzzy
msgid ""
"The height at which the camera is placed in relation to the ground (i.e. "
"[ARVROrigin] node)."
-msgstr "ç›¸æœºç›¸å¯¹äºŽåœ°é¢æ”¾ç½®çš„高度(å³[XROrigin3D]节点)。"
+msgstr "æ‘„åƒæœºç›¸å¯¹äºŽåœ°é¢æ‰€å¤„的高度,å³[ARVROrigin]节点。"
#: modules/mobile_vr/doc_classes/MobileVRInterface.xml:31
msgid ""
@@ -41105,7 +41449,6 @@ msgid "Provides high-performance mesh instancing."
msgstr "æä¾›é«˜æ€§èƒ½çš„网格实例化。"
#: doc/classes/MultiMesh.xml:7
-#, fuzzy
msgid ""
"MultiMesh provides low-level mesh instancing. Drawing thousands of "
"[MeshInstance] nodes can be slow, since each object is submitted to the GPU "
@@ -41118,20 +41461,20 @@ msgid ""
"Since instances may have any behavior, the AABB used for visibility must be "
"provided by the user."
msgstr ""
-"MultiMeshæä¾›äº†ä½Žçº§åˆ«çš„网格实例化功能。绘制æˆåƒä¸Šä¸‡çš„[MeshInstance3D]节点å¯èƒ½"
-"会很慢,因为æ¯ä¸ªå¯¹è±¡éƒ½è¦æäº¤ç»™GPUç„¶åŽå•独绘制。\n"
+"MultiMeshæä¾›äº†ä½Žçº§åˆ«çš„网格实例化功能。绘制数以åƒè®¡çš„[MeshInstance]节点å¯èƒ½ä¼š"
+"很慢,因为æ¯ä¸ªå¯¹è±¡éƒ½è¦æäº¤ç»™GPUç„¶åŽå•独绘制。\n"
"MultiMeshè¦å¿«å¾—多,因为它å¯ä»¥é€šè¿‡ä¸€æ¬¡ç»˜åˆ¶è°ƒç”¨æ¥ç»˜åˆ¶æˆåƒä¸Šä¸‡çš„实例,从而å‡å°‘"
"API的开销。\n"
-"缺点是,如果实例之间的è·ç¦»å¤ªè¿œï¼Œæ€§èƒ½å¯èƒ½ä¼šé™ä½Žï¼Œå› ä¸ºæ¯ä¸€ä¸ªå®žä¾‹éƒ½ä¼šè¢«æ¸²æŸ“(它"
-"们在空间上被索引为一整个对象)。\n"
-"由于实例å¯ä»¥æœ‰ä»»ä½•行为,用于å¯è§æ€§çš„AABB必须由用户æä¾›ã€‚"
+"缺点是,如果实例之间的è·ç¦»å¤ªè¿œï¼Œæ€§èƒ½å¯èƒ½ä¼šé™ä½Žï¼Œå› ä¸ºæ¯ä¸€ä¸ªå®žä¾‹æ€»æ˜¯ä¼šè¢«æ¸²æŸ“"
+"(它们在空间上被索引为整个对象)。\n"
+"由于实例å¯èƒ½å…·æœ‰ä»»ä½•行为,用于å¯è§æ€§çš„AABB必须由用户æä¾›ã€‚"
#: doc/classes/MultiMesh.xml:13 doc/classes/MultiMeshInstance.xml:11
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/3d/vertex_animation/"
"animating_thousands_of_fish.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/3d/vertex_animation/"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/vertex_animation/"
"animating_thousands_of_fish.html"
#: doc/classes/MultiMesh.xml:14 doc/classes/MultiMeshInstance.xml:13
@@ -41139,14 +41482,16 @@ msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/optimization/using_multimesh."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/optimization/using_multimesh."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/optimization/"
+"using_multimesh.html"
#: doc/classes/MultiMesh.xml:20
msgid ""
"Returns the visibility axis-aligned bounding box in local space. See also "
"[method VisualInstance.get_transformed_aabb]."
msgstr ""
+"返回局部空间中å¯è§æ€§è½´å¯¹é½çš„边界框。å‚阅[method VisualInstance."
+"get_transformed_aabb]。"
#: doc/classes/MultiMesh.xml:27
msgid "Gets a specific instance's color."
@@ -41176,9 +41521,15 @@ msgid ""
"(4 bytes as is) and [code]COLOR_FLOAT[/code] / [code]CUSTOM_DATA_FLOAT[/"
"code] is stored as 4 floats."
msgstr ""
+"一次性设置所有与实例相关的数æ®ã€‚这在从ç£ç›˜åŠ è½½æ•°æ®æˆ–从GDNativeå‡†å¤‡æ•°æ®æ—¶ç‰¹åˆ«"
+"有用。\n"
+"所有的数æ®éƒ½è¢«æ‰“包在一个大的浮点数数组中。数组å¯èƒ½çœ‹èµ·æ¥åƒè¿™æ ·ã€‚实例1çš„å˜æ¢ï¼Œ"
+"实例1的颜色数æ®ï¼Œå®žä¾‹1的自定义数æ®ï¼Œå®žä¾‹2çš„å˜æ¢ï¼Œå®žä¾‹2的颜色数æ®ï¼Œç­‰ç­‰ã€‚\n"
+"[Transform]存储为12浮点数,[Transform2D]存储为8浮点数,[code]COLOR_8BIT[/"
+"code] / [code]CUSTOM_DATA_8BIT[/code]存储为1浮点数(原为4字节),"
+"[code]COLOR_FLOAT[/code] / [code]CUSTOM_DATA_FLOAT[/code] 存储为4浮点数。"
#: doc/classes/MultiMesh.xml:65
-#, fuzzy
msgid ""
"Sets the color of a specific instance by [i]multiplying[/i] the mesh's "
"existing vertex colors.\n"
@@ -41186,21 +41537,19 @@ msgid ""
"[code]null[/code] on the [MultiMesh] and [member SpatialMaterial."
"vertex_color_use_as_albedo] is [code]true[/code] on the material."
msgstr ""
-"设置一个特定实例的颜色。\n"
-"为了使颜色生效,确ä¿[MultiMesh]上的[member use_colors]是[code]true[/code],æ"
-"质上的[member BaseMaterial3D.vertex_color_use_as_albedo] 是[code]true[/"
-"code]。"
+"通过[i]乘以[/i]网格的现有顶点颜色æ¥è®¾ç½®ç‰¹å®šå®žä¾‹çš„颜色。\n"
+"为了使颜色生效,请确ä¿[MultiMesh]上的[member color_format]䏿˜¯[code]null[/"
+"code],并且[member SpatialMaterial.vertex_color_use_as_albedo]上的æè´¨æ˜¯"
+"[code]true[/code]。"
#: doc/classes/MultiMesh.xml:74
-#, fuzzy
msgid ""
"Sets custom data for a specific instance. Although [Color] is used, it is "
"just a container for 4 floating point numbers. The format of the number can "
"change depending on the [enum CustomDataFormat] used."
msgstr ""
-"为一个特定的实例设置自定义数æ®ã€‚虽然使用了[Color]ï¼Œä½†å®ƒåªæ˜¯ä¸€ä¸ªå®¹çº³4个浮点数"
-"的容器。\n"
-"为了使用自定义数æ®ï¼Œç¡®ä¿[member use_custom_data]是[code]true[/code]。"
+"为特定的实例设置自定义数æ®ã€‚虽然使用了[Color]ï¼Œä½†å®ƒåªæ˜¯ä¸€ä¸ªå®¹çº³4个浮点数的容"
+"器。数字的格å¼å¯ä»¥æ ¹æ®ä½¿ç”¨çš„[enum CustomDataFormat]æ¥æ”¹å˜ã€‚"
#: doc/classes/MultiMesh.xml:82
msgid "Sets the [Transform] for a specific instance."
@@ -41212,7 +41561,7 @@ msgstr "为特定实例设置 [Transform2D]。"
#: doc/classes/MultiMesh.xml:96
msgid "Format of colors in color array that gets passed to shader."
-msgstr ""
+msgstr "传递给ç€è‰²å™¨çš„颜色数组中的颜色格å¼ã€‚"
#: doc/classes/MultiMesh.xml:99
msgid "Format of custom data in custom data array that gets passed to shader."
@@ -41298,46 +41647,42 @@ msgid "Node that instances a [MultiMesh]."
msgstr "实例化 [MultiMesh] 的节点。"
#: doc/classes/MultiMeshInstance.xml:7
-#, fuzzy
msgid ""
"[MultiMeshInstance] is a specialized node to instance [GeometryInstance]s "
"based on a [MultiMesh] resource.\n"
"This is useful to optimize the rendering of a high amount of instances of a "
"given mesh (for example trees in a forest or grass strands)."
msgstr ""
-"[MultiMeshInstance3D] 是基于 [MultiMesh] 资æºå®žä¾‹åŒ– [GeometryInstance3D] 的专"
-"用节点。\n"
-"这对于优化给定网格的大é‡å®žä¾‹ï¼ˆä¾‹å¦‚森林中的树木或è‰ä¸›ï¼‰çš„æ¸²æŸ“很有用。"
+"[MultiMeshInstance]是特有的节点,用于基于[MultiMesh]资æºçš„[GeometryInstance]"
+"的实例。\n"
+"这对于优化给定网格的大é‡å®žä¾‹çš„æ¸²æŸ“是éžå¸¸æœ‰ç”¨çš„(例如,森林中的树木或è‰ä¸›ï¼‰ã€‚"
#: doc/classes/MultiMeshInstance.xml:12
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/3d/using_multi_mesh_instance."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/3d/using_multi_mesh_instance."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/"
+"using_multi_mesh_instance.html"
#: doc/classes/MultiMeshInstance.xml:19
-#, fuzzy
msgid ""
"The [MultiMesh] resource that will be used and shared among all instances of "
"the [MultiMeshInstance]."
-msgstr ""
-"将在 [MultiMeshInstance3D] 的所有实例之间使用和共享的 [MultiMesh] 资æºã€‚"
+msgstr "在[MultiMeshInstance]的所有实例中使用和共享的[MultiMesh]资æºã€‚"
#: doc/classes/MultiMeshInstance2D.xml:4
msgid "Node that instances a [MultiMesh] in 2D."
msgstr "在 2D 中实例化 [MultiMesh] 的节点。"
#: doc/classes/MultiMeshInstance2D.xml:7
-#, fuzzy
msgid ""
"[MultiMeshInstance2D] is a specialized node to instance a [MultiMesh] "
"resource in 2D.\n"
"Usage is the same as [MultiMeshInstance]."
msgstr ""
-"[MultiMeshInstance2D] 是一个专门用于在 2D 中实例化 [MultiMesh] 资æºçš„节点。\n"
-"用法与[MultiMeshInstance3D]相åŒã€‚"
+"[MultiMeshInstance2D]是特有的节点,用于实例化2Dçš„[MultiMesh]资æºã€‚\n"
+"使用方法与[MultiMeshInstance]相åŒã€‚"
#: doc/classes/MultiMeshInstance2D.xml:16
msgid "The [MultiMesh] that will be drawn by the [MultiMeshInstance2D]."
@@ -41348,7 +41693,6 @@ msgid "High-level multiplayer API."
msgstr "高级多人游æˆAPI。"
#: doc/classes/MultiplayerAPI.xml:7
-#, fuzzy
msgid ""
"This class implements most of the logic behind the high-level multiplayer "
"API. See also [NetworkedMultiplayerPeer].\n"
@@ -41361,11 +41705,13 @@ msgid ""
"detail and isn't meant to be used by non-Godot servers. It may change "
"without notice."
msgstr ""
-"这个类实现了高层多人游æˆAPI背åŽçš„大部分逻辑。\n"
-"默认情况下,[SceneTree]有一个对该类的引用,用于在整个场景中æä¾›å¤šäººæ¸¸æˆåŠŸèƒ½"
-"(å³RPC/RSET)。\n"
-"通过设置[member Node.custom_multiplayer]属性,å¯ä»¥è¦†ç›–特定节点使用的多人游æˆ"
-"API实例,有效地å…许在åŒä¸€åœºæ™¯ä¸­åŒæ—¶è¿è¡Œå®¢æˆ·ç«¯å’ŒæœåŠ¡å™¨ã€‚"
+"该类实现了高阶多人游æˆAPI背åŽçš„大部分逻辑。å‚阅[NetworkedMultiplayerPeer]。\n"
+"默认情况下,[SceneTree]有对该类的引用,用于在整个场景中æä¾›å¤šäººæ¸¸æˆåŠŸèƒ½ï¼ˆå³"
+"RPC/RSET)。\n"
+"通过设置[member Node.custom_multiplayer]属性,å¯ä»¥é‡å†™ç‰¹å®šèŠ‚ç‚¹ä½¿ç”¨çš„å¤šäººæ¸¸æˆ"
+"API实例,从而有效地å…许在åŒä¸€åœºæ™¯ä¸­åŒæ—¶è¿è¡Œå®¢æˆ·ç«¯å’ŒæœåŠ¡å™¨ã€‚\n"
+"[b]注æ„:[/b] 高阶的多人游æˆAPIåè®®å®žçŽ°ç»†èŠ‚ï¼Œå¹¶ä¸æ„味ç€å¯ä»¥è¢«éžGodotæœåŠ¡å™¨ä½¿"
+"用。它å¯èƒ½ä¼šæ”¹å˜ï¼Œä¸åšå¦è¡Œé€šçŸ¥ã€‚"
#: doc/classes/MultiplayerAPI.xml:18
msgid ""
@@ -41433,7 +41779,6 @@ msgstr ""
"å³å‘所有对等体广播。"
#: doc/classes/MultiplayerAPI.xml:71
-#, fuzzy
msgid ""
"If [code]true[/code] (or if the [member network_peer] has [member PacketPeer."
"allow_object_decoding] set to [code]true[/code]), the MultiplayerAPI will "
@@ -41442,8 +41787,9 @@ msgid ""
"Do not use this option if the serialized object comes from untrusted sources "
"to avoid potential security threats such as remote code execution."
msgstr ""
-"如果[code]true[/code],多人游æˆAPIå°†å…许在RPC/RSETs期间对对象进行编ç å’Œè§£"
-"ç ã€‚\n"
+"如果[code]true[/code],或者如果[member network_peer]的[member PacketPeer."
+"allow_object_decoding]设置为[code]true[/code],多人游æˆAPIå°†å…许在RPC/RSETs期"
+"间的对象进行编ç å’Œè§£ç ã€‚\n"
"[b]警告:[/b] ååºåˆ—化的对象å¯èƒ½åŒ…å«ä¼šè¢«æ‰§è¡Œçš„代ç ã€‚如果åºåˆ—化的对象æ¥è‡ªä¸å—"
"ä¿¡ä»»çš„æ¥æºï¼Œè¯·ä¸è¦ä½¿ç”¨è¿™ä¸ªé€‰é¡¹ï¼Œä»¥é¿å…潜在的安全å¨èƒï¼Œå¦‚è¿œç¨‹ä»£ç æ‰§è¡Œã€‚"
@@ -41472,7 +41818,6 @@ msgstr ""
"连接。"
#: doc/classes/MultiplayerAPI.xml:81
-#, fuzzy
msgid ""
"The root node to use for RPCs. Instead of an absolute path, a relative path "
"will be used to find the node upon which the RPC should be executed.\n"
@@ -41480,10 +41825,9 @@ msgid ""
"managed by different MultiplayerAPI, allowing for example to run both client "
"and server in the same scene."
msgstr ""
-"设置用于 RPC çš„åŸºæœ¬æ ¹èŠ‚ç‚¹ã€‚å°†ä½¿ç”¨ç›¸å¯¹è·¯å¾„è€Œä¸æ˜¯ç»å¯¹è·¯å¾„æ¥æŸ¥æ‰¾åº”在其上执行 "
-"RPC 的节点。\n"
-"这有效地å…许场景树的ä¸åŒåˆ†æ”¯ç”±ä¸åŒçš„ MultiplayerAPI 管ç†ï¼Œä¾‹å¦‚å…许在åŒä¸€åœºæ™¯"
-"中è¿è¡Œå®¢æˆ·ç«¯å’ŒæœåŠ¡å™¨ã€‚"
+"用于RPC的根节点。ä¸ä½¿ç”¨ç»å¯¹è·¯å¾„,而是使用相对路径æ¥å¯»æ‰¾åº”该执行RPC的节点。\n"
+"这有效地å…许场景树的ä¸åŒåˆ†æ”¯ç”±ä¸åŒçš„MultiplayerAPI管ç†ï¼Œä¾‹å¦‚å…许在åŒä¸€ä¸ªåœºæ™¯"
+"ä¸­åŒæ—¶è¿è¡Œå®¢æˆ·ç«¯å’ŒæœåŠ¡å™¨ã€‚"
#: doc/classes/MultiplayerAPI.xml:88
msgid ""
@@ -41585,13 +41929,12 @@ msgstr ""
"å—æ¥è‡ªèŠ‚ç‚¹çš„ç½‘ç»œä¸»ç«™çš„è°ƒç”¨æˆ–å±žæ€§æ›´æ”¹ï¼Œè§[method Node.set_network_master]。"
#: doc/classes/MultiplayerAPI.xml:135
-#, fuzzy
msgid ""
"[i]Deprecated.[/i] Use [constant RPC_MODE_PUPPET] instead. Analogous to the "
"[code]slave[/code] keyword."
msgstr ""
-"行为类似于 [constant RPC_MODE_PUPPET],但也会使调用或属性在本地改å˜ã€‚类似于 "
-"[code]puppetsync[/code] 关键字。"
+"[i]已废弃。[/i] 使用[constant RPC_MODE_PUPPET]代替。类似于[code]slave[/code]"
+"关键字。"
#: doc/classes/MultiplayerAPI.xml:138
msgid ""
@@ -41602,13 +41945,12 @@ msgstr ""
"[code]remoteesync[/code]关键字。"
#: doc/classes/MultiplayerAPI.xml:141
-#, fuzzy
msgid ""
"[i]Deprecated.[/i] Use [constant RPC_MODE_REMOTESYNC] instead. Analogous to "
"the [code]sync[/code] keyword."
msgstr ""
-"行为类似于[constant RPC_MODE_REMOTE],但也会使调用或属性在本地改å˜ã€‚类似于"
-"[code]remoteesync[/code]关键字。"
+"[i]已废弃。[/i] 使用[constant RPC_MODE_REMOTESYNC]代替。类似于[code]sync[/"
+"code]关键字。"
#: doc/classes/MultiplayerAPI.xml:144
msgid ""
@@ -41647,8 +41989,8 @@ msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/threads/using_multiple_threads."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/threads/using_multiple_threads."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/threads/"
+"using_multiple_threads.html"
#: doc/classes/Mutex.xml:16
msgid ""
@@ -41660,14 +42002,15 @@ msgstr ""
"[b]注æ„:[/b] å¦‚æžœçº¿ç¨‹å·²ç»æ‹¥æœ‰äº’æ–¥é”的所有æƒï¼Œè¯¥å‡½æ•°å°†æ— é˜»å¡žåœ°è¿”回。"
#: doc/classes/Mutex.xml:23
-#, fuzzy
msgid ""
"Tries locking this [Mutex], but does not block. Returns [constant OK] on "
"success, [constant ERR_BUSY] otherwise.\n"
"[b]Note:[/b] This function returns [constant OK] if the thread already has "
"ownership of the mutex."
msgstr ""
-"试图é”定这个[Mutex],但并ä¸é˜»å¡žã€‚æˆåŠŸæ—¶è¿”å›ž[常é‡OK],å¦åˆ™è¿”回[常é‡ERR_BUSY]。"
+"试图é”定此[Mutex],但并ä¸é˜»å¡žã€‚æˆåŠŸæ—¶è¿”å›ž[constant OK],å¦åˆ™è¿”回[constant "
+"ERR_BUSY]。\n"
+"[b]注æ„:[/b] å¦‚æžœçº¿ç¨‹å·²ç»æ‹¥æœ‰äº†è¯¥Mutex的所有æƒï¼Œè¯¥å‡½æ•°è¿”回[constant OK]。"
#: doc/classes/Mutex.xml:30
msgid ""
@@ -41713,7 +42056,6 @@ msgstr ""
"字符串。"
#: modules/gdnative/doc_classes/NativeScript.xml:40
-#, fuzzy
msgid ""
"Constructs a new object of the base type with a script of this type already "
"attached.\n"
@@ -41721,8 +42063,8 @@ msgid ""
"passed to the native constructor function. This will change with in a future "
"API extension."
msgstr ""
-"构建一个基本类型的新对象,并附加一个该类型的脚本。\n"
-"[i]注æ„[/i]ã€‚ä¼ é€’ç»™è¿™ä¸ªå‡½æ•°çš„ä»»ä½•å‚æ•°éƒ½å°†è¢«å¿½ç•¥ï¼Œä¸ä¼šä¼ é€’给本地构造函数。这将"
+"构建基础类型的新对象,并附加此类型的脚本。\n"
+"[b]注æ„:[/b] ä¼ é€’ç»™è¿™ä¸ªå‡½æ•°çš„ä»»ä½•å‚æ•°å°†è¢«å¿½ç•¥ï¼Œä¸ä¼šä¼ é€’给局部构造函数。这将"
"在未æ¥çš„API扩展中改å˜ã€‚"
#: doc/classes/Navigation.xml:4
@@ -41730,7 +42072,6 @@ msgid "Mesh-based navigation and pathfinding node."
msgstr "基于网格的导航和寻路节点。"
#: doc/classes/Navigation.xml:7
-#, fuzzy
msgid ""
"Provides navigation and pathfinding within a collection of "
"[NavigationMesh]es. By default, these will be automatically collected from "
@@ -41742,19 +42083,21 @@ msgid ""
"not always return optimal paths as expected. These issues will be fixed in "
"Godot 4.0."
msgstr ""
-"在[NavigationMesh]的集åˆä¸­æä¾›å¯¼èˆªå’Œå¯»è·¯ã€‚这将会从å­èŠ‚ç‚¹[NavigationRegion3D]"
-"中被自动收集。除了基本的寻路,这个类还帮助导航代ç†ä¸Žå¯¼èˆªä¸Šçš„网格对é½ã€‚"
+"在[NavigationMesh]的集åˆä¸­æä¾›å¯¼èˆªå’Œå¯»è·¯åŠŸèƒ½ã€‚é»˜è®¤æƒ…å†µä¸‹ï¼Œè¿™äº›å°†è‡ªåŠ¨ä»Žå­"
+"[NavigationMeshInstance]节点中收集,也å¯ä»¥é€šè¿‡[method navmesh_add]峿—¶æ·»åŠ ã€‚"
+"除了基本的寻路之外,这个类还能帮助导航代ç†ä¸Žå…¶æ‰€å¯¼èˆªçš„网格对é½ã€‚\n"
+"[b]注æ„:[/b] ç›®å‰çš„å¯¼èˆªç³»ç»Ÿæœ‰è®¸å¤šå·²çŸ¥çš„é—®é¢˜ï¼Œå¹¶ä¸æ€»æ˜¯èƒ½åƒé¢„期的那样返回最佳"
+"路径。这些问题将在Godot 4.0中得到解决。"
#: doc/classes/Navigation.xml:11 doc/classes/NavigationMesh.xml:10
msgid "https://godotengine.org/asset-library/asset/124"
msgstr "https://godotengine.org/asset-library/asset/124"
#: doc/classes/Navigation.xml:18 doc/classes/Navigation2D.xml:18
-#, fuzzy
msgid ""
"Returns the navigation point closest to the point given. Points are in local "
"coordinate space."
-msgstr "è¿”å›žæŒ‡å®šåæ ‡çš„图集或自动图å—中,å­å›¾å—的导航多边形。"
+msgstr "返回最接近给定点的导航点。点ä½äºŽå±€éƒ¨å标空间。"
#: doc/classes/Navigation.xml:25
msgid ""
@@ -41788,7 +42131,6 @@ msgstr ""
"导航网格之间的交点。如果找到多个交点,则返回最接近线段起点的交点。"
#: doc/classes/Navigation.xml:50
-#, fuzzy
msgid ""
"Returns the path between two given points. Points are in local coordinate "
"space. If [code]optimize[/code] is [code]true[/code] (the default), the "
@@ -41797,9 +42139,11 @@ msgid ""
"[b]Note:[/b] This method has known issues and will often return non-optimal "
"paths. These issues will be fixed in Godot 4.0."
msgstr ""
-"è¿”å›žä¸¤ä¸ªç»™å®šç‚¹ä¹‹é—´çš„è·¯å¾„ã€‚ç‚¹åœ¨å±€éƒ¨åæ ‡ç©ºé—´ä¸­ã€‚如果[code]optimize[/code] 为 "
-"[code]true[/code](默认值),则在路径计算中考虑与æ¯ä¸ª[NavigationMesh]相关è”的代"
-"ç†å±žæ€§(åŠå¾„ã€é«˜åº¦ç­‰),å¦åˆ™å®ƒä»¬å°†è¢«å¿½ç•¥ã€‚"
+"è¿”å›žä¸¤ä¸ªç»™å®šç‚¹ä¹‹é—´çš„è·¯å¾„ã€‚ç‚¹æ˜¯åœ¨å±€éƒ¨åæ ‡ç©ºé—´ä¸­ã€‚如果[code]optimize[/code]是"
+"[code]true[/code](默认),与æ¯ä¸ª[NavigationMesh]相关的代ç†å±žæ€§ï¼ˆåŠå¾„ã€é«˜åº¦"
+"等)在路径计算中被考虑,å¦åˆ™å…¶è¢«å¿½ç•¥ã€‚\n"
+"[b]注æ„:[/b] 这个方法有已知的问题,ç»å¸¸ä¼šè¿”å›žéžæœ€ä½³çš„路径。这些问题将在"
+"Godot 4.0中得到修正。"
#: doc/classes/Navigation.xml:60
msgid ""
@@ -41813,14 +42157,12 @@ msgstr ""
"的 [code]owner[/code] 用作 [method get_closest_point_owner] 的返回值。"
#: doc/classes/Navigation.xml:67
-#, fuzzy
msgid "Removes the [NavigationMesh] with the given ID."
-msgstr "返回指定å称的动画节点。"
+msgstr "移除具有指定ID的[NavigationMesh]。"
#: doc/classes/Navigation.xml:75
-#, fuzzy
msgid "Sets the transform applied to the [NavigationMesh] with the given ID."
-msgstr "返回应用于该项导航网格的转æ¢ã€‚"
+msgstr "设置应用于具有指定IDçš„[NavigationMesh]çš„å˜æ¢ã€‚"
#: doc/classes/Navigation.xml:81
msgid ""
@@ -41835,7 +42177,6 @@ msgid "2D navigation and pathfinding node."
msgstr "2D导航和寻路节点。"
#: doc/classes/Navigation2D.xml:7
-#, fuzzy
msgid ""
"Navigation2D provides navigation and pathfinding within a 2D area, specified "
"as a collection of [NavigationPolygon] resources. By default, these are "
@@ -41845,8 +42186,11 @@ msgid ""
"not always return optimal paths as expected. These issues will be fixed in "
"Godot 4.0."
msgstr ""
-"Navigation2D在一个2D区域内æä¾›å¯¼èˆªå’Œå¯»è·¯ï¼ŒæŒ‡å®šä¸º[NavigationPolygon]资æºçš„集"
-"åˆã€‚这些资æºè¢«è‡ªåŠ¨ä»Žå­[NavigationRegion2D]节点中收集。"
+"Navigation2D在2D区域内æä¾›å¯¼èˆªå’Œå¯»è·¯ï¼ŒæŒ‡å®šä¸º[NavigationPolygon]资æºçš„集åˆã€‚默"
+"认情况下,这些资æºè‡ªåŠ¨ä»Žå­[NavigationPolygonInstance]节点中收集,但其也å¯ä»¥é€š"
+"过[method navpoly_add]峿—¶æ·»åŠ ã€‚\n"
+"[b]注æ„:[/b] 当å‰çš„å¯¼èˆªç³»ç»Ÿæœ‰è®¸å¤šå·²çŸ¥çš„é—®é¢˜ï¼Œå¹¶ä¸æ€»æ˜¯èƒ½åƒé¢„期的那样返回最佳"
+"的路径。这些问题将在Godot 4.0中得到解决。"
#: doc/classes/Navigation2D.xml:11 doc/classes/NavigationPolygon.xml:27
msgid "https://godotengine.org/asset-library/asset/117"
@@ -41865,7 +42209,6 @@ msgstr ""
"给定的所有者(如果çœç•¥ [code]owner[/code] 傿•°ï¼Œåˆ™è¿”回 [code]null[/code])。"
#: doc/classes/Navigation2D.xml:34
-#, fuzzy
msgid ""
"Returns the path between two given points. Points are in local coordinate "
"space. If [code]optimize[/code] is [code]true[/code] (the default), the path "
@@ -41873,8 +42216,10 @@ msgid ""
"[b]Note:[/b] This method has known issues and will often return non-optimal "
"paths. These issues will be fixed in Godot 4.0."
msgstr ""
-"è¿”å›žä¸¤ä¸ªç»™å®šç‚¹ä¹‹é—´çš„è·¯å¾„ã€‚ç‚¹åœ¨å±€éƒ¨åæ ‡ç©ºé—´ä¸­ã€‚如果[code]optimize[/code]为"
-"[code]true[/code](默认),则路径将通过åˆå¹¶è·¯å¾„段æ¥å¹³æ»‘。"
+"è¿”å›žä¸¤ä¸ªç»™å®šç‚¹ä¹‹é—´çš„è·¯å¾„ã€‚ç‚¹æ˜¯åœ¨å±€éƒ¨åæ ‡ç©ºé—´ä¸­ã€‚如果[code]optimize[/code]为"
+"[code]true[/code](默认值),路径将尽å¯èƒ½åœ°åˆå¹¶è·¯å¾„段,从而平滑。\n"
+"[b]注æ„:[/b] 这个方法有已知的问题,ç»å¸¸ä¼šè¿”å›žéžæœ€ä½³çš„路径。这些问题将在"
+"Godot 4.0中得到解决。"
#: doc/classes/Navigation2D.xml:44
msgid ""
@@ -41888,15 +42233,13 @@ msgstr ""
"的 [code]owner[/code] 用作 [method get_closest_point_owner] 的返回值。"
#: doc/classes/Navigation2D.xml:51
-#, fuzzy
msgid "Removes the [NavigationPolygon] with the given ID."
-msgstr "返回图å—的导航多边形。"
+msgstr "移除具有指定ID的[NavigationPolygon]。"
#: doc/classes/Navigation2D.xml:59
-#, fuzzy
msgid ""
"Sets the transform applied to the [NavigationPolygon] with the given ID."
-msgstr "返回应用于该项导航网格的转æ¢ã€‚"
+msgstr "设置应用于具有指定IDçš„[NavigationPolygon]çš„å˜æ¢ã€‚"
#: doc/classes/NavigationMesh.xml:4
msgid "A mesh to approximate the walkable areas and obstacles."
@@ -41918,10 +42261,9 @@ msgid ""
msgstr "使用调用[method get_vertices]得到的顶点的索引添加一个多边形。"
#: doc/classes/NavigationMesh.xml:23
-#, fuzzy
msgid ""
"Clears the array of polygons, but it doesn't clear the array of vertices."
-msgstr "æ¸…é™¤å¤šè¾¹å½¢æ•°ç»„ï¼Œä½†ä¸æ¸…除轮廓和顶点数组。"
+msgstr "æ¸…é™¤å¤šè¾¹å½¢æ•°ç»„ï¼Œä½†ä¸æ¸…除顶点数组。"
#: doc/classes/NavigationMesh.xml:30
msgid ""
@@ -41930,30 +42272,26 @@ msgid ""
msgstr "é€šè¿‡æ ¹æ® [Mesh] 设置顶点和索引æ¥åˆå§‹åŒ–导航网格。"
#: doc/classes/NavigationMesh.xml:37
-#, fuzzy
msgid ""
"Returns whether the specified [code]bit[/code] of the [member geometry/"
"collision_mask] is set."
-msgstr "如果指定碰撞é®ç½©bitä½è¢«è®¾ç½®ï¼Œè¿”回[code]true[/code]。"
+msgstr "返回[member geometry/collision_mask]的指定[code]bit[/code]是å¦è¢«è®¾ç½®ã€‚"
#: doc/classes/NavigationMesh.xml:44 doc/classes/NavigationPolygon.xml:81
-#, fuzzy
msgid ""
"Returns a [PoolIntArray] containing the indices of the vertices of a created "
"polygon."
-msgstr "返回一个[PackedInt32Array],其中包å«ä¸€ä¸ªåˆ›å»ºå¤šè¾¹å½¢çš„顶点的索引。"
+msgstr "返回包å«åˆ›å»ºçš„多边形顶点索引的[PoolIntArray]。"
#: doc/classes/NavigationMesh.xml:50
-#, fuzzy
msgid "Returns the number of polygons in the navigation mesh."
-msgstr "返回动画中的帧数。"
+msgstr "返回导航网格中的多边形数é‡ã€‚"
#: doc/classes/NavigationMesh.xml:56
-#, fuzzy
msgid ""
"Returns a [PoolVector3Array] containing all the vertices being used to "
"create the polygons."
-msgstr "返回一个[PackedVector2Array]ï¼ŒåŒ…å«æ‰€æœ‰ç”¨äºŽåˆ›å»ºå¤šè¾¹å½¢çš„顶点。"
+msgstr "返回包å«ç”¨äºŽåˆ›å»ºå¤šè¾¹å½¢çš„æ‰€æœ‰é¡¶ç‚¹çš„[PoolVector3Array]。"
#: doc/classes/NavigationMesh.xml:64
msgid ""
@@ -41993,9 +42331,8 @@ msgstr ""
"[b]注æ„:[/b]烘焙时,该值将å‘下èˆå…¥åˆ°æœ€æŽ¥è¿‘çš„[member cell/height]çš„å€æ•°ã€‚"
#: doc/classes/NavigationMesh.xml:86
-#, fuzzy
msgid "The maximum slope that is considered walkable, in degrees."
-msgstr "一个 Agent 能移动的最大速度。"
+msgstr "认为å¯è¡Œèµ°çš„æœ€å¤§å¡åº¦ï¼Œå•使˜¯åº¦ã€‚"
#: doc/classes/NavigationMesh.xml:89
msgid ""
@@ -42008,9 +42345,8 @@ msgstr ""
"[b]注æ„:[/b]烘焙时,这个值会å‘ä¸Šå–æ•´åˆ°æœ€æŽ¥è¿‘çš„[member cell/size]çš„å€æ•°ã€‚"
#: doc/classes/NavigationMesh.xml:93
-#, fuzzy
msgid "The Y axis cell size to use for fields."
-msgstr "ç”¨äºŽâ€œå‘¼å«æ–¹æ³•â€è½¨é“çš„å‘¼å«æ¨¡å¼ã€‚"
+msgstr "用于字段Yè½´å•元的尺寸。"
#: doc/classes/NavigationMesh.xml:96
msgid "The XZ plane cell size to use for fields."
@@ -42051,9 +42387,8 @@ msgstr ""
"行走范围标记为ä¸å¯è¡Œèµ°ã€‚"
#: doc/classes/NavigationMesh.xml:115
-#, fuzzy
msgid "If [code]true[/code], marks spans that are ledges as non-walkable."
-msgstr "如果[code]true[/code],则å¯ç”¨ä¼ é€’弿Œ‰åŽ‹ã€‚"
+msgstr "如果[code]true[/code],标记边缘间的跨度为ä¸å¯è¡Œèµ°ã€‚"
#: doc/classes/NavigationMesh.xml:118
msgid ""
@@ -42074,18 +42409,16 @@ msgstr ""
"PARSED_GEOMETRY_STATIC_COLLIDERS]或[constant PARSED_GEOMETRY_BOTH]æ—¶æ‰ä½¿ç”¨ã€‚"
#: doc/classes/NavigationMesh.xml:125
-#, fuzzy
msgid ""
"Determines which type of nodes will be parsed as geometry. See [enum "
"ParsedGeometryType] for possible values."
-msgstr "设置关节类型。有关å¯èƒ½çš„值,请å‚阅[enum JointType]。"
+msgstr "决定哪ç§ç±»åž‹çš„节点å¯è§£æžä¸ºå‡ ä½•图形。å‚阅[enum ParsedGeometryType]。"
#: doc/classes/NavigationMesh.xml:128
-#, fuzzy
msgid ""
"The source of the geometry used when baking. See [enum SourceGeometryMode] "
"for possible values."
-msgstr "背景模å¼ã€‚请å‚阅[enum BGMode]了解å¯èƒ½çš„值。"
+msgstr "烘焙时使用的几何体的æºã€‚å‚阅[enum SourceGeometryMode]。"
#: doc/classes/NavigationMesh.xml:131
msgid ""
@@ -42128,11 +42461,10 @@ msgstr ""
"将把å•元格的数é‡è®¾ä¸º64。"
#: doc/classes/NavigationMesh.xml:146
-#, fuzzy
msgid ""
"Partitioning algorithm for creating the navigation mesh polys. See [enum "
"SamplePartitionType] for possible values."
-msgstr "图å—åŽŸç‚¹çš„åæ ‡ã€‚有关å¯èƒ½çš„值,å‚阅[enum TileOrigin]。"
+msgstr "创建导航网格polyså•元的分割算法。å‚阅[enum SamplePartitionType]。"
#: doc/classes/NavigationMesh.xml:151
msgid ""
@@ -42154,9 +42486,8 @@ msgid ""
msgstr "层分区。用于具有中å°åž‹ç“·ç –的平铺导航网格的ä¸é”™é€‰æ‹©ã€‚"
#: doc/classes/NavigationMesh.xml:160
-#, fuzzy
msgid "Represents the size of the [enum SamplePartitionType] enum."
-msgstr "表示[enum PortType]枚举的大å°ã€‚"
+msgstr "表示[enum SamplePartitionType]枚举的大å°ã€‚"
#: doc/classes/NavigationMesh.xml:163
msgid ""
@@ -42182,9 +42513,8 @@ msgstr ""
"PARSED_GEOMETRY_STATIC_COLLIDERS]."
#: doc/classes/NavigationMesh.xml:172
-#, fuzzy
msgid "Represents the size of the [enum ParsedGeometryType] enum."
-msgstr "表示[enum PortType]枚举的大å°ã€‚"
+msgstr "表示[enum ParsedGeometryType]枚举的大å°ã€‚"
#: doc/classes/NavigationMesh.xml:175
msgid ""
@@ -42208,14 +42538,12 @@ msgstr ""
"定。"
#: doc/classes/NavigationMesh.xml:184
-#, fuzzy
msgid "Represents the size of the [enum SourceGeometryMode] enum."
-msgstr "代表[enum ShaderMode]枚举的大å°ã€‚"
+msgstr "表示[enum SourceGeometryMode]枚举的大å°ã€‚"
#: doc/classes/NavigationMeshInstance.xml:4
-#, fuzzy
msgid "Node that instances navigation meshes into a scenario."
-msgstr "网格实例与场景相结åˆçš„节点。"
+msgstr "将导航网格实例化为场景的节点。"
#: doc/classes/NavigationMeshInstance.xml:7
msgid ""
@@ -42226,14 +42554,12 @@ msgstr ""
"例将其添加到当å‰åœºæ™¯ä¸­ã€‚"
#: doc/classes/NavigationMeshInstance.xml:15
-#, fuzzy
msgid "If [code]true[/code], the navigation mesh will be used by [Navigation]."
-msgstr "如果 [code]true[/code] 时,[AnimationTree] 将执行逻辑处ç†ã€‚"
+msgstr "如果[code]true[/code],导航网格将由[Navigation]使用。"
#: doc/classes/NavigationMeshInstance.xml:18
-#, fuzzy
msgid "The [NavigationMesh] resource for the instance."
-msgstr "该实例的[Mesh]资æºã€‚"
+msgstr "实例的[NavigationMesh]资æºã€‚"
#: doc/classes/NavigationPolygon.xml:4
msgid ""
@@ -42261,55 +42587,52 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
msgstr ""
-"åˆ›å»ºå¤šè¾¹å½¢æœ‰ä¸¤ç§æ–¹æ³•。è¦ä¹ˆä½¿ç”¨[method add_outline]方法,è¦ä¹ˆä½¿ç”¨[method "
-"add_polygon]方法。\n"
-"使用[method add_outline]:\n"
+"æœ‰ä¸¤ç§æ–¹æ³•æ¥åˆ›å»ºå¤šè¾¹å½¢ã€‚[method add_outline]或[method add_polygon]方法。\n"
+"使用[method add_outline]方法:\n"
"[codeblock]\n"
"var polygon = NavigationPolygon.new()\n"
-"var outline = PackedVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
+"var outline = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.add_outline(outline)\n"
"polygon.make_polygons_from_outlines()\n"
-"$NavigationRegion2D.navpoly = polygon\n"
+"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]\n"
-"使用[method add_polygon] 和顶点数组的索引:\n"
+"使用[method add_polygon]和顶点数组的索引:\n"
"[codeblock]\n"
"var polygon = NavigationPolygon.new()\n"
-"var vertices = PackedVector2Array([Vector2(0, 0), Vector2(0, 50), "
-"Vector2(50, 50), Vector2(50, 0)])\n"
+"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
+"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PackedInt32Array(0, 3, 1)\n"
+"var indices = PoolIntArray(0, 3, 1)\n"
"polygon.add_polygon(indices)\n"
-"$NavigationRegion2D.navpoly = polygon\n"
+"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
#: doc/classes/NavigationPolygon.xml:34
-#, fuzzy
msgid ""
"Appends a [PoolVector2Array] that contains the vertices of an outline to the "
"internal array that contains all the outlines. You have to call [method "
"make_polygons_from_outlines] in order for this array to be converted to "
"polygons that the engine will use."
msgstr ""
-"将包å«è½®å»“顶点的[PackedVector2Array]è¿½åŠ åˆ°åŒ…å«æ‰€æœ‰è½®å»“的内部数组。你必须调用"
-"[method make_polygons_from_outline]æ‰èƒ½å°†è¿™ä¸ªæ•°ç»„转æ¢ä¸ºå¼•擎将使用的多边形。"
+"将包å«è½®å»“顶点的[PoolVector2Array]æ·»åŠ åˆ°åŒ…å«æ‰€æœ‰è½®å»“的内部数组中。你必须调用"
+"[method make_polygons_from_outlines],将数组转æ¢ä¸ºå¼•擎å¯ä½¿ç”¨çš„多边形。"
#: doc/classes/NavigationPolygon.xml:42
-#, fuzzy
msgid ""
"Adds a [PoolVector2Array] that contains the vertices of an outline to the "
"internal array that contains all the outlines at a fixed position. You have "
"to call [method make_polygons_from_outlines] in order for this array to be "
"converted to polygons that the engine will use."
msgstr ""
-"将包å«è½®å»“顶点的[PackedVector2Array]添加到包å«å›ºå®šä½ç½®çš„æ‰€æœ‰è½®å»“的内部数组"
-"中。你必须调用[method make_polygons_from_outline]æ‰èƒ½å°†è¿™ä¸ªæ•°ç»„转æ¢ä¸ºå¼•擎将使"
-"用的多边形。"
+"将包å«è½®å»“顶点的[PoolVector2Array]æ·»åŠ åˆ°å†…éƒ¨æ•°ç»„ä¸­ï¼Œè¯¥æ•°ç»„åŒ…å«æ‰€æœ‰å›ºå®šä½ç½®çš„"
+"轮廓。你必须调用[method make_polygons_from_outlines],将数组转æ¢ä¸ºå¼•擎å¯ä½¿ç”¨"
+"的多边形。"
#: doc/classes/NavigationPolygon.xml:55
msgid ""
@@ -42324,11 +42647,10 @@ msgid ""
msgstr "æ¸…é™¤å¤šè¾¹å½¢æ•°ç»„ï¼Œä½†ä¸æ¸…除轮廓和顶点数组。"
#: doc/classes/NavigationPolygon.xml:68
-#, fuzzy
msgid ""
"Returns a [PoolVector2Array] containing the vertices of an outline that was "
"created in the editor or by script."
-msgstr "返回一个[PackedVector2Array],包å«åœ¨ç¼–辑器或脚本中创建的轮廓的顶点。"
+msgstr "返回[PoolVector2Array],包å«åœ¨ç¼–辑器中或通过脚本创建的轮廓的顶点。"
#: doc/classes/NavigationPolygon.xml:74
msgid ""
@@ -42340,11 +42662,10 @@ msgid "Returns the count of all polygons."
msgstr "返回多边形的数é‡ã€‚"
#: doc/classes/NavigationPolygon.xml:93
-#, fuzzy
msgid ""
"Returns a [PoolVector2Array] containing all the vertices being used to "
"create the polygons."
-msgstr "返回一个[PackedVector2Array]ï¼ŒåŒ…å«æ‰€æœ‰ç”¨äºŽåˆ›å»ºå¤šè¾¹å½¢çš„顶点。"
+msgstr "返回包å«ç”¨äºŽåˆ›å»ºå¤šè¾¹å½¢çš„æ‰€æœ‰é¡¶ç‚¹çš„[PoolVector2Array]。"
#: doc/classes/NavigationPolygon.xml:99
msgid "Creates polygons from the outlines added in the editor or by script."
@@ -42399,7 +42720,7 @@ msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/networking/"
"high_level_multiplayer.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/networking/"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/networking/"
"high_level_multiplayer.html"
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:13
@@ -42470,7 +42791,7 @@ msgid ""
msgstr ""
"创建æœåŠ¡å™¨ï¼Œé€šè¿‡[code]port[/code]监å¬è¿žæŽ¥ã€‚该端å£éœ€è¦æ˜¯ä¸€ä¸ªå¯ç”¨çš„ã€æœªä½¿ç”¨çš„端"
"å£ï¼Œåœ¨0到65535之间。注æ„,低于1024çš„ç«¯å£æ˜¯ç‰¹æƒç«¯å£ï¼Œæ ¹æ®å¹³å°çš„ä¸åŒå¯èƒ½éœ€è¦æ"
-"高æƒé™ã€‚è¦æ”¹å˜æœåŠ¡å™¨ç›‘å¬çš„æŽ¥å£ï¼Œè¯·ä½¿ç”¨[方法set_bind_ip]。默认IP是通é…符"
+"高æƒé™ã€‚è¦æ”¹å˜æœåŠ¡å™¨ç›‘å¬çš„æŽ¥å£ï¼Œè¯·ä½¿ç”¨[method set_bind_ip]。默认IP是通é…符"
"[code]\"*\"[/code]ï¼Œå®ƒç›‘å¬æ‰€æœ‰å¯ç”¨çš„æŽ¥å£ã€‚[code]max_clients[/code]是å…è®¸åŒæ—¶"
"进行的最大客户数,å¯ä»¥ä½¿ç”¨ä»»ä½•数字,最高å¯è¾¾4095,尽管å¯å®žçŽ°çš„åŒæ—¶è¿›è¡Œçš„客户"
"æ•°å¯èƒ½è¦ä½Žå¾—多,并且å–å†³äºŽåº”ç”¨ã€‚å…³äºŽå¸¦å®½å‚æ•°çš„其他细节,è§[method "
@@ -42652,7 +42973,6 @@ msgstr ""
"channel_count]。"
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:139
-#, fuzzy
msgid ""
"When enabled, the client or server created by this peer, will use "
"[PacketPeerDTLS] instead of raw UDP sockets for communicating with the "
@@ -42664,20 +42984,21 @@ msgid ""
"dtls_verify] option, and configure the certificate accordingly via [method "
"set_dtls_certificate]."
msgstr ""
-"当å¯ç”¨æ—¶ï¼Œç”±è¿™ä¸ªå¯¹ç­‰ä½“创建的客户端或æœåŠ¡å™¨å°†ä½¿ç”¨[PacketPeerDTLS]è€Œä¸æ˜¯åŽŸå§‹çš„"
-"UDP套接字æ¥ä¸Žè¿œç¨‹å¯¹ç­‰ä½“通信。这将使通信使用DTLS加密,但代价是更高的资æºä½¿ç”¨å’Œ"
-"潜在的更大的包大å°ã€‚\n"
-"注æ„:在创建DTLSæœåŠ¡å™¨æ—¶ï¼Œè¯·ç¡®ä¿é€šè¿‡[method set_dtls_key]å’Œ[method "
-"set_dtls_certificate]设置密钥/è¯ä¹¦å¯¹ã€‚对于DTLS客户端,请查看[member "
-"dtls_verify]选项,并通过[method set_dtls_certificate]é…置相应的è¯ä¹¦ã€‚"
+"å¯ç”¨åŽï¼Œç”±è¯¥å¯¹ç­‰ä½“创建的客户端或æœåŠ¡å™¨å°†ä½¿ç”¨[PacketPeerDTLS]ï¼Œè€Œä¸æ˜¯åŽŸå§‹UDP套"
+"接字与远程对等体进行通信。通信使用DTLS加密,代价是更高的资æºå ç”¨å’Œå¯èƒ½æ›´å¤§çš„"
+"æ•°æ®åŒ…。\n"
+"[b]注æ„:[/b] 当创建DTLSæœåŠ¡å™¨æ—¶ï¼Œç¡®ä¿ç”¨[method set_dtls_key]å’Œ[method "
+"set_dtls_certificate]设置密钥/è¯ä¹¦å¯¹ã€‚对于DTLS客户端,查看[member "
+"dtls_verify]选项,用[method set_dtls_certificate]é…置相应的è¯ä¹¦ã€‚"
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:145
-#, fuzzy
msgid ""
"No compression. This uses the most bandwidth, but has the upside of "
"requiring the fewest CPU resources. This option may also be used to make "
"network debugging using tools like Wireshark easier."
-msgstr "ä¸åŽ‹ç¼©ã€‚è¿™å°†ä½¿ç”¨æœ€å¤šçš„å¸¦å®½ï¼Œä½†æœ‰ä¸€ä¸ªå¥½å¤„ï¼Œé‚£å°±æ˜¯éœ€è¦æœ€å°‘çš„CPU资æºã€‚"
+msgstr ""
+"无压缩。这使用最多的带宽,但具有å ç”¨æœ€å°‘ CPU 资æºçš„好处。这个选项å¯ä»¥ç”¨äºŽ"
+"Wireshark等工具使用,更容易进行网络调试。"
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:148
msgid ""
@@ -42697,7 +43018,6 @@ msgstr ""
"比,该选项使用的CPUèµ„æºæ›´å°‘,但使用的带宽更多。"
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:154
-#, fuzzy
msgid ""
"[url=https://www.zlib.net/]Zlib[/url] compression. This option uses less "
"bandwidth compared to [constant COMPRESS_FASTLZ], at the expense of using "
@@ -42705,8 +43025,9 @@ msgid ""
"packets smaller than 4 KB. Therefore, it's recommended to use other "
"compression algorithms in most cases."
msgstr ""
-"[url = https://www.zlib.net/] Zlib压缩[/ url]。与[constant COMPRESS_FASTLZ]相"
-"比,这个选项以使用更多CPU资æºä¸ºä»£ä»·ï¼Œæ¢å–更少的带宽å ç”¨ã€‚"
+"[url=https://www.zlib.net/]Zlib[/url]压缩。与 [constant COMPRESS_FASTLZ] 相"
+"比,这个选项使用较少的带宽,但代价是使用更多的 CPU 资æºã€‚请注æ„,这ç§ç®—法对å°"
+"于4KB的数æ®åŒ…䏿˜¯å¾ˆæœ‰æ•ˆã€‚因此,建议在大多数情况下使用其他压缩算法。"
#: modules/enet/doc_classes/NetworkedMultiplayerENet.xml:157
msgid "[url=https://facebook.github.io/zstd/]Zstandard[/url] compression."
@@ -42890,22 +43211,18 @@ msgstr ""
"素。"
#: doc/classes/NinePatchRect.xml:30
-#, fuzzy
msgid ""
"The stretch mode to use for horizontal stretching/tiling. See [enum "
"NinePatchRect.AxisStretchMode] for possible values."
msgstr ""
-"æŽ§åˆ¶å¦‚ä½•æ°´å¹³æ‹‰ä¼¸æˆ–å¹³é“ºæ ·å¼æ¡†çš„纹ç†ã€‚有关å¯èƒ½çš„值,请å‚阅 [enum "
-"AxisStretchMode]。"
+"水平拉伸/平铺时使用的拉伸模å¼ã€‚å‚阅[enum NinePatchRect.AxisStretchMode]。"
#: doc/classes/NinePatchRect.xml:33
-#, fuzzy
msgid ""
"The stretch mode to use for vertical stretching/tiling. See [enum "
"NinePatchRect.AxisStretchMode] for possible values."
msgstr ""
-"æŽ§åˆ¶å¦‚ä½•æ°´å¹³æ‹‰ä¼¸æˆ–å¹³é“ºæ ·å¼æ¡†çš„纹ç†ã€‚有关å¯èƒ½çš„值,请å‚阅 [enum "
-"AxisStretchMode]。"
+"用于垂直拉伸/平铺的拉伸模å¼ã€‚å‚阅[enum NinePatchRect.AxisStretchMode]。"
#: doc/classes/NinePatchRect.xml:36
msgid ""
@@ -42923,34 +43240,31 @@ msgstr ""
"å•独设置所有4个边è·å€¼æ¥åˆ›å»ºå…·æœ‰éžç»Ÿä¸€è¾¹æ¡†çš„颿¿ã€‚"
#: doc/classes/NinePatchRect.xml:43
-#, fuzzy
msgid ""
"The width of the 9-slice's left column. A margin of 16 means the 9-slice's "
"left corners and side will have a width of 16 pixels. You can set all 4 "
"margin values individually to create panels with non-uniform borders."
msgstr ""
-"9-slice的底层行的高度。边è·ä¸º16æ„味ç€9片的底角和侧é¢å°†æœ‰16åƒç´ çš„高度。你å¯ä»¥"
-"å•独设置所有4个边è·å€¼æ¥åˆ›å»ºå…·æœ‰éžç»Ÿä¸€è¾¹æ¡†çš„颿¿ã€‚"
+"9-切片的左列宽度。边è·ä¸º16æ„味ç€9切片的左角和侧é¢å°†æœ‰16åƒç´ çš„宽度。你å¯ä»¥å•独"
+"设置所有4个边è·å€¼ï¼Œæ¥åˆ›å»ºæœ‰éžç»Ÿä¸€è¾¹æ¡†çš„颿¿ã€‚"
#: doc/classes/NinePatchRect.xml:46
-#, fuzzy
msgid ""
"The width of the 9-slice's right column. A margin of 16 means the 9-slice's "
"right corners and side will have a width of 16 pixels. You can set all 4 "
"margin values individually to create panels with non-uniform borders."
msgstr ""
-"9-slice的底层行的高度。边è·ä¸º16æ„味ç€9片的底角和侧é¢å°†æœ‰16åƒç´ çš„高度。你å¯ä»¥"
-"å•独设置所有4个边è·å€¼æ¥åˆ›å»ºå…·æœ‰éžç»Ÿä¸€è¾¹æ¡†çš„颿¿ã€‚"
+"9-切片的å³åˆ—宽度。边è·ä¸º16æ„味ç€9切片的å³è§’和侧é¢å°†æœ‰16åƒç´ çš„宽度。你å¯ä»¥å•独"
+"设置所有4个边è·å€¼ï¼Œä»¥åˆ›å»ºæœ‰éžç»Ÿä¸€è¾¹æ¡†çš„颿¿ã€‚"
#: doc/classes/NinePatchRect.xml:49
-#, fuzzy
msgid ""
"The height of the 9-slice's top row. A margin of 16 means the 9-slice's top "
"corners and side will have a height of 16 pixels. You can set all 4 margin "
"values individually to create panels with non-uniform borders."
msgstr ""
-"9-slice的底层行的高度。边è·ä¸º16æ„味ç€9片的底角和侧é¢å°†æœ‰16åƒç´ çš„高度。你å¯ä»¥"
-"å•独设置所有4个边è·å€¼æ¥åˆ›å»ºå…·æœ‰éžç»Ÿä¸€è¾¹æ¡†çš„颿¿ã€‚"
+"9切片的顶行的高度。边è·ä¸º16æ„味ç€9切片的顶角和侧é¢å°†æœ‰16åƒç´ çš„高度。你å¯ä»¥å•"
+"独设置所有4个边è·å€¼ï¼Œæ¥åˆ›å»ºæœ‰éžç»Ÿä¸€è¾¹æ¡†çš„颿¿ã€‚"
#: doc/classes/NinePatchRect.xml:52
msgid ""
@@ -42972,11 +43286,10 @@ msgid "Emitted when the node's texture changes."
msgstr "当节点的纹ç†å‘生å˜åŒ–时触å‘。"
#: doc/classes/NinePatchRect.xml:67
-#, fuzzy
msgid ""
"Stretches the center texture across the NinePatchRect. This may cause the "
"texture to be distorted."
-msgstr "沿直线拉伸纹ç†ã€‚导入ç¦ç”¨[b]é‡å¤[/b]的纹ç†ä»¥èŽ·å¾—æœ€ä½³æ•ˆæžœã€‚"
+msgstr "å°†ä¸­é—´çº¹ç†æ‹‰ä¼¸åˆ°9切片矩形。这å¯èƒ½ä¼šå¯¼è‡´çº¹ç†å¤±çœŸã€‚"
#: doc/classes/NinePatchRect.xml:70
msgid ""
@@ -43071,53 +43384,54 @@ msgid ""
"(make sure node names are the same on all peers). Also, take a look at the "
"high-level networking tutorial and corresponding demos."
msgstr ""
-"节点是Godot的构建模å—。它们å¯ä»¥è¢«æŒ‡å®šä¸ºå¦ä¸€ä¸ªèŠ‚ç‚¹çš„å­èŠ‚ç‚¹ï¼Œä»Žè€Œå½¢æˆæ ‘状排列。"
-"一个给定的节点å¯ä»¥åŒ…å«ä»»æ„æ•°é‡çš„节点作为å­èŠ‚ç‚¹ï¼Œè¦æ±‚所有的兄弟å§å¦¹ï¼Œå³è¯¥èŠ‚ç‚¹"
-"的直接å­èŠ‚ç‚¹ï¼Œåº”è¯¥æœ‰å”¯ä¸€çš„å字。\n"
-"一个节点树被称为[i]场景[/i]。场景å¯ä»¥è¢«ä¿å­˜åˆ°ç£ç›˜ä¸Šï¼Œç„¶åŽè¢«å®žä¾‹åŒ–到其他场景"
-"中。这使得Godoté¡¹ç›®çš„æž¶æž„å’Œæ•°æ®æ¨¡åž‹å…·æœ‰éžå¸¸é«˜çš„çµæ´»æ€§ã€‚\n"
-"[b]Scene tree:[/b] [SceneTree]åŒ…å«æ´»åŠ¨çš„èŠ‚ç‚¹æ ‘ã€‚å½“ä¸€ä¸ªèŠ‚ç‚¹è¢«æ·»åŠ åˆ°åœºæ™¯æ ‘ä¸­"
-"时,它将收到[constant NOTIFICATION_ENTER_TREE]通知,并触å‘å…¶[method "
-"_enter_tree]回调。å­èŠ‚ç‚¹æ€»æ˜¯åœ¨å…¶çˆ¶èŠ‚ç‚¹[i]之åŽ[/i]被添加,å³çˆ¶èŠ‚ç‚¹çš„[method "
-"_enter_tree]回调将在其å­èŠ‚ç‚¹çš„ä¹‹å‰è¢«è§¦å‘。\n"
-"一旦所有的节点被添加到场景树中,它们就会收到[constant NOTIFICATION_READY]通"
-"知,其å„自的[method _ready]回调被触å‘。对于节点组,[method _ready]回调是按相"
-"å的顺åºè°ƒç”¨çš„,从å­èŠ‚ç‚¹å¼€å§‹ï¼Œå‘上移动到父节点。\n"
-"è¿™æ„味ç€ï¼Œå½“把一个节点添加到场景树中时,将使用下é¢çš„顺åºè¿›è¡Œå›žè°ƒã€‚父节点的"
-"[method _enter_tree],å­èŠ‚ç‚¹çš„[method _enter_tree],å­èŠ‚ç‚¹çš„[method _ready],"
-"æœ€åŽæ˜¯çˆ¶èŠ‚ç‚¹çš„[method _ready],å³å¯¹æ•´ä¸ªåœºæ™¯æ ‘进行递归。\n"
-"[b]Processing:[/b] 节点å¯ä»¥é‡å†™ \"处ç†\" 状æ€ï¼Œä»¥ä¾¿å®ƒä»¬åœ¨æ¯ä¸€å¸§ä¸Šæ”¶åˆ°å›žè°ƒï¼Œè¦"
-"求它们进行处ç†ï¼Œå³åšä¸€äº›äº‹æƒ…。普通处ç†å°½å¯èƒ½å¿«åœ°å‘生,回调[method _process],"
-"用[method set_process]切æ¢ï¼Œå–å†³äºŽå¸§é€ŸçŽ‡ï¼Œæ‰€ä»¥å¤„ç†æ—¶é—´[i]delta[/i](å•ä½ï¼š"
-"ç§’ï¼‰ä½œä¸ºå‚æ•°ä¼ é€’。物ç†å¤„ç†æ¯ç§’å‘生固定次数(默认为60),回调[method "
-"_physics_process],用[method set_physics_process]切æ¢ï¼Œå¯¹ç‰©ç†å¼•擎相关的代ç å¾ˆ"
-"有用。\n"
-"节点也å¯ä»¥å¤„ç†è¾“å…¥äº‹ä»¶ã€‚å½“å‡ºçŽ°æ—¶ï¼Œç¨‹åºæ”¶åˆ°çš„æ¯ä¸ªè¾“å…¥è€Œè°ƒç”¨[method _input]函"
-"数。在许多情况下,这å¯èƒ½æ˜¯å¤šä½™çš„,除éžç”¨äºŽç®€å•的项目,而[method "
-"_unhandled_input]函数å¯èƒ½æ˜¯é¦–选;当输入事件没有被其他节点(通常是GUI[Control]"
-"èŠ‚ç‚¹ï¼‰å¤„ç†æ—¶ï¼Œå®ƒè¢«è°ƒç”¨ï¼Œç¡®ä¿èŠ‚ç‚¹åªæŽ¥æ”¶ä¸ºå®ƒå‡†å¤‡çš„äº‹ä»¶ã€‚\n"
-"为了跟踪场景的层次结构,特别在将场景实例化到其他场景时,å¯ä»¥ç”¨[member owner]"
-"属性为节点设置一个 \"所有者\"。这å¯ä»¥è·Ÿè¸ªè°å®žä¾‹åŒ–了什么。这在编写编辑器和工具"
-"æ—¶éžå¸¸æœ‰ç”¨ã€‚\n"
-"当一个节点被[method Object.free]或[method queue_free]释放时,它也将释放它的所"
-"有å­èŠ‚ç‚¹ã€‚\n"
-"[b]Groups:[/b] 节点å¯ä»¥è¢«æ·»åŠ åˆ°å¾ˆå¤šçš„ç»„ä¸­ï¼Œä»¥æ–¹ä¾¿ç®¡ç†ï¼Œä½ å¯ä»¥åˆ›å»ºæ¯”如\"敌人"
-"\" 或 \"坿”¶é›†ç‰©\" 这样的组,这å–决于你的游æˆã€‚å‚阅[method add_to_group], "
-"[method is_in_group] å’Œ [method remove_from_group]。然åŽä½ å¯ä»¥æ£€ç´¢è¿™äº›ç»„中的"
-"所有节点,对它们进行迭代,甚至通过[SceneTree]中的方法调用组内方法。\n"
-"[b]Networking with nodes:[/b] 在连接到æœåŠ¡å™¨ï¼ˆæˆ–åˆ¶ä½œæœåŠ¡å™¨ï¼Œå‚阅"
-"[NetworkedMultiplayerENet])之åŽï¼Œå¯ä»¥ä½¿ç”¨å†…置的RPC(远程过程调用)系统在网络"
-"上进行通信。通过调用[method rpc]的方法å,它将在本地和所有连接的对等体中被调"
-"用(对等体=客户端和接å—连接的æœåŠ¡å™¨ï¼‰ã€‚ä¸ºäº†è¯†åˆ«å“ªä¸ªèŠ‚ç‚¹æ”¶åˆ°RPC调用,Godot将使"
-"用它的[NodePath]ï¼ˆç¡®ä¿æ‰€æœ‰å¯¹ç­‰ä½“上的节点å称相åŒï¼‰ã€‚å¦å¤–,请å‚阅高级网络教程"
-"和相应的演示。"
+"节点是 Godot 的构建模å—。它们å¯ä»¥è¢«æŒ‡å®šä¸ºå¦ä¸€ä¸ªèŠ‚ç‚¹çš„å­èŠ‚ç‚¹ï¼Œä»Žè€Œå½¢æˆæ ‘状排"
+"列。一个给定的节点å¯ä»¥åŒ…å«ä»»æ„æ•°é‡çš„节点作为å­èŠ‚ç‚¹ï¼Œè¦æ±‚所有的兄弟节点(å³è¯¥"
+"节点的直接å­èŠ‚ç‚¹ï¼‰çš„å字唯一。\n"
+"节点树被称为[i]场景[/i]。场景å¯ä»¥è¢«ä¿å­˜åˆ°ç£ç›˜ä¸Šï¼Œç„¶åŽè¢«å®žä¾‹åŒ–到其他场景中。这"
+"使得 Godot é¡¹ç›®çš„æž¶æž„å’Œæ•°æ®æ¨¡åž‹å…·æœ‰éžå¸¸é«˜çš„çµæ´»æ€§ã€‚\n"
+"[b]场景树:[/b] [SceneTree] åŒ…å«æ´»åŠ¨çš„èŠ‚ç‚¹æ ‘ã€‚å½“ä¸€ä¸ªèŠ‚ç‚¹è¢«æ·»åŠ åˆ°åœºæ™¯æ ‘ä¸­æ—¶ï¼Œ"
+"它将收到 [constant NOTIFICATION_ENTER_TREE] 通知,并触å‘å…¶ [method "
+"_enter_tree] 回调。å­èŠ‚ç‚¹æ€»æ˜¯åœ¨å…¶çˆ¶èŠ‚ç‚¹[i]之åŽ[/i]被添加,å³çˆ¶èŠ‚ç‚¹çš„ [method "
+"_enter_tree] 回调将在其å­èŠ‚ç‚¹çš„ä¹‹å‰è¢«è§¦å‘。\n"
+"一旦所有的节点被添加到场景树中,它们就会收到 [constant NOTIFICATION_READY] 通"
+"知,其å„自的 [method _ready] 回调被触å‘。对于一组节点,[method _ready] 回调是"
+"按相å的顺åºè°ƒç”¨çš„,从å­èŠ‚ç‚¹å¼€å§‹ï¼Œå‘上移动到父节点。\n"
+"è¿™æ„味ç€ï¼Œå½“把一个节点添加到场景树中时,将使用下é¢çš„顺åºè¿›è¡Œå›žè°ƒï¼šçˆ¶èŠ‚ç‚¹çš„ "
+"[method _enter_tree]ã€å­èŠ‚ç‚¹çš„ [method _enter_tree]ã€å­èŠ‚ç‚¹çš„ [method "
+"_ready]ï¼Œæœ€åŽæ˜¯çˆ¶èŠ‚ç‚¹çš„ [method _ready](对整个场景树进行递归)。\n"
+"[b]处ç†ï¼š[/b] 节点å¯ä»¥è¦†ç›–“处ç†â€çжæ€ï¼Œä»¥ä¾¿å®ƒä»¬åœ¨æ¯ä¸€å¸§ä¸Šéƒ½æ”¶åˆ°å›žè°ƒï¼Œè¦æ±‚它们"
+"进行处ç†ï¼ˆåšä¸€äº›äº‹æƒ…)。普通处ç†ï¼ˆå›žè°ƒ [method _process],å¯ä»¥ä½¿ç”¨ [method "
+"set_process] 开关)会尽å¯èƒ½å¿«åœ°å‘生,并且å–å†³äºŽå¸§çŽ‡ï¼Œæ‰€ä»¥å¤„ç†æ—¶é—´ [i]delta[/"
+"i](å•ä½ä¸ºç§’ï¼‰ä¼šä½œä¸ºå‚æ•°ä¼ å…¥ã€‚物ç†å¤„ç†ï¼ˆå›žè°ƒ [method _physics_process],å¯ä»¥"
+"使用 [method set_physics_process] 开关)æ¯ç§’å‘生固定次数(默认为 60),对物ç†"
+"引擎相关的代ç å¾ˆæœ‰ç”¨ã€‚\n"
+"节点也å¯ä»¥å¤„ç†è¾“入事件。存在 [method _input] å‡½æ•°æ—¶ï¼Œç¨‹åºæ¯æ”¶åˆ°ä¸€æ¬¡è¾“入都会去"
+"è°ƒç”¨å®ƒã€‚åœ¨è®¸å¤šæƒ…å†µä¸‹ï¼Œè¿™ä¹ˆåšæ˜¯å¤§æå°ç”¨äº†ï¼ˆé™¤éžæ˜¯ç”¨äºŽç®€å•的项目),用 [method "
+"_unhandled_input] 函数å¯èƒ½æ›´åˆé€‚;当输入事件没有被其他节点(通常是 GUI "
+"[Control] èŠ‚ç‚¹ï¼‰å¤„ç†æ—¶ï¼Œæ‰ä¼šè°ƒç”¨è¿™ä¸ªå‡½æ•°ï¼Œå¯ä»¥ç¡®ä¿èŠ‚ç‚¹åªæŽ¥æ”¶åˆ°å®ƒè¯¥æ”¶åˆ°çš„äº‹"
+"件。\n"
+"为了记录场景的层次结构(尤其是在将场景实例化到其他场景时)å¯ä»¥ç”¨ [member "
+"owner] 属性为节点设置一个“所有者â€ã€‚它记录的是è°å®žä¾‹åŒ–了什么。这在编写编辑器和"
+"工具时éžå¸¸æœ‰ç”¨ã€‚\n"
+"最åŽï¼Œå½“一个节点被 [method Object.free] 或 [method queue_free] 释放时,它也将"
+"释放它的所有å­èŠ‚ç‚¹ã€‚\n"
+"[b]分组:[/b] 节点å¯ä»¥è¢«æ·»åŠ åˆ°å¾ˆå¤šçš„ç»„ä¸­ï¼Œä»¥æ–¹ä¾¿ç®¡ç†ï¼Œä½ å¯ä»¥æ ¹æ®è‡ªå·±æ¸¸æˆçš„需"
+"è¦æ¥åˆ›å»ºç±»ä¼¼â€œæ•Œäººâ€æˆ–“收集å“â€è¿™æ ·çš„组。å‚阅 [method add_to_group]ã€[method "
+"is_in_group] å’Œ [method remove_from_group]。加入组åŽï¼Œä½ å¯ä»¥æ£€ç´¢è¿™äº›ç»„中的所"
+"有节点,对它们进行迭代,甚至通过 [SceneTree] 中的方法调用组内方法。\n"
+"[b]节点的网络编程:[/b] 在连接到æœåŠ¡å™¨ï¼ˆæˆ–åˆ¶ä½œæœåŠ¡å™¨ï¼Œå‚阅 "
+"[NetworkedMultiplayerENet])之åŽï¼Œå¯ä»¥ä½¿ç”¨å†…置的 RPC(远程过程调用)系统在网"
+"络上进行通信。在调用 [method rpc] 时传入方法å,将在本地和所有已连接的对等体"
+"中调用对应的方法(对等体=客户端和接å—连接的æœåŠ¡å™¨ï¼‰ã€‚ä¸ºäº†è¯†åˆ«å“ªä¸ªèŠ‚ç‚¹æ”¶åˆ° "
+"RPC 调用,Godot 将使用它的 [NodePath]ï¼ˆè¯·ç¡®ä¿æ‰€æœ‰å¯¹ç­‰ä½“上的节点å称相åŒï¼‰ã€‚å¦"
+"外,请å‚阅高级网络教程和相应的演示。"
#: doc/classes/Node.xml:20
msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/"
"scenes_and_nodes.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/"
+"https://docs.godotengine.org/zh_CN/stable/getting_started/step_by_step/"
"scenes_and_nodes.html"
#: doc/classes/Node.xml:21
@@ -43171,7 +43485,6 @@ msgstr ""
"å½“éœ€è¦æ›´æ–°è¿™ä¸ªèŠ‚ç‚¹çš„è­¦å‘Šæ—¶ï¼Œè°ƒç”¨[method update_configuration_warning]。"
#: doc/classes/Node.xml:50
-#, fuzzy
msgid ""
"Called when there is an input event. The input event propagates up through "
"the node tree until a node consumes it.\n"
@@ -43186,18 +43499,17 @@ msgid ""
"[b]Note:[/b] This method is only called if the node is present in the scene "
"tree (i.e. if it's not orphan)."
msgstr ""
-"当有一个输入事件时被调用。输入事件通过节点树å‘上传播,直到一个节点处ç†å®ƒã€‚\n"
-"åªæœ‰å½“输入处ç†è¢«å¯ç”¨æ—¶æ‰ä¼šè¢«è°ƒç”¨ï¼Œå¦‚果这个方法被覆盖,它就会自动完æˆï¼Œå¹¶ä¸”å¯"
-"以用[method set_process_input]æ¥åˆ‡æ¢ã€‚\n"
-"è¦æ¶ˆè€—输入事件并阻止它进一步传播到其他节点,å¯ä»¥è°ƒç”¨[method Viewport."
+"当有输入事件时被调用。输入事件通过节点树å‘上传播,直到一个节点消耗它。\n"
+"åªæœ‰å½“输入处ç†è¢«å¯ç”¨æ—¶æ‰ä¼šè¢«è°ƒç”¨ï¼Œå¦‚果这个方法被é‡å†™ï¼Œå®ƒå°±ä¼šè‡ªåŠ¨å®Œæˆï¼Œå¯ä»¥ç”¨"
+"[method set_process_input]æ¥åˆ‡æ¢ã€‚\n"
+"è¦æ¶ˆè€—输入事件并阻止它进一步传播到其他节点,å¯ä»¥è°ƒç”¨[method SceneTree."
"set_input_as_handled]。\n"
"对于游æˆè¾“入,[method _unhandled_input]å’Œ[method _unhandled_key_input]通常更"
"适åˆï¼Œå› ä¸ºå®ƒä»¬å…许GUI首先拦截事件。\n"
"[b]注æ„:[/b] è¿™ä¸ªæ–¹æ³•åªæœ‰åœ¨èŠ‚ç‚¹å­˜åœ¨äºŽåœºæ™¯æ ‘ä¸­æ—¶æ‰ä¼šè¢«è°ƒç”¨ï¼ˆä¹Ÿå°±æ˜¯è¯´ï¼Œå¦‚果它"
-"䏿˜¯å­¤å„¿ï¼‰ã€‚"
+"éž\"孤儿\")。"
#: doc/classes/Node.xml:61
-#, fuzzy
msgid ""
"Called during the physics processing step of the main loop. Physics "
"processing means that the frame rate is synced to the physics, i.e. the "
@@ -43211,17 +43523,16 @@ msgid ""
"[b]Note:[/b] This method is only called if the node is present in the scene "
"tree (i.e. if it's not orphan)."
msgstr ""
-"在主循环的物ç†å¤„ç†æ­¥éª¤ä¸­è¢«è°ƒç”¨ã€‚物ç†å¤„ç†æ„味ç€å¸§çŽ‡ä¸Žç‰©ç†åŒæ­¥ï¼Œä¹Ÿå°±æ˜¯è¯´ï¼Œ"
-"[code]delta[/code]å˜é‡åº”该是æ’定的。\n"
-"åªæœ‰åœ¨ç‰©ç†å¤„ç†è¢«å¯ç”¨çš„æƒ…况下æ‰ä¼šè¢«è°ƒç”¨ï¼Œå¦‚果这个方法被é‡å†™ï¼Œå®ƒå°±ä¼šè‡ªåŠ¨å®Œæˆï¼Œ"
-"并且å¯ä»¥é€šè¿‡[method set_physics_process]æ¥åˆ‡æ¢ã€‚\n"
-"对应于[方法Object._notification]中的[constant NOTIFICATION_PHYSICS_PROCESS]通"
-"知。\n"
+"在主循环的物ç†å¤„ç†æ­¥éª¤ä¸­è¢«è°ƒç”¨ã€‚物ç†å¤„ç†æ„味ç€å¸§çŽ‡ä¸Žç‰©ç†åŒæ­¥ï¼Œå³[code]delta[/"
+"code]å˜é‡åº”该是常é‡ã€‚[code]delta[/code]çš„å•使˜¯ç§’。\n"
+"åªæœ‰å½“物ç†å¤„ç†è¢«å¯ç”¨æ—¶æ‰ä¼šè¢«è°ƒç”¨ï¼Œå¦‚果这个方法被é‡å†™ï¼Œå°±ä¼šè‡ªåŠ¨å®Œæˆï¼Œå¯ä»¥ç”¨"
+"[method set_physics_process]æ¥åˆ‡æ¢ã€‚\n"
+"对应于[method Object._notification]中的[constant "
+"NOTIFICATION_PHYSICS_PROCESS]通知。\n"
"[b]注æ„:[/b] è¿™ä¸ªæ–¹æ³•åªæœ‰åœ¨èŠ‚ç‚¹å­˜åœ¨äºŽåœºæ™¯æ ‘ä¸­æ—¶æ‰ä¼šè¢«è°ƒç”¨ï¼ˆä¹Ÿå°±æ˜¯è¯´ï¼Œå¦‚果它"
-"䏿˜¯å­¤å„¿ï¼‰ã€‚"
+"䏿˜¯\"孤儿\")。"
#: doc/classes/Node.xml:71
-#, fuzzy
msgid ""
"Called during the processing step of the main loop. Processing happens at "
"every frame and as fast as possible, so the [code]delta[/code] time since "
@@ -43234,13 +43545,13 @@ msgid ""
"tree (i.e. if it's not orphan)."
msgstr ""
"åœ¨ä¸»å¾ªçŽ¯çš„å¤„ç†æ­¥éª¤ä¸­è¢«è°ƒç”¨ã€‚处ç†å‘生在æ¯ä¸€å¸§ï¼Œå¹¶ä¸”å°½å¯èƒ½å¿«ï¼Œæ‰€ä»¥ä»Žä¸Šä¸€å¸§å¼€å§‹"
-"çš„[code]delta[/code]æ—¶é—´ä¸æ˜¯æ’定的。\n"
-"åªæœ‰åœ¨å¤„ç†è¿‡ç¨‹è¢«å¯ç”¨çš„æƒ…况下æ‰ä¼šè¢«è°ƒç”¨ï¼Œå¦‚果这个方法被覆盖,就会自动完æˆï¼Œå¯"
-"以用[method set_process]æ¥åˆ‡æ¢ã€‚\n"
-"对应于 [method Object._notification] 中的 [constant NOTIFICATION_PROCESS] 通"
+"çš„[code]delta[/code]æ—¶é—´ä¸æ˜¯æ’定的。[code]delta[/code]çš„å•使˜¯ç§’。\n"
+"åªæœ‰åœ¨å¯ç”¨å¤„ç†çš„æƒ…况下æ‰ä¼šè¢«è°ƒç”¨ï¼Œå¦‚果这个方法被é‡å†™ï¼Œä¼šè‡ªåŠ¨è¿›è¡Œå¤„ç†ï¼Œå¯ä»¥ç”¨"
+"[method set_process]æ¥åˆ‡æ¢ã€‚\n"
+"对应于[method Object._notification]中的[constant NOTIFICATION_PROCESS]通"
"知。\n"
-"[b]注æ„:[/b] åªæœ‰å½“节点存在于场景树中时æ‰ä¼šè°ƒç”¨è¿™ä¸ªæ–¹æ³•(å³å¦‚æžœå®ƒä¸æ˜¯å­¤"
-"儿)。"
+"[b]注æ„:[/b] è¿™ä¸ªæ–¹æ³•åªæœ‰åœ¨èŠ‚ç‚¹å­˜åœ¨äºŽåœºæ™¯æ ‘ä¸­æ—¶æ‰ä¼šè¢«è°ƒç”¨ï¼ˆä¹Ÿå°±æ˜¯è¯´ï¼Œå¦‚果它"
+"䏿˜¯\"孤儿\")。"
#: doc/classes/Node.xml:80
msgid ""
@@ -43263,14 +43574,13 @@ msgstr ""
"åœ¨ä¹‹åŽæ”¶åˆ°å°±ç»ªé€šçŸ¥ã€‚\n"
"对应于[method Object._notification]中的[constant NOTIFICATION_READY]通知。也"
"请å‚阅å˜é‡çš„[code]onready[/code]关键字。\n"
-"通常用于åˆå§‹åŒ–。对于更早的åˆå§‹åŒ–,å¯ä»¥ä½¿ç”¨[方法Object._init]。也请å‚阅[方法"
-"_enter_tree]。\n"
+"通常用于åˆå§‹åŒ–。对于更早的åˆå§‹åŒ–,å¯ä»¥ä½¿ç”¨[method Object._init]。也请å‚阅"
+"[method _enter_tree]。\n"
"[b]注æ„:[/b] [method _ready] 对于æ¯ä¸ªèŠ‚ç‚¹åªèƒ½è°ƒç”¨ä¸€æ¬¡ã€‚在从场景树中删除一个"
"èŠ‚ç‚¹å¹¶å†æ¬¡æ·»åŠ åŽï¼Œ[code]_ready[/code]å°†ä¸ä¼šè¢«ç¬¬äºŒæ¬¡è°ƒç”¨ã€‚è¿™å¯ä»¥é€šè¿‡è¯·æ±‚冿¬¡è°ƒ"
-"用[方法 request_ready]æ¥ç»•过,它å¯ä»¥åœ¨å†æ¬¡æ·»åŠ èŠ‚ç‚¹ä¹‹å‰çš„任何地方调用。"
+"用[method request_ready]æ¥ç»•过,它å¯ä»¥åœ¨å†æ¬¡æ·»åŠ èŠ‚ç‚¹ä¹‹å‰çš„任何地方调用。"
#: doc/classes/Node.xml:90
-#, fuzzy
msgid ""
"Called when an [InputEvent] hasn't been consumed by [method _input] or any "
"GUI. The input event propagates up through the node tree until a node "
@@ -43286,19 +43596,18 @@ msgid ""
"[b]Note:[/b] This method is only called if the node is present in the scene "
"tree (i.e. if it's not orphan)."
msgstr ""
-"当[InputEvent]还没有被[method _input]或任何GUIå¤„ç†æ—¶è°ƒç”¨ã€‚输入事件通过节点树"
-"å‘上传播,直到一个节点处ç†å®ƒã€‚\n"
-"åªæœ‰åœ¨å¯ç”¨äº†æœªå¤„ç†çš„è¾“å…¥å¤„ç†æ—¶æ‰ä¼šè¢«è°ƒç”¨ï¼Œå¦‚果这个方法被é‡è½½ï¼Œå®ƒå°±ä¼šè‡ªåŠ¨å®Œ"
+"当[InputEvent]还未被[method _input]或任何GUI消耗时调用。输入事件通过节点树å‘"
+"上传播,直到一个节点消耗它。\n"
+"åªæœ‰åœ¨å¯ç”¨äº†æœªå¤„ç†çš„è¾“å…¥å¤„ç†æ—¶æ‰ä¼šè¢«è°ƒç”¨ï¼Œå¦‚果这个方法被é‡å†™ï¼Œå®ƒå°±ä¼šè‡ªåŠ¨å®Œ"
"æˆï¼Œå¹¶ä¸”å¯ä»¥ç”¨[method set_process_unhandled_input]æ¥åˆ‡æ¢ã€‚\n"
-"è¦æ¶ˆè€—输入事件并阻止它进一步传播到其他节点,å¯ä»¥è°ƒç”¨[method Viewport."
+"è¦æ¶ˆè€—输入事件并阻止它进一步传播到其他节点,å¯ä»¥è°ƒç”¨[method SceneTree."
"set_input_as_handled]。\n"
"对于游æˆè¾“入,这和[method _unhandled_key_input]通常比[method _input]更适åˆï¼Œ"
"因为它们å…许GUI首先拦截事件。\n"
-"[b]注æ„:[/b]è¿™ä¸ªæ–¹æ³•åªæœ‰åœ¨èŠ‚ç‚¹å­˜åœ¨äºŽåœºæ™¯æ ‘ä¸­æ—¶æ‰ä¼šè¢«è°ƒç”¨ï¼ˆä¹Ÿå°±æ˜¯è¯´ï¼Œå¦‚果它ä¸"
-"是孤儿)。"
+"[b]注æ„:[/b] è¿™ä¸ªæ–¹æ³•åªæœ‰åœ¨èŠ‚ç‚¹å­˜åœ¨äºŽåœºæ™¯æ ‘ä¸­æ—¶æ‰ä¼šè¢«è°ƒç”¨ï¼ˆä¹Ÿå°±æ˜¯è¯´ï¼Œå¦‚果它"
+"䏿˜¯\"孤儿\")。"
#: doc/classes/Node.xml:101
-#, fuzzy
msgid ""
"Called when an [InputEventKey] hasn't been consumed by [method _input] or "
"any GUI. The input event propagates up through the node tree until a node "
@@ -43314,19 +43623,18 @@ msgid ""
"[b]Note:[/b] This method is only called if the node is present in the scene "
"tree (i.e. if it's not orphan)."
msgstr ""
-"当[InputEventKey]没有被[method _input]或任何GUIå¤„ç†æ—¶è¢«è°ƒç”¨ã€‚输入事件通过节点"
-"æ ‘å‘上传播,直到一个节点处ç†å®ƒã€‚\n"
-"åªæœ‰åœ¨å¯ç”¨äº†æœªå¤„ç†çš„é”®è¾“å…¥å¤„ç†æ—¶æ‰ä¼šè¢«è°ƒç”¨ï¼Œå¦‚果这个方法被覆盖,它就会自动完"
+"当[InputEventKey]没有被[method _input]或任何GUI消耗时被调用。输入事件通过节点"
+"æ ‘å‘上传播,直到一个节点消耗它。\n"
+"åªæœ‰åœ¨å¯ç”¨äº†æœªå¤„ç†çš„é”®è¾“å…¥å¤„ç†æ—¶æ‰ä¼šè¢«è°ƒç”¨ï¼Œå¦‚果这个方法被é‡å†™ï¼Œå®ƒå°±ä¼šè‡ªåŠ¨å®Œ"
"æˆï¼Œå¹¶ä¸”å¯ä»¥ç”¨[method set_process_unhandled_key_input]æ¥åˆ‡æ¢ã€‚\n"
-"è¦æ¶ˆè€—输入事件并阻止它进一步传播到其他节点,å¯ä»¥è°ƒç”¨[method Viewport."
+"è¦æ¶ˆè€—输入事件并阻止它进一步传播到其他节点,å¯ä»¥è°ƒç”¨[method SceneTree."
"set_input_as_handled]。\n"
"对于游æˆè¾“入,这和[method _unhandled_input]通常比[method _input]更适åˆï¼Œå› ä¸º"
"它们å…许GUI首先拦截事件。\n"
"[b]注æ„:[/b] è¿™ä¸ªæ–¹æ³•åªæœ‰åœ¨èŠ‚ç‚¹å­˜åœ¨äºŽåœºæ™¯æ ‘ä¸­æ—¶æ‰ä¼šè¢«è°ƒç”¨ï¼ˆä¹Ÿå°±æ˜¯è¯´ï¼Œå¦‚果它"
-"䏿˜¯å­¤å„¿ï¼‰ã€‚"
+"䏿˜¯\"孤儿\")。"
#: doc/classes/Node.xml:113
-#, fuzzy
msgid ""
"Adds a child node. Nodes can have any number of children, but every child "
"must have a unique name. Child nodes are automatically deleted when the "
@@ -43352,30 +43660,26 @@ msgid ""
"owner], the newly added [Node] will not be visible in the scene tree, though "
"it will be visible in the 2D/3D view."
msgstr ""
-"添加一个å­èŠ‚ç‚¹ã€‚èŠ‚ç‚¹å¯ä»¥æœ‰ä»»ä½•æ•°é‡çš„å­èŠ‚ç‚¹ï¼Œä½†æ˜¯æ¯ä¸ªå­èŠ‚ç‚¹å¿…é¡»æœ‰ä¸€ä¸ªå”¯ä¸€çš„å"
-"字。当父节点被删除时,å­èŠ‚ç‚¹ä¼šè¢«è‡ªåŠ¨åˆ é™¤ï¼Œæ‰€ä»¥æ•´ä¸ªåœºæ™¯å¯ä»¥é€šè¿‡åˆ é™¤å…¶æœ€ä¸Šé¢çš„"
-"节点而被删除。\n"
+"添加å­èŠ‚ç‚¹ã€‚èŠ‚ç‚¹å¯ä»¥æœ‰ä»»æ„æ•°é‡çš„å­èŠ‚ç‚¹ï¼Œä½†æ˜¯æ¯ä¸ªå­èŠ‚ç‚¹å¿…é¡»æœ‰å”¯ä¸€çš„å字。当父"
+"节点被删除时,å­èŠ‚ç‚¹ä¼šè¢«è‡ªåŠ¨åˆ é™¤ï¼Œæ‰€ä»¥æ•´ä¸ªåœºæ™¯å¯ä»¥é€šè¿‡åˆ é™¤å…¶æœ€ä¸Šé¢çš„节点而被"
+"删除。\n"
"如果[code]legible_unique_name[/code]是[code]true[/code],å­èŠ‚ç‚¹å°†æœ‰ä¸€ä¸ªåŸºäºŽè¢«"
-"实例化的节点的åç§°è€Œä¸æ˜¯å…¶ç±»åž‹çš„人类å¯è¯»å称。\n"
-"[b]注æ„:[/b] 如果å­èŠ‚ç‚¹å·²ç»æœ‰ä¸€ä¸ªçˆ¶èŠ‚ç‚¹ï¼Œè¿™ä¸ªå‡½æ•°å°†å¤±è´¥ã€‚é¦–å…ˆä½¿ç”¨[method "
-"remove_child]将节点从其当å‰çš„父节点中移除。比如说:\n"
+"实例化的节点的åç§°ï¼Œè€Œä¸æ˜¯å…¶ç±»åž‹å¯è¯»çš„å称。\n"
+"[b]注æ„:[/b] 如果å­èŠ‚ç‚¹å·²ç»æœ‰çˆ¶èŠ‚ç‚¹ï¼Œè¯¥å‡½æ•°å°†å¤±è´¥ã€‚é¦–å…ˆä½¿ç”¨[method "
+"remove_child]将节点从其当å‰çš„父节点中移除。如:\n"
"[codeblock]\n"
"if child_node.get_parent():\n"
" child_node.get_parent().remove_child(child_node)\n"
"add_child(child_node)\n"
"[/codeblock]\n"
-"如果你需è¦å°†å­èŠ‚ç‚¹æ·»åŠ åˆ°å­èŠ‚ç‚¹åˆ—è¡¨ä¸­æŸä¸ªç‰¹å®šèŠ‚ç‚¹çš„ä¸‹é¢ï¼Œè¯·ä½¿ç”¨[method "
-"add_sibling]è€Œä¸æ˜¯è¿™ä¸ªæ–¹æ³•。\n"
-"[b]注æ„:[/b] 如果你希望一个å­èŠ‚ç‚¹è¢«æŒä¹…化到[PackedScene]中,除了调用[method "
-"add_child]外,你必须设置[member owner]。这通常适用于[url=https://godot."
-"readthedocs.io/zh_CN/latest/tutorials/misc/running_code_in_the_editor.html]å·¥"
-"具脚本[/url]和[url=https://godot.readthedocs.io/zh_CN/latest/tutorials/"
-"plugins/editor/index.html]编辑器æ’ä»¶[/url]。如果调用[method add_child]而ä¸è®¾"
-"ç½®[member owner],新添加的[Node]在场景树中是ä¸å¯è§çš„,尽管它在2D/3D视图中是å¯"
-"è§çš„。"
+"[b]注æ„:[/b] 如果你想让一个å­èŠ‚ç‚¹è¢«æŒä¹…化到[PackedScene]中,除了调用[method "
+"add_child]外,还必须设置[member owner]。这通常与[url=https://godot."
+"readthedocs.io/en/3.2/tutorials/misc/running_code_in_the_editor.html]工具脚本"
+"[/url]和[url=https://godot.readthedocs.io/en/latest/tutorials/plugins/editor/"
+"index.html]编辑器æ’ä»¶[/url]有关。如果调用[method add_child]而ä¸è®¾ç½®[member "
+"owner],新添加的[Node]在场景树中是ä¸å¯è§çš„,尽管它在2D/3D视图中å¯è§ã€‚"
#: doc/classes/Node.xml:130
-#, fuzzy
msgid ""
"Adds [code]child_node[/code] as a child. The child is placed below the given "
"[code]node[/code] in the list of children.\n"
@@ -43383,15 +43687,12 @@ msgid ""
"will have a human-readable name based on the name of the node being "
"instanced instead of its type."
msgstr ""
-"在当å‰çš„节点父节点上添加一个[code]兄弟å§å¦¹[/code]节点,与该节点处于åŒä¸€çº§åˆ«ï¼Œ"
-"就在其下方。\n"
+"添加[code]child_node[/code]作为å­èŠ‚ç‚¹ã€‚è¯¥å­èŠ‚ç‚¹åœ¨å­èŠ‚ç‚¹åˆ—è¡¨ä¸­è¢«ç½®äºŽç»™å®šçš„"
+"[code]node[/code]之下。\n"
"如果[code]legible_unique_name[/code]是[code]true[/code],å­èŠ‚ç‚¹å°†æœ‰ä¸€ä¸ªåŸºäºŽè¢«"
-"实例化的节点åç§°è€Œä¸æ˜¯å…¶ç±»åž‹çš„人类å¯è¯»å称。\n"
-"如果你ä¸éœ€è¦å­èŠ‚ç‚¹è¢«æ·»åŠ åˆ°å­èŠ‚ç‚¹åˆ—è¡¨ä¸­çš„ç‰¹å®šèŠ‚ç‚¹ä¸‹é¢ï¼Œè¯·ä½¿ç”¨[method "
-"add_child]代替这个方法。"
+"实例化的节点åç§°ï¼Œè€Œä¸æ˜¯å…¶ç±»åž‹å¯è¯»çš„å称。"
#: doc/classes/Node.xml:139
-#, fuzzy
msgid ""
"Adds the node to a group. Groups are helpers to name and organize a subset "
"of nodes, for example \"enemies\" or \"collectables\". A node can be in any "
@@ -43404,12 +43705,14 @@ msgid ""
"guaranteed. The order of node groups should not be relied upon as it can "
"vary across project runs."
msgstr ""
-"将节点添加到一个组中。组是命å和组织节点å­é›†çš„辅助工具,例如 \"敌人 \"或 \"å¯"
-"收集物\"。一个节点å¯ä»¥åœ¨ä»»ä½•æ•°é‡çš„组中。节点å¯ä»¥åœ¨ä»»ä½•时候被分é…到一个组中,"
-"但是在它们进入场景树(è§[method is_inside_tree])之å‰ä¸ä¼šè¢«æ·»åŠ ã€‚å‚阅æè¿°ä¸­çš„"
-"注释,以åŠ[SceneTree]中的组方法。\n"
+"将节点添加到一个组中。组是命å和组织节点å­é›†çš„辅助工具,例如 \"敌人\" 或 \"å¯"
+"收集物\"等。一个节点å¯ä»¥åœ¨ä»»ä½•æ•°é‡çš„组中。节点å¯ä»¥åœ¨ä»»ä½•时候被分é…到一个组"
+"中,但是在它们进入场景树之å‰ä¸ä¼šè¢«æ·»åŠ ï¼Œå‚阅[method is_inside_tree]。å‚阅æè¿°"
+"中的注释,以åŠ[SceneTree]中的分组方法。\n"
"当把节点打包到[PackedScene]å¹¶ä¿å­˜åˆ°æ–‡ä»¶æ—¶ï¼Œä¼šä½¿ç”¨[code]persistent[/code]选"
-"é¡¹ã€‚éžæŒä¹…化的组ä¸ä¼šè¢«å­˜å‚¨ã€‚"
+"é¡¹ã€‚éžæŒä¹…化的组ä¸ä¼šè¢«å­˜å‚¨ã€‚\n"
+"[b]注æ„:[/b]由于性能原因,节点组的顺åº[i]ä¸[/i]能ä¿è¯ã€‚因些节点组的顺åºä¸åº”"
+"该被ä¾èµ–,因为它å¯èƒ½åœ¨ä¸åŒçš„项目è¿è¡Œä¸­å˜åŒ–。"
#: doc/classes/Node.xml:147
msgid ""
@@ -43438,7 +43741,6 @@ msgstr ""
"本。"
#: doc/classes/Node.xml:165
-#, fuzzy
msgid ""
"Finds a descendant of this node whose name matches [code]mask[/code] as in "
"[method String.match] (i.e. case-sensitive, but [code]\"*\"[/code] matches "
@@ -43454,15 +43756,17 @@ msgid ""
"consider using [method get_node] instead. To avoid using [method find_node] "
"too often, consider caching the node reference into a variable."
msgstr ""
-"找到这个节点的å­èŠ‚ç‚¹ï¼Œå…¶å称与[method String.match]中的[code]mask[/code]相匹"
-"é…(å³åŒºåˆ†å¤§å°å†™ï¼Œä½†[code]\"*\"[/code]匹é…零或多个字符,[code]\"?\"[/code]匹"
-"é…除[code]\".\"[/code]以外的任何å•个字符)。\n"
-"[b]注æ„:[/b]它ä¸ä¸Žå…¨è·¯å¾„匹é…,åªä¸Žå•个节点å称匹é…。\n"
+"查找该节点的å­çº§ï¼Œå…¶å称与[method String.match]中的[code]mask[/code]相匹é…,"
+"区分大å°å†™ï¼Œä»¥[code]\"*\"[/code]匹é…零或多个字符,[code]\"?\"[/code]匹é…除"
+"[code]\".\"[/code]以外的任何å•字符。\n"
+"[b]注æ„:[/b]å®ƒä¸æ˜¯å…¨è·¯å¾„匹é…,åªä¸Žå•个节点å称匹é…。\n"
"如果[code]owner[/code]是[code]true[/code]ï¼Œè¿™ä¸ªæ–¹æ³•åªæ‰¾åˆ°æ‰€æœ‰è€…是这个节点的节"
-"点。这对通过脚本实例化的场景特别é‡è¦ï¼Œå› ä¸ºè¿™äº›åœºæ™¯æ²¡æœ‰æ‰€æœ‰è€…。"
+"点。这对通过脚本实例化的场景特别é‡è¦ï¼Œå› ä¸ºè¿™äº›åœºæ™¯æ²¡æœ‰æ‰€æœ‰è€…。\n"
+"[b]注æ„:[/b]由于这个方法会é历节点的所有å­çº§ï¼Œå®ƒæ˜¯èŽ·å¾—å¦ä¸€ä¸ªèŠ‚ç‚¹çš„å¼•ç”¨çš„æœ€æ…¢"
+"的方法。åªè¦æœ‰å¯èƒ½ï¼Œè¯·è€ƒè™‘使用[method get_node]代替。为了é¿å…过于频ç¹åœ°ä½¿ç”¨"
+"[method find_node],å¯ä»¥è€ƒè™‘将节点引用缓存到一个å˜é‡ä¸­ã€‚"
#: doc/classes/Node.xml:175
-#, fuzzy
msgid ""
"Finds the first parent of the current node whose name matches [code]mask[/"
"code] as in [method String.match] (i.e. case-sensitive, but [code]\"*\"[/"
@@ -43475,12 +43779,13 @@ msgid ""
"[method get_node] instead. To avoid using [method find_parent] too often, "
"consider caching the node reference into a variable."
msgstr ""
-"找到这个节点的å­èŠ‚ç‚¹ï¼Œå…¶å称与[method String.match]中的[code]mask[/code]相匹"
-"é…(å³åŒºåˆ†å¤§å°å†™ï¼Œä½†[code]\"*\"[/code]匹é…零或多个字符,[code]\"?\"[/code]匹"
-"é…除[code]\".\"[/code]以外的任何å•个字符)。\n"
-"[b]注æ„:[/b]它ä¸ä¸Žå…¨è·¯å¾„匹é…,åªä¸Žå•个节点å称匹é…。\n"
-"如果[code]owner[/code]是[code]true[/code]ï¼Œè¿™ä¸ªæ–¹æ³•åªæ‰¾åˆ°æ‰€æœ‰è€…是这个节点的节"
-"点。这对通过脚本实例化的场景特别é‡è¦ï¼Œå› ä¸ºè¿™äº›åœºæ™¯æ²¡æœ‰æ‰€æœ‰è€…。"
+"查找当å‰èŠ‚ç‚¹çš„ç¬¬ä¸€ä¸ªçˆ¶èŠ‚ç‚¹ï¼Œå…¶å称与[method String.match]中的[code]mask[/"
+"code]相匹é…,区分大å°å†™ï¼Œå…¶[code]\"*\"[/code]匹é…零或多个字符,[code]\"?\"[/"
+"code]匹é…任何å•个字符,除了[code]\".\"[/code]。\n"
+"[b]注æ„:[/b]å®ƒä¸æ˜¯å…¨è·¯å¾„匹é…,åªä¸Žå•个节点å称匹é…。\n"
+"[b]注æ„:[/b]由于这个方法在场景树中å‘ä¸Šè¡Œèµ°ï¼Œåœ¨å¤§åž‹çš„ã€æ·±åº¦åµŒå¥—的场景树中å¯èƒ½"
+"会很慢。åªè¦æœ‰å¯èƒ½ï¼Œè¯·è€ƒè™‘使用[method get_node]代替。为了é¿å…过于频ç¹åœ°ä½¿ç”¨"
+"[method find_parent],考虑将节点引用缓存到一个å˜é‡ä¸­ã€‚"
#: doc/classes/Node.xml:184
msgid ""
@@ -43488,8 +43793,8 @@ msgid ""
"method is often used for iterating all children of a node.\n"
"To access a child node via its name, use [method get_node]."
msgstr ""
-"按索引返回一个å­èŠ‚ç‚¹ï¼ˆè§[方法get_child_count])。这个方法ç»å¸¸è¢«ç”¨äºŽé历一个节"
-"点的所有å­èŠ‚ç‚¹ã€‚\n"
+"按索引返回一个å­èŠ‚ç‚¹ï¼ˆè§[method get_child_count])。这个方法ç»å¸¸è¢«ç”¨äºŽé历一"
+"个节点的所有å­èŠ‚ç‚¹ã€‚\n"
"è¦é€šè¿‡ä¸€ä¸ªå­èŠ‚ç‚¹çš„å字访问它,请使用[method get_node]。"
#: doc/classes/Node.xml:191
@@ -43645,16 +43950,15 @@ msgstr ""
"场景中,å¦åˆ™å‡½æ•°å°†å¤±è´¥ã€‚"
#: doc/classes/Node.xml:288
-#, fuzzy
msgid ""
"Returns the time elapsed (in seconds) since the last physics-bound frame "
"(see [method _physics_process]). This is always a constant value in physics "
"processing unless the frames per second is changed via [member Engine."
"iterations_per_second]."
msgstr ""
-"返回从最åŽä¸€ä¸ªç‰©ç†ç»‘定帧开始ç»è¿‡çš„æ—¶é—´(å‚阅[method _physics_process])。这在物"
-"ç†å¤„ç†ä¸­æ€»æ˜¯ä¸€ä¸ªå¸¸é‡ï¼Œé™¤éžæ¯ç§’帧数通过[member Engine.iterations_per_second]被"
-"改å˜ã€‚"
+"返回自上次物ç†ç»‘å®šå¸§ä»¥æ¥æ‰€ç»è¿‡çš„æ—¶é—´ï¼ˆå•ä½ä¸ºç§’),å‚阅 [method "
+"_physics_process]。在物ç†å¤„ç†ä¸­ï¼Œè¿™å§‹ç»ˆæ˜¯ä¸€ä¸ªå¸¸æ•°ï¼Œé™¤éžé€šè¿‡ [member Engine."
+"iterations_per_second] æ”¹å˜æ¯ç§’的帧数。"
#: doc/classes/Node.xml:294
msgid ""
@@ -43700,7 +44004,7 @@ msgid ""
msgstr ""
"如果[NodePath]指å‘一个有效的节点,并且它的å­å称指å‘一个有效的资æºï¼Œä¾‹å¦‚"
"[code]Area2D/CollisionShape2D:shape[/code],则返回[code]true[/code]。具有éž"
-"[资æº]类型的属性(例如节点或基本数学类型)ä¸è¢«è®¤ä¸ºæ˜¯èµ„æºã€‚"
+"[Resource]类型的属性(例如节点或基本数学类型)ä¸è¢«è®¤ä¸ºæ˜¯èµ„æºã€‚"
#: doc/classes/Node.xml:339
msgid ""
@@ -43781,16 +44085,16 @@ msgid ""
"Returns [code]true[/code] if the node is processing unhandled input (see "
"[method set_process_unhandled_input])."
msgstr ""
-"å¦‚æžœèŠ‚ç‚¹æ­£åœ¨å¤„ç†æœªè¢«å¤„ç†çš„输入(å‚阅[方法set_process_unhandled_input]),则返回"
-"[code]true[/code]。"
+"å¦‚æžœèŠ‚ç‚¹æ­£åœ¨å¤„ç†æœªè¢«å¤„ç†çš„输入(å‚阅[method set_process_unhandled_input]),则"
+"返回[code]true[/code]。"
#: doc/classes/Node.xml:413
msgid ""
"Returns [code]true[/code] if the node is processing unhandled key input (see "
"[method set_process_unhandled_key_input])."
msgstr ""
-"å¦‚æžœèŠ‚ç‚¹æ­£åœ¨å¤„ç†æœªè¢«å¤„ç†çš„键输入(å‚阅[方法set_process_unhandled_key_input]),"
-"则返回[code]true[/code]。"
+"å¦‚æžœèŠ‚ç‚¹æ­£åœ¨å¤„ç†æœªè¢«å¤„ç†çš„键输入(å‚阅[method "
+"set_process_unhandled_key_input]),则返回[code]true[/code]。"
#: doc/classes/Node.xml:421
msgid ""
@@ -43836,7 +44140,6 @@ msgstr ""
"[/codeblock]"
#: doc/classes/Node.xml:448
-#, fuzzy
msgid ""
"Similar to [method print_tree], this prints the tree to stdout. This version "
"displays a more graphical representation similar to what is displayed in the "
@@ -43851,15 +44154,15 @@ msgid ""
" â”–â•´Camera2D\n"
"[/codeblock]"
msgstr ""
-"类似于[method print_tree],它将树打å°åˆ°æ ‡å‡†è¾“出。这个版本显示了一个更图形化的"
-"表示,类似于在场景检查器中显示的。它对检查较大的树很有用。\n"
-"[b]示例输出:[/b]\n"
+"类似于[method print_tree],它将树打å°åˆ°æ ‡å‡†è¾“出。这个版本显示更多的图形,类似"
+"于在场景检查器中显示的内容。它对于检查较大的树很有用。\n"
+"[b]输出示例:[/b]\n"
"[codeblock]\n"
" â”–â•´TheGame\n"
" â” â•´Menu\n"
" ┃ ┠╴Label\n"
" ┃ ┖╴Camera2D\n"
-" â”–-SplashScreen\n"
+" â”–â•´SplashScreen\n"
" â”–â•´Camera2D\n"
"[/codeblock]"
@@ -43886,7 +44189,6 @@ msgstr ""
"å­èŠ‚ç‚¹ã€‚"
#: doc/classes/Node.xml:479
-#, fuzzy
msgid ""
"Queues a node for deletion at the end of the current frame. When deleted, "
"all of its child nodes will be deleted as well. This method ensures it's "
@@ -43900,11 +44202,13 @@ msgid ""
"or access its properties."
msgstr ""
"在当å‰å¸§ç»“æŸæ—¶æŽ’队删除一个节点。当删除时,其所有的å­èŠ‚ç‚¹ä¹Ÿå°†è¢«åˆ é™¤ã€‚è¿™ä¸ªæ–¹æ³•"
-"ç¡®ä¿åˆ é™¤èŠ‚ç‚¹æ˜¯å®‰å…¨çš„ï¼Œä¸Ž[method Object.free]相å。使用 [method Object."
-"is_queued_for_deletion] æ¥æ£€æŸ¥ä¸€ä¸ªèŠ‚ç‚¹æ˜¯å¦ä¼šåœ¨å¸§ç»“æŸæ—¶è¢«åˆ é™¤ã€‚"
+"ç¡®ä¿åˆ é™¤èŠ‚ç‚¹æ˜¯å®‰å…¨çš„ï¼Œä¸Ž[method Object.free]相å。使用[method Object."
+"is_queued_for_deletion]æ¥æ£€æŸ¥ä¸€ä¸ªèŠ‚ç‚¹æ˜¯å¦ä¼šåœ¨å¸§æœ«è¢«åˆ é™¤ã€‚\n"
+"[b]é‡è¦ï¼š[/b] 如果你有å˜é‡æŒ‡å‘节点,一旦节点被释放,它将[i]ä¸ä¼š[/i] 被分é…到"
+"[code]null[/code]。相å,它将指å‘一个[i]å…ˆå‰è¢«é‡Šæ”¾çš„实例[/i],你应该在å°è¯•è°ƒ"
+"用其方法或访问其属性之å‰ç”¨[method @GDScript.is_instance_valid]æ¥éªŒè¯å®ƒã€‚"
#: doc/classes/Node.xml:486
-#, fuzzy
msgid ""
"Moves this node to the bottom of parent node's children hierarchy. This is "
"often useful in GUIs ([Control] nodes), because their order of drawing "
@@ -43914,9 +44218,9 @@ msgid ""
"siblings."
msgstr ""
"将此节点移到父节点的å­èŠ‚ç‚¹å±‚æ¬¡çš„åº•éƒ¨ã€‚è¿™åœ¨GUI([Control]节点)中通常很有用,"
-"因为它们的绘制顺åºå–决于它们在树中的顺åºï¼Œä¹Ÿå°±æ˜¯è¯´ï¼Œå®ƒä»¬åœ¨èŠ‚ç‚¹åˆ—è¡¨ä¸­è¶Šé å‰ï¼Œ"
-"它们就被绘制得越高。使用[code]raise[/code]åŽï¼Œä¸€ä¸ªæŽ§ä»¶å°†è¢«ç»˜åˆ¶åœ¨å®ƒçš„兄弟å§å¦¹"
-"之上。"
+"因为它们的绘制顺åºå–决于它们在树中的顺åºã€‚最上é¢çš„节点首先被绘制出æ¥ï¼Œç„¶åŽåœ¨"
+"层次结构中最上é¢çš„节点下é¢çš„æ‰€æœ‰åŒçº§è¢«ä¾æ¬¡ç»˜åˆ¶åœ¨å®ƒçš„上é¢ã€‚使用[code]raise[/"
+"code]åŽï¼Œä¸€ä¸ªæŽ§ä»¶å°†è¢«ç»˜åˆ¶åœ¨å…¶åŒçº§çš„上é¢ã€‚"
#: doc/classes/Node.xml:492
msgid ""
@@ -44114,14 +44418,13 @@ msgid ""
"if [method _physics_process] is overridden. Any calls to this before [method "
"_ready] will be ignored."
msgstr ""
-"å¯ç”¨æˆ–ç¦ç”¨ç‰©ç†å­¦ï¼ˆå³å›ºå®šå¸§çŽ‡ï¼‰å¤„ç†ã€‚å½“ä¸€ä¸ªèŠ‚ç‚¹è¢«å¤„ç†æ—¶ï¼Œå®ƒå°†ä»¥ä¸€ä¸ªå›ºå®šçš„(通"
-"常是60FPS,è§[member Engine.iterations_per_second]æ¥æ›´æ”¹å…¶å€¼ï¼‰æ—¶é—´é—´é𔿔¶åˆ°ä¸€"
-"个[常é‡NOTIFICATION_PHYSICS_PROCESS](如果存在,[method _physics_process]回调"
-"将被调用)。如果[method _physics_process]被é‡å†™ï¼Œåˆ™è‡ªåЍå¯ç”¨ã€‚在[method "
-"_ready]之å‰å¯¹å®ƒçš„任何调用都将被忽略。"
+"å¯ç”¨æˆ–ç¦ç”¨ç‰©ç†å¤„ç†ï¼ˆå³å›ºå®šå¸§çŽ‡ï¼‰ã€‚å½“ä¸€ä¸ªèŠ‚ç‚¹è¢«å¤„ç†æ—¶ï¼Œå®ƒå°†ä»¥ä¸€ä¸ªå›ºå®šçš„(通常"
+"是60FPS,å‚阅[member Engine.iterations_per_second]æ¥æ›´æ”¹è¯¥å€¼ï¼‰æ—¶é—´é—´é𔿔¶åˆ°ä¸€"
+"个[constant NOTIFICATION_PHYSICS_PROCESS](如果存在,[method "
+"_physics_process]回调将被调用)。如果[method _physics_process]被é‡å†™ï¼Œåˆ™è‡ªåЍ"
+"å¯ç”¨ã€‚在[method _ready]之å‰å¯¹å®ƒçš„任何调用都将被忽略。"
#: doc/classes/Node.xml:631
-#, fuzzy
msgid ""
"Enables or disables internal physics for this node. Internal physics "
"processing happens in isolation from the normal [method _physics_process] "
@@ -44134,11 +44437,13 @@ msgid ""
"behavior. Script access to this internal logic is provided for specific "
"advanced uses, but is unsafe and not supported."
msgstr ""
-"å¯ç”¨æˆ–ç¦ç”¨ç‰©ç†å¸§ï¼ˆå³å›ºå®šå¸§çŽ‡ï¼‰å¤„ç†ã€‚å½“ä¸€ä¸ªèŠ‚ç‚¹è¢«å¤„ç†æ—¶ï¼Œå®ƒå°†ä»¥ä¸€ä¸ªå›ºå®šçš„(通"
-"常是60FPS,è§[member Engine.iterations_per_second]æ¥æ”¹å˜å®ƒçš„值)时间间隔收到"
-"一个[constant NOTIFICATION_PHYSICS_PROCESS](如果存在,[method "
-"_physics_process]回调将被调用)。如果[method _physics_process]被é‡å†™ï¼Œåˆ™è‡ªåЍ"
-"å¯ç”¨ã€‚在[method _ready]之å‰å¯¹å®ƒçš„任何调用都将被忽略。"
+"å¯ç”¨æˆ–ç¦ç”¨è¯¥èŠ‚ç‚¹çš„å†…éƒ¨ç‰©ç†ã€‚内部物ç†å¤„ç†ä¸Žæ­£å¸¸çš„[method _physics_process]调用"
+"隔离进行,并且由æŸäº›èŠ‚ç‚¹å†…éƒ¨ä½¿ç”¨ï¼Œä»¥ç¡®ä¿æ­£å¸¸å·¥ä½œï¼Œå³ä½¿èŠ‚ç‚¹æš‚åœæˆ–物ç†å¤„ç†å› è„š"
+"本而ç¦ç”¨ï¼ˆ[method set_physics_process])。仅适用于用于æ“纵内置节点行为的高级"
+"用途。\n"
+"[b]警告:[/b] 内置节点ä¾é å†…éƒ¨å¤„ç†æ¥å®žçŽ°è‡ªå·±çš„é€»è¾‘ï¼Œæ‰€ä»¥ä»Žä½ çš„ä»£ç ä¸­æ”¹å˜è¿™ä¸ªå€¼"
+"å¯èƒ½ä¼šå¯¼è‡´æ„外的行为。为特定的高级用途æä¾›äº†å¯¹æ­¤å†…部逻辑的脚本访问,但ä¸å®‰å…¨"
+"䏔䏿”¯æŒã€‚"
#: doc/classes/Node.xml:639
msgid ""
@@ -44163,7 +44468,6 @@ msgstr ""
"写,则自动å¯ç”¨ã€‚任何在[method _ready]之å‰å¯¹å®ƒçš„调用都将被忽略。"
#: doc/classes/Node.xml:653
-#, fuzzy
msgid ""
"Enables or disabled internal processing for this node. Internal processing "
"happens in isolation from the normal [method _process] calls and is used by "
@@ -44175,10 +44479,12 @@ msgid ""
"behavior. Script access to this internal logic is provided for specific "
"advanced uses, but is unsafe and not supported."
msgstr ""
-"å¯ç”¨æˆ–ç¦ç”¨è¯¥èŠ‚ç‚¹çš„å†…éƒ¨å¤„ç†ã€‚内部处ç†å‘生在与正常的[method _process]调用隔离的"
-"情况下,并被一些节点内部使用,以ä¿è¯æ­£å¸¸è¿è¡Œã€‚å³ä½¿èŠ‚ç‚¹è¢«æš‚åœæˆ–process函数被脚"
-"本ç¦ç”¨ï¼ˆ[method set_process]),其内部处ç†ä»ä¼šè¿›è¡Œã€‚åªå¯¹é«˜çº§ç”¨é€”有用,å¯ä»¥æ“"
-"纵内置节点的行为。"
+"å¯ç”¨æˆ–ç¦ç”¨æ­¤èŠ‚ç‚¹çš„å†…éƒ¨å¤„ç†ã€‚内部处ç†ä¸Žæ­£å¸¸çš„ [method _process] 调用隔离进行,"
+"并且由æŸäº›èŠ‚ç‚¹å†…éƒ¨ä½¿ç”¨ï¼Œä»¥ç¡®ä¿æ­£å¸¸å·¥ä½œï¼Œå³ä½¿èŠ‚ç‚¹å·²æš‚åœæˆ–处ç†å› è„šæœ¬è€Œç¦ç”¨"
+"([method set_process])。仅适用于æ“纵内置节点行为的高级用途。\n"
+"[b]警告:[/b] 内置节点ä¾èµ–äºŽå†…éƒ¨å¤„ç†æ¥å®žçŽ°è‡ªå·±çš„é€»è¾‘ï¼Œå› æ­¤æ›´æ”¹ä»£ç ä¸­çš„这个值"
+"å¯èƒ½ä¼šå¯¼è‡´æ„外行为。为特定的高级用途æä¾›äº†å¯¹æ­¤å†…部逻辑的脚本访问,但ä¸å®‰å…¨ä¸”"
+"䏿”¯æŒã€‚"
#: doc/classes/Node.xml:661
msgid ""
@@ -44188,8 +44494,8 @@ msgid ""
"is overridden. Any calls to this before [method _ready] will be ignored."
msgstr ""
"å¯ç”¨æœªå¤„ç†çš„输入处ç†ã€‚这对GUI控件æ¥è¯´æ˜¯ä¸éœ€è¦çš„! å®ƒä½¿èŠ‚ç‚¹èƒ½å¤ŸæŽ¥æ”¶æ‰€æœ‰ä»¥å‰æ²¡æœ‰"
-"处ç†çš„输入(通常是由[控制]处ç†çš„)。如果[method _unhandled_input]被é‡è½½ï¼Œåˆ™è‡ª"
-"动å¯ç”¨ã€‚在[method _ready]之å‰å¯¹å®ƒçš„任何调用都将被忽略。"
+"处ç†çš„输入(通常是由[Control]处ç†çš„)。如果[method _unhandled_input]被é‡è½½ï¼Œ"
+"则自动å¯ç”¨ã€‚在[method _ready]之å‰å¯¹å®ƒçš„任何调用都将被忽略。"
#: doc/classes/Node.xml:668
msgid ""
@@ -44242,7 +44548,6 @@ msgstr ""
"默认的SceneTree(如果在树内)。"
#: doc/classes/Node.xml:697
-#, fuzzy
msgid ""
"The name of the node. This name is unique among the siblings (other child "
"nodes from the same parent). When set to an existing name, the node will be "
@@ -44251,8 +44556,11 @@ msgid ""
"character, which is reserved for unique names when using [method add_child]. "
"When setting the name manually, any [code]@[/code] will be removed."
msgstr ""
-"节点的å称。这个å字在兄弟å§å¦¹ä¸­æ˜¯å”¯ä¸€çš„(æ¥è‡ªåŒä¸€ä¸ªçˆ¶èŠ‚ç‚¹çš„å…¶ä»–å­èŠ‚ç‚¹ï¼‰ã€‚å½“"
-"设置为现有å称时,节点将被自动é‡å‘½å。"
+"节点的å称。此å称在兄弟节点(æ¥è‡ªåŒä¸€çˆ¶èŠ‚ç‚¹çš„å…¶ä»–å­èŠ‚ç‚¹ï¼‰ä¸­æ˜¯å”¯ä¸€çš„ã€‚å½“è®¾ç½®"
+"为现有å称时,节点将自动é‡å‘½å。\n"
+"[b]注æ„:[/b] 自动生æˆçš„åç§°å¯èƒ½åŒ…å« [code]@[/code] 字符,在使用 [method "
+"add_child] æ—¶ä¿ç•™è¯¥å­—符用于唯一å称。手动设置å称时,将删除任何 [code]@[/"
+"code]。"
#: doc/classes/Node.xml:701
msgid ""
@@ -44335,14 +44643,14 @@ msgid ""
"Notification received every frame when the physics process flag is set (see "
"[method set_physics_process])."
msgstr ""
-"当 physics process flag 被设置时,æ¯ä¸€å¸§éƒ½ä¼šæ”¶åˆ°è¯¥é€šçŸ¥ï¼ˆè§[方法"
+"当 physics process flag 被设置时,æ¯ä¸€å¸§éƒ½ä¼šæ”¶åˆ°è¯¥é€šçŸ¥ï¼ˆè§[method "
"set_physics_process])。"
#: doc/classes/Node.xml:760
msgid ""
"Notification received every frame when the process flag is set (see [method "
"set_process])."
-msgstr "当 process flag 被设置时,æ¯ä¸€å¸§éƒ½æ”¶åˆ°é€šçŸ¥ï¼ˆè§[方法set_process])。"
+msgstr "当 process flag 被设置时,æ¯ä¸€å¸§éƒ½æ”¶åˆ°é€šçŸ¥ï¼ˆè§[method set_process])。"
#: doc/classes/Node.xml:763
msgid ""
@@ -44379,7 +44687,7 @@ msgid ""
"Notification received every frame when the internal process flag is set (see "
"[method set_process_internal])."
msgstr ""
-"当 internal process flag 被设置时,æ¯ä¸€å¸§éƒ½æ”¶åˆ°é€šçŸ¥ï¼ˆè§[方法"
+"当 internal process flag 被设置时,æ¯ä¸€å¸§éƒ½æ”¶åˆ°é€šçŸ¥ï¼ˆè§[method "
"set_process_internal])。"
#: doc/classes/Node.xml:785
@@ -44387,7 +44695,7 @@ msgid ""
"Notification received every frame when the internal physics process flag is "
"set (see [method set_physics_process_internal])."
msgstr ""
-"当 internal physics process flag 被设置时,æ¯ä¸€å¸§éƒ½ä¼šæ”¶åˆ°é€šçŸ¥ï¼ˆè§[方法"
+"当 internal physics process flag 被设置时,æ¯ä¸€å¸§éƒ½ä¼šæ”¶åˆ°é€šçŸ¥ï¼ˆè§[method "
"set_physics_process_internal])。"
#: doc/classes/Node.xml:788
@@ -44434,7 +44742,7 @@ msgid ""
"instance changes too."
msgstr ""
"使用实例化进行å¤åˆ¶ã€‚\n"
-"å®žä¾‹ä¸ŽåŽŸä»¶ä¿æŒè”系,因此当原件å‘生å˜åŒ–时,实例也会å‘生å˜åŒ–。"
+"å®žä¾‹ä¸ŽåŽŸä»¶ä¿æŒé“¾æŽ¥ï¼Œå› æ­¤å½“原件å‘生å˜åŒ–时,实例也会å‘生å˜åŒ–。"
#: doc/classes/Node2D.xml:4
msgid ""
@@ -44588,20 +44896,21 @@ msgstr ""
"点的Z索引是2,它的父节点的有效Z索引是3,那么这个节点的有效Z索引将是2+3=5。"
#: doc/classes/Node2D.xml:130
-#, fuzzy
msgid ""
"Z index. Controls the order in which the nodes render. A node with a higher "
"Z index will display in front of others. Must be between [constant "
"VisualServer.CANVAS_ITEM_Z_MIN] and [constant VisualServer."
"CANVAS_ITEM_Z_MAX] (inclusive)."
-msgstr "Z索引。控制节点的渲染顺åºã€‚具有较高Z指数的节点将显示在其他节点的å‰é¢ã€‚"
+msgstr ""
+"Z 索引。控制节点呈现的顺åºã€‚具有较高 Z 索引的节点将显示在其他节点之å‰ã€‚必须介"
+"于 [constant VisualServer.CANVAS_ITEM_Z_MIN] 和 [constant VisualServer."
+"CANVAS_ITEM_Z_MAX] 之间(å«ï¼‰ã€‚"
#: doc/classes/NodePath.xml:4
msgid "Pre-parsed scene tree path."
msgstr "预先解æžçš„场景树路径。"
#: doc/classes/NodePath.xml:7
-#, fuzzy
msgid ""
"A pre-parsed relative or absolute path in a scene tree, for use with [method "
"Node.get_node] and similar functions. It can reference a node, a resource "
@@ -44635,29 +44944,32 @@ msgid ""
"when moving, renaming or deleting a node in the scene tree, but they are "
"never updated at runtime."
msgstr ""
-"场景树中预先解æžçš„相对或ç»å¯¹è·¯å¾„,用于[method Node.get_node]和类似函数。它å¯"
-"以引用一个节点,一个节点中的资æºï¼Œæˆ–者一个节点或资æºçš„属性。例如,"
-"[code]\"Path2D/PathFollow2D/Sprite2D:texture:size\"[/code]将引用å为"
-"[code]\"Sprite2D\"[/code]的节点上的[code]texture[/code]资æºçš„[code]size[/"
-"code]属性,该节点是路径中其他指定节点的å­èŠ‚ç‚¹ã€‚\n"
-"你通常åªéœ€å°†ä¸€ä¸ªå­—符串传递给[method Node.get_node],它就会被自动转æ¢ï¼Œä½†ä½ å¶"
-"尔也会想用[NodePath]或字é¢è¯­æ³•[code]@\"path\"[/code]æå‰è§£æžä¸€ä¸ªè·¯å¾„。导出"
-"[NodePath]å˜é‡ä¼šåœ¨ç¼–è¾‘å™¨çš„å±žæ€§é¢æ¿ä¸­ç»™ä½ ä¸€ä¸ªèŠ‚ç‚¹é€‰æ‹©éƒ¨ä»¶ï¼Œè¿™é€šå¸¸å¾ˆæœ‰ç”¨ã€‚\n"
-"一个[NodePath]是由一个斜线分隔的节点å称列表(åƒä¸€ä¸ªæ–‡ä»¶ç³»ç»Ÿè·¯å¾„)和一个å¯é€‰"
-"的冒å·åˆ†éš”çš„ \"å­åç§° \"列表组æˆçš„,它å¯ä»¥æ˜¯èµ„æºæˆ–属性。\n"
-"NodePaths的一些例å­åŒ…括如下。\n"
-"[codeblock]\n"
-"# No leading slash means it is relative to the current node.\n"
-"@\"A\" # Immediate child A\n"
-"@\"A/B\" # A's child B\n"
-"@\".\" # The current node.\n"
-"@\"..\" # The parent node.\n"
-"@\"../C\" # A sibling node C.\n"
-"# A leading slash means it is absolute from the SceneTree.\n"
-"@\"/root\" # Equivalent to get_tree().get_root().\n"
-"@\"/root/Main\" # If your main scene's root node were named \"Main\".\n"
-"@\"/root/MyAutoload\" # If you have an autoloaded node or scene.\n"
-"[/codeblock]"
+"场景树中预先解æžçš„相对或ç»å¯¹è·¯å¾„,用于 [method Node.get_node] 和类似函数。它"
+"å¯ä»¥å¼•用节点ã€èŠ‚ç‚¹å†…çš„èµ„æºæˆ–节点或资æºçš„属性。例如,[code]\"Path2D/"
+"PathFollow2D/Sprite:texture:size\"[/code] 将引用å为 [code]\"Sprite\"[/code] "
+"节点上的纹ç†èµ„æº [code]texture[/code] 的尺寸 [code]size[/code] 属性,该节点是"
+"路径中其他命å节点的一个å­èŠ‚ç‚¹ã€‚\n"
+"您通常åªéœ€å°†ä¸€ä¸ªå­—符串传递给 [method Node.get_node] 并且它会自动转æ¢ï¼Œä½†æ‚¨å¯"
+"能å¶å°”希望使用 [NodePath] 或文字语法 [code]@\"path\"[/code] æå‰è§£æžè·¯å¾„。导"
+"出 [NodePath] å˜é‡å°†åœ¨ç¼–è¾‘å™¨çš„å±žæ€§é¢æ¿ä¸­ä¸ºæ‚¨æä¾›ä¸€ä¸ªèŠ‚ç‚¹é€‰æ‹©å°éƒ¨ä»¶ï¼Œè¿™é€šå¸¸å¾ˆ"
+"有用。\n"
+"[NodePath] 由斜线分隔的节点å称列表(如文件系统路径)和å¯é€‰çš„冒å·åˆ†éš”的“å­å"
+"ç§°â€åˆ—表组æˆï¼Œè¿™äº›â€œå­åç§°â€å¯ä»¥æ˜¯èµ„æºæˆ–属性。\n"
+"NodePath 的一些示例包括:\n"
+"[codeblock]\n"
+"# 没有å‰å¯¼æ–œæ è¡¨ç¤ºå®ƒæ˜¯ç›¸å¯¹äºŽå½“å‰èŠ‚ç‚¹çš„ã€‚\n"
+"@\"A\" # 直接获得å­èŠ‚ç‚¹ A\n"
+"@\"A/B\" # A çš„å­èŠ‚ç‚¹ B\n"
+"@\".\" # 当å‰èŠ‚ç‚¹ã€‚\n"
+"@\"..\" # 父节点。\n"
+"@\"../C\" # 兄弟节点 C.\n"
+"# å‰å¯¼æ–œæ è¡¨ç¤ºå®ƒæ˜¯æ¥è‡ªåœºæ™¯æ ‘çš„ç»å¯¹è·¯å¾„。\n"
+"@\"/root\" # 等价于 get_tree().get_root()。\n"
+"@\"/root/Main\" # 如果你的主场景的根节点被命å为“Mainâ€ã€‚\n"
+"@\"/root/MyAutoload\" # 如果你有一个自动加载的节点或场景。\n"
+"[/codeblock]\n"
+"[b]注æ„:[/b] 在编辑器中,[NodePath] 属性在场景树中移动ã€é‡å‘½å或删除节点时会"
+"自动更新,但它们ä¸ä¼šåœ¨è¿è¡Œæ—¶æ›´æ–°ã€‚"
#: doc/classes/NodePath.xml:26 doc/classes/PackedScene.xml:41
#: doc/classes/Panel.xml:10 doc/classes/PanelContainer.xml:10
@@ -44666,7 +44978,6 @@ msgid "https://godotengine.org/asset-library/asset/520"
msgstr "https://godotengine.org/asset-library/asset/520"
#: doc/classes/NodePath.xml:33
-#, fuzzy
msgid ""
"Creates a NodePath from a string, e.g. [code]\"Path2D/PathFollow2D/Sprite:"
"texture:size\"[/code]. A path is absolute if it starts with a slash. "
@@ -44693,26 +45004,25 @@ msgid ""
"\"/root/Level/Path2D\"\n"
"[/codeblock]"
msgstr ""
-"从字符串创建一个NodePath,例如[code]\"Path2D/PathFollow2D/Sprite2D:texture:"
-"size\"[/code]。以斜æ å¼€å¤´çš„路径是ç»å¯¹è·¯å¾„。ç»å¯¹è·¯å¾„仅在全局场景树中有效,在å•"
-"个场景中无效。在相对路径中,[code]\".\"[/code]å’Œ[code]\"..\"[/code]表示当å‰èŠ‚"
-"点åŠå…¶çˆ¶èŠ‚ç‚¹ã€‚\n"
-"å¯é€‰åœ°åŒ…å«åœ¨ç›®æ ‡èŠ‚ç‚¹è·¯å¾„ä¹‹åŽçš„“å­åç§°â€å¯ä»¥æŒ‡å‘èµ„æºæˆ–属性,也å¯ä»¥åµŒå¥—。\n"
-"有效的NodePaths示例(å‡è®¾è¿™äº›èŠ‚ç‚¹å­˜åœ¨å¹¶ä¸”æœ‰å¼•ç”¨çš„èµ„æºæˆ–属性):\n"
-"[codeblock]\n"
-"# Points to the Sprite2D node\n"
-"\"Path2D/PathFollow2D/Sprite2D\"\n"
-"# Points to the Sprite2D node and its \"texture\" resource.\n"
-"# get_node() would retrieve \"Sprite2D\", while get_node_and_resource()\n"
-"# would retrieve both the Sprite2D node and the \"texture\" resource.\n"
-"\"Path2D/PathFollow2D/Sprite2D:texture\"\n"
-"# Points to the Sprite2D node and its \"position\" property.\n"
-"\"Path2D/PathFollow2D/Sprite2D:position\"\n"
-"# Points to the Sprite2D node and the \"x\" component of its \"position\" "
-"property.\n"
-"\"Path2D/PathFollow2D/Sprite2D:position:x\"\n"
-"# Absolute path (from \"root\")\n"
-"\"/root/Level/Path2D\"\n"
+"从字符串创建一个 NodePath,例如 [code]\"Path2D/PathFollow2D/Sprite:texture:"
+"size\"[/code]。如果路径以斜æ å¼€å¤´ï¼Œåˆ™è¯¥è·¯å¾„是ç»å¯¹è·¯å¾„。ç»å¯¹è·¯å¾„仅在全局场景树"
+"中有效,在å•个场景中无效。在相对路径中,[code]\".\"[/code] å’Œ [code]\"..\"[/"
+"code] 表示当å‰èŠ‚ç‚¹åŠå…¶çˆ¶èŠ‚ç‚¹ã€‚\n"
+"目标节点路径åŽåŠ ä¸Šå¯é€‰çš„“å­åç§°â€å¯ä»¥æŒ‡å‘èµ„æºæˆ–属性,也å¯ä»¥åµŒå¥—。\n"
+"有效 NodePath 的示例(å‡è®¾è¿™äº›èŠ‚ç‚¹å­˜åœ¨å¹¶å…·æœ‰å¼•ç”¨çš„èµ„æºæˆ–属性):\n"
+"[codeblock]\n"
+"# 指å‘ç²¾çµèŠ‚ç‚¹\n"
+"“Path2D/PathFollow2D/Spriteâ€\n"
+"# æŒ‡å‘ Sprite 节点åŠå…¶â€œçº¹ç†â€èµ„æºã€‚\n"
+"# get_node() 将检索“Spriteâ€ï¼Œè€Œ get_node_and_resource()\n"
+"# å°†åŒæ—¶æ£€ç´¢ Sprite 节点和“纹ç†â€èµ„æºã€‚\n"
+"“Path2D/PathFollow2D/Sprite:textureâ€\n"
+"# æŒ‡å‘ Sprite 节点åŠå…¶â€œä½ç½®â€å±žæ€§ã€‚\n"
+"\"Path2D/PathFollow2D/Sprite:position\"\n"
+"# æŒ‡å‘ Sprite 节点åŠå…¶â€œpositionâ€å±žæ€§çš„“xâ€ç»„件。\n"
+"\"Path2D/PathFollow2D/Sprite:position:x\"\n"
+"# ç»å¯¹è·¯å¾„(æ¥è‡ªâ€œrootâ€ï¼‰\n"
+"“/root/Level/Path2Dâ€\n"
"[/codeblock]"
#: doc/classes/NodePath.xml:55
@@ -44743,7 +45053,6 @@ msgstr ""
"[/codeblock]"
#: doc/classes/NodePath.xml:68
-#, fuzzy
msgid ""
"Returns all subnames concatenated with a colon character ([code]:[/code]) as "
"separator, i.e. the right side of the first colon in a node path.\n"
@@ -44752,15 +45061,14 @@ msgid ""
"print(nodepath.get_concatenated_subnames()) # texture:load_path\n"
"[/codeblock]"
msgstr ""
-"返回所有用冒å·([code]:[/code])作为分隔符连接的å­å称,å³èŠ‚ç‚¹è·¯å¾„ä¸­ç¬¬ä¸€ä¸ªå†’å·"
-"çš„å³ä¾§ã€‚\n"
+"返回以冒å·å­—符 ([code]:[/code]) 作为分隔符连接的所有å­å称,å³èŠ‚ç‚¹è·¯å¾„ä¸­ç¬¬ä¸€"
+"个冒å·çš„å³ä¾§ã€‚\n"
"[codeblock]\n"
-"var nodepath = NodePath(\"Path2D/PathFollow2D/Sprite2D:texture:load_path\")\n"
-"print(nodepath.get_concatenated_subnames()) # texture:load_path\n"
+"var nodepath = NodePath(\"Path2D/PathFollow2D/Sprite:texture:load_path\")\n"
+"print(nodepath.get_concatenated_subnames()) #texture:load_path\n"
"[/codeblock]"
#: doc/classes/NodePath.xml:79
-#, fuzzy
msgid ""
"Gets the node name indicated by [code]idx[/code] (0 to [method "
"get_name_count]).\n"
@@ -44771,27 +45079,25 @@ msgid ""
"print(node_path.get_name(2)) # Sprite\n"
"[/codeblock]"
msgstr ""
-"获å–ç”±[code]idx[/code]表示的节点å称(0到[method get_name_count])。\n"
+"获å–ç”± [code]idx[/code](0 到 [method get_name_count])指示的节点å称。\n"
"[codeblock]\n"
-"var node_path = NodePath(\"Path2D/PathFollow2D/Sprite2D\")\n"
+"var node_path = NodePath(\"Path2D/PathFollow2D/Sprite\")\n"
"print(node_path.get_name(0)) # Path2D\n"
-"print(node_path.get_name(1)) # PathFollow2D\n"
-"print(node_path.get_name(2)) # Sprite\n"
+"print(node_path.get_name(1)) #PathFollow2D\n"
+"print(node_path.get_name(2)) #Sprite\n"
"[/codeblock]"
#: doc/classes/NodePath.xml:91
-#, fuzzy
msgid ""
"Gets the number of node names which make up the path. Subnames (see [method "
"get_subname_count]) are not included.\n"
"For example, [code]\"Path2D/PathFollow2D/Sprite\"[/code] has 3 names."
msgstr ""
-"èŽ·å–æž„æˆè·¯å¾„的节点å称的数é‡ã€‚å­å称(è§[方法get_subname_count])ä¸åŒ…括在"
-"内。\n"
-"例如,[code]\"Path2D/PathFollow2D/Sprite2D\"[/code]包å«ä¸‰ä¸ªå称。"
+"获å–组æˆè·¯å¾„的节点å称的数é‡ã€‚ä¸åŒ…括å­å称(请å‚阅 [method "
+"get_subname_count])。\n"
+"例如,[code]\"Path2D/PathFollow2D/Sprite\"[/code] 有 3 个å称。"
#: doc/classes/NodePath.xml:99
-#, fuzzy
msgid ""
"Gets the resource or property name indicated by [code]idx[/code] (0 to "
"[method get_subname_count]).\n"
@@ -44801,17 +45107,15 @@ msgid ""
"print(node_path.get_subname(1)) # load_path\n"
"[/codeblock]"
msgstr ""
-"获å–ç”±[code]idx[/code](0到[method get_subname_count]ï¼‰æŒ‡ç¤ºçš„èµ„æºæˆ–属性å"
+"获å–ç”± [code]idx[/code](0 到 [method get_subname_count]ï¼‰æŒ‡ç¤ºçš„èµ„æºæˆ–属性å"
"称。\n"
"[codeblock]\n"
-"var node_path = NodePath(\"Path2D/PathFollow2D/Sprite2D:texture:load_path"
-"\")\n"
+"var node_path = NodePath(\"Path2D/PathFollow2D/Sprite:texture:load_path\")\n"
"print(node_path.get_subname(0)) # texture\n"
"print(node_path.get_subname(1)) # load_path\n"
"[/codeblock]"
#: doc/classes/NodePath.xml:110
-#, fuzzy
msgid ""
"Gets the number of resource or property names (\"subnames\") in the path. "
"Each subname is listed after a colon character ([code]:[/code]) in the node "
@@ -44819,10 +45123,10 @@ msgid ""
"For example, [code]\"Path2D/PathFollow2D/Sprite:texture:load_path\"[/code] "
"has 2 subnames."
msgstr ""
-"获å–è·¯å¾„ä¸­çš„èµ„æºæˆ–属性å称(\"å­åç§°\")的数é‡ã€‚æ¯ä¸ªå­å称都列在节点路径中的"
-"冒å·å­—符([code]:[/code])之åŽã€‚\n"
-"例如,[code]\"Path2D/PathFollow2D/Sprite2D:texture:load_path\"[/code]包å«ä¸¤ä¸ª"
-"å­å称。"
+"获å–è·¯å¾„ä¸­èµ„æºæˆ–属性å称(“å­åç§°â€ï¼‰çš„æ•°é‡ã€‚æ¯ä¸ªå­å称都列在节点路径中的冒å·"
+"字符 ([code]:[/code]) 之åŽã€‚\n"
+"例如,[code]\"Path2D/PathFollow2D/Sprite:texture:load_path\"[/code] 有 2 个å­"
+"å称。"
#: doc/classes/NodePath.xml:117
msgid ""
@@ -44846,7 +45150,6 @@ msgid "[OpenSimplexNoise] filled texture."
msgstr "[OpenSimplexNoise]填充纹ç†ã€‚"
#: modules/opensimplex/doc_classes/NoiseTexture.xml:7
-#, fuzzy
msgid ""
"Uses an [OpenSimplexNoise] to fill the texture data. You can specify the "
"texture size but keep in mind that larger textures will take longer to "
@@ -44862,12 +45165,12 @@ msgid ""
"var image = texture.get_data()\n"
"[/codeblock]"
msgstr ""
-"使用一个[OpenSimplexNoise]æ¥å¡«å……çº¹ç†æ•°æ®ã€‚ä½ å¯ä»¥æŒ‡å®šçº¹ç†çš„大å°ï¼Œä½†è¯·è®°ä½ï¼Œæ›´"
-"大的纹ç†å°†éœ€è¦æ›´é•¿çš„æ—¶é—´æ¥ç”Ÿæˆï¼Œè€Œä¸”æ— ç¼å™ªå£°åªé€‚用于方形大å°çš„纹ç†ã€‚\n"
-"NoiseTexture也å¯ä»¥ç”Ÿæˆæ³•线图纹ç†ã€‚\n"
-"该类在内部使用[Thread]æ¥ç”Ÿæˆçº¹ç†æ•°æ®ï¼Œæ‰€ä»¥å¦‚果生æˆè¿‡ç¨‹å°šæœªå®Œæˆï¼Œ[method "
-"Texture2D.get_data]å¯èƒ½ä¼šè¿”回[code]null[/code]ã€‚åœ¨è¿™ç§æƒ…况下,你需è¦åœ¨è®¿é—®æ•°"
-"æ®ä¹‹å‰ç­‰å¾…纹ç†çš„生æˆã€‚\n"
+"使用 [OpenSimplexNoise] å¡«å……çº¹ç†æ•°æ®ã€‚您å¯ä»¥æŒ‡å®šçº¹ç†å¤§å°ï¼Œä½†è¯·è®°ä½ï¼Œè¾ƒå¤§çš„纹"
+"ç†å°†éœ€è¦æ›´é•¿çš„æ—¶é—´æ¥ç”Ÿæˆï¼Œå¹¶ä¸”æ— ç¼å™ªå£°ä»…适用于方形大å°çš„纹ç†ã€‚\n"
+"NoiseTexture 还å¯ä»¥ç”Ÿæˆæ³•线贴图纹ç†ã€‚\n"
+"该类内部使用线程 [Thread]s æ¥ç”Ÿæˆçº¹ç†æ•°æ®ï¼Œå› æ­¤å¦‚果生æˆè¿‡ç¨‹å°šæœªå®Œæˆï¼Œ[method "
+"Texture.get_data]å¯èƒ½ä¼šè¿”回空 [code]null[/code]ã€‚åœ¨è¿™ç§æƒ…况下,您需è¦åœ¨è®¿é—®æ•°"
+"æ®ä¹‹å‰ç­‰å¾…纹ç†ç”Ÿæˆï¼š\n"
"[codeblock]\n"
"var texture = preload(\"res://noise.tres\")\n"
"yield(texture, \"changed\")\n"
@@ -44924,12 +45227,10 @@ msgid "Width of the generated texture."
msgstr "生æˆçš„纹ç†çš„宽度。"
#: doc/classes/Object.xml:4
-#, fuzzy
msgid "Base class for all non-built-in types."
msgstr "所有éžå†…置类型的基类。"
#: doc/classes/Object.xml:7
-#, fuzzy
msgid ""
"Every class which is not a built-in type inherits from this class.\n"
"You can construct Objects from scripting languages, using [code]Object.new()"
@@ -44966,30 +45267,33 @@ msgid ""
"code]. This bug only applies to Object itself, not any of its descendents "
"like [Reference]."
msgstr ""
-"æ¯ä¸€ä¸ªä¸æ˜¯å†…置类型的类都会继承自这个类。\n"
-"ä½ å¯ä»¥ä»Žè„šæœ¬è¯­è¨€ä¸­æž„é€ å¯¹è±¡ï¼Œä½¿ç”¨GDScript中的[code]Object.new()[/code],C#中,"
-"使用[code]new Object[/code],或者VisualScript中的 \"Construct Object \"节"
-"点。\n"
-"对象ä¸ç®¡ç†å†…存。如果一个类继承于Object,你将ä¸å¾—䏿‰‹åŠ¨åˆ é™¤å®ƒçš„å®žä¾‹ã€‚ä¸ºæ­¤ï¼Œå¯"
-"以在你的脚本中调用[method free]方法,或者从C++中删除该实例。\n"
-"一些扩展Object的类会增加内存管ç†ã€‚这就是 [Reference] 的情况,它对引用进行计"
-"数,并在ä¸å†è¢«å¼•用时自动删除自己。[Node],å¦ä¸€ä¸ªåŸºæœ¬ç±»åž‹ï¼Œå½“从内存中释放时,"
-"会删除它的所有å­èŠ‚ç‚¹ã€‚\n"
-"对象导出属性,这主è¦å¯¹å­˜å‚¨å’Œç¼–辑有用,但在编程中其实并ä¸é‚£ä¹ˆæœ‰ç”¨ã€‚属性在"
-"[method _get_property_list]中导出,在[method _get]å’Œ[method _set]中处ç†ã€‚ç„¶"
-"而,脚本语言和C++有更简å•的方法æ¥å¯¼å‡ºå®ƒä»¬ã€‚\n"
-"在GDScript中å¯ä»¥ä½¿ç”¨[code]in[/code]直接测试属性æˆå‘˜ã€‚\n"
+"æ¯ä¸ªä¸æ˜¯å†…置类型的类都继承自这个类。\n"
+"您å¯ä»¥ä»Žè„šæœ¬è¯­è¨€æž„é€ å¯¹è±¡ï¼Œä½¿ç”¨ GDScript 中的 [code]Object.new()[/code]ã€C# 中"
+"çš„ [code]new Object[/code] 或 VisualScript 中的“构造对象â€èŠ‚ç‚¹ã€‚\n"
+"对象ä¸ç®¡ç†å†…存。如果类继承自 Object,则必须手动删除它的实例。为此,请从您的脚"
+"本中调用 [method free] 方法或从 C++ 中删除该实例。\n"
+"一些继承 Object 的类添加了内存管ç†ã€‚ [Reference] å°±æ˜¯è¿™ç§æƒ…况,它对引用进行计"
+"数,并在ä¸å†è¢«å¼•用时自动删除自己。 [Node] 是å¦ä¸€ç§åŸºæœ¬ç±»åž‹ï¼Œåœ¨ä»Žå†…存中释放时"
+"删除其所有å­èŠ‚ç‚¹ã€‚\n"
+"对象导出属性,这些属性主è¦ç”¨äºŽå­˜å‚¨å’Œç¼–è¾‘ï¼Œä½†åœ¨ç¼–ç¨‹ä¸­å¹¶ä¸æ˜¯é‚£ä¹ˆæœ‰ç”¨ã€‚属性在 "
+"[method _get_property_list] 中导出并在 [method _get] 和 [method _set] 中处"
+"ç†ã€‚然而,脚本语言和 C++ 有更简å•的方法æ¥å¯¼å‡ºå®ƒä»¬ã€‚\n"
+"在GDScript中å¯ä»¥ä½¿ç”¨ [code]in[/code] 直接测试属性æˆå‘˜ã€‚\n"
"[codeblock]\n"
"var n = Node2D.new()\n"
-"print(\"position\" in n) # Prints \"True\".\n"
-"print(\"other_property\" in n) # Prints \"False\".\n"
+"print(\"position\" in n) # æ‰“å° \"True\"。\n"
+"print(\"other_property\" in n) # æ‰“å° \"False\"。\n"
"[/codeblock]\n"
-"åªè¦é”®å­˜åœ¨ï¼Œ[code]in[/code]æ“作符就会评估为[code]true[/code],å³ä½¿å€¼ä¸º"
+"åªè¦é”®å­˜åœ¨ï¼Œ[code]in[/code] è¿ç®—符将评估为 [code]true[/code],å³ä½¿å€¼ä¸º "
"[code]null[/code]。\n"
-"对象也会收到通知。通知是一ç§ç®€å•çš„æ–¹å¼æ¥é€šçŸ¥å¯¹è±¡å…³äºŽä¸åŒçš„事件,所以它们å¯ä»¥"
-"一起被处ç†ã€‚å‚阅[method _notification]。\n"
-"[b]注æ„:[/b] 与对[引用]的引用ä¸åŒï¼Œå¯¹å­˜å‚¨åœ¨å˜é‡ä¸­çš„对象的引用å¯ä»¥åœ¨æ²¡æœ‰è­¦å‘Š"
-"的情况下å˜å¾—无效。因此,建议对数æ®ç±»ä½¿ç”¨[引用]è€Œä¸æ˜¯[对象]。"
+"对象也会收到通知。通知是一ç§å°†ä¸åŒäº‹ä»¶é€šçŸ¥ç»™å¯¹è±¡çš„ç®€å•æ–¹æ³•,因此它们å¯ä»¥ä¸€èµ·"
+"处ç†ã€‚è§ [method _notification]。\n"
+"[b]注æ„:[/b] 与对 [Reference] 的引用ä¸åŒï¼Œå¯¹å­˜å‚¨åœ¨å˜é‡ä¸­çš„对象的引用å¯èƒ½ä¼šåœ¨"
+"没有警告的情况下å˜å¾—无效。因此,建议对数æ®ç±»ä½¿ç”¨ [Reference] è€Œä¸æ˜¯ "
+"[Object]。\n"
+"[b]注æ„:[/b]由于一个错误,你ä¸èƒ½ä½¿ç”¨ [code]Object.new()[/code] 创建一个“普"
+"通â€å¯¹è±¡ã€‚请使用 [code]ClassDB.instance(\"Object\")[/code]。这个错误åªé€‚用于"
+"Objectæœ¬èº«ï¼Œè€Œä¸æ˜¯å®ƒçš„任何å­ç±»ï¼Œå¦‚[Reference]。"
#: doc/classes/Object.xml:24 doc/classes/Reference.xml:13
#: doc/classes/Resource.xml:12
@@ -44997,15 +45301,15 @@ msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/workflow/best_practices/"
"node_alternatives.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/workflow/best_practices/"
-"node_alternatives.html"
+"https://docs.godotengine.org/zh_CN/stable/getting_started/workflow/"
+"best_practices/node_alternatives.html"
#: doc/classes/Object.xml:25
msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/"
"gdscript_exports.html#advanced-exports"
msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/"
+"https://docs.godotengine.org/zh_CN/stable/getting_started/scripting/gdscript/"
"gdscript_exports.html#advanced-exports"
#: doc/classes/Object.xml:32
@@ -45154,7 +45458,6 @@ msgstr ""
"set_message_translation]和[method tr]。"
#: doc/classes/Object.xml:128
-#, fuzzy
msgid ""
"Connects a [code]signal[/code] to a [code]method[/code] on a [code]target[/"
"code] object. Pass optional [code]binds[/code] to the call as an [Array] of "
@@ -45187,37 +45490,36 @@ msgid ""
"level, weapon_type, damage])\n"
"[/codeblock]"
msgstr ""
-"[b]FIXME:[/b] 语法éšç€[Callable]的增加而改å˜ï¼Œè¿™åº”该被更新。\n"
-"将一个[code]signal[/code]连接到一个[code]target[/code]对象的[code]method[/"
-"code]。将å¯é€‰çš„[code]binds[/code]作为一个[Array]çš„å‚æ•°ä¼ é€’ç»™è°ƒç”¨ã€‚è¿™äº›å‚æ•°å°†"
-"在调用[method emit_signal]æ—¶ä½¿ç”¨çš„ä»»ä½•å‚æ•°ä¹‹åŽè¢«ä¼ é€’到方法中。使用"
-"[code]flags[/code]æ¥è®¾ç½®å»¶è¿Ÿæˆ–一次性连接。å‚阅[enum ConnectFlags]常é‡ã€‚\n"
-"一个[code]signal[/code]åªèƒ½è¢«è¿žæŽ¥åˆ°ä¸€ä¸ª[code]method[/code]上一次。如果已ç»è¿ž"
-"接了,它将抛出一个错误,除éžè¯¥ä¿¡å·æ˜¯ç”¨[constant CONNECT_REFERENCE_COUNTED]连"
-"接的。为了é¿å…è¿™ç§æƒ…况,首先,使用[method is_connected]æ¥æ£€æŸ¥çŽ°æœ‰çš„è¿žæŽ¥ã€‚\n"
-"如果[code]target[/code]在游æˆçš„生命周期中被破å,连接就会丢失。\n"
-"䏋颿˜¯ç¤ºä¾‹ï¼š\n"
+"å°†ä¿¡å· [code]signal[/code] 连接到目标 [code]target[/code] 对象上的方法 "
+"[code]method[/code]。将å¯é€‰çš„绑定 [code]binds[/code] 作为一个 [Array] çš„å‚æ•°"
+"ä¼ é€’ç»™è°ƒç”¨ã€‚è¿™äº›å‚æ•°å°†åœ¨è°ƒç”¨ [method emit_signal] ä¸­ä½¿ç”¨çš„ä»»ä½•å‚æ•°ä¹‹åŽä¼ é€’ç»™"
+"方法。使用 [code]flags[/code] 设置延迟或一次性连接。请å‚阅 [enum "
+"ConnectFlags] 常é‡ã€‚\n"
+"ä¸€ä¸ªä¿¡å· [code]signal[/code] 与åŒä¸€æ–¹æ³• [code]method[/code] åªèƒ½è¿žæŽ¥ä¸€æ¬¡ã€‚除"
+"éžä¹‹å‰åœ¨è¿žæŽ¥ä¿¡å·æ—¶ä½¿ç”¨äº† [constant CONNECT_REFERENCE_COUNTED],å¦åˆ™åœ¨è¿›è¡Œé‡å¤"
+"连接时会抛出错误。为é¿å…è¿™ç§æƒ…况,首先使用 [method is_connected] 检查是å¦å·²æœ‰"
+"连接。\n"
+"如果 [code]target[/code] 在游æˆç”Ÿå‘½å‘¨æœŸä¸­è¢«é”€æ¯ï¼Œè¿žæŽ¥å°†ä¸¢å¤±ã€‚\n"
+"例å­ï¼š\n"
"[codeblock]\n"
-"connect(\"pressed\", self, \"_on_Button_pressed\") # BaseButton signal\n"
-"connect(\"text_entered\", self, \"_on_LineEdit_text_entered\") # LineEdit "
-"signal\n"
-"connect(\"hit\", self, \"_on_Player_hit\", [ weapon_type, damage ]) # User-"
-"defined signal\n"
+"connect(\"pressed\", self, \"_on_Button_pressed\") # BaseButton ä¿¡å·\n"
+"connect(\"text_entered\", self, \"_on_LineEdit_text_entered\") # LineEdit ä¿¡"
+"å·\n"
+"connect(\"hit\", self, \"_on_Player_hit\", [ Weapon_type, damage ]) # 用户自"
+"定义信å·\n"
"[/codeblock]\n"
-"An example of the relationship between [code]binds[/code] passed to [method "
-"connect] and parameters used when calling [method emit_signal]:\n"
-"[codeblock]\n"
-"connect(\"hit\", self, \"_on_Player_hit\", [ weapon_type, damage ]) # "
-"weapon_type and damage are passed last\n"
-"emit_signal(\"hit\", \"Dark lord\", 5) # \"Dark lord\" and 5 are passed "
-"first\n"
-"func _on_Player_hit(hit_by, level, weapon_type, damage):\n"
-" print(\"Hit by %s (lvl %d) with weapon %s for %d damage\" % [hit_by, "
+"传递给 [method connect] 的 [code]binds[/code] 与调用 [method emit_signal] 时"
+"ä½¿ç”¨çš„å‚æ•°çš„关系示例:\n"
+"[codeblock]\n"
+"connect(\"hit\", self, \"_on_Player_hit\", [ Weapon_type, damage ]) # 武器类"
+"型和伤害最åŽä¼ é€’\n"
+"emit_signal(\"hit\", \"Dark lord\", 5) # 先传递 \"Dark lord\" 和 5\n"
+"func _on_Player_hit(hit_by, level, Weapon_type, damage):\n"
+" print(\"被 %s(等级 %d)使用武器 %s å‡»ä¸­ï¼Œé€ æˆ %d 点伤害\" % [hit_by, "
"level, weapon_type, damage])\n"
"[/codeblock]"
#: doc/classes/Object.xml:152
-#, fuzzy
msgid ""
"Disconnects a [code]signal[/code] from a [code]method[/code] on the given "
"[code]target[/code].\n"
@@ -45225,10 +45527,10 @@ msgid ""
"throw an error. Use [method is_connected] to ensure that the connection "
"exists."
msgstr ""
-"[b]FIXME:[/b] 添加了[Callable]åŽï¼Œè¯­æ³•å‘生了å˜åŒ–,应该进行更新。\n"
-"从给定的[code]target[/code]上的[code]method[/code]断开[code]signal[/code]。\n"
-"如果试图断开ä¸å­˜åœ¨çš„连接,该方法将抛出错误。使用[method is_connected]ç¡®ä¿è¿žæŽ¥"
-"存在。"
+"å°† [code] ä¿¡å· [/code] 与给定 [code] 目标 [/code] 上的 [code] 方法 [/code] æ–­"
+"开。\n"
+"如果您å°è¯•æ–­å¼€ä¸å­˜åœ¨çš„连接,该方法将引å‘错误。使用 [method is_connected] ç¡®ä¿"
+"连接存在。"
#: doc/classes/Object.xml:160
msgid ""
@@ -45335,9 +45637,8 @@ msgid "Returns the object's metadata entry for the given [code]name[/code]."
msgstr "返回给定[code]name[/code]çš„å¯¹è±¡çš„å…ƒæ•°æ®æ¡ç›®ã€‚"
#: doc/classes/Object.xml:223
-#, fuzzy
msgid "Returns the object's metadata as a [PoolStringArray]."
-msgstr "将对象的元数æ®ä½œä¸ºä¸€ä¸ª[PackedStringArray]返回。"
+msgstr "将对象的元数æ®ä½œä¸º [PoolStringArray] 返回。"
#: doc/classes/Object.xml:229
msgid "Returns the object's methods and their signatures as an [Array]."
@@ -45417,14 +45718,12 @@ msgstr ""
"false[/code] 。"
#: doc/classes/Object.xml:306
-#, fuzzy
msgid ""
"Returns [code]true[/code] if a connection exists for a given [code]signal[/"
"code], [code]target[/code], and [code]method[/code]."
msgstr ""
-"[b]FIXME:[/b] 语法éšç€[Callable]的增加而改å˜ï¼Œè¿™åº”该被更新。\n"
-"如果给定的[code]signal[/code]ã€[code]target[/code]å’Œ[code]method[/code]存在一"
-"个连接,返回[code]true[/code]。"
+"如果给定 [code] ä¿¡å· [/code]ã€[code] 目标 [/code] å’Œ [code] 方法 [/code] 存在"
+"连接,则返回 [code]true[/code]。"
#: doc/classes/Object.xml:312
msgid ""
@@ -45460,10 +45759,9 @@ msgstr ""
"任何作用。"
#: doc/classes/Object.xml:334
-#, fuzzy
msgid ""
"Removes a given entry from the object's metadata. See also [method set_meta]."
-msgstr "从对象的元数æ®ä¸­åˆ é™¤ä¸€ä¸ªç»™å®šçš„æ¡ç›®ã€‚"
+msgstr "从对象的元数æ®ä¸­åˆ é™¤ç»™å®šæ¡ç›®ã€‚å¦è§ [method set_meta]。"
#: doc/classes/Object.xml:342
msgid ""
@@ -45573,8 +45871,8 @@ msgid ""
"set_message_translation]."
msgstr ""
"使用在“项目设置â€ä¸­é…置的翻译目录翻译消æ¯ã€‚\n"
-"åªæœ‰åœ¨å¯ç”¨æ¶ˆæ¯ç¿»è¯‘(默认情况下)æ—¶æ‰æœ‰æ•ˆï¼Œå¦åˆ™è¿”回ä¸å˜çš„[code]消æ¯[/code]。"
-"set_message_translation[方法]。"
+"仅在å¯ç”¨æ¶ˆæ¯ç¿»è¯‘时(默认如此)有效,å¦åˆ™è¿”回未修改的 [code]message[/code]。å‚"
+"阅 [method set_message_translation]。"
#: doc/classes/Object.xml:418
msgid "Emitted whenever the object's script is changed."
@@ -45615,7 +45913,7 @@ msgstr ""
#: doc/classes/Occluder.xml:4
msgid "Allows [OccluderShape]s to be used for occlusion culling."
-msgstr ""
+msgstr "å…许使用[OccluderShape]æ¥è¿›è¡Œé®æŒ¡å‰”除。"
#: doc/classes/Occluder.xml:7
msgid ""
@@ -45640,6 +45938,19 @@ msgid ""
"placed in rooms (based on their origin), and can block portals (and thus "
"entire rooms) as well as objects from rendering."
msgstr ""
+"放置在场景中的 [Occluder] 鮿Œ¡å™¨å°†è‡ªåŠ¨å‰”é™¤è¢«é®æŒ¡å™¨éšè—的对象。这å¯ä»¥é€šè¿‡å‡å°‘"
+"ç»˜åˆ¶çš„å¯¹è±¡æ•°é‡æ¥æé«˜æ€§èƒ½ã€‚\n"
+"[Occluder] 是完全动æ€çš„,您å¯ä»¥éšæ„移动它们。例如,这æ„å‘³ç€æ‚¨å¯ä»¥åœ¨ç§»åŠ¨çš„å®‡å®™"
+"é£žèˆ¹ä¸Šæ”¾ç½®é®æŒ¡ç‰©ï¼Œå¹¶è®©å®ƒåœ¨é£žè¿‡æ—¶é®æŒ¡ç‰©ä½“。\n"
+"您å¯ä»¥åœ¨ä¸€ä¸ªåœºæ™¯ä¸­æ”¾ç½®å¤§é‡ [Occluder]ã€‚ç”±äºŽå‰”é™¤æ•°ç™¾ä¸ªé®æŒ¡ç‰©ä¼šé€‚å¾—å…¶å,系统将"
+"æ ¹æ®å±å¹•ç©ºé—´æŒ‡æ ‡è‡ªåŠ¨é€‰æ‹©è¿™äº›é®æŒ¡ç‰©åœ¨ä»»ä½•ç»™å®šå¸§æœŸé—´ä¸»åŠ¨ä½¿ç”¨ã€‚è¾ƒå¤§çš„é®æŒ¡ç‰©ä»¥åŠ"
+"é è¿‘ç›¸æœºçš„é®æŒ¡ç‰©å—到é’ç。请注æ„,就å±å¹•空间而言,é è¿‘相机的å°é®æŒ¡ç‰©å¯èƒ½æ¯”远"
+"å¤„çš„å¤§é®æŒ¡ç‰©æ›´å¥½ã€‚\n"
+"鮿Œ¡å›¾å…ƒçš„类型由您添加到 [Occluder] çš„ [OccluderShape] 决定。æŸäº› "
+"[OccluderShape] å¯èƒ½å…许在å•个节点中有多个图元,以æé«˜æ•ˆçŽ‡ã€‚\n"
+"尽管 [Occluder] 在一般用途中工作,但与门户系统结åˆä½¿ç”¨æ—¶ï¼Œå®ƒä»¬ä¹Ÿä¼šå˜å¾—更加强"
+"å¤§ã€‚é®æŒ¡ç‰©æ”¾ç½®åœ¨æˆ¿é—´ä¸­ï¼ˆåŸºäºŽå®ƒä»¬çš„原点),并且å¯ä»¥é˜»æŒ¡é—¨æˆ·ï¼ˆä»¥åŠæ•´ä¸ªæˆ¿é—´ï¼‰ä»¥"
+"åŠæ¸²æŸ“对象。"
#: doc/classes/OccluderPolygon2D.xml:4
msgid "Defines a 2D polygon for LightOccluder2D."
@@ -45691,15 +46002,15 @@ msgstr "按逆时针方å‘进行剔除。å‚阅[member cull_mode]。"
#: doc/classes/OccluderShape.xml:4
msgid ""
"Base class for shapes used for occlusion culling by the [Occluder] node."
-msgstr ""
+msgstr "用于[Occluder]èŠ‚ç‚¹è¿›è¡Œé®æŒ¡å‰”除的形状的基类。"
#: doc/classes/OccluderShape.xml:7
msgid "[Occluder]s can use any primitive shape derived from [OccluderShape]."
-msgstr ""
+msgstr "[Occluder] å¯ä»¥ä½¿ç”¨ä»Ž [OccluderShape] 派生的任何原始形状。"
#: doc/classes/OccluderShapeSphere.xml:4
msgid "Spherical occlusion primitive for use with the [Occluder] node."
-msgstr ""
+msgstr "与 [Occluder] 节点一起使用的çƒå½¢é®æŒ¡åŸºæœ¬å•元。"
#: doc/classes/OccluderShapeSphere.xml:7
msgid ""
@@ -45710,16 +46021,18 @@ msgid ""
"sphere positions can be set by dragging the handle in the Editor viewport. "
"The radius can be set with the smaller handle."
msgstr ""
+"[OccluderShape] 是 [Occluder] 节点使用的资æºï¼Œå…è®¸å‡ ä½•é®æŒ¡å‰”除。\n"
+"è¿™ç§å½¢çжå¯ä»¥åŒ…括多个çƒä½“。这些å¯ä»¥åœ¨ç¼–辑器检查器中或通过调用 "
+"[code]set_spheres[/code] æ¥åˆ›å»ºå’Œåˆ é™¤ã€‚å¯ä»¥é€šè¿‡åœ¨ç¼–辑器视å£ä¸­æ‹–动手柄æ¥è®¾ç½®çƒ"
+"体ä½ç½®ã€‚å¯ä»¥ä½¿ç”¨è¾ƒå°çš„æ‰‹æŸ„设置åŠå¾„。"
#: doc/classes/OccluderShapeSphere.xml:18
-#, fuzzy
msgid "Sets an individual sphere's position."
-msgstr "在[member collision_mask]上设置独立åƒç´ ã€‚"
+msgstr "设置å•个çƒä½“çš„ä½ç½®ã€‚"
#: doc/classes/OccluderShapeSphere.xml:26
-#, fuzzy
msgid "Sets an individual sphere's radius."
-msgstr "返回图层蒙版上的å•个ä½ã€‚"
+msgstr "设置å•个çƒä½“çš„åŠå¾„。"
#: doc/classes/OccluderShapeSphere.xml:32
msgid ""
@@ -45727,6 +46040,8 @@ msgid ""
"each sphere is stored in the [code]normal[/code], and the radius is stored "
"in the [code]d[/code] value of the plane."
msgstr ""
+"çƒä½“æ•°æ®å¯ä»¥ä½œä¸º [Plane] 数组访问。æ¯ä¸ªçƒä½“çš„ä½ç½®å­˜å‚¨åœ¨[code]normal[/code]"
+"中,åŠå¾„存储在平é¢çš„[code]d[/code]值中。"
#: doc/classes/OmniLight.xml:4
msgid "Omnidirectional light, such as a light bulb or a candle."
@@ -45745,6 +46060,13 @@ msgid ""
"lights per mesh, you can increase [member ProjectSettings.rendering/limits/"
"rendering/max_lights_per_object] at the cost of shader compilation times."
msgstr ""
+"å…¨å‘光是一ç§å‘所有方å‘å‘光的[Light]。光会因è·ç¦»è€Œè¡°å‡ï¼Œå¹¶ä¸”å¯ä»¥é€šè¿‡æ›´æ”¹å…¶èƒ½"
+"é‡ã€åŠå¾„和衰å‡å‚æ•°æ¥é…置这ç§è¡°å‡ã€‚\n"
+"[b]注æ„:[/b] é»˜è®¤æƒ…å†µä¸‹ï¼Œåªæœ‰ 32 个 OmniLight å¯ä»¥åŒæ—¶å½±å“å•个网格 [i] "
+"resource [/i](资æº)ã€‚è€ƒè™‘å°†å…³å¡æ‹†åˆ†ä¸ºå¤šä¸ªç½‘格,以é™ä½Žè¶…过 32 个ç¯å…‰å½±å“åŒä¸€ç½‘"
+"格资æºçš„å¯èƒ½æ€§ã€‚拆分水平网格也将æé«˜è§†é”¥ä½“剔除效果,从而æé«˜æ€§èƒ½ã€‚如果您需è¦"
+"为æ¯ä¸ªç½‘格使用更多ç¯å…‰ï¼Œæ‚¨å¯ä»¥ä»¥ç€è‰²å™¨ç¼–译时间为代价增加 [member "
+"ProjectSettings.rendering/limits/rendering/max_lights_per_object]。"
#: doc/classes/OmniLight.xml:17
msgid ""
@@ -45788,11 +46110,11 @@ msgstr ""
#: doc/classes/OmniLight.xml:37
msgid "Use more detail vertically when computing the shadow."
-msgstr ""
+msgstr "在计算阴影时,垂直方å‘上使用更多的细节。"
#: doc/classes/OmniLight.xml:40
msgid "Use more detail horizontally when computing the shadow."
-msgstr ""
+msgstr "在计算阴影时,在水平方å‘上使用更多的细节。"
#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:4
msgid "Noise generator based on Open Simplex."
@@ -45845,6 +46167,9 @@ msgid ""
"value is used as the coordinates of the top-left corner of the generated "
"noise."
msgstr ""
+"æ ¹æ®å½“å‰çš„å™ªå£°å‚æ•°ï¼Œç”Ÿæˆä¸€ä¸ª[constant Image.FORMAT_L8]æ ¼å¼çš„噪声图åƒï¼Œéœ€è¦æŒ‡"
+"定其[code]width[/code] 和 [code]height[/code]。如果指定了[code]noise_offset[/"
+"code],那么å移值将作为生æˆçš„å™ªå£°å·¦ä¸Šè§’çš„åæ ‡ã€‚"
#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:40
msgid ""
@@ -45871,7 +46196,6 @@ msgid "Returns the 4D noise value [code][-1,1][/code] at the given position."
msgstr "返回指定ä½ç½®çš„4D噪声值[code][-1,1][/code]。"
#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:89
-#, fuzzy
msgid ""
"Generate a tileable noise image in [constant Image.FORMAT_L8] format, based "
"on the current noise parameters. Generated seamless images are always square "
@@ -45880,8 +46204,10 @@ msgid ""
"noise. This is due to the way noise uses higher dimensions for generating "
"seamless noise."
msgstr ""
-"æ ¹æ®å½“å‰çš„å™ªå£°å‚æ•°ï¼Œç”Ÿæˆä¸€ä¸ªå¯å¹³é“ºçš„噪声图åƒã€‚生æˆçš„æ— ç¼å›¾åƒæ€»æ˜¯æ–¹å½¢çš„"
-"([code]size[/code] × [code]size[/code])。"
+"æ ¹æ®å½“å‰çš„å™ªå£°å‚æ•°ï¼Œä»¥ [constant Image.FORMAT_L8] æ ¼å¼ç”Ÿæˆå¯å¹³é“ºå™ªå£°å›¾åƒã€‚生"
+"æˆçš„æ— ç¼å›¾åƒå§‹ç»ˆæ˜¯æ–¹å½¢çš„([code]size[/code]× [code] size [/code])。\n"
+"[b]注æ„:[/b] ä¸Žéžæ— ç¼å™ªå£°ç›¸æ¯”,无ç¼å™ªå£°çš„对比度较低。。这是由于噪声使用更高"
+"维度æ¥ç”Ÿæˆæ— ç¼å™ªå£°çš„æ–¹å¼ã€‚"
#: modules/opensimplex/doc_classes/OpenSimplexNoise.xml:96
msgid "Difference in period between [member octaves]."
@@ -45925,7 +46251,6 @@ msgid "Button control that provides selectable options when pressed."
msgstr "按下时æä¾›å¯é€‰é€‰é¡¹çš„æŒ‰é’®æŽ§ä»¶ã€‚"
#: doc/classes/OptionButton.xml:7
-#, fuzzy
msgid ""
"OptionButton is a type button that provides a selectable list of items when "
"pressed. The item selected becomes the \"current\" item and is displayed as "
@@ -45933,8 +46258,9 @@ msgid ""
"See also [BaseButton] which contains common properties and methods "
"associated with this node."
msgstr ""
-"OptionButton是一个类型按钮,当按下时æä¾›å¯é€‰æ‹©çš„项目列表。选中的项目将æˆä¸ºâ€œå½“"
-"å‰â€é¡¹ç›®ï¼Œå¹¶æ˜¾ç¤ºä¸ºæŒ‰é’®æ–‡æœ¬ã€‚"
+"OptionButton 是一ç§ç±»åž‹æŒ‰é’®ï¼Œå¯åœ¨æŒ‰ä¸‹æ—¶æä¾›å¯é€‰æ‹©çš„项目列表。所选项目æˆä¸ºâ€œå½“"
+"å‰â€é¡¹ç›®å¹¶æ˜¾ç¤ºä¸ºæŒ‰é’®æ–‡æœ¬ã€‚\n"
+"å¦è¯·å‚阅 [BaseButton],其中包å«ä¸Žæ­¤èŠ‚ç‚¹å…³è”的通用属性和方法。"
#: doc/classes/OptionButton.xml:19
msgid ""
@@ -46060,14 +46386,13 @@ msgid ""
msgstr "当å‰é€‰å®šé¡¹çš„索引,如果没有选定项,则为[code]-1[/code]。"
#: doc/classes/OptionButton.xml:177
-#, fuzzy
msgid ""
"Emitted when the user navigates to an item using the [code]ui_up[/code] or "
"[code]ui_down[/code] actions. The index of the item selected is passed as "
"argument."
msgstr ""
-"当用户使用[code]ui_up[/code]或[code]ui_down[/code]æ“作导航到一个项目时触å‘。"
-"æ‰€é€‰é¡¹ç›®çš„ç´¢å¼•ä½œä¸ºå‚æ•°ä¼ é€’。"
+"当用户使用 [code]ui_up[/code] 或 [code]ui_down[/code] æ“作导航到一个项目时å‘"
+"å‡ºã€‚æ‰€é€‰é¡¹ç›®çš„ç´¢å¼•ä½œä¸ºå‚æ•°ä¼ é€’。"
#: doc/classes/OptionButton.xml:183
msgid ""
@@ -46115,6 +46440,8 @@ msgid ""
"normal text color of the button. Disabled, hovered, and pressed states take "
"precedence over this color."
msgstr ""
+"当[OptionButton]获得焦点时使用的文本[Color]ã€‚åªæ›¿æ¢æŒ‰é’®çš„æ­£å¸¸æ–‡æœ¬é¢œè‰²ã€‚ç¦ç”¨ã€"
+"悬åœå’ŒæŒ‰ä¸‹çжæ€ä¼˜å…ˆäºŽè¿™ä¸ªé¢œè‰²ã€‚"
#: doc/classes/OptionButton.xml:215
msgid "Text [Color] used when the [OptionButton] is being hovered."
@@ -46159,11 +46486,11 @@ msgid ""
"Displays a modal dialog box using the host OS' facilities. Execution is "
"blocked until the dialog is closed."
msgstr ""
+"使用主机æ“作系统显示一个模å¼åŒ–çš„å¯¹è¯æ¡†ã€‚æ‰§è¡Œå°†è¢«é˜»å¡žï¼Œç›´åˆ°è¯¥å¯¹è¯æ¡†è¢«å…³é—­ã€‚"
#: doc/classes/OS.xml:24
-#, fuzzy
msgid "Returns [code]true[/code] if the host OS allows drawing."
-msgstr "如果字体有边框,返回[code]true[/code]。"
+msgstr "如果主机æ“作系统å…许绘制,则返回 [code]true[/code]。"
#: doc/classes/OS.xml:30
msgid ""
@@ -46172,9 +46499,8 @@ msgid ""
msgstr "如果当å‰ä¸»æœºå¹³å°ä½¿ç”¨å¤šä¸ªçº¿ç¨‹ï¼Œåˆ™è¿”回[code]true[/code]。"
#: doc/classes/OS.xml:36
-#, fuzzy
msgid "Centers the window on the screen if in windowed mode."
-msgstr "设置指定节点的ä½ç½®ã€‚"
+msgstr "å¦‚æžœå¤„äºŽçª—å£æ¨¡å¼ï¼Œåˆ™ä½¿çª—å£åœ¨å±å¹•上居中。"
#: doc/classes/OS.xml:42
msgid ""
@@ -46203,6 +46529,18 @@ msgid ""
"the project if it is currently running (since the project is an independent "
"child process)."
msgstr ""
+"将当å‰çº¿ç¨‹çš„æ‰§è¡Œå»¶è¿Ÿ [code]msec[/code] 毫秒。 [code]msec[/code] 必须大于或等"
+"于 [code]0[/code]。å¦åˆ™ï¼Œ [method delay_msec] 将䏿‰§è¡Œä»»ä½•æ“作并打å°é”™è¯¯æ¶ˆ"
+"æ¯ã€‚\n"
+"[b]注:[/b] [method delay_msec]是一ç§[i]阻塞[/i]å»¶è¿Ÿä»£ç æ‰§è¡Œçš„æ–¹å¼ã€‚è¦ä»¥éžé˜»"
+"塞方å¼å»¶è¿Ÿä»£ç æ‰§è¡Œï¼Œè¯·å‚阅 [method SceneTree.create_timer]。使用 [method "
+"SceneTree.create_timer] 生æˆå°†å»¶è¿Ÿä½äºŽ [code]yield[/code] 下方的代ç çš„æ‰§è¡Œï¼Œ"
+"而ä¸ä¼šå½±å“项目的其余部分(或编辑器,例如 [EditorPlugin] å’Œ "
+"[EditorScript])。\n"
+"[b]注æ„:[/b]当在主线程上调用[method delay_msec]æ—¶ï¼Œå®ƒä¼šå†»ç»“é¡¹ç›®å¹¶é˜»æ­¢å®ƒé‡æ–°"
+"绘制和注册输入,直到延迟结æŸã€‚当使用 [method delay_msec] 作为 [EditorPlugin] "
+"或 [EditorScript] 的一部分时,它会冻结编辑器但ä¸ä¼šå†»ç»“当剿­£åœ¨è¿è¡Œçš„项目(因"
+"为项目是一个独立的å­è¿›ç¨‹ï¼‰ã€‚"
#: doc/classes/OS.xml:59
msgid ""
@@ -46223,6 +46561,18 @@ msgid ""
"the project if it is currently running (since the project is an independent "
"child process)."
msgstr ""
+"将当å‰çº¿ç¨‹çš„æ‰§è¡Œå»¶è¿Ÿ [code]usec[/code] 微秒。 [code]usec[/code] 必须大于或等"
+"于 [code]0[/code]。å¦åˆ™ï¼Œ [method delay_usec] 将什么也ä¸åšï¼Œå¹¶ä¼šæ‰“å°é”™è¯¯æ¶ˆ"
+"æ¯ã€‚\n"
+"[b]注:[/b] [method delay_usec]是一ç§[i]阻塞[/i]å»¶è¿Ÿä»£ç æ‰§è¡Œçš„æ–¹å¼ã€‚è¦ä»¥éžé˜»"
+"塞方å¼å»¶è¿Ÿä»£ç æ‰§è¡Œï¼Œè¯·å‚阅 [method SceneTree.create_timer]。使用 [method "
+"SceneTree.create_timer] 生æˆå°†å»¶è¿Ÿä½äºŽ [code]yield[/code] 下方的代ç çš„æ‰§è¡Œï¼Œ"
+"而ä¸ä¼šå½±å“项目的其余部分(或编辑器,例如 [EditorPlugin] å’Œ "
+"[EditorScript])。\n"
+"[b]注æ„:[/b]当在主线程上调用[method delay_usec]时,它会冻结项目并阻止它é‡ç»˜"
+"和注册输入,直到延迟结æŸã€‚当使用 [method delay_usec] 作为 [EditorPlugin] 或 "
+"[EditorScript] 的一部分时,它会冻结编辑器但ä¸ä¼šå†»ç»“当剿­£åœ¨è¿è¡Œçš„项目(因为项"
+"目是一个独立的å­è¿›ç¨‹ï¼‰ã€‚"
#: doc/classes/OS.xml:68
msgid ""
@@ -46318,19 +46668,16 @@ msgstr ""
"[b]注:[/b]此方法仅在Android, iOS, Linux, macOS和Windows上实现。"
#: doc/classes/OS.xml:115
-#, fuzzy
msgid "Returns the scancode of the given string (e.g. \"Escape\")."
-msgstr "返回给定字符串的键ç (例如:“Escapeâ€)。"
+msgstr "返回给定字符串的扫æç ï¼ˆä¾‹å¦‚“Escapeâ€ï¼‰ã€‚"
#: doc/classes/OS.xml:121
-#, fuzzy
msgid "Returns the total number of available audio drivers."
-msgstr "返回[Mesh]中顶点的总数。"
+msgstr "返回å¯ç”¨éŸ³é¢‘驱动程åºçš„æ€»æ•°ã€‚"
#: doc/classes/OS.xml:128
-#, fuzzy
msgid "Returns the audio driver name for the given index."
-msgstr "返回给定索引处的顶点。"
+msgstr "返回给定索引的音频驱动程åºå称。"
#: doc/classes/OS.xml:134
msgid ""
@@ -46344,9 +46691,15 @@ msgid ""
"Not to be confused with [method get_user_data_dir], which returns the "
"[i]project-specific[/i] user data path."
msgstr ""
+"æ ¹æ®æ“作系统的标准返回[i]全局[/i]缓存数æ®ç›®å½•。在桌é¢å¹³å°ä¸Šï¼Œå¯ä»¥é€šè¿‡åœ¨å¯åЍ项"
+"目之å‰è®¾ç½® [code]XDG_CACHE_HOME[/code] 环境å˜é‡æ¥è¦†ç›–此路径。有关更多信æ¯ï¼Œè¯·"
+"å‚阅文档中的 [url=https://docs.godotengine.org/zh_CN/latest/tutorials/io/"
+"data_paths.html]Godot 项目中的文件路径[/url]。å¦è¯·å‚阅 [method "
+"get_config_dir] 和 [method get_data_dir]。\n"
+"ä¸è¦ä¸Ž [method get_user_data_dir] 混淆,åŽè€…返回 [i] 项目特定的 [/i] 用户数æ®"
+"路径。"
#: doc/classes/OS.xml:141
-#, fuzzy
msgid ""
"Returns the command-line arguments passed to the engine.\n"
"Command-line arguments can be written in any form, including both [code]--"
@@ -46368,14 +46721,14 @@ msgid ""
"[/codeblock]"
msgstr ""
"è¿”å›žä¼ é€’ç»™å¼•æ“Žçš„å‘½ä»¤è¡Œå‚æ•°ã€‚\n"
-"å‘½ä»¤è¡Œå‚æ•°å¯ä»¥ä»¥ä»»ä½•å½¢å¼ç¼–写,包括[code]--key value[/code]å’Œ[code]--"
-"key=value[/code]å½¢å¼ï¼Œä»¥ä¾¿æ­£ç¡®è§£æžå®ƒä»¬ï¼Œåªè¦è‡ªå®šä¹‰å‘½ä»¤è¡Œå‚æ•°ä¸ä¸Žå¼•æ“Žå‚æ•°å†²"
-"çªã€‚\n"
-"您还å¯ä»¥ä½¿ç”¨[method get_environment]方法åˆå¹¶çŽ¯å¢ƒå˜é‡ã€‚\n"
-"您å¯ä»¥åœ¨é¡¹ç›®è®¾ç½®ä¸­è®¾ç½®[code]editor/main_run_args[/code],以定义在è¿è¡Œé¡¹ç›®æ—¶ç”±"
-"ç¼–è¾‘å™¨ä¼ é€’çš„å‘½ä»¤è¡Œå‚æ•°ã€‚\n"
-"䏋颿˜¯ä¸€ä¸ªå…³äºŽå¦‚何使用[code]--key=value[/code]å½¢å¼å°†å‘½ä»¤è¡Œå‚æ•°è§£æžä¸ºå­—典的最"
-"å°ç¤ºä¾‹:\n"
+"å‘½ä»¤è¡Œå‚æ•°å¯ä»¥ä»¥ä»»ä½•å½¢å¼å†™å…¥ï¼ŒåŒ…括[code]--key value[/code]å’Œ[code]--"
+"key=value[/code]两ç§å½¢å¼ï¼Œå‡å¯ä»¥æ­£ç¡®è§£æžï¼Œåªè¦è‡ªå®šä¹‰çš„å‘½ä»¤è¡Œå‚æ•°ä¸ä¸Žå¼•æ“Žå‚æ•°"
+"冲çªã€‚\n"
+"你也å¯ä»¥ä½¿ç”¨[method get_environment]方法包å«çŽ¯å¢ƒå˜é‡ã€‚\n"
+"ä½ å¯ä»¥è®¾ç½®[member ProjectSettings.editor/main_run_args]æ¥å®šä¹‰å‘½ä»¤è¡Œå‚数,以便"
+"在è¿è¡Œé¡¹ç›®æ—¶ç”±ç¼–辑器传递。\n"
+"䏋颿˜¯ä¸€ä¸ªå°çš„例å­ï¼Œè¯´æ˜Žå¦‚ä½•ä½¿ç”¨å‚æ•°çš„[code]--key=value[/code]å½¢å¼å°†å‘½ä»¤è¡Œå‚"
+"æ•°è§£æžæˆä¸€ä¸ªå­—典。\n"
"[codeblock]\n"
"var arguments = {}\n"
"for argument in OS.get_cmdline_args():\n"
@@ -46396,6 +46749,12 @@ msgid ""
"Not to be confused with [method get_user_data_dir], which returns the "
"[i]project-specific[/i] user data path."
msgstr ""
+"æ ¹æ®æ“作系统的标准,返回[i]全局[/i]用户é…置目录。在桌é¢å¹³å°ä¸Šï¼Œè¿™ä¸ªè·¯å¾„å¯ä»¥åœ¨"
+"å¯åŠ¨é¡¹ç›®å‰é€šè¿‡è®¾ç½®[code]XDG_CONFIG_HOME[/code]环境å˜é‡æ¥è¦†ç›–。更多信æ¯è¯·å‚è§"
+"文档中[url=https://docs.godotengine.org/zh_CN/latest/tutorials/io/data_paths."
+"html]Godot项目中的文件路径[/url]。也请å‚è§ [method get_cache_dir] å’Œ [method "
+"get_data_dir]。\n"
+"ä¸è¦ä¸Ž[method get_user_data_dir]混淆,åŽè€…返回[i]项目专用[/i]用户数æ®è·¯å¾„。"
#: doc/classes/OS.xml:165
msgid ""
@@ -46410,11 +46769,10 @@ msgstr ""
"[b]注æ„:[/b]该方法仅在Linux, macOSå’ŒWindows上实现。"
#: doc/classes/OS.xml:173
-#, fuzzy
msgid ""
"Returns the currently used video driver, using one of the values from [enum "
"VideoDriver]."
-msgstr "返回当å‰ç¼–辑的项目。这仅适用于自定义å•元格模å¼ã€‚"
+msgstr "返回当å‰ä½¿ç”¨çš„视频驱动程åºï¼Œä½¿ç”¨[enum VideoDriver]中的一个值。"
#: doc/classes/OS.xml:179
msgid ""
@@ -46428,6 +46786,12 @@ msgid ""
"Not to be confused with [method get_user_data_dir], which returns the "
"[i]project-specific[/i] user data path."
msgstr ""
+"æ ¹æ®æ“作系统的标准,返回[i]全局[/i]用户数æ®ç›®å½•。在桌é¢å¹³å°ä¸Šï¼Œè¿™ä¸ªè·¯å¾„å¯ä»¥åœ¨"
+"å¯åŠ¨é¡¹ç›®å‰é€šè¿‡è®¾ç½®[code]XDG_DATA_HOME[/code]环境å˜é‡æ¥è¦†ç›–。更多信æ¯è¯·å‚è§æ–‡"
+"档中[url=https://docs.godotengine.org/zh_CN/latest/tutorials/io/data_paths."
+"html]Godot项目中的文件路径[/url]。也请å‚è§ [method get_cache_dir] å’Œ [method "
+"get_config_dir]。\n"
+"ä¸è¦ä¸Ž[method get_user_data_dir]混淆,åŽè€…返回[i]项目专用[/i]用户数æ®è·¯å¾„。"
#: doc/classes/OS.xml:187
msgid ""
@@ -46462,9 +46826,8 @@ msgstr ""
"因为它ä¸èƒ½ä»Žepoch确定。"
#: doc/classes/OS.xml:208
-#, fuzzy
msgid "Returns the total amount of dynamic memory used (only works in debug)."
-msgstr "è¿”å›žä½¿ç”¨çš„é™æ€å†…存的最大数é‡(仅在调试中有效)。"
+msgstr "返回使用的动æ€å†…存总é‡ï¼ˆä»…适用于调试)。"
#: doc/classes/OS.xml:215
msgid ""
@@ -46473,20 +46836,22 @@ msgid ""
"[b]Note:[/b] Double-check the casing of [code]variable[/code]. Environment "
"variable names are case-sensitive on all platforms except Windows."
msgstr ""
+"返回环境å˜é‡çš„值。如果环境å˜é‡ä¸å­˜åœ¨ï¼Œåˆ™è¿”回一个空字符串。\n"
+"[b]注æ„:[/b] 仔细检查 [code]variable[/code] 的大å°å†™ã€‚环境å˜é‡å称在除 "
+"Windows 之外的所有平å°ä¸Šéƒ½åŒºåˆ†å¤§å°å†™ã€‚"
#: doc/classes/OS.xml:222
msgid "Returns the path to the current engine executable."
msgstr "返回当å‰å¼•æ“Žå¯æ‰§è¡Œæ–‡ä»¶çš„路径。"
#: doc/classes/OS.xml:228
-#, fuzzy
msgid ""
"With this function, you can get the list of dangerous permissions that have "
"been granted to the Android application.\n"
"[b]Note:[/b] This method is implemented on Android."
msgstr ""
-"通过这个函数,您å¯ä»¥èŽ·å¾—å·²æŽˆäºˆAndroid应用程åºçš„å±é™©æƒé™åˆ—表。\n"
-"[b]注æ„:[/b]此方法仅在Android上实现。"
+"通过这个函数,你å¯ä»¥èŽ·å¾—å·²ç»æŽˆäºˆAndroid应用程åºçš„å±é™©æƒé™åˆ—表。\n"
+"[b]注æ„:[/b] 这个方法在Android上实现。"
#: doc/classes/OS.xml:235
msgid ""
@@ -46496,6 +46861,10 @@ msgid ""
"notify it of changes to the IME cursor position.\n"
"[b]Note:[/b] This method is implemented on macOS."
msgstr ""
+"返回相对于组åˆå­—符串中的字符的 IME 光标ä½ç½®ï¼ˆå­—符串的当å‰ç¼–辑部分)。\n"
+"[constant MainLoop.NOTIFICATION_OS_IME_UPDATE] 被å‘é€åˆ°åº”用程åºä»¥é€šçŸ¥å®ƒ IME "
+"光标ä½ç½®çš„å˜åŒ–。\n"
+"[b]注:[/b]此方法在macOS上实现。"
#: doc/classes/OS.xml:243
msgid ""
@@ -46504,9 +46873,12 @@ msgid ""
"notify it of changes to the IME composition string.\n"
"[b]Note:[/b] This method is implemented on macOS."
msgstr ""
+"返回 IME 中间组åˆå­—符串。\n"
+"[constant MainLoop.NOTIFICATION_OS_IME_UPDATE] 被å‘é€åˆ°åº”用程åºä»¥é€šçŸ¥å®ƒå¯¹ "
+"IME 组åˆå­—符串的更改。\n"
+"[b]注:[/b]此方法在macOS上实现。"
#: doc/classes/OS.xml:251
-#, fuzzy
msgid ""
"Returns the current latin keyboard variant as a String.\n"
"Possible return values are: [code]\"QWERTY\"[/code], [code]\"AZERTY\"[/"
@@ -46515,9 +46887,12 @@ msgid ""
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows. Returns "
"[code]\"QWERTY\"[/code] on unsupported platforms."
msgstr ""
-"返回主机æ“作系统的å称。å¯èƒ½çš„值有: [code]\"Android\"[/code], [code]\"iOS"
-"\"[/code], [code]\"HTML5\"[/code], [code]\"OSX\"[/code], [code]\"Server\"[/"
-"code], [code]\"Windows\"[/code], [code]\"UWP\"[/code], [code]\"X11\"[/code]."
+"将当剿‹‰ä¸é”®ç›˜å˜ä½“作为字符串返回。\n"
+"å¯èƒ½çš„返回值是: [code] \"QWERTY\"[/code], [code] \"AZERTY\"[/code], "
+"[code]\"QZERTY\"[/code],[code]\"DVORAK\"[/code],[code]\"NEO\"[/code],"
+"[code]\"COLEMAK\"[/code]或[code]\"错误ERROR\"[/code]。\n"
+"[b]注æ„:[/b] 此方法在 Linuxã€macOS å’Œ Windows 上实现。在ä¸å—支æŒçš„å¹³å°ä¸Šè¿”"
+"回 [code] \"QWERTY\"[/code] 。"
#: doc/classes/OS.xml:259
msgid ""
@@ -46536,6 +46911,19 @@ msgid ""
"[code]extra[/code] - optional, semicolon separated list of additional key "
"words. Currency, calendar, sort order and numbering system information."
msgstr ""
+"将主机æ“作系统区域设置为 [code]language_Script_COUNTRY_VARIANT@extra[/code] "
+"å½¢å¼çš„å­—ç¬¦ä¸²ã€‚å¦‚æžœæ‚¨åªæƒ³è¦è¯­è¨€ä»£ç è€Œä¸æ˜¯æ“作系统中完全指定的语言环境,您å¯ä»¥"
+"使用 [method get_locale_language]。\n"
+"[code]language[/code] - 2 个或 3 个字æ¯çš„ [url=https://en.wikipedia.org/wiki/"
+"List_of_ISO_639-1_codes]语言代ç [/url],å°å†™ã€‚\n"
+"[code]Script[/code] - å¯é€‰ï¼Œ4 ä¸ªå­—æ¯ [url=https://en.wikipedia.org/wiki/"
+"ISO_15924] è„šæœ¬ä»£ç  [/url],形å¼ä¸ºæ ‡é¢˜çš„大å°å†™å½¢å¼ã€‚\n"
+"[code]COUNTRY[/code] - å¯é€‰ï¼Œ2 个或 3 ä¸ªå­—æ¯ [url=https://en.wikipedia.org/"
+"wiki/ISO_3166-1]国家代ç [/url],大写。\n"
+"[code]VARIANT[/code] - å¯é€‰ï¼Œè¯­è¨€å˜ä½“,地区和排åºé¡ºåºã€‚ Variant å¯ä»¥æœ‰ä»»æ„æ•°"
+"é‡çš„带下划线的关键字。\n"
+"[code]extra[/code] - å¯é€‰ï¼Œåˆ†å·åˆ†éš”的附加关键字列表。货å¸ã€æ—¥åŽ†ã€æŽ’åºé¡ºåºå’Œç¼–"
+"å·ç³»ç»Ÿä¿¡æ¯ã€‚"
#: doc/classes/OS.xml:270
msgid ""
@@ -46548,6 +46936,13 @@ msgid ""
"about country code or variants. For example, for a French Canadian user with "
"[code]fr_CA[/code] locale, this would return [code]fr[/code]."
msgstr ""
+"将主机æ“作系统区域设置的 2 或 3 ä¸ªå­—æ¯ [url=https://en.wikipedia.org/wiki/"
+"List_of_ISO_639-1_codes]语言代ç [/url] 作为字符串返回,该字符串应在所有平å°ä¸Š"
+"ä¿æŒä¸€è‡´ã€‚这相当于æå– [method get_locale] 字符串的 [code]language[/code] 部"
+"分。\n"
+"当您ä¸éœ€è¦æœ‰å…³å›½å®¶/åœ°åŒºä»£ç æˆ–å˜ä½“çš„é™„åŠ ä¿¡æ¯æ—¶ï¼Œè¿™å¯ç”¨äºŽå°†å®Œå…¨æŒ‡å®šçš„区域设置字"
+"符串缩å°ä¸ºâ€œé€šç”¨â€è¯­è¨€ä»£ç ã€‚例如,对于使用 [code]fr_CA[/code] 语言环境的加拿大"
+"法语用户,这将返回 [code]fr[/code]。"
#: doc/classes/OS.xml:277
msgid ""
@@ -46571,44 +46966,42 @@ msgstr ""
"code], [code]\"Windows\"[/code], [code]\"UWP\"[/code], [code]\"X11\"[/code]."
#: doc/classes/OS.xml:291
-#, fuzzy
msgid ""
"Returns internal structure pointers for use in GDNative plugins.\n"
"[b]Note:[/b] This method is implemented on Linux and Windows (other OSs will "
"soon be supported)."
msgstr ""
-"返回键盘布局的数é‡ã€‚\n"
-"[b]注æ„:[/b]本方法在Linuxã€macOSå’ŒWindows上实现。"
+"返回内部结构指针,以便在GDNativeæ’件中使用。\n"
+"[b]注æ„:[/b]此方法在Linuxå’ŒWindows上实现(其他æ“作系统将很快被支æŒï¼‰ã€‚"
#: doc/classes/OS.xml:298
-#, fuzzy
msgid ""
"Returns the amount of battery left in the device as a percentage. Returns "
"[code]-1[/code] if power state is unknown.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
-"返回ä½äºŽ[code]index[/code]ä½ç½®çš„键盘布局的本地å称。\n"
-"[b]注æ„:[/b] 本方法å¯åœ¨Linuxã€macOSå’ŒWindows上实现。"
+"以百分比形å¼è¿”回设备中剩余的电池电é‡ã€‚如果电æºçŠ¶æ€æœªçŸ¥ï¼Œåˆ™è¿”回 [code]-1[/"
+"code]。\n"
+"[b]注æ„:[/b]该方法在Linuxã€macOSå’ŒWindows上实现。"
#: doc/classes/OS.xml:305
-#, fuzzy
msgid ""
"Returns an estimate of the time left in seconds before the device runs out "
"of battery. Returns [code]-1[/code] if power state is unknown.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
-"返回ä½äºŽ[code]index[/code]ä½ç½®çš„键盘布局的本地å称。\n"
-"[b]注æ„:[/b] 本方法å¯åœ¨Linuxã€macOSå’ŒWindows上实现。"
+"返回设备耗尽电池å‰å‡ ç§’钟内剩余时间的估计值。如果电æºçŠ¶æ€æœªçŸ¥ï¼Œåˆ™è¿”回 "
+"[code]-1 [/code]。\n"
+"[b]注æ„:[/b] 此方法在 Linuxã€macOS å’Œ Windows 上实现。"
#: doc/classes/OS.xml:312
-#, fuzzy
msgid ""
"Returns the current state of the device regarding battery and power. See "
"[enum PowerState] constants.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
-"返回ä½äºŽ[code]index[/code]ä½ç½®çš„键盘布局的本地å称。\n"
-"[b]注æ„:[/b] 本方法å¯åœ¨Linuxã€macOSå’ŒWindows上实现。"
+"返回设备关于电池和电æºçš„当å‰çжæ€ã€‚请å‚阅 [enum PowerState] 常é‡ã€‚\n"
+"[b]注æ„:[/b]该方法在Linuxã€macOSå’ŒWindows上实现。"
#: doc/classes/OS.xml:319
msgid ""
@@ -46616,40 +47009,38 @@ msgid ""
"[b]Note:[/b] This method is implemented on Android, iOS, Linux, macOS and "
"Windows."
msgstr ""
-"返回项目的进程ID。\n"
-"[b]注:[/b]此方法仅在Android, iOS, Linux, macOS和Windows上实现。"
+"返回项目的进程 ID。\n"
+"[b]注æ„:[/b]此方法在Androidã€iOSã€Linuxã€macOSå’ŒWindows上实现。"
#: doc/classes/OS.xml:326
msgid "Returns the number of threads available on the host machine."
-msgstr "返回主机上å¯ç”¨çš„线程数。"
+msgstr "返回宿主机上å¯ç”¨çš„线程数。"
#: doc/classes/OS.xml:332
-#, fuzzy
msgid "Returns the window size including decorations like window borders."
-msgstr "返回函数入å£ç‚¹èŠ‚ç‚¹çš„ID。"
+msgstr "返回窗å£å¤§å°ï¼ŒåŒ…括窗å£è¾¹æ¡†ç­‰è£…饰。"
#: doc/classes/OS.xml:339
-#, fuzzy
msgid ""
"Returns the given scancode as a string (e.g. Return values: [code]\"Escape"
"\"[/code], [code]\"Shift+Escape\"[/code]).\n"
"See also [member InputEventKey.scancode] and [method InputEventKey."
"get_scancode_with_modifiers]."
msgstr ""
-"以字符串的形å¼è¿”回给定的键ç (例如:返回值:[code]\"Escape\"[/code], "
-"[code]\"Shift+Escape\"[/code])。\n"
-"å‚阅[member InputEventKey]。[method InputEventKey."
-"get_keycode_with_modifiers]。"
+"将给定的扫æç ä½œä¸ºå­—符串返回(例如返回值:[code]\"Escape\"[/code],"
+"[code]\"Shift+Escape\"[/code])。\n"
+"å¦è¯·å‚阅 [member InputEventKey.scancode] å’Œ [method InputEventKey."
+"get_scancode_with_modifiers] 。"
#: doc/classes/OS.xml:346
-#, fuzzy
msgid "Returns the number of displays attached to the host machine."
-msgstr "返回主机上å¯ç”¨çš„线程数。"
+msgstr "返回连接到宿主机的显示器数é‡ã€‚"
#: doc/classes/OS.xml:353
+#, fuzzy
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -46666,6 +47057,20 @@ msgid ""
"[b]Note:[/b] This method is implemented on Android, Linux, macOS and "
"Windows. Returns [code]72[/code] on unsupported platforms."
msgstr ""
+"返回指定å±å¹•æ¯è‹±å¯¸å¯†åº¦çš„点数。如果 [code]screen[/code] 为 [/code]-1[/code]"
+"(默认值),将使用当å‰å±å¹•。\n"
+"[b]注æ„:[/b] 在macOS上,如果使用分数显示缩放模å¼ï¼Œåˆ™è¿”回值ä¸å‡†ç¡®ã€‚\n"
+"[b]注:[/b]在Android设备上,实际å±å¹•密度分为六ç§å¹¿ä¹‰å¯†åº¦ï¼š\n"
+"[codeblock]\n"
+" ldpi - 120 dpi\n"
+" mdpi - 160 dpi\n"
+" hdpi - 240 dpi\n"
+" xhdpi - 320 dpi\n"
+" xxhdpi - 480 dpi\n"
+"xxxhdpi - 640 dpi\n"
+"[/codeblock]\n"
+"[b]注:[/b]此方法在Androidã€Linuxã€macOSå’ŒWindows上实现。在ä¸å—支æŒçš„å¹³å°ä¸Šè¿”"
+"回 [code]72[/code]。"
#: doc/classes/OS.xml:370
msgid ""
@@ -46681,33 +47086,40 @@ msgstr ""
"[b]注æ„:[/b]此方法仅在macOS上实现。"
#: doc/classes/OS.xml:379
+#, fuzzy
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
+"按索引返回指定å±å¹•çš„ä½ç½®ã€‚如果 [code]screen[/code] 为 [/code]-1[/code](默认"
+"值),将使用当å‰å±å¹•。"
#: doc/classes/OS.xml:386
#, fuzzy
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
"[b]Note:[/b] This method is implemented on macOS."
msgstr ""
-"按索引返回指定å±å¹•的缩放。\n"
-"[b]注:[/b] 在macOS上,hiDPI(Retina)å±å¹•的返回值为[code]2.0[/code],其他情况"
-"为[code]1.0[/code]。\n"
-"[b]注:[/b] 此方法在macOS上实现。"
+"按索引返回指定å±å¹•的缩放系数。如果[code]screen[/code]是[/code]-1[/code](默认"
+"值),将使用当å‰å±å¹•。\n"
+"[b]注æ„:[/b]在macOS上,对于高DPI(Retina)å±å¹•,返回值是[code]2.0[/code],对"
+"于所有其他情况,返回值是[code]1.0[/code]。\n"
+"[b]注æ„:[/b] 此方法在macOS上实现。"
#: doc/classes/OS.xml:395
+#, fuzzy
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
+"以指定å±å¹•çš„åƒç´ è¿”回尺寸。如果 [code]screen[/code] 是[/code]-1[/code](默认"
+"值),则将使用当å‰å±å¹•。"
#: doc/classes/OS.xml:401
msgid ""
@@ -46724,7 +47136,6 @@ msgid "Returns the amount of static memory being used by the program in bytes."
msgstr "è¿”å›žç¨‹åºæ‰€ä½¿ç”¨çš„陿€å†…å­˜é‡ï¼Œä»¥å­—节为å•ä½ã€‚"
#: doc/classes/OS.xml:421
-#, fuzzy
msgid ""
"Returns the actual path to commonly used folders across different platforms. "
"Available locations are specified in [enum SystemDir].\n"
@@ -46734,18 +47145,18 @@ msgid ""
"differentiate between app specific and shared directories. Shared "
"directories have additional restrictions on Android."
msgstr ""
-"返回跨ä¸åŒå¹³å°çš„常用文件夹的实际路径。å¯ç”¨ä½ç½®åœ¨[enum SystemDir]中指定。\n"
-"[b]注:[/b]该方法仅在Androidã€Linuxã€macOSå’ŒWindowså¹³å°ä¸Šå®žçŽ°ã€‚"
+"返回ä¸åŒå¹³å°ä¸Šå¸¸ç”¨æ–‡ä»¶å¤¹çš„实际路径。å¯ç”¨çš„ä½ç½®åœ¨[enum SystemDir]中指定。\n"
+"[b]注æ„:[/b] 这个方法在Androidã€Linuxã€macOSå’ŒWindows上实现。\n"
+"[b]注æ„:[/b] 共享存储在Android上实现,并å…许区分应用程åºç‰¹å®šç›®å½•和共享目录。"
+"共享目录在Android上有é¢å¤–çš„é™åˆ¶ã€‚"
#: doc/classes/OS.xml:429
-#, fuzzy
msgid "Returns the epoch time of the operating system in milliseconds."
-msgstr "返回音频æµçš„长度,å•ä½ä¸ºç§’。"
+msgstr "以毫秒为å•ä½è¿”回æ“作系统的纪元时间。"
#: doc/classes/OS.xml:435
-#, fuzzy
msgid "Returns the epoch time of the operating system in seconds."
-msgstr "返回音频æµçš„长度,å•ä½ä¸ºç§’。"
+msgstr "以秒为å•ä½è¿”回æ“作系统的纪元时间。"
#: doc/classes/OS.xml:441
msgid ""
@@ -46771,6 +47182,8 @@ msgid ""
"[b]Note:[/b] Thread IDs are not deterministic and may be reused across "
"application restarts."
msgstr ""
+"返回当å‰çº¿ç¨‹çš„ ID。这å¯ç”¨äºŽæ—¥å¿—,以简化多线程应用程åºçš„调试。\n"
+"[b]注:[/b] 线程 ID 䏿˜¯ç¡®å®šçš„,也许会在应用程åºé‡æ–°å¯åŠ¨æ—¶è¢«é‡å¤ä½¿ç”¨ã€‚"
#: doc/classes/OS.xml:463
msgid ""
@@ -46803,6 +47216,13 @@ msgid ""
"[b]Note:[/b] Returns an empty string on HTML5 and UWP, as this method isn't "
"implemented on those platforms yet."
msgstr ""
+"返回设备所特有的字符串。\n"
+"[b]注æ„:[/b] å¦‚æžœç”¨æˆ·é‡æ–°å®‰è£…/å‡çº§å…¶æ“作系统或更改其硬件,此字符串å¯èƒ½ä¼šåœ¨ä¸"
+"通知的情况下更改。这æ„味ç€å®ƒé€šå¸¸ä¸åº”用于加密æŒç»­æ•°æ®ï¼Œå› ä¸ºåœ¨æ„外的 ID 更改å˜"
+"得无法访问之å‰ä¿å­˜çš„æ•°æ®ã€‚返回的字符串也å¯èƒ½ä½¿ç”¨å¤–部程åºä¼ªé€ ï¼Œå› æ­¤å‡ºäºŽå®‰å…¨ç›®"
+"的,ä¸è¦ä¾èµ– [method get_unique_id] 返回的字符串。\n"
+"[b]注æ„:[/b] 返回 HTML5 å’Œ UWP 上的空字符串,因为此方法尚未在这些平å°ä¸Šå®ž"
+"施。"
#: doc/classes/OS.xml:496
msgid ""
@@ -46814,9 +47234,13 @@ msgid ""
"calculation instead, since they are guaranteed to be monotonic (i.e. never "
"decrease)."
msgstr ""
+"以秒为å•ä½è¿”回当å‰çš„ UNIX 纪元时间戳。\n"
+"[b]é‡è¦ï¼š[/b] 这是用户å¯ä»¥æ‰‹åŠ¨è®¾ç½®çš„ç³»ç»Ÿæ—¶é’Ÿã€‚ [b]永远ä¸è¦ä½¿ç”¨[/b]è¿™ç§æ–¹æ³•è¿›"
+"行精确的时间计算,因为它的结果也会å—到æ“作系统的自动调整。 [b] 始终使用 [/b] "
+"[method get_ticks_usec] 或 [method get_ticks_msec] 进行精确时间计算,因为它们"
+"ä¿è¯æ˜¯å•è°ƒçš„ï¼ˆå³æ°¸ä¸å‡å°‘)。"
#: doc/classes/OS.xml:504
-#, fuzzy
msgid ""
"Gets an epoch time value from a dictionary of time values.\n"
"[code]datetime[/code] must be populated with the following keys: [code]year[/"
@@ -46829,15 +47253,16 @@ msgid ""
"into this function. Daylight Savings Time ([code]dst[/code]), if present, is "
"ignored."
msgstr ""
-"从一个时间值的字典中获å–一个纪元时间值。\n"
-"[code]datetime[/code]将被以下键æ¥å¡«å……: [code]year[/code], [code]month[/"
-"code], [code]day[/code], [code]hour[/code], [code]minute[/code], "
-"[code]second[/code]。\n"
-"ä½ å¯ä»¥å°†[method get_datetime_from_unix_time]的输出直接传递给这个函数。如果存"
-"在å¤ä»¤æ—¶ï¼ˆ[code]dst[/code]),则会被忽略。"
+"从时间值字典中获å–纪元时间值。\n"
+"[code]datetime[/code] 必须填充以下键:[code]year[/code]ã€[code]month[/code]ã€"
+"[code]day[/code]ã€[code]hour[/code]ã€[code]minute[/code]ã€[code]second[/"
+"code]。\n"
+"如果字典为空,则返回 [code]0[/code]。如果æŸäº›é”®è¢«çœç•¥ï¼Œå®ƒä»¬é»˜è®¤ä¸º UNIX 纪元时"
+"间戳 0(1970-01-01 在 00:00:00 UTC)的等效值。\n"
+"ä½ å¯ä»¥å°† [method get_datetime_from_unix_time] 的输出直接传递给此函数。å¤ä»¤æ—¶ "
+"([code]dst[/code])(如果存在)将被忽略。"
#: doc/classes/OS.xml:513
-#, fuzzy
msgid ""
"Returns the absolute directory path where user data is written ([code]user://"
"[/code]).\n"
@@ -46857,22 +47282,23 @@ msgid ""
"i] (non-project-specific) user data directory."
msgstr ""
"返回用户数æ®è¢«å†™å…¥çš„ç»å¯¹ç›®å½•路径([code]user://[/code])。\n"
-"在Linux上,该路径是 [code]~/.local/share/godot/app_userdata/[project_name][/"
-"code],如果[code]use_custom_user_dir[/code]被设置,则是[code]~/.local/share/"
+"在Linux上,这是[code]~/.local/share/godot/app_userdata/[project_name][/"
+"code],如果设置了[code]use_custom_user_dir[/code],则是[code]~/.local/share/"
"[custom_name][/code]。\n"
-"在macOS上,该路径是 [code]~/Library/Application Support/Godot/app_userdata/"
-"[project_name][/code],如果[code]use_custom_user_dir[/code]被设置,则是"
-"[code]~/Library/Application Support/[custom_name][/code]。\n"
-"在Windows上,该路径是[code]%APPDATA%\\Godot\\app_userdata\\[project_name][/"
-"code],如果[code]use_custom_user_dir[/code]被设置,则是[code]%APPDATA%"
-"\\[custom_name][/code]。[code]%APPDATA%[/code]扩展为 [code]%USERPROFILE%"
+"在macOS上,这是[code]~/Library/Application Support/Godot/app_userdata/"
+"[project_name][/code],或者[code]~/Library/Application Support/[custom_name]"
+"[/code],如果[code]use_custom_user_dir[/code]被设置。\n"
+"在Windows中,如果设置了[code]use_custom_user_dir[/code],则为[code]%APPDATA%"
+"\\Godot\\app_userdata\\[project_name][/code],或者[code]%APPDATA%"
+"\\[custom_name][/code]。[code]%APPDATA%[/code]扩展到[code]%USERPROFILE%"
"\\AppData\\Roaming[/code]。\n"
-"如果项目å称是空的,[code]user://[/code]会退回到[code]res://[/code]。"
+"如果项目å称是空的,[code]user://[/code]会退回到[code]res://[/code]。\n"
+"ä¸è¦ä¸Ž[method get_data_dir]混淆,åŽè€…返回[i]全局[/i]用户数æ®ç›®å½•(éžé¡¹ç›®ä¸“"
+"用)。"
#: doc/classes/OS.xml:524
-#, fuzzy
msgid "Returns the number of video drivers supported on the current platform."
-msgstr "返回å‘å·¦å移的éšè—选项å¡çš„æ•°é‡ã€‚"
+msgstr "返回当å‰å¹³å°ä¸Šæ”¯æŒçš„视频驱动器的数é‡ã€‚"
#: doc/classes/OS.xml:531
msgid ""
@@ -46880,6 +47306,9 @@ msgid ""
"index. This index is a value from [enum VideoDriver], and you can use "
"[method get_current_video_driver] to get the current backend's index."
msgstr ""
+"返回与给定 [code]driver[/code] 索引匹é…的视频驱动程åºçš„å称。此索引是æ¥è‡ª "
+"[enum VideoDriver] 的值,您å¯ä»¥ä½¿ç”¨ [method get_current_video_driver] 获å–当"
+"å‰åŽç«¯çš„索引。"
#: doc/classes/OS.xml:537
msgid ""
@@ -46892,7 +47321,7 @@ msgstr ""
msgid ""
"Returns unobscured area of the window where interactive controls should be "
"rendered."
-msgstr ""
+msgstr "è¿”å›žåº”å‘ˆçŽ°äº¤äº’å¼æŽ§ä»¶çš„çª—å£çš„æœªé®æŒ¡åŒºåŸŸã€‚"
#: doc/classes/OS.xml:553
msgid ""
@@ -46900,32 +47329,35 @@ msgid ""
"item to the macOS dock icon menu.\n"
"[b]Note:[/b] This method is implemented on macOS."
msgstr ""
+"将带有文本“标签â€çš„æ–°é¡¹ç›®æ·»åŠ åˆ°å…¨å±€èœå•。使用“_dockâ€èœå•将项目添加到 macOS åœ"
+"é æ å›¾æ ‡èœå•。\n"
+"[b]注:[/b]此方法在macOS上实现。"
#: doc/classes/OS.xml:561
-#, fuzzy
msgid ""
"Add a separator between items. Separators also occupy an index.\n"
"[b]Note:[/b] This method is implemented on macOS."
-msgstr "添加项之间的分隔符。分隔符也å ç”¨ç´¢å¼•。"
+msgstr ""
+"在项目之间添加一个分隔符。分隔符也å ç”¨ä¸€ä¸ªç´¢å¼•。\n"
+"[b]注æ„:[/b] 这个方法在macOS上实现。"
#: doc/classes/OS.xml:569
-#, fuzzy
msgid ""
"Clear the global menu, in effect removing all items.\n"
"[b]Note:[/b] This method is implemented on macOS."
msgstr ""
-"返回å¯ç”¨çš„写字æ¿ï¼ˆè¯‘注:或触摸æ¿ã€æ•°ä½æ¿ï¼Œåœ¨æ­¤å¤„尚未明确)驱动程åºçš„æ€»æ•°ã€‚\n"
-"[b]注æ„:[/b]该方法是在Windows上实现的。"
+"清除全局èœå•,实际上是删除所有项目。\n"
+"[b]注æ„:[/b]这个方法在macOS上实现。"
#: doc/classes/OS.xml:578
-#, fuzzy
msgid ""
"Removes the item at index \"idx\" from the global menu. Note that the "
"indexes of items after the removed item are going to be shifted by one.\n"
"[b]Note:[/b] This method is implemented on macOS."
msgstr ""
-"从èœå•中移除索引[code]idx[/code]项。\n"
-"[b]注:[/b]被移除项åŽçš„项的索引将被移ä½1。"
+"将索引为 \"idx\" 的项目从全局èœå•中移除。注æ„,在被删除的项目之åŽçš„项目的索引"
+"将被移动1ä½ã€‚\n"
+"[b]注æ„:[/b] 这个方法在macOS上实现。"
#: doc/classes/OS.xml:586
msgid ""
@@ -46934,9 +47366,11 @@ msgid ""
"[b]Note:[/b] Double-check the casing of [code]variable[/code]. Environment "
"variable names are case-sensitive on all platforms except Windows."
msgstr ""
+"如果å称为 [code]variable[/code] 的环境å˜é‡å­˜åœ¨ï¼Œåˆ™è¿”回 [code]true[/code]。\n"
+"[b]注æ„:[/b] 仔细检查 [code]variable[/code] 的大å°å†™ã€‚环境å˜é‡å称在除 "
+"Windows 之外的所有平å°ä¸Šéƒ½åŒºåˆ†å¤§å°å†™ã€‚"
#: doc/classes/OS.xml:594
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the feature for the given feature tag is "
"supported in the currently running instance, depending on the platform, "
@@ -46946,25 +47380,24 @@ msgid ""
"html]Feature Tags[/url] documentation for more details.\n"
"[b]Note:[/b] Tag names are case-sensitive."
msgstr ""
-"å¦‚æžœç»™å®šçš„ç‰¹å¾æ ‡ç­¾çš„特å¾åœ¨å½“å‰è¿è¡Œçš„实例中被支æŒï¼Œåˆ™è¿”回[code]true[/code],具"
-"体å–决于平å°å’Œæž„建等。å¯ä»¥ç”¨æ¥æ£€æŸ¥ä½ å½“剿˜¯å¦åœ¨è¿è¡Œè°ƒè¯•构建,是å¦åœ¨æŸä¸ªå¹³å°æˆ–"
-"架构上,等等。更多细节请å‚考[url=https://docs.godotengine.org/zh_CN/latest/"
-"getting_started/workflow/export/feature_tags.html]功能标签[/url]文档。\n"
-"[b]注æ„:[/b] 标签å称是区分大å°å†™çš„。"
+"å¦‚æžœç»™å®šçš„ç‰¹å¾æ ‡ç­¾çš„特å¾åœ¨å½“å‰è¿è¡Œçš„实例中得到支æŒï¼Œåˆ™è¿”回[code]true[/code],"
+"具体å–决于平å°å’Œæž„建等。å¯ä»¥ç”¨æ¥æ£€æŸ¥ä½ å½“剿˜¯å¦åœ¨è¿è¡Œä¸€ä¸ªè°ƒè¯•构建,是å¦åœ¨æŸä¸ª"
+"平尿ˆ–架构上,等等。更多细节请å‚考[url=https://docs.godotengine.org/zh_CN/"
+"stable/getting_started/workflow/export/feature_tags.html]功能标签[/url]文"
+"档。\n"
+"[b]注æ„:[/b] 标签å称区分大å°å†™ã€‚"
#: doc/classes/OS.xml:601
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the device has a touchscreen or emulates one."
-msgstr "如果该设备跟踪方å‘,则返回[code]true[/code]。"
+msgstr "å¦‚æžœè®¾å¤‡æœ‰è§¦æ‘¸å±æˆ–模拟有触摸å±ï¼Œåˆ™è¿”回[code]true[/code]。"
#: doc/classes/OS.xml:607
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the platform has a virtual keyboard, "
"[code]false[/code] otherwise."
msgstr ""
-"如果脚本域被加载,返回 [code]true[/code] ,å¦åˆ™è¿”回 [code]false[/code] 。"
+"å¦‚æžœå¹³å°æœ‰è™šæ‹Ÿé”®ç›˜ï¼Œè¿”回[code]true[/code],å¦åˆ™è¿”回[code]false[/code]。"
#: doc/classes/OS.xml:613
msgid "Hides the virtual keyboard if it is shown, does nothing otherwise."
@@ -46988,18 +47421,18 @@ msgstr ""
"[code]OS.has_feature(\"standalone\")[/code]代替。"
#: doc/classes/OS.xml:627
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the [b]OK[/b] button should appear on the left "
"and [b]Cancel[/b] on the right."
-msgstr "如果该动作有给定的[InputEvent]与之相关,则返回[code]true[/code]。"
+msgstr ""
+"如果[b]OK[/b]按钮应该显示在左边,[b]Cancel[/b]显示在å³è¾¹ï¼Œåˆ™è¿”回[code]true[/"
+"code]。"
#: doc/classes/OS.xml:634
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the input scancode corresponds to a Unicode "
"character."
-msgstr "如果输入的键ç å¯¹åº”于一个Unicode字符,则返回[code]true[/code]。"
+msgstr "如果输入的键ç ä¸ŽUnicode字符对应,则返回[code]true[/code]。"
#: doc/classes/OS.xml:640
msgid ""
@@ -47018,20 +47451,19 @@ msgstr ""
"冿¬¡å¯åŠ¨æ¸¸æˆåŽï¼Œå…¶çŠ¶æ€æ˜¯ç›¸åŒçš„。与HTML5平尿œ‰å…³ï¼Œåœ¨é‚£é‡Œè¿™ç§æŒä¹…性å¯èƒ½ä¸å¯ç”¨ã€‚"
#: doc/classes/OS.xml:652
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the window should always be on top of other "
"windows."
-msgstr "如果节点在场景dock中折å (collapsed),则返回[code]true[/code]。"
+msgstr "如果该窗å£åº”总是在其他窗å£ä¹‹ä¸Šï¼Œåˆ™è¿”回[code]true[/code]。"
#: doc/classes/OS.xml:658
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the window is currently focused.\n"
"[b]Note:[/b] Only implemented on desktop platforms. On other platforms, it "
"will always return [code]true[/code]."
msgstr ""
-"如果addon准备好å“应函数调用,返回[code]true[/code],å¦åˆ™è¿”回[code]false[/"
+"如果窗å£å½“å‰èŽ·å¾—ç„¦ç‚¹ï¼Œåˆ™è¿”å›ž[code]true[/code]。\n"
+"[b]注æ„:[/b] åªåœ¨æ¡Œé¢å¹³å°ä¸Šå®žçŽ°ã€‚åœ¨å…¶ä»–å¹³å°ä¸Šï¼Œå®ƒå°†æ€»æ˜¯è¿”回[code]true[/"
"code]。"
#: doc/classes/OS.xml:665
@@ -47091,31 +47523,28 @@ msgstr ""
"[b]注æ„:[/b] 这个方法在Androidã€iOSã€Linuxã€macOSå’ŒWindows上实现。"
#: doc/classes/OS.xml:712
-#, fuzzy
msgid ""
"Moves the window to the front.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
-"返回键盘布局的数é‡ã€‚\n"
-"[b]注æ„:[/b]本方法在Linuxã€macOSå’ŒWindows上实现。"
+"将窗å£ç§»åˆ°å‰é¢ã€‚\n"
+"[b]注æ„:[/b] 这个方法在Linuxã€macOSå’ŒWindows上实现。"
#: doc/classes/OS.xml:719
-#, fuzzy
msgid ""
"Returns [code]true[/code] if native video is playing.\n"
"[b]Note:[/b] This method is only implemented on iOS."
msgstr ""
-"如果视频正在播放,返回[code]true[/code] 。\n"
-"[b]注æ„:[/b] 如果在播放过程中暂åœï¼Œè§†é¢‘ä»è¢«è®¤ä¸ºåœ¨æ’­æ”¾ã€‚"
+"如果本地视频正在播放,返回[code]true[/code]。\n"
+"[b]注æ„:[/b] 这个方法åªåœ¨iOS上实现。"
#: doc/classes/OS.xml:726
-#, fuzzy
msgid ""
"Pauses native video playback.\n"
"[b]Note:[/b] This method is only implemented on iOS."
msgstr ""
-"设置活动键盘布局。\n"
-"[b]注:[/b]此方法å¯åœ¨Linuxã€macOSå’ŒWindows上实现。"
+"æš‚åœæœ¬åœ°è§†é¢‘播放。\n"
+"[b]注æ„:[/b] 这个方法åªåœ¨iOS上实现。"
#: doc/classes/OS.xml:737
msgid ""
@@ -47123,24 +47552,24 @@ msgid ""
"audio and subtitle tracks.\n"
"[b]Note:[/b] This method is only implemented on iOS."
msgstr ""
+"以给定的音é‡ã€éŸ³é¢‘å’Œå­—å¹•è½¨é“æ’­æ”¾æ¥è‡ªæŒ‡å®šè·¯å¾„的本地视频。\n"
+"[b]注æ„:[/b] 这个方法åªåœ¨iOS上实现。"
#: doc/classes/OS.xml:744
-#, fuzzy
msgid ""
"Stops native video playback.\n"
"[b]Note:[/b] This method is implemented on iOS."
msgstr ""
-"设置活动键盘布局。\n"
-"[b]注:[/b]此方法å¯åœ¨Linuxã€macOSå’ŒWindows上实现。"
+"åœæ­¢æœ¬åœ°è§†é¢‘播放。\n"
+"[b]注æ„:[/b] 这个方法在iOS上实现。"
#: doc/classes/OS.xml:751
-#, fuzzy
msgid ""
"Resumes native video playback.\n"
"[b]Note:[/b] This method is implemented on iOS."
msgstr ""
-"设置活动键盘布局。\n"
-"[b]注:[/b]此方法å¯åœ¨Linuxã€macOSå’ŒWindows上实现。"
+"æ¢å¤æœ¬åœ°è§†é¢‘播放。\n"
+"[b]注æ„:[/b] 这个方法在iOS上实现。"
#: doc/classes/OS.xml:758
msgid ""
@@ -47171,14 +47600,13 @@ msgid "Shows all resources currently used by the game."
msgstr "显示游æˆå½“å‰ä½¿ç”¨çš„æ‰€æœ‰èµ„æºã€‚"
#: doc/classes/OS.xml:792
-#, fuzzy
msgid ""
"Request the user attention to the window. It'll flash the taskbar button on "
"Windows or bounce the dock icon on OSX.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
-"返回ä½äºŽ[code]index[/code]ä½ç½®çš„键盘布局的本地å称。\n"
-"[b]注æ„:[/b] 本方法å¯åœ¨Linuxã€macOSå’ŒWindows上实现。"
+"è¦æ±‚用户注æ„该窗å£ã€‚它会在Windows上闪çƒä»»åŠ¡æ æŒ‰é’®ï¼Œæˆ–在OSX上弹出Dock图标。\n"
+"[b]注æ„:[/b] 这个方法在Linuxã€macOSå’ŒWindows上实现。"
#: doc/classes/OS.xml:800
msgid ""
@@ -47189,16 +47617,15 @@ msgstr ""
"[code]RECORD_AUDIO[/code]çš„æƒé™ã€‚"
#: doc/classes/OS.xml:806
-#, fuzzy
msgid ""
"With this function, you can request dangerous permissions since normal "
"permissions are automatically granted at install time in Android "
"applications.\n"
"[b]Note:[/b] This method is implemented on Android."
msgstr ""
-"有了这个功能,你å¯ä»¥ç”³è¯·å±é™©çš„æƒé™ï¼Œå› ä¸ºæ­£å¸¸çš„æƒé™åœ¨Android应用程åºçš„安装时就"
-"会自动授予。\n"
-"[b]注æ„:[/b] 这个方法在Android上实现。"
+"通过这个功能,你å¯ä»¥ç”³è¯·å±é™©çš„æƒé™ï¼Œå› ä¸ºåœ¨Android应用程åºä¸­ï¼Œæ­£å¸¸çš„æƒé™ä¼šåœ¨å®‰"
+"装时自动授予。\n"
+"[b]注æ„:[/b] 此方法在Android上实现。"
#: doc/classes/OS.xml:815
msgid ""
@@ -47210,6 +47637,11 @@ msgid ""
"[b]Note:[/b] Double-check the casing of [code]variable[/code]. Environment "
"variable names are case-sensitive on all platforms except Windows."
msgstr ""
+"将环境å˜é‡[code]variable[/code]的值设置为[code]value[/code]。在è¿è¡Œ[method "
+"set_environment]åŽï¼ŒçŽ¯å¢ƒå˜é‡å°†è¢«è®¾ç½®ä¸ºGodot进程和任何用[method execute]执行的"
+"进程。环境å˜é‡å°†[i]ä¸[/i]æŒç»­å­˜åœ¨äºŽGodot进程终止åŽè¿è¡Œçš„进程中。\n"
+"[b]注æ„:[/b] 仔细检查[code]variable[/code]的大å°å†™ã€‚除Windows外,环境å˜é‡å"
+"称在所有平å°ä¸Šéƒ½æ˜¯åŒºåˆ†å¤§å°å†™çš„。"
#: doc/classes/OS.xml:823
msgid ""
@@ -47218,6 +47650,10 @@ msgid ""
"dialog. Image is scaled as needed.\n"
"[b]Note:[/b] This method is implemented on HTML5, Linux, macOS and Windows."
msgstr ""
+"使用图åƒ[Image]资æºè®¾ç½®æ¸¸æˆçš„图标。\n"
+"åŒæ ·çš„图åƒç”¨äºŽçª—壿 ‡é¢˜ã€ä»»åŠ¡æ /dock和窗å£é€‰æ‹©å¯¹è¯æ¡†ã€‚图åƒä¼šæ ¹æ®éœ€è¦è¿›è¡Œç¼©"
+"放。\n"
+"[b]注æ„:[/b] 这个方法在HTML5ã€Linuxã€macOSå’ŒWindows上实现。"
#: doc/classes/OS.xml:832
msgid ""
@@ -47229,15 +47665,21 @@ msgid ""
"Completed composition string is committed when input is finished.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
+"设置是å¦åº”å¯ç”¨ IME 输入法模å¼ã€‚\n"
+"如果激活,IME输入法编辑器在应用程åºä¹‹å‰å¤„ç†å…³é”®äº‹ä»¶å¹¶åˆ›å»ºç»„åˆå­—符串和建议列"
+"表。\n"
+"应用程åºå¯ä»¥é€šè¿‡ä½¿ç”¨ [method get_ime_selection] å’Œ [method get_ime_text] 函数"
+"æ¥æ£€ç´¢ç»„åˆçжæ€ã€‚\n"
+"è¾“å…¥å®Œæˆæ—¶æäº¤å®Œæˆçš„组åˆå­—符串。\n"
+"[b]注:[/b]该方法在Linuxã€macOSå’ŒWindows上实现。"
#: doc/classes/OS.xml:843
-#, fuzzy
msgid ""
"Sets position of IME suggestion list popup (in window coordinates).\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
-"关闭系统MIDI驱动程åºã€‚\n"
-"[b]注æ„:[/b]该方法åªåœ¨Linux, macOSå’ŒWindows上实现。"
+"设置 IME 建议列表弹出窗å£çš„ä½ç½®ï¼ˆåœ¨çª—å£å标中)。\n"
+"[b]注æ„:[/b] 此方法在 Linuxã€macOS å’Œ Windows 上实现。"
#: doc/classes/OS.xml:851
msgid ""
@@ -47247,6 +47689,10 @@ msgid ""
"window selection dialog.\n"
"[b]Note:[/b] This method is implemented on macOS and Windows."
msgstr ""
+"使用多尺寸平å°ç‰¹å®šå›¾æ ‡æ–‡ä»¶ï¼ˆ[code]*.ico[/code] 在 Windows 上设置游æˆå›¾æ ‡ï¼Œåœ¨ "
+"macOS 上设置 [code]*.icns [/code] ) 。\n"
+"适当的大å°å­å›¾æ ‡ç”¨äºŽçª—壿 ‡é¢˜ã€ä»»åŠ¡æ /åœé é¢æ¿å’Œçª—å£é€‰æ‹©å¯¹è¯æ¡†ã€‚\n"
+"[b]注æ„:[/b] 此方法在 macOS å’Œ Windows 上实现。"
#: doc/classes/OS.xml:860
msgid "Sets the name of the current thread."
@@ -47257,13 +47703,12 @@ msgid "Enables backup saves if [code]enabled[/code] is [code]true[/code]."
msgstr "如果[code]enabled[/code]为[code]true[/code],则å¯ç”¨å¤‡ä»½ä¿å­˜ã€‚"
#: doc/classes/OS.xml:874
-#, fuzzy
msgid ""
"Sets whether the window should always be on top.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
-"设置活动键盘布局。\n"
-"[b]注:[/b]此方法å¯åœ¨Linuxã€macOSå’ŒWindows上实现。"
+"è®¾ç½®çª—å£æ˜¯å¦åº”始终ä½äºŽé¡¶éƒ¨ã€‚\n"
+"[b]注:[/b] 该方法在 Linuxã€macOS å’Œ Windows 上实现。"
#: doc/classes/OS.xml:882
msgid ""
@@ -47285,6 +47730,21 @@ msgid ""
"region is not drawn, while on Linux and macOS it is.\n"
"[b]Note:[/b] This method is implemented on Linux, macOS and Windows."
msgstr ""
+"设置窗å£çš„一个接å—鼠标事件的多边形区域。该区域外的鼠标事件将被传递出去。\n"
+"传递一个空数组将ç¦ç”¨ç©¿é€æ”¯æŒï¼ˆæ‰€æœ‰é¼ æ ‡äº‹ä»¶å°†è¢«çª—壿‹¦æˆªï¼Œè¿™æ˜¯é»˜è®¤è¡Œä¸ºï¼‰ã€‚\n"
+"[codeblock]\n"
+"# 设置区域,使用Path2D节点。\n"
+"OS.set_window_mouse_passthrough($Path2D.curve.get_baked_points() )\n"
+"\n"
+"# 设置区域,使用Polygon2D节点。\n"
+"OS.set_window_mouse_passthrough($Polygon2D.polygon)\n"
+"\n"
+"# é‡ç½®åŒºåŸŸä¸ºé»˜è®¤å€¼ã€‚\n"
+"OS.set_window_mouse_passthrough([] )\n"
+"[/codeblock]\n"
+"[b]注æ„:[/b]在Windows上,ä½äºŽåŒºåŸŸå¤–的窗å£éƒ¨åˆ†ä¸ä¼šè¢«ç»˜åˆ¶ï¼Œè€Œåœ¨Linuxå’ŒmacOS上则"
+"会。\n"
+"[b]注æ„:[/b] 这个方法在Linuxã€macOSå’ŒWindows上实现。"
#: doc/classes/OS.xml:902
msgid ""
@@ -47293,6 +47753,10 @@ msgid ""
"as that will negatively affect performance on some window managers.\n"
"[b]Note:[/b] This method is implemented on HTML5, Linux, macOS and Windows."
msgstr ""
+"å°†çª—å£æ ‡é¢˜è®¾ç½®ä¸ºæŒ‡å®šçš„字符串。\n"
+"[b]注æ„:[/b] 这个应该å¶å°”使用。ä¸è¦æ¯å¸§éƒ½è®¾ç½®è¿™ä¸ªï¼Œå› ä¸ºè¿™ä¼šå¯¹æŸäº›çª—å£ç®¡ç†å™¨"
+"的性能产生负é¢å½±å“。\n"
+"[b]注:[/b] 该方法在 HTML5ã€Linuxã€macOS å’Œ Windows 上实现。"
#: doc/classes/OS.xml:911
msgid ""
@@ -47327,7 +47791,6 @@ msgstr ""
"现。"
#: doc/classes/OS.xml:924
-#, fuzzy
msgid ""
"Shows the virtual keyboard if the platform has one.\n"
"The [code]existing_text[/code] parameter is useful for implementing your own "
@@ -47338,27 +47801,21 @@ msgid ""
"be able to enter multiple lines of text, as in [TextEdit].\n"
"[b]Note:[/b] This method is implemented on Android, iOS and UWP."
msgstr ""
-"显示虚拟键盘,如果当å‰å¹³å°æœ‰ä¸€ä¸ªã€‚\n"
-"[code]existing_text[/code]傿•°å¯ç”¨äºŽå®žçŽ°æ‚¨è‡ªå·±çš„ [LineEdit] 或 [TextEdit],因"
-"为它告诉虚拟键盘已输入文本的内容(虚拟键盘将其用于自动更正和预测)。\n"
-"[code]position[/code]傿•°æ˜¯ç¼–辑文本的å±å¹•中[Rect2]。\n"
-"[code]multiline[/code]傿•°éœ€è¦è®¾ç½®ä¸º[code]true[/code]æ‰èƒ½è¾“入多行文本,在"
-"[TextEdit]中。\n"
-"[code]max_length[/code]é™åˆ¶å¦‚æžœä¸ç­‰äºŽ [code]-1[/code] ,å¯ä»¥è¾“入的最大字符"
-"数。\n"
-"[code]cursor_start[/code]å¯ä»¥é€‰æ‹©æ€§åœ°å®šä¹‰å½“剿–‡æœ¬å…‰æ ‡ä½ç½®ï¼Œå¦‚æžœ"
-"[code]cursor_end[/code]未设置。\n"
-"[code]cursor_start[/code]å’Œ[code]cursor_end[/code]å¯ä»¥é€‰æ‹©åœ°å®šä¹‰å½“剿–‡æœ¬é€‰"
-"择。\n"
-"[b]注æ„:[/b]此方法在安å“系统ã€iOS å’Œ UWP 上实施。"
+"å¦‚æžœå¹³å°æœ‰è™šæ‹Ÿé”®ç›˜ï¼Œåˆ™æ˜¾ç¤ºè™šæ‹Ÿé”®ç›˜ã€‚\n"
+"[code]existing_text[/code] 傿•°å¯¹äºŽå®žçŽ°æ‚¨è‡ªå·±çš„ [LineEdit] 或 [TextEdit] 很有"
+"用,因为它告诉虚拟键盘已ç»è¾“入了哪些文本(虚拟键盘使用它进行自动更正和预"
+"测)。\n"
+"[code]multiline[/code]傿•°éœ€è¦è®¾ç½®ä¸º[code]true[/code]æ‰èƒ½è¾“入多行文本,如"
+"[TextEdit]。\n"
+"[b]注:[/b]此方法在Androidã€iOSå’ŒUWP上实现。"
#: doc/classes/OS.xml:933
msgid "The clipboard from the host OS. Might be unavailable on some platforms."
-msgstr ""
+msgstr "主机æ“作系统的剪贴æ¿åœ¨æŸäº›å¹³å°ä¸Šå¯èƒ½ä¸å¯ç”¨ã€‚"
#: doc/classes/OS.xml:936
msgid "The current screen index (starting from 0)."
-msgstr ""
+msgstr "当å‰å±å¹•索引(从 0 开始)。"
#: doc/classes/OS.xml:939
msgid ""
@@ -47366,6 +47823,8 @@ msgid ""
"each frame, and attempts to compensate for random variation. This will only "
"operate on systems where V-Sync is active."
msgstr ""
+"如果 [code]true[/code],引擎会过滤æ¯å¸§ä¹‹é—´æµ‹é‡çš„æ—¶é—´å¢žé‡ï¼Œå¹¶å°è¯•è¡¥å¿éšæœºå˜"
+"化。这åªä¼šåœ¨åž‚ç›´åŒæ­¥å¤„于活动状æ€çš„系统上è¿è¡Œã€‚"
#: doc/classes/OS.xml:942
msgid ""
@@ -47383,11 +47842,11 @@ msgstr ""
"数,这个值将被忽略。"
#: doc/classes/OS.xml:946
-#, fuzzy
msgid ""
"If [code]true[/code], the engine tries to keep the screen on while the game "
"is running. Useful on mobile."
-msgstr "如果 [code]true[/code],引擎将生æˆç”¨äºŽçº¿æ¡†è°ƒè¯•模å¼çš„线框。"
+msgstr ""
+"如果 [code]true[/code],引擎会å°è¯•在游æˆè¿è¡Œæ—¶ä¿æŒå±å¹•å¼€å¯ã€‚在手机上有用。"
#: doc/classes/OS.xml:949
msgid ""
@@ -47411,6 +47870,8 @@ msgid ""
"decorations). Does not affect fullscreen mode. Set to [code](0, 0)[/code] to "
"reset to the system default value."
msgstr ""
+"窗å£çš„æœ€å¤§å¤§å°ï¼ˆä¸åŒ…括窗å£ç®¡ç†å™¨è£…饰)。ä¸å½±å“免屿¨¡å¼ã€‚设置为 [code](0, 0)[/"
+"code] å¯é‡ç½®ä¸ºç³»ç»Ÿé»˜è®¤å€¼ã€‚"
#: doc/classes/OS.xml:958
msgid ""
@@ -47421,23 +47882,24 @@ msgid ""
"[code]Vector2(64, 64)[/code]. This prevents issues that can arise when the "
"window is resized to a near-zero size."
msgstr ""
+"窗å£çš„æœ€å°å°ºå¯¸ï¼ˆä»¥åƒç´ ä¸ºå•ä½ï¼‰ï¼ˆä¸è®¡ç®—窗å£ç®¡ç†å™¨è£…饰)。ä¸å½±å“免屿¨¡å¼ã€‚设置"
+"为 [code](0, 0)[/code] å¯é‡ç½®ä¸ºç³»ç»Ÿé»˜è®¤å€¼ã€‚\n"
+"[b]注:[/b] 默认情况下,项目窗å£çš„æœ€å°å°ºå¯¸ä¸º [code]Vector2(64, 64)[/code]。这"
+"å¯ä»¥é˜²æ­¢åœ¨å°†çª—å£å¤§å°è°ƒæ•´ä¸ºæŽ¥è¿‘é›¶æ—¶å¯èƒ½å‡ºçŽ°çš„é—®é¢˜ã€‚"
#: doc/classes/OS.xml:962
-#, fuzzy
msgid "The current screen orientation."
-msgstr "当å‰åœºæ™¯ã€‚"
+msgstr "当å‰å±å¹•æ–¹å‘。"
#: doc/classes/OS.xml:965
msgid "The current tablet driver in use."
msgstr "当剿­£åœ¨ä½¿ç”¨çš„书写æ¿ï¼ˆè¯‘æ³¨ï¼šæˆ–æ•°ä½æ¿ã€è§¦æ‘¸æ¿ï¼Œå°šæœªå®šè®ºï¼‰é©±åŠ¨ç¨‹åºã€‚"
#: doc/classes/OS.xml:968
-#, fuzzy
msgid "If [code]true[/code], vertical synchronization (Vsync) is enabled."
-msgstr "如果[code]true[/code],则å¯ç”¨æ³•线映射。"
+msgstr "如果 [code]true[/code],则å¯ç”¨åž‚ç›´åŒæ­¥ (Vsync)。"
#: doc/classes/OS.xml:971
-#, fuzzy
msgid ""
"If [code]true[/code] and [code]vsync_enabled[/code] is true, the operating "
"system's window compositor will be used for vsync when the compositor is "
@@ -47447,11 +47909,11 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it.\n"
"[b]Note:[/b] This property is only implemented on Windows."
msgstr ""
-"如果[code]Use Vsync[/code]å·²å¯ç”¨ï¼Œä¸”[code]true[/code]ï¼Œåˆ™åœ¨çª—å£æ¨¡å¼ä¸‹å¯ç”¨æŽ’å­—"
-"器时,å¯é€šè¿‡æ“ä½œç³»ç»Ÿçš„çª—å£æŽ’å­—å™¨å®žçŽ°åž‚ç›´åŒæ­¥ã€‚这将防止在æŸäº›æƒ…况下å¡é¡¿ã€‚"
-"(Windows)。\n"
-"[b]注:[/b]这个选项是实验性的,旨在缓解一些用户的å¡é¡¿ä½“验。然而,有些用户在使"
-"ç”¨å®ƒæ—¶ä½“éªŒåˆ°åž‚ç›´åŒæ­¥å¸§çއå‡åŠ(例如从60 FPSé™è‡³30 FPS)。"
+"如果 [code]true[/code] å’Œ [code]vsync_enabled[/code] 为真,当æ“作系统的窗å£åˆ"
+"æˆå™¨è¢«å¯ç”¨å¹¶ä¸”游æˆå¤„äºŽçª—å£æ¨¡å¼æ—¶ï¼Œå°†ä½¿ç”¨è¯¥åˆæˆå™¨è¿›è¡Œvsync。\n"
+"[b]注æ„:[/b] 此选项是实验性的,旨在缓解æŸäº›ç”¨æˆ·é‡åˆ°çš„å¡é¡¿ã€‚但是,一些用户在"
+"使用时é‡åˆ°äº† Vsync 帧率å‡åŠï¼Œä¾‹å¦‚从 60 FPS 到 30 FPS。\n"
+"[b]注æ„:[/b] 此属性仅在 Windows 上实现。"
#: doc/classes/OS.xml:976
msgid ""
@@ -47459,21 +47921,21 @@ msgid ""
"[b]Note:[/b] Setting [code]window_borderless[/code] to [code]false[/code] "
"disables per-pixel transparency."
msgstr ""
+"如果 [code]true[/code],则移除窗框。\n"
+"[b]注æ„:[/b] å°† [code]window_borderless[/code] 设置为 [code]false[/code] å°†"
+"ç¦ç”¨é€åƒç´ é€æ˜Žåº¦ã€‚"
#: doc/classes/OS.xml:980
-#, fuzzy
msgid "If [code]true[/code], the window is fullscreen."
-msgstr "如果[code]true[/code],则暂åœè§†é¢‘。"
+msgstr "如果[code]true[/code],窗å£ä¸ºå…¨å±ã€‚"
#: doc/classes/OS.xml:983
-#, fuzzy
msgid "If [code]true[/code], the window is maximized."
-msgstr "如果[code]true[/code],则暂åœè§†é¢‘。"
+msgstr "如果[code]true[/code],窗å£è¢«æœ€å¤§åŒ–。"
#: doc/classes/OS.xml:986
-#, fuzzy
msgid "If [code]true[/code], the window is minimized."
-msgstr "如果[code]true[/code],则暂åœè§†é¢‘。"
+msgstr "如果[code]true[/code],窗å£è¢«æœ€å°åŒ–。"
#: doc/classes/OS.xml:989
msgid ""
@@ -47488,21 +47950,28 @@ msgid ""
"ProjectSettings.display/window/per_pixel_transparency/enabled] to set it at "
"startup instead."
msgstr ""
+"如果[code]true[/code],则窗å£èƒŒæ™¯æ˜¯é€æ˜Žçš„ï¼Œçª—å£æ¡†æž¶è¢«ç§»é™¤ã€‚\n"
+"使用 [code]get_tree().get_root().set_transparent_background(true)[/code] ç¦ç”¨"
+"主视å£èƒŒæ™¯æ¸²æŸ“。\n"
+"[b]注æ„:[/b]如果ç¦ç”¨[member ProjectSettings.display/window/"
+"per_pixel_transparency/allowed]设置,则该属性无效。\n"
+"[b]注æ„:[/b] 此属性在 HTML5ã€Linuxã€macOSã€Windows å’Œ Android 上实现。对于 "
+"Android,它ä¸èƒ½åœ¨è¿è¡Œæ—¶æ›´æ”¹ã€‚使用 [member ProjectSettings.display/window/"
+"per_pixel_transparency/enabled] 在å¯åŠ¨æ—¶è¿›è¡Œè®¾ç½®ã€‚"
#: doc/classes/OS.xml:995
msgid ""
"The window position relative to the screen, the origin is the top left "
"corner, +Y axis goes to the bottom and +X axis goes to the right."
-msgstr ""
+msgstr "窗å£ç›¸å¯¹äºŽå±å¹•çš„ä½ç½®ï¼ŒåŽŸç‚¹ä¸ºå·¦ä¸Šè§’ï¼Œ+Y è½´å‘下,+X è½´å‘å³ã€‚"
#: doc/classes/OS.xml:998
-#, fuzzy
msgid "If [code]true[/code], the window is resizable by the user."
-msgstr "如果[code]true[/code],则暂åœè§†é¢‘。"
+msgstr "如果 [code]true[/code],用户å¯ä»¥è°ƒæ•´çª—å£å¤§å°ã€‚"
#: doc/classes/OS.xml:1001
msgid "The size of the window (without counting window manager decorations)."
-msgstr ""
+msgstr "窗å£çš„大å°ï¼ˆä¸åŒ…括窗å£ç®¡ç†å™¨è£…饰)。"
#: doc/classes/OS.xml:1006
msgid ""
@@ -47513,13 +47982,12 @@ msgstr ""
"2.1,在网络上使用WebGL 1.0。"
#: doc/classes/OS.xml:1009
-#, fuzzy
msgid ""
"The GLES3 rendering backend. It uses OpenGL ES 3.0 on mobile devices, OpenGL "
"3.3 on desktop platforms and WebGL 2.0 on the web."
msgstr ""
-"GLES2的渲染åŽç«¯ã€‚它在移动设备上使用OpenGL ES 2.0,在桌é¢å¹³å°ä¸Šä½¿ç”¨OpenGL "
-"2.1,在网络上使用WebGL 1.0。"
+"GLES3 渲染åŽç«¯ã€‚它在移动设备上使用 OpenGL ES 3.0,在桌é¢å¹³å°ä¸Šä½¿ç”¨ OpenGL "
+"3.3,在网络上使用 WebGL 2.0。"
#: doc/classes/OS.xml:1012
msgid "Sunday."
@@ -48267,7 +48735,7 @@ msgstr "https://godotengine.org/asset-library/asset/523"
#: doc/classes/Panel.xml:20
msgid "The style of this [Panel]."
-msgstr "这个[Panel]的样å¼ã€‚"
+msgstr "这个 [Panel] 的样å¼ã€‚"
#: doc/classes/PanelContainer.xml:4
msgid "Panel container type."
@@ -48278,11 +48746,11 @@ msgid ""
"Panel container type. This container fits controls inside of the delimited "
"area of a stylebox. It's useful for giving controls an outline."
msgstr ""
-"颿¿å®¹å™¨ç±»åž‹ã€‚æ­¤å®¹å™¨é€‚åˆæ ·å¼æ¡†åˆ†éš”区域内的控件。它对于给控件一个æè¾¹å¾ˆæœ‰ç”¨ã€‚"
+"颿¿å®¹å™¨ç±»åž‹ã€‚此容器会将控件放入样å¼ç›’所框定的区域内,方便为控件æä¾›è½®å»“。"
#: doc/classes/PanelContainer.xml:18
msgid "The style of [PanelContainer]'s background."
-msgstr "[PanelContainer]的背景样å¼ã€‚"
+msgstr "[PanelContainer] 的背景样å¼ã€‚"
#: doc/classes/PanoramaSky.xml:4
msgid "A type of [Sky] used to draw a background texture."
@@ -48300,16 +48768,17 @@ msgid ""
"cubemap_to_panorama.html]this tool[/url] to convert a cube map to an "
"equirectangular sky map."
msgstr ""
-"在[Environment]中引用的用于绘制背景的资æºã€‚全景天空的功能类似于其他引擎的天空"
-"ç›’ï¼Œé™¤äº†å®ƒä½¿ç”¨ç­‰è¾¹çŸ©å½¢çš„å¤©ç©ºåœ°å›¾è€Œä¸æ˜¯ç«‹æ–¹ä½“地图。\n"
-"强烈建议使用HDR全景图,以获得准确ã€é«˜è´¨é‡çš„å射。为此,Godot支æŒRadiance HDR "
-"([code].hdr[/code])å’ŒOpenEXR ([code].exr[/code])å›¾åƒæ ¼å¼ã€‚\n"
+"在 [Environment] 中引用的用于绘制背景的资æºã€‚全景天空的功能类似于其他引擎的天"
+"空盒,区别在于它使用的是等è·åœ†æŸ±æŠ•å½±çš„å¤©ç©ºè´´å›¾è€Œä¸æ˜¯ç«‹æ–¹ä½“贴图。\n"
+"强烈建议使用 HDR 全景图,以获得准确ã€é«˜è´¨é‡çš„å射。为此,Godot æ”¯æŒ Radiance "
+"HDR([code].hdr[/code])和 OpenEXR([code].exr[/code]ï¼‰å›¾åƒæ ¼å¼ã€‚\n"
"您å¯ä»¥ä½¿ç”¨[url=https://danilw.github.io/GLSL-howto/cubemap_to_panorama_js/"
-"cubemap_to_panorama.html]这个工具[/url]将立方体地图转æ¢ä¸ºç­‰è§’的天空地图。"
+"cubemap_to_panorama.html]这个工具[/url]将立方体贴图转æ¢ä¸ºç­‰è·åœ†æŸ±æŠ•影的天空贴"
+"图。"
#: doc/classes/PanoramaSky.xml:17
msgid "[Texture] to be applied to the PanoramaSky."
-msgstr "将被应用到全景天空的 [Texture]。"
+msgstr "将被应用到 PanoramaSky 的 [Texture]。"
#: doc/classes/ParallaxBackground.xml:4
msgid "A node used to create a parallax scrolling background."
@@ -48323,25 +48792,25 @@ msgid ""
"2D game. If not used with a [Camera2D], you must manually calculate the "
"[member scroll_offset]."
msgstr ""
-"一个ParallaxBackground使用一个或多个[ParallaxLayer]å­èŠ‚ç‚¹æ¥åˆ›å»ºè§†å·®æ•ˆæžœã€‚æ¯ä¸ª"
-"[ParallaxLayer]å¯ä»¥ä½¿ç”¨æˆå‘˜ParallaxLayer.motion_offset以ä¸åŒçš„速度移动。这在"
-"2D游æˆä¸­åˆ›é€ äº†ä¸€ç§æ·±åº¦é”™è§‰ã€‚如果没有与[Camera2D]一起使用,你必须手动计算"
-"[member scroll_offset]。"
+"ParallaxBackground 使用一个或多个 [ParallaxLayer] å­èŠ‚ç‚¹æ¥åˆ›å»ºè§†å·®æ•ˆæžœã€‚æ¯ä¸ª "
+"[ParallaxLayer] å¯ä»¥ä½¿ç”¨ [member ParallaxLayer.motion_offset] 以ä¸åŒçš„速度移"
+"动。这在 2D 游æˆä¸­å¯ä»¥åˆ›é€ ä¸€ç§æ·±åº¦é”™è§‰ã€‚如果没有与 [Camera2D] 一起使用,你必"
+"须手动计算 [member scroll_offset]。"
#: doc/classes/ParallaxBackground.xml:16
msgid "The base position offset for all [ParallaxLayer] children."
-msgstr "所有[ParallaxLayer]å­å…ƒç´ çš„基本ä½ç½®å移。"
+msgstr "所有 [ParallaxLayer] å­å…ƒç´ çš„基本ä½ç½®å移。"
#: doc/classes/ParallaxBackground.xml:19
msgid "The base motion scale for all [ParallaxLayer] children."
-msgstr "所有[ParallaxLayer]å­å…ƒç´ çš„基本移动比例。"
+msgstr "所有 [ParallaxLayer] å­å…ƒç´ çš„基本移动比例。"
#: doc/classes/ParallaxBackground.xml:22
msgid ""
"If [code]true[/code], elements in [ParallaxLayer] child aren't affected by "
"the zoom level of the camera."
msgstr ""
-"如果[code]为true[/code], [ParallaxLayer]å­å…ƒç´ å°†ä¸å—相机缩放级别的影å“。"
+"为 [code]true[/code] 时,[ParallaxLayer] å­å…ƒç´ å°†ä¸å—相机缩放级别的影å“。"
#: doc/classes/ParallaxBackground.xml:25
msgid ""
@@ -48372,7 +48841,7 @@ msgstr ""
#: doc/classes/ParallaxLayer.xml:4
msgid "A parallax scrolling layer to be used with [ParallaxBackground]."
-msgstr "使用[ParallaxBackground]的视差滚动层。"
+msgstr "使用 [ParallaxBackground] 的视差滚动层。"
#: doc/classes/ParallaxLayer.xml:7
msgid ""
@@ -48383,11 +48852,10 @@ msgid ""
"[b]Note:[/b] Any changes to this node's position and scale made after it "
"enters the scene will be ignored."
msgstr ""
-"一个ParallaxLayer必须是一个[ParallaxBackground]节点的å­èŠ‚ç‚¹ã€‚æ¯ä¸ª"
-"ParallaxLayer都å¯ä»¥è®¾ç½®ä¸ºç›¸å¯¹äºŽç›¸æœºç§»åŠ¨æˆ– [member ParallaxBackground."
-"scroll_offset] 值。\n"
+"ParallaxLayer 必须是 [ParallaxBackground] 节点的å­èŠ‚ç‚¹ã€‚æ¯ä¸ª ParallaxLayer 都"
+"å¯ä»¥è®¾ç½®ä¸ºç›¸å¯¹äºŽç›¸æœºç§»åŠ¨æˆ– [member ParallaxBackground.scroll_offset] 值。\n"
"该节点的å­èŠ‚ç‚¹å°†å—其滚动åç§»é‡çš„å½±å“。\n"
-"[b]注æ„:[/b]当该节点进入场景åŽï¼Œå¯¹å…¶ä½ç½®å’Œæ¯”例的任何改å˜éƒ½å°†è¢«å¿½ç•¥ã€‚"
+"[b]注æ„:[/b] 当该节点进入场景åŽï¼Œå¯¹å…¶ä½ç½®å’Œæ¯”例的任何改å˜éƒ½å°†è¢«å¿½ç•¥ã€‚"
#: doc/classes/ParallaxLayer.xml:17
msgid ""
@@ -48452,7 +48920,7 @@ msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/3d/vertex_animation/"
"controlling_thousands_of_fish.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/3d/vertex_animation/"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/vertex_animation/"
"controlling_thousands_of_fish.html"
#: doc/classes/Particles.xml:20
@@ -48542,6 +49010,11 @@ msgid ""
"shadows, you may want to enlarge this AABB to ensure the shadow is updated "
"when particles are off-screen."
msgstr ""
+"[AABB] 确定节点的区域,该区域需è¦åœ¨å±å¹•上å¯è§æ‰èƒ½ä½¿ç²’å­ç³»ç»Ÿå¤„于活动状æ€ã€‚\n"
+"如果在节点进入/退出å±å¹•æ—¶ç²’å­çªç„¶å‡ºçް/消失,则增大框。 [AABB] å¯ä»¥é€šè¿‡ä»£ç æˆ–"
+"使用 [b]Particles → Generate AABB[/b] 编辑器工具生æˆã€‚\n"
+"[b]注æ„:[/b] 如果使用中的 [ParticlesMaterial] é…置为投射阴影,您å¯èƒ½éœ€è¦æ”¾å¤§"
+"æ­¤ AABB 以确ä¿åœ¨ç²’å­ç¦»å±æ—¶æ›´æ–°é˜´å½±ã€‚"
#: doc/classes/Particles.xml:118
msgid "Maximum number of draw passes supported."
@@ -48572,6 +49045,19 @@ msgid ""
"[b]Note:[/b] Unlike [CPUParticles2D], [Particles2D] currently ignore the "
"texture region defined in [AtlasTexture]s."
msgstr ""
+"用于创建å„ç§ç²’å­ç³»ç»Ÿå’Œæ•ˆæžœçš„ 2D ç²’å­èŠ‚ç‚¹ã€‚ [Particles2D] 具有一个å‘射器,å¯ä»¥"
+"以给定的速率生æˆä¸€å®šæ•°é‡çš„ç²’å­ã€‚\n"
+"使用 [code]process_material[/code] 属性添加 [ParticlesMaterial] 以é…置粒å­å¤–"
+"观和行为。或者,您å¯ä»¥æ·»åŠ å°†åº”ç”¨äºŽæ‰€æœ‰ç²’å­çš„ [ShaderMaterial]。\n"
+"[b]注æ„:[/b] [Particles2D] 仅在使用 GLES3 渲染器时有效。如果使用 GLES2 渲染"
+"器,请改用 [CPUParticles2D]。您å¯ä»¥é€šè¿‡é€‰æ‹©èŠ‚ç‚¹å°† [Particles2D] 转æ¢ä¸º "
+"[CPUParticles2D],å•击 2D 编辑器视å£é¡¶éƒ¨çš„ [b]Particles[/b] èœå•,然åŽé€‰æ‹© "
+"[b]Convert to CPUParticles2D[/b]。\n"
+"[b]注æ„:[/b]在粒å­èŠ‚ç‚¹ä¸Šå·¥ä½œåŽï¼Œè®°å¾—é€šè¿‡é€‰æ‹©å®ƒæ¥æ›´æ–°å®ƒçš„[member "
+"visibility_rect],å•击2D编辑器视å£é¡¶éƒ¨çš„[b]ç²’å­[/b]èœå•,然åŽé€‰æ‹©[b]生æˆå¯è§"
+"矩形 [/b]。å¦åˆ™ï¼Œæ ¹æ®ç›¸æœºä½ç½®å’Œè§’度,粒å­å¯èƒ½ä¼šçªç„¶æ¶ˆå¤±ã€‚\n"
+"[b]注:[/b]与[CPUParticles2D]ä¸åŒï¼Œ[Particles2D]ç›®å‰å¿½ç•¥[AtlasTexture]s中定义"
+"的纹ç†åŒºåŸŸã€‚"
#: doc/classes/Particles2D.xml:21
msgid "Returns a rectangle containing the positions of all existing particles."
@@ -48589,14 +49075,15 @@ msgid ""
"exits the screen. The [Rect2] can be grown via code or with the [b]Particles "
"→ Generate Visibility Rect[/b] editor tool."
msgstr ""
+"[Rect2] 确定节点的区域,该区域需è¦åœ¨å±å¹•上å¯è§æ‰èƒ½ä½¿ç²’å­ç³»ç»Ÿå¤„于活动状æ€ã€‚\n"
+"如果当节点进入/退出å±å¹•æ—¶ç²’å­çªç„¶å‡ºçް/消失,则增长矩形。 [Rect2] å¯ä»¥é€šè¿‡ä»£ç "
+"或使用 [b]Particles → Generate Visibility Rect[/b] 编辑器工具生æˆã€‚"
#: doc/classes/ParticlesMaterial.xml:4
-#, fuzzy
msgid "Particle properties for [Particles] and [Particles2D] nodes."
-msgstr "[GPUParticles3D]å’Œ[GPUParticles2D]节点的粒å­å±žæ€§ã€‚"
+msgstr "[Particles] å’Œ [Particles2D] 节点的粒å­å±žæ€§ã€‚"
#: doc/classes/ParticlesMaterial.xml:7
-#, fuzzy
msgid ""
"ParticlesMaterial defines particle properties and behavior. It is used in "
"the [code]process_material[/code] of [Particles] and [Particles2D] emitter "
@@ -48611,14 +49098,14 @@ msgid ""
"ratio of [code]0.4[/code] would scale the original property between "
"[code]0.4-1.0[/code] of its original value."
msgstr ""
-"ParticlesMaterial定义了粒å­çš„属性和行为。它在[GPUParticles3D]å’Œ"
-"[GPUParticles2D]å‘射器节点的[code]process_material[/code]中使用。\n"
-"当å‘å°„æ—¶ï¼Œè¿™äº›ææ–™çš„一些属性被应用到æ¯ä¸ªç²’å­ä¸Šï¼Œè€Œå…¶ä»–çš„å¯ä»¥æœ‰ä¸€ä¸ª"
-"[CurveTexture]应用到在粒å­çš„生命周期中å˜åŒ–的值。\n"
-"å½“éšæœºæ¯”çŽ‡åº”ç”¨äºŽä¸€ä¸ªå±žæ€§æ—¶ï¼Œå®ƒè¢«ç”¨äºŽæŒ‰éšæœºæ•°é‡ç¼©æ”¾è¯¥å±žæ€§ã€‚éšæœºæ¯”率用于在"
-"[code]1.0[/code]和一个å°äºŽ1çš„éšæœºæ•°ä¹‹é—´æ’å…¥ï¼Œç»“æžœä¹˜ä»¥è¯¥å±žæ€§å¾—åˆ°éšæœºå±žæ€§ã€‚例"
-"如,[code]0.4[/code]çš„éšæœºæ¯”率将使原始属性在其原始值的[code]0.4-1.0[/code]之"
-"间缩放。"
+"ParticlesMaterial定义了粒å­çš„属性和行为。它å¯ç”¨äºŽ[Particles]å’Œ[Particles2D]å‘"
+"射器节点的[code]process_material[/code]中。\n"
+"这个æè´¨çš„一些属性在å‘射时被应用到æ¯ä¸ªç²’å­ä¸Šï¼Œè€Œå…¶ä»–属性å¯ä»¥åº”用"
+"[CurveTexture]æ¥åœ¨ç²’å­çš„ç”Ÿå‘½å‘¨æœŸä¸­æ”¹å˜æ•°å€¼ã€‚\n"
+"å½“éšæœºæ€§æ¯”率被应用到一个属性时,用æ¥ä»¥ä¸€ä¸ªéšæœºé‡æ¥æ‰©å±•è¯¥å±žæ€§ã€‚éšæœºçŽ‡ç”¨æ¥åœ¨"
+"[code]1.0[/code]和一个å°äºŽ1çš„éšæœºæ•°ä¹‹é—´æ’å€¼ï¼Œç»“æžœä¹˜ä»¥å±žæ€§ï¼Œå¾—åˆ°éšæœºçš„属性。例"
+"如,一个[code]0.4[/code]çš„éšæœºæ¯”率将在[code]0.4-1.0[/code]之间缩放原始属性的"
+"原值。"
#: doc/classes/ParticlesMaterial.xml:18
msgid "Returns [code]true[/code] if the specified flag is enabled."
@@ -48629,9 +49116,8 @@ msgid "Returns the randomness ratio associated with the specified parameter."
msgstr "è¿”å›žä¸ŽæŒ‡å®šå‚æ•°å…³è”çš„éšæœºæ¯”率。"
#: doc/classes/ParticlesMaterial.xml:39
-#, fuzzy
msgid "Returns the [Texture] used by the specified parameter."
-msgstr "è¿”å›žæŒ‡å®šå‚æ•°ä½¿ç”¨çš„[Texture2D]。"
+msgstr "è¿”å›žæŒ‡å®šå‚æ•°ä½¿ç”¨çš„ [Texture]。"
#: doc/classes/ParticlesMaterial.xml:47
msgid ""
@@ -48648,29 +49134,26 @@ msgid "Sets the randomness ratio for the specified [enum Parameter]."
msgstr "为指定的[enum Parameter]è®¾ç½®éšæœºæ¯”率。"
#: doc/classes/ParticlesMaterial.xml:71
-#, fuzzy
msgid "Sets the [Texture] for the specified [enum Parameter]."
-msgstr "为指定的[enum Parameter]设置[Texture2D]。"
+msgstr "为指定的 [enum Parameter] 设置 [Texture]。"
#: doc/classes/ParticlesMaterial.xml:77
-#, fuzzy
msgid ""
"Initial rotation applied to each particle, in degrees.\n"
"Only applied when [member flag_disable_z] or [member flag_rotate_y] are "
"[code]true[/code] or the [SpatialMaterial] being used to draw the particle "
"is using [constant SpatialMaterial.BILLBOARD_PARTICLES]."
msgstr ""
-"åˆå§‹æ—‹è½¬ä½œç”¨äºŽæ¯ä¸ªç²’å­ï¼Œä»¥åº¦æ•°è¡¨ç¤ºã€‚\n"
-"仅当[member flag_disable_z]或[member flag_rotate_y]为[code]true[/code]或"
-"[BaseMaterial3D]ç”¨äºŽç»˜åˆ¶ç²’å­æ—¶ä½¿ç”¨[constant BaseMaterial3D. "
-"billboard_particles]。"
+"应用于æ¯ä¸ªç²’å­çš„åˆå§‹æ—‹è½¬ï¼Œä»¥åº¦ä¸ºå•ä½ã€‚\n"
+"仅在 [member flag_disable_z] 或 [member flag_rotate_y] 为 [code]true[/code] "
+"或用于绘制粒å­çš„ [SpatialMaterial] 使用 [constant SpatialMaterial."
+"BILLBOARD_PARTICLES] 时应用。"
#: doc/classes/ParticlesMaterial.xml:81
msgid "Each particle's rotation will be animated along this [CurveTexture]."
msgstr "æ¯ä¸ªç²’å­çš„æ—‹è½¬å°†æ²¿ç€è¿™ä¸ª[CurveTexture]动画。"
#: doc/classes/ParticlesMaterial.xml:87
-#, fuzzy
msgid ""
"Initial angular velocity applied to each particle. Sets the speed of "
"rotation of the particle.\n"
@@ -48678,10 +49161,10 @@ msgid ""
"[code]true[/code] or the [SpatialMaterial] being used to draw the particle "
"is using [constant SpatialMaterial.BILLBOARD_PARTICLES]."
msgstr ""
-"æ¯ä¸ªç²’å­çš„åˆå§‹è§’速度。设置粒å­çš„æ—‹è½¬é€Ÿåº¦ã€‚\n"
-"仅当[member flag_disable_z]或[member flag_rotate_y]为[code]true[/code]或"
-"[BaseMaterial3D]ç”¨äºŽç»˜åˆ¶ç²’å­æ—¶ä½¿ç”¨[constant BaseMaterial3D. "
-"billboard_particles]。"
+"应用于æ¯ä¸ªç²’å­çš„åˆå§‹è§’速度。设置粒å­çš„æ—‹è½¬é€Ÿåº¦ã€‚\n"
+"仅在 [member flag_disable_z] 或 [member flag_rotate_y] 为 [code]true[/code] "
+"或用于绘制粒å­çš„ [SpatialMaterial] 使用 [constant SpatialMaterial."
+"BILLBOARD_PARTICLES] 时应用。"
#: doc/classes/ParticlesMaterial.xml:91
msgid "Each particle's angular velocity will vary along this [CurveTexture]."
@@ -48696,16 +49179,15 @@ msgid "Each particle's animation speed will vary along this [CurveTexture]."
msgstr "æ¯ä¸ªç²’å­çš„动画速度将沿ç€è¿™ä¸ª[CurveTexture]å˜åŒ–。"
#: doc/classes/ParticlesMaterial.xml:115
-#, fuzzy
msgid ""
"Each particle's initial color. If the [Particles2D]'s [code]texture[/code] "
"is defined, it will be multiplied by this color. To have particle display "
"color in a [SpatialMaterial] make sure to set [member SpatialMaterial."
"vertex_color_use_as_albedo] to [code]true[/code]."
msgstr ""
-"æ¯ä¸ªç²’å­çš„åˆå§‹é¢œè‰²ã€‚如果[GPUParticles2D]çš„[code]texture[/code]被定义,它将乘"
-"以这个颜色。è¦è®©ç²’å­åœ¨[BaseMaterial3D]中显示颜色,请确ä¿è®¾ç½®[member "
-"BaseMaterial3D]。vertex_color_use_as_albedo] [code]true[/code]。"
+"æ¯ä¸ªç²’å­çš„åˆå§‹é¢œè‰²ã€‚如果定义了 [Particles2D] çš„ [code]texture[/code],它将乘"
+"以该颜色。è¦åœ¨ [SpatialMaterial] ä¸­ä½¿ç”¨ç²’å­æ˜¾ç¤ºé¢œè‰²ï¼Œè¯·ç¡®ä¿å°† [member "
+"SpatialMaterial.vertex_color_use_as_albedo] 设置为 [code]true[/code]。"
#: doc/classes/ParticlesMaterial.xml:124
msgid "Damping will vary along this [CurveTexture]."
@@ -48761,37 +49243,25 @@ msgstr ""
"的“粒å­â€å·¥å…·ä¸‹çš„“从网格/节点中创建å‘射点â€è‡ªåŠ¨åˆ›å»ºç½‘æ ¼æˆ–èŠ‚ç‚¹ã€‚"
#: doc/classes/ParticlesMaterial.xml:148
-#, fuzzy
msgid ""
"The axis of the ring when using the emitter [constant EMISSION_SHAPE_RING]."
-msgstr ""
-"如果[enum EmissionShape]设置为[constant EMISSION_SHAPE_SPHERE],则çƒä½“çš„åŠ"
-"径。"
+msgstr "使用å‘射器时的环轴 [constant EMISSION_SHAPE_RING]。"
#: doc/classes/ParticlesMaterial.xml:151
-#, fuzzy
msgid ""
"The height of the ring when using the emitter [constant EMISSION_SHAPE_RING]."
-msgstr ""
-"如果[enum EmissionShape]设置为[constant EMISSION_SHAPE_SPHERE],则çƒä½“çš„åŠ"
-"径。"
+msgstr "使用å‘射器时环的高度 [constant EMISSION_SHAPE_RING]。"
#: doc/classes/ParticlesMaterial.xml:154
-#, fuzzy
msgid ""
"The inner radius of the ring when using the emitter [constant "
"EMISSION_SHAPE_RING]."
-msgstr ""
-"如果[enum EmissionShape]设置为[constant EMISSION_SHAPE_SPHERE],则çƒä½“çš„åŠ"
-"径。"
+msgstr "使用å‘射器时环的内åŠå¾„ [constant EMISSION_SHAPE_RING]。"
#: doc/classes/ParticlesMaterial.xml:157
-#, fuzzy
msgid ""
"The radius of the ring when using the emitter [constant EMISSION_SHAPE_RING]."
-msgstr ""
-"如果[membermission_shape]设置为[constant EMISSION_SHAPE_SPHERE],则çƒä½“çš„åŠ"
-"径。"
+msgstr "使用å‘射器时的圆环åŠå¾„ [constant EMISSION_SHAPE_RING]。"
#: doc/classes/ParticlesMaterial.xml:160
msgid ""
@@ -48808,9 +49278,8 @@ msgstr ""
"åŠå¾„。"
#: doc/classes/ParticlesMaterial.xml:175
-#, fuzzy
msgid "Amount of [member spread] along the Y axis."
-msgstr "沿Yè½´æ’入的é¢å¤–边缘环的数é‡ã€‚"
+msgstr "沿 Y è½´çš„ [member spread] é‡ã€‚"
#: doc/classes/ParticlesMaterial.xml:184
msgid "Each particle's hue will vary along this [CurveTexture]."
@@ -48993,12 +49462,10 @@ msgstr ""
"emission_color_texture]调节。"
#: doc/classes/Path.xml:4
-#, fuzzy
msgid "Contains a [Curve3D] path for [PathFollow] nodes to follow."
-msgstr "包å«ä¸€ä¸ª[Curve3D]路径,供[PathFollow3D]节点éµå¾ªã€‚"
+msgstr "包å«è¦éµå¾ªçš„ [PathFollow] 节点的 [Curve3D] 路径。"
#: doc/classes/Path.xml:7
-#, fuzzy
msgid ""
"Can have [PathFollow] child nodes moving along the [Curve3D]. See "
"[PathFollow] for more information on the usage.\n"
@@ -49006,10 +49473,10 @@ msgid ""
"[PathFollow]). As such, the curve should usually start with a zero vector "
"[code](0, 0, 0)[/code]."
msgstr ""
-"å¯ä»¥è®©[PathFollow3D]å­èŠ‚ç‚¹æ²¿ç€[Curve3D]移动。请å‚阅[PathFollow3D]以获得更多关"
-"于使用的信æ¯ã€‚\n"
-"注æ„,该路径被认为是相对于移动的节点([PathFollow3D]çš„å­èŠ‚ç‚¹)的。因此,曲线通"
-"常以零å‘é‡[code](0,0,0)[/code]开始。"
+"å¯ä»¥è®© [PathFollow] å­èŠ‚ç‚¹æ²¿ [Curve3D] 移动。有关用法的更多信æ¯ï¼Œå‚阅 "
+"[PathFollow]。\n"
+"请注æ„,路径被视为相对于移动节点([PathFollow] çš„å­èŠ‚ç‚¹ï¼‰ã€‚å› æ­¤ï¼Œæ›²çº¿é€šå¸¸åº”ä»¥"
+"é›¶å‘é‡ [code](0, 0, 0)[/code] 开始。"
#: doc/classes/Path.xml:16
msgid "A [Curve3D] describing the path."
@@ -49041,12 +49508,10 @@ msgid "A [Curve2D] describing the path."
msgstr "A [Curve2D]æè¿°è·¯å¾„。"
#: doc/classes/PathFollow.xml:4
-#, fuzzy
msgid "Point sampler for a [Path]."
-msgstr "对[Path2D]çš„ç‚¹å–æ ·çš„å–æ ·å™¨ã€‚"
+msgstr "[Path] 的点采样器。"
#: doc/classes/PathFollow.xml:7
-#, fuzzy
msgid ""
"This node takes its parent [Path], and returns the coordinates of a point "
"within it, given a distance from the first vertex.\n"
@@ -49055,13 +49520,12 @@ msgid ""
"descendant nodes will then move accordingly when setting an offset in this "
"node."
msgstr ""
-"这个节点接å—它的父节点[Path2D]ï¼Œå¹¶è¿”å›žå…¶ä¸­ä¸€ä¸ªç‚¹çš„åæ ‡(给定到第一个顶点的è·"
-"离)。\n"
-"在ä¸ç¼–ç ç§»åŠ¨æ¨¡å¼çš„æƒ…况下,它å¯ä»¥ä½¿å…¶ä»–节点éµå¾ªä¸€æ¡è·¯å¾„。因此,节点必须是这个"
-"节点的å­èŠ‚ç‚¹ã€‚å½“åœ¨è¯¥èŠ‚ç‚¹ä¸­è®¾ç½®åç§»é‡æ—¶ï¼ŒåŽä»£èŠ‚ç‚¹å°†ç›¸åº”åœ°ç§»åŠ¨ã€‚"
+"这个节点接å—它的父节点 [Path]ï¼Œå¹¶è¿”å›žå…¶ä¸­ä¸€ä¸ªç‚¹çš„åæ ‡ï¼Œç»™å®šä¸Žç¬¬ä¸€ä¸ªé¡¶ç‚¹çš„è·"
+"离。\n"
+"这对于使其他节点éµå¾ªè·¯å¾„éžå¸¸æœ‰ç”¨ï¼Œè€Œæ— éœ€å¯¹è¿åŠ¨æ¨¡å¼è¿›è¡Œç¼–ç ã€‚为此,节点必须是"
+"该节点的å­èŠ‚ç‚¹ã€‚åœ¨æ­¤èŠ‚ç‚¹ä¸­è®¾ç½®åç§»é‡æ—¶ï¼Œå­ä»£èŠ‚ç‚¹å°†ç›¸åº”åœ°ç§»åŠ¨ã€‚"
#: doc/classes/PathFollow.xml:16
-#, fuzzy
msgid ""
"If [code]true[/code], the position between two cached points is interpolated "
"cubically, and linearly otherwise.\n"
@@ -49074,13 +49538,12 @@ msgid ""
"points and increase memory consumption, or make a cubic interpolation "
"between two points at the cost of (slightly) slower calculations."
msgstr ""
-"如果[code]true[/code],则两个缓存点之间的ä½ç½®å°†è¿›è¡Œä¸‰æ¬¡æ’值,å¦åˆ™å°†çº¿æ€§æ’"
-"值。\n"
-"沿ç€[Path3D]çš„[Curve3D]çš„ç‚¹åœ¨ä½¿ç”¨å‰æ˜¯é¢„先计算的,为了更快的计算。然åŽåœ¨ä¸¤ä¸ªç›¸"
-"邻的缓存点之间计算请求åç§»é‡çš„点。这å¯èƒ½ä¼šå‡ºçŽ°ä¸€ä¸ªé—®é¢˜ï¼Œå¦‚æžœæ›²çº¿åšæ€¥è½¬å¼¯ï¼Œå› "
-"为缓存点å¯èƒ½ä¸è·Ÿéšæ›²çº¿è¶³å¤Ÿè¿‘ã€‚\n"
-"æœ‰ä¸¤ç§æ–¹æ³•å¯ä»¥è§£å†³è¿™ä¸ªé—®é¢˜:è¦ä¹ˆå¢žåŠ ç¼“å­˜ç‚¹çš„æ•°é‡ï¼Œå¢žåŠ å†…å­˜æ¶ˆè€—ï¼Œè¦ä¹ˆåœ¨ä¸¤ä¸ªç‚¹ä¹‹"
-"间进行三次æ’值,但代价是(ç¨å¾®)é™ä½Žè®¡ç®—速度。"
+"如果[code]true[/code],两个缓存的点之间的ä½ç½®æ˜¯ç«‹æ–¹æ’值,å¦åˆ™æ˜¯çº¿æ€§æ’值。\n"
+"沿ç€[Path]çš„[Curve3D]的点在使用å‰è¢«é¢„计算,以加快计算。而åŽï¼Œåœ¨ç¡®å®šåç§»é‡ä¸Šçš„"
+"点会在两个相邻的缓存点之间进行æ’值计算。如果曲线有急转弯,这å¯èƒ½ä¼šäº§ç”Ÿä¸€ä¸ªé—®"
+"题,因为缓存的点å¯èƒ½ä¸ä¼šè¶³å¤Ÿç´§è·Ÿæ›²çº¿ã€‚\n"
+"这个问题有两个答案:è¦ä¹ˆå¢žåŠ ç¼“å­˜ç‚¹çš„æ•°é‡ï¼Œä»£ä»·æ˜¯å¢žåŠ å†…å­˜æ¶ˆè€—ï¼›è¦ä¹ˆåœ¨ä¸¤ä¸ªç‚¹ä¹‹"
+"间进行立方æ’å€¼ï¼Œä»£ä»·æ˜¯è®¡ç®—é€Ÿåº¦ç¨æ…¢ã€‚"
#: doc/classes/PathFollow.xml:21 doc/classes/PathFollow2D.xml:21
msgid "The node's offset along the curve."
@@ -49124,34 +49587,29 @@ msgid "The node's offset perpendicular to the curve."
msgstr "节点垂直于曲线的åç§»é‡ã€‚"
#: doc/classes/PathFollow.xml:41
-#, fuzzy
msgid "Forbids the PathFollow to rotate."
-msgstr "ç¦æ­¢PathFollow3D旋转。"
+msgstr "ç¦æ­¢ PathFollow 旋转。"
#: doc/classes/PathFollow.xml:44
-#, fuzzy
msgid "Allows the PathFollow to rotate in the Y axis only."
-msgstr "åªå…许PathFollow3D在Y轴上旋转。"
+msgstr "ä»…å…许 PathFollow 沿 Y 轴旋转。"
#: doc/classes/PathFollow.xml:47
-#, fuzzy
msgid "Allows the PathFollow to rotate in both the X, and Y axes."
-msgstr "å…许PathFollow3D在Xè½´å’ŒY轴上旋转。"
+msgstr "å…许 PathFollow 在 X å’Œ Y 轴上旋转。"
#: doc/classes/PathFollow.xml:50
-#, fuzzy
msgid "Allows the PathFollow to rotate in any axis."
-msgstr "å…许PathFollow3D在任何轴上旋转。"
+msgstr "å…许 PathFollow 在任æ„轴上旋转。"
#: doc/classes/PathFollow.xml:53
-#, fuzzy
msgid ""
"Uses the up vector information in a [Curve3D] to enforce orientation. This "
"rotation mode requires the [Path]'s [member Curve3D.up_vector_enabled] "
"property to be set to [code]true[/code]."
msgstr ""
-"使用[Curve3D]中的上å‘é‡ä¿¡æ¯æ¥åŠ å¼ºæ–¹å‘。这个旋转模å¼éœ€è¦[Path3D]çš„[member "
-"Curve3D。Up_vector_enabled属性设置为[code]true[/code]。"
+"使用 [Curve3D] 中的å‘上å‘é‡ä¿¡æ¯æ¥å¼ºåˆ¶å®šå‘。此旋转模å¼éœ€è¦å°† [Path] çš„ "
+"[member Curve3D.up_vector_enabled] 属性设置为 [code]true[/code]。"
#: doc/classes/PathFollow2D.xml:4
msgid "Point sampler for a [Path2D]."
@@ -49280,7 +49738,6 @@ msgid "Exposes performance-related data."
msgstr "公开与性能相关的数æ®ã€‚"
#: doc/classes/Performance.xml:7
-#, fuzzy
msgid ""
"This class provides access to a number of different monitors related to "
"performance, such as memory usage, draw calls, and FPS. These are the same "
@@ -49292,16 +49749,13 @@ msgid ""
"[b]Note:[/b] Many of these monitors are not updated in real-time, so there "
"may be a short delay between changes."
msgstr ""
-"这个类æä¾›äº†å¯¹ä¸€äº›ä¸Žæ€§èƒ½æœ‰å…³çš„ä¸åŒç›‘控的访问,比如内存使用é‡ã€ç»˜å›¾è°ƒç”¨å’ŒFPS。"
-"这些与编辑器的[b]Debugger[/b]颿¿ä¸­çš„[b]Monitor[/b]标签所显示的数值相åŒã€‚通过"
-"使用这个类的[method get_monitor]方法,你å¯ä»¥ä»Žä½ çš„代ç ä¸­è®¿é—®è¿™äº›æ•°æ®ã€‚\n"
-"ä½ å¯ä»¥ä½¿ç”¨[method add_custom_monitor]方法添加自定义监视器。自定义监视器å¯ä»¥åœ¨"
-"编辑器的[b]调试器[/b]颿¿çš„[b]监视器[/b]选项å¡ä¸­ä¸Žå†…置监视器一起使用。\n"
-"[b]注æ„:[/b] 其中一些监视器åªåœ¨è°ƒè¯•模å¼ä¸‹å¯ç”¨ï¼Œåœ¨å‘布版本中使用时将总是返回"
-"0。\n"
-"[b]注æ„:[/b] è¿™äº›ç›‘æŽ§å™¨ä¸­çš„è®¸å¤šéƒ½ä¸æ˜¯å®žæ—¶æ›´æ–°çš„,所以在å˜åŒ–之间å¯èƒ½ä¼šæœ‰çŸ­æš‚"
-"的延迟。\n"
-"[b]注æ„:[/b] è‡ªå®šä¹‰ç›‘è§†å™¨ä¸æ”¯æŒè´Ÿå€¼ã€‚负值被钳制为0。"
+"这个类æä¾›äº†å¯¹ä¸€äº›ä¸Žæ€§èƒ½æœ‰å…³çš„ä¸åŒç›‘控的访问,比如内存使用é‡ã€ç»˜åˆ¶è°ƒç”¨å’ŒFPS。"
+"这些与编辑器的[b]Monitor[/b]标签中的[b]Debugger[/b]颿¿æ‰€æ˜¾ç¤ºçš„æ•°å€¼ç›¸åŒã€‚通过"
+"使用这个类的[method get_monitor]方法,å¯ä»¥ä»Žä½ çš„代ç ä¸­è®¿é—®è¿™äº›æ•°æ®ã€‚\n"
+"[b]注æ„:[/b] 这些监视器中有几个åªåœ¨è°ƒè¯•模å¼ä¸‹å¯ç”¨ï¼Œå½“在å‘布版构建中使用时,将"
+"总是返回0。\n"
+"[b]注æ„:[/b] è¿™äº›ç›‘æŽ§å™¨ä¸­çš„è®¸å¤šä¸æ˜¯å®žæ—¶æ›´æ–°çš„,所以在å˜åŒ–之间å¯èƒ½ä¼šæœ‰çŸ­æš‚的延"
+"迟。"
#: doc/classes/Performance.xml:18
msgid ""
@@ -49336,19 +49790,17 @@ msgid ""
msgstr "当å‰ä½¿ç”¨çš„陿€å†…存,以字节为å•ä½ã€‚在å‘布版本中ä¸å¯ç”¨ã€‚"
#: doc/classes/Performance.xml:39
-#, fuzzy
msgid ""
"Dynamic memory currently used, in bytes. Not available in release builds."
-msgstr "当å‰ä½¿ç”¨çš„陿€å†…存,以字节为å•ä½ã€‚在å‘布版本中ä¸å¯ç”¨ã€‚"
+msgstr "当å‰ä½¿ç”¨çš„动æ€å†…存,以字节为å•ä½ã€‚在å‘布版本中ä¸å¯ç”¨ã€‚"
#: doc/classes/Performance.xml:42
msgid "Available static memory. Not available in release builds."
msgstr "å¯ç”¨çš„陿€å†…存。在å‘布版本中ä¸å¯ç”¨ã€‚"
#: doc/classes/Performance.xml:45
-#, fuzzy
msgid "Available dynamic memory. Not available in release builds."
-msgstr "å¯ç”¨çš„陿€å†…存。在å‘布版本中ä¸å¯ç”¨ã€‚"
+msgstr "å¯ç”¨çš„动æ€å†…存。在å‘布版本中ä¸å¯ç”¨ã€‚"
#: doc/classes/Performance.xml:48
msgid ""
@@ -49403,14 +49855,12 @@ msgid "Draw calls per frame. 3D only."
msgstr "æ¯ä¸€å¸§çš„绘图调用。仅é™3D。"
#: doc/classes/Performance.xml:81
-#, fuzzy
msgid "Items or joined items drawn per frame."
-msgstr "æ¯å¸§ç»˜åˆ¶3D对象的数é‡ã€‚"
+msgstr "æ¯å¸§ç»˜åˆ¶çš„项目或连接的项目。"
#: doc/classes/Performance.xml:84
-#, fuzzy
msgid "Draw calls per frame."
-msgstr "æ¯ä¸€å¸§çš„绘图调用。仅é™3D。"
+msgstr "æ¯å¸§ç»˜åˆ¶è°ƒç”¨ã€‚"
#: doc/classes/Performance.xml:87 doc/classes/VisualServer.xml:3696
msgid ""
@@ -49426,10 +49876,9 @@ msgid "The amount of vertex memory used."
msgstr "使用的顶点内存数é‡ã€‚"
#: doc/classes/Performance.xml:96 doc/classes/VisualServer.xml:3693
-#, fuzzy
msgid ""
"Unimplemented in the GLES2 and GLES3 rendering backends, always returns 0."
-msgstr "未在GLES2呈现åŽç«¯å®žçŽ°ï¼Œæ€»æ˜¯è¿”å›ž0。"
+msgstr "在 GLES2 å’Œ GLES3 渲染åŽç«¯ä¸­æœªå®žçŽ°ï¼Œå§‹ç»ˆè¿”å›ž 0。"
#: doc/classes/Performance.xml:99
msgid "Number of active [RigidBody2D] nodes in the game."
@@ -49444,9 +49893,8 @@ msgid "Number of islands in the 2D physics engine."
msgstr "2D物ç†å¼•擎中的岛屿数é‡ã€‚"
#: doc/classes/Performance.xml:108
-#, fuzzy
msgid "Number of active [RigidBody] and [VehicleBody] nodes in the game."
-msgstr "游æˆä¸­æ´»è·ƒçš„[RigidBody3D]å’Œ[VehicleBody3D]节点数é‡ã€‚"
+msgstr "游æˆä¸­æ´»åŠ¨çš„ [RigidBody] å’Œ [VehicleBody] 节点的数é‡ã€‚"
#: doc/classes/Performance.xml:111
msgid "Number of collision pairs in the 3D physics engine."
@@ -49481,21 +49929,19 @@ msgid ""
msgstr "从给定的[Translation]资æºç”Ÿæˆå¹¶è®¾ç½®ä¼˜åŒ–的翻译。"
#: doc/classes/Physics2DDirectBodyState.xml:4
-#, fuzzy
msgid "Direct access object to a physics body in the [Physics2DServer]."
-msgstr "在[PhysicsServer2D]中直接访问物ç†ä½“。"
+msgstr "直接访问 [Physics2DServer] 中物ç†ç‰©ä½“对象。"
#: doc/classes/Physics2DDirectBodyState.xml:7
-#, fuzzy
msgid ""
"Provides direct access to a physics body in the [Physics2DServer], allowing "
"safe changes to physics properties. This object is passed via the direct "
"state callback of rigid/character bodies, and is intended for changing the "
"direct state of that body. See [method RigidBody2D._integrate_forces]."
msgstr ""
-"æä¾›å¯¹[PhysicsServer2D]中的物ç†ä½“的直接访问,å…许安全地改å˜ç‰©ç†å±žæ€§ã€‚这个对象"
-"是通过刚性/字符体的直接状æ€å›žè°ƒä¼ é€’的,目的是为了改å˜è¯¥ä½“的直接状æ€ã€‚å‚阅"
-"[method RigidBody2D._integrate_forces]。"
+"æä¾›å¯¹ [Physics2DServer] 中物ç†ç‰©ä½“的直接访问,å…许安全更改物ç†å±žæ€§ã€‚该对象通"
+"过刚体/角色物体的直接状æ€å›žè°ƒä¼ é€’,从而直接改å˜è¯¥ç‰©ä½“的状æ€ã€‚å‚è§ [method "
+"RigidBody2D._integrate_forces]。"
#: doc/classes/Physics2DDirectBodyState.xml:11
#: doc/classes/Physics2DDirectSpaceState.xml:11
@@ -49504,7 +49950,8 @@ msgstr ""
#: doc/classes/RayCast2D.xml:14 doc/classes/World.xml:10
#: doc/classes/World2D.xml:10
msgid "https://docs.godotengine.org/en/3.4/tutorials/physics/ray-casting.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/physics/ray-casting.html"
+msgstr ""
+"https://docs.godotengine.org/zh_CN/stable/tutorials/physics/ray-casting.html"
#: doc/classes/Physics2DDirectBodyState.xml:18 doc/classes/RigidBody2D.xml:30
msgid "Adds a constant directional force without affecting rotation."
@@ -49570,14 +50017,13 @@ msgid "Returns the collider's shape index."
msgstr "返回碰撞体的形状索引。"
#: doc/classes/Physics2DDirectBodyState.xml:97
-#, fuzzy
msgid ""
"Returns the collided shape's metadata. This metadata is different from "
"[method Object.get_meta], and is set with [method Physics2DServer."
"shape_set_data]."
msgstr ""
-"返回碰撞形状的元数æ®ã€‚这个元数æ®ä¸Ž[method Object.get_meta]ä¸åŒï¼Œå®ƒæ˜¯ç”¨"
-"[method PhysicsServer2D.shape_set_data]设置的。"
+"返回碰撞形状的元数æ®ã€‚这个元数æ®ä¸åŒäºŽ[method Object.get_meta],是用[method "
+"Physics2DServer.shape_set_data]设置的。"
#: doc/classes/Physics2DDirectBodyState.xml:104
#: doc/classes/PhysicsDirectBodyState.xml:99
@@ -49590,9 +50036,9 @@ msgid ""
"[b]Note:[/b] By default, this returns 0 unless bodies are configured to "
"monitor contacts. See [member RigidBody2D.contact_monitor]."
msgstr ""
-"返回此实体与其他实体的è”系数。\n"
-"[b] 注æ„:[/b]默认情况下,除éžä¸»ä½“被设为监视è”系人,å¦åˆ™è¿”回0。请å‚阅 "
-"[member RigidBody2D.contact_monitor]。"
+"返回此物体与其他物体的接触次数。\n"
+"[b] 注æ„:[/b]默认情况下,除éžç‰©ä½“被设为监视接触者,å¦åˆ™è¿”回0。å‚阅 [member "
+"RigidBody2D.contact_monitor]。"
#: doc/classes/Physics2DDirectBodyState.xml:118
#: doc/classes/PhysicsDirectBodyState.xml:120
@@ -49619,7 +50065,7 @@ msgstr "返回空间的当å‰çжæ€ï¼Œè¿™å¯¹æŸ¥è¯¢å¾ˆæœ‰ç”¨ã€‚"
msgid ""
"Returns the body's velocity at the given relative position, including both "
"translation and rotation."
-msgstr ""
+msgstr "返回给定相对ä½ç½®çš„物体速度,包括平移和旋转。"
#: doc/classes/Physics2DDirectBodyState.xml:151
#: doc/classes/PhysicsDirectBodyState.xml:153
@@ -49678,21 +50124,19 @@ msgstr "ç‰©ä½“åœæ­¢è¿åŠ¨çš„é€ŸçŽ‡ï¼Œå¦‚æžœæ²¡æœ‰ä»»ä½•å…¶ä»–åŠ›ä½¿å®ƒè¿åŠ¨ã€‚
#: doc/classes/Physics2DDirectBodyState.xml:184
#: doc/classes/PhysicsDirectBodyState.xml:190
msgid "The body's transformation matrix."
-msgstr "èº«ä½“çš„å˜æ¢çŸ©é˜µã€‚"
+msgstr "ç‰©ä½“çš„å˜æ¢çŸ©é˜µã€‚"
#: doc/classes/Physics2DDirectSpaceState.xml:4
-#, fuzzy
msgid "Direct access object to a space in the [Physics2DServer]."
-msgstr "直接访问[PhysicsServer2D]中的一个空间。"
+msgstr "直接访问[Physics2DServer]中的空间的对象。"
#: doc/classes/Physics2DDirectSpaceState.xml:7
-#, fuzzy
msgid ""
"Direct access object to a space in the [Physics2DServer]. It's used mainly "
"to do queries against objects and areas residing in a given space."
msgstr ""
-"直接访问[PhysicsServer2D]中的一个空间。它主è¦ç”¨äºŽå¯¹ç»™å®šç©ºé—´ä¸­çš„对象和区域进行"
-"查询。"
+"直接访问[Physics2DServer]中的空间的对象。它主è¦ç”¨äºŽå¯¹ä½äºŽç»™å®šç©ºé—´ä¸­çš„对象和区"
+"域进行查询。"
#: doc/classes/Physics2DDirectSpaceState.xml:18
msgid ""
@@ -49708,9 +50152,15 @@ msgid ""
"inside of, will be ignored. Use [method collide_shape] to determine the "
"[Shape2D]s that the shape is already colliding with."
msgstr ""
+"检查 [Shape2D] å¯ä»¥ç§»åŠ¨å¤šè¿œè€Œä¸ä¼šå‘ç”Ÿç¢°æ’žã€‚æŸ¥è¯¢çš„æ‰€æœ‰å‚æ•°ï¼ŒåŒ…括形状和è¿åŠ¨ï¼Œéƒ½"
+"是通过 [Physics2DShapeQueryParameters] 对象æä¾›çš„。\n"
+"返回一个包å«è¿åŠ¨çš„å®‰å…¨å’Œä¸å®‰å…¨æ¯”例(0 到 1 之间)的数组。安全比例是在没有碰撞"
+"的情况下å¯ä»¥è¿›è¡Œçš„è¿åŠ¨çš„æœ€å¤§æ¯”ä¾‹ã€‚ä¸å®‰å…¨æ¯”例是碰撞必须移动的è·ç¦»çš„æœ€å°éƒ¨åˆ†ã€‚"
+"如果没有检测到碰撞,将返回 [code][1.0, 1.0][/code] 的结果。\n"
+"[b]注æ„:[/b] 任何已ç»ç¢°æ’žçš„[Shape2D](比如内部的)会被忽略。使用 [method "
+"collide_shape] 确定形状已ç»ç¢°æ’žçš„ [Shape2D]。"
#: doc/classes/Physics2DDirectSpaceState.xml:28
-#, fuzzy
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space. The resulting "
@@ -49718,12 +50168,11 @@ msgid ""
"with [method intersect_shape], the number of returned results can be limited "
"to save processing time."
msgstr ""
-"通过[PhysicsShapeQueryParameters2D]对象对空间检查形状的交集。生æˆçš„æ•°ç»„包å«ä¸€"
-"个与å¦ä¸€ä¸ªå½¢çŠ¶ç›¸äº¤çš„ç‚¹åˆ—è¡¨ã€‚ä¸Ž[method intersect_shape]一样,å¯ä»¥é™åˆ¶è¿”回结果"
-"的数é‡ï¼Œä»¥èŠ‚çœå¤„ç†æ—¶é—´ã€‚"
+"通过[Physics2DShapeQueryParameters]对象给出的形状与空间的检查交点。结果数组包"
+"å«ä¸€ä¸ªå½¢çŠ¶ä¸Žå¦ä¸€ä¸ªå½¢çŠ¶ç›¸äº¤çš„ç‚¹çš„åˆ—è¡¨ã€‚åƒ[method intersect_shape]一样,å¯ä»¥é™"
+"制返回结果的数é‡ä»¥èŠ‚çœå¤„ç†æ—¶é—´ã€‚"
#: doc/classes/Physics2DDirectSpaceState.xml:35
-#, fuzzy
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space. If it collides "
@@ -49743,20 +50192,20 @@ msgid ""
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape."
msgstr ""
-"检查通过[PhysicsShapeQueryParameters2D]对象给出的形状与空间的交点。如果它与一"
-"个以上的形状å‘生碰撞,则选择最近的一个。如果该形状没有与任何东西相交,那么将"
+"通过[Physics2DShapeQueryParameters]对象给出的形状与空间的检查交点。如果它与一"
+"个以上的形状å‘生碰撞,则选择最近的一个。如果该形状没有与任何对象相交,那么将"
"返回一个空字典。\n"
-"[b]注æ„:[/b] 这个方法ä¸è€ƒè™‘对象的[code]motion[/code]属性。返回的对象是一个包"
-"å«ä»¥ä¸‹å­—段的字典。\n"
-"[code]collider_id[/code]。碰撞对象的ID。\n"
-"[code]linear_velocity[/code]。碰撞对象的速度[Vector2]。如果对象是一个"
+"[b]注æ„:[/b] 这个方法ä¸è€ƒè™‘对象的[code]motion[/code]属性。返回的对象是包å«ä»¥"
+"下字段的字典。\n"
+"[code]collider_id[/code]:碰撞对象的ID。\n"
+"[code]linear_velocity[/code]:碰撞物体的速度[Vector2]。如果对象是一个"
"[Area2D],结果是[code](0, 0)[/code]。\n"
-"[code]metadata[/code]。相交的形状的元数æ®ã€‚这个元数æ®ä¸Ž[method Object."
-"get_meta]ä¸åŒï¼Œå®ƒæ˜¯ç”¨[method PhysicsServer2D.shape_set_data]设置的。\n"
-"[code]normal[/code]ã€‚ç‰©ä½“åœ¨äº¤ç‚¹å¤„çš„è¡¨é¢æ³•线。\n"
-"[code]point[/code]。相交点。\n"
-"[code]rid[/code]: 相交物体的[RID]。\n"
-"[code]shape[/code]: 碰撞形状的形状索引。"
+"[code]metadata[/code]:相交形状的元数æ®ã€‚这个元数æ®ä¸Ž[method Object.get_meta]"
+"ä¸åŒï¼Œå®ƒæ˜¯ç”¨[method Physics2DServer.shape_set_data]设置的。\n"
+"[code]normal[/code]:ç‰©ä½“åœ¨äº¤ç‚¹å¤„çš„è¡¨é¢æ³•线。\n"
+"[code]point[/code]:相交点。\n"
+"[code]rid[/code]:相交物体的[RID]。\n"
+"[code]shape[/code]:碰撞形状的形状索引。"
#: doc/classes/Physics2DDirectSpaceState.xml:55
#, fuzzy
@@ -49771,28 +50220,70 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+"检查一个点是å¦åœ¨ä»»æ„实体形状内。点所处的形状会以数组的形å¼è¿”å›žï¼Œè¯¥æ•°ç»„åŒ…å«æœ‰"
+"以下字段的字典:\n"
+"[code]collider[/code]:碰撞的对象。\n"
+"[code]collider_id[/code]:碰撞对象的ID。\n"
+"[code]metadata[/code]:相交形状的元数æ®ã€‚这个元数æ®ä¸Ž[method Object.get_meta]"
+"ä¸åŒï¼Œæ˜¯ç”¨[method Physics2DServer.shape_set_data]设置的。\n"
+"[code]rid[/code]:相交物体的[RID]。\n"
+"[code]shape[/code]:碰撞形状的形状索引。\n"
+"此外,该方法å¯ä»¥æŽ¥å—一个[code]exclude[/code]数组,该数组中的对象或[RID]将被排"
+"除在碰撞之外,[code]collision_mask[/code]使ީç è¡¨ç¤ºè¦æ£€æŸ¥çš„物ç†å±‚,或者布尔值"
+"æ¥ç¡®å®šå°„线是å¦åº”该分别与[PhysicsBody]或[Area]å‘生碰撞。\n"
+"[b]注æ„:[/b] [ConcavePolygonShape2D]å’Œ[CollisionPolygon2D]在[code]Segments[/"
+"code]构建模å¼ä¸­ä¸æ˜¯å®žä½“形状。因此,它们将ä¸ä¼šè¢«æ£€æµ‹åˆ°ã€‚"
+
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+#, fuzzy
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-"检查一个点是å¦åœ¨ä»»ä½•形状内。点所处的形状将以一个数组的形å¼è¿”å›žï¼Œè¯¥æ•°ç»„åŒ…å«æœ‰"
-"以下字段的字典。\n"
-"[code]collider[/code]。碰撞的对象。\n"
-"[code]collider_id[/code]。碰撞对象的ID。\n"
-"[code]metadata[/code]。相交形状的元数æ®ã€‚这个元数æ®ä¸Ž[method Object.get_meta]"
-"ä¸åŒï¼Œå¯ä»¥ç”¨[method PhysicsServer2D.shape_set_data]æ¥è®¾ç½®ã€‚\n"
-"[code]rid[/code]。相交物体的[RID]。\n"
-"[code]shape[/code]。碰撞形状的形状索引。\n"
+"检查一个点是å¦åœ¨ä»»æ„实体形状内。点所处的形状会以数组的形å¼è¿”å›žï¼Œè¯¥æ•°ç»„åŒ…å«æœ‰"
+"以下字段的字典:\n"
+"[code]collider[/code]:碰撞的对象。\n"
+"[code]collider_id[/code]:碰撞对象的ID。\n"
+"[code]metadata[/code]:相交形状的元数æ®ã€‚这个元数æ®ä¸Ž[method Object.get_meta]"
+"ä¸åŒï¼Œæ˜¯ç”¨[method Physics2DServer.shape_set_data]设置的。\n"
+"[code]rid[/code]:相交物体的[RID]。\n"
+"[code]shape[/code]:碰撞形状的形状索引。\n"
"此外,该方法å¯ä»¥æŽ¥å—一个[code]exclude[/code]数组,该数组中的对象或[RID]将被排"
-"除在碰撞之外,一个[code]collision_mask[/code]使ީç ä»£è¡¨è¦æ£€æŸ¥çš„物ç†å±‚,或者布"
-"尔值æ¥ç¡®å®šå°„线是å¦åº”该分别与[PhysicsBody2D]或[Area2D]碰撞。"
+"除在碰撞之外,[code]collision_mask[/code]使ީç è¡¨ç¤ºè¦æ£€æŸ¥çš„物ç†å±‚,或者布尔值"
+"æ¥ç¡®å®šå°„线是å¦åº”该分别与[PhysicsBody]或[Area]å‘生碰撞。\n"
+"[b]注æ„:[/b] [ConcavePolygonShape2D]å’Œ[CollisionPolygon2D]在[code]Segments[/"
+"code]构建模å¼ä¸­ä¸æ˜¯å®žä½“形状。因此,它们将ä¸ä¼šè¢«æ£€æµ‹åˆ°ã€‚"
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:96
#, fuzzy
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
@@ -49811,25 +50302,24 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-"在一个给定的空间中与一æ¡å°„线相交。返回的对象是一个具有下列字段的字典。\n"
-"[code]collider[/code]。碰撞的对象。\n"
-"[code]collider_id[/code]。碰撞对象的ID。\n"
-"[code]metadata[/code]。相交形状的元数æ®ã€‚这个元数æ®ä¸Ž[method Object.get_meta]"
-"ä¸åŒï¼Œå¯ä»¥ç”¨[method PhysicsServer2D.shape_set_data]æ¥è®¾ç½®ã€‚\n"
-"[code]normal[/code]ã€‚ç‰©ä½“åœ¨äº¤ç‚¹å¤„çš„è¡¨é¢æ³•线。\n"
-"[code]position[/code]: 交å‰ç‚¹ã€‚\n"
-"[code]rid[/code]: 相交对象的[RID]。\n"
-"[code]shape[/code]: 碰撞形状的形状索引。\n"
-"如果射线没有与任何物体相交,那么将返回一个空的字典。\n"
-"此外,该方法å¯ä»¥æŽ¥å—一个[code]exclude[/code]数组,该数组中的对象或[RID]将被排"
-"除在碰撞之外,一个[code]collision_mask[/code]使ީç ä»£è¡¨è¦æ£€æŸ¥çš„物ç†å±‚,或者布"
-"尔值æ¥ç¡®å®šå°„线是å¦åº”该分别与[PhysicsBody2D]或[Area2D]å‘生碰撞。"
+"在给定的空间中与一æ¡å°„线相交。返回的对象是具有下列字段的字典:\n"
+"[code]collider[/code]:碰撞的对象。\n"
+"[code]collider_id[/code]:碰撞对象的ID。\n"
+"[code]metadata[/code]:相交形状的元数æ®ã€‚这个元数æ®ä¸Ž[method Object.get_meta]"
+"ä¸åŒï¼Œå¯ä»¥ç”¨[method Physics2DServer.shape_set_data]æ¥è®¾ç½®ã€‚\n"
+"[code]normal[/code]:ç‰©ä½“åœ¨äº¤ç‚¹å¤„çš„è¡¨é¢æ³•线。\n"
+"[code]position[/code]:相交点。\n"
+"[code]rid[/code]:相交物体的[RID]。\n"
+"[code]形状[/code]:碰撞形状的形状索引。\n"
+"如果射线没有与任何物体相交,那么将返回空的字典。\n"
+"此外,该方法å¯ä»¥æŽ¥å—一个[code]exclude[/code]对象或[RID]数组,该数组将被排除在"
+"碰撞之外,[code]collision_mask[/code]使ީç è¡¨ç¤ºè¦æ£€æŸ¥çš„物ç†å±‚,或者布尔值æ¥ç¡®"
+"定射线是å¦åº”该分别与[PhysicsBody]或[Area]å‘生碰撞。"
-#: doc/classes/Physics2DDirectSpaceState.xml:103
-#, fuzzy
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -49846,29 +50336,28 @@ msgid ""
"The number of intersections can be limited with the [code]max_results[/code] "
"parameter, to reduce the processing time."
msgstr ""
-"检查通过[PhysicsShapeQueryParameters2D]对象给出的形状与空间的交点。\n"
-"[b]注æ„:[/b] 这个方法ä¸è€ƒè™‘对象的[code]motion[/code]属性。相交的形状会以一个"
-"数组的形å¼è¿”å›žï¼Œè¯¥æ•°ç»„åŒ…å«æœ‰ä»¥ä¸‹å­—段的字典。\n"
-"[code]collider[/code]。碰撞的对象。\n"
-"[code]collider_id[/code]。碰撞对象的ID。\n"
-"[code]metadata[/code]。相交形状的元数æ®ã€‚这个元数æ®ä¸Ž[method Object.get_meta]"
-"ä¸åŒï¼Œå¯ä»¥ç”¨[method PhysicsServer2D.shape_set_data]æ¥è®¾ç½®ã€‚\n"
-"[code]rid[/code]。相交物体的[RID]。\n"
-"[code]shape[/code]。碰撞形状的形状索引。\n"
+"通过[Physics2DShapeQueryParameters]对象给出的形状与空间的检查交点。\n"
+"[b]注æ„:[/b] 这个方法ä¸è€ƒè™‘对象的[code]motion[/code]属性。相交的形状会以数组"
+"的形å¼è¿”å›žï¼Œè¯¥æ•°ç»„åŒ…å«æœ‰ä»¥ä¸‹å­—段的字典:\n"
+"[code]collider[/code]:碰撞的对象。\n"
+"[code]collider_id[/code]:碰撞对象的ID。\n"
+"[code]metadata[/code]:相交形状的元数æ®ã€‚这个元数æ®ä¸Ž[method Object.get_meta]"
+"ä¸åŒï¼Œæ˜¯ç”¨[method Physics2DServer.shape_set_data]设置的。\n"
+"[code]rid[/code]:相交物体的[RID]。\n"
+"[code]shape[/code]:碰撞形状的形状索引。\n"
"å¯ä»¥ç”¨[code]max_results[/code]傿•°é™åˆ¶ç›¸äº¤çš„æ•°é‡ï¼Œä»¥å‡å°‘å¤„ç†æ—¶é—´ã€‚"
#: doc/classes/Physics2DServer.xml:4
msgid "Server interface for low-level 2D physics access."
-msgstr "用于底层2D物ç†å­¦è®¿é—®çš„æœåŠ¡å™¨æŽ¥å£ã€‚"
+msgstr "用于底层2D物ç†è®¿é—®æœåŠ¡çš„æŽ¥å£ã€‚"
#: doc/classes/Physics2DServer.xml:7
-#, fuzzy
msgid ""
"Physics2DServer is the server responsible for all 2D physics. It can create "
"many kinds of physics objects, but does not insert them on the node tree."
msgstr ""
-"PhysicsServer2D是负责所有2D物ç†çš„æœåŠ¡å™¨ã€‚å®ƒå¯ä»¥åˆ›å»ºå¤šç§ç‰©ç†å¯¹è±¡ï¼Œä½†ä¸ä¼šå°†å®ƒä»¬"
-"æ’入节点树。"
+"Physics2DServer 是负责所有 2D 物ç†çš„æœåŠ¡ã€‚å®ƒå¯ä»¥åˆ›å»ºå¤šç§ç‰©ç†å¯¹è±¡ï¼Œä½†ä¸ä¼šå°†å®ƒ"
+"们æ’入到节点树中。"
#: doc/classes/Physics2DServer.xml:19 doc/classes/PhysicsServer.xml:19
msgid ""
@@ -49897,6 +50386,8 @@ msgid ""
"to a space using [method area_set_space] to use the created [Area2D] in the "
"physics world."
msgstr ""
+"创建一个 [Area2D]。用这个方法创建了一个[Area2D]åŽï¼Œä½¿ç”¨[method "
+"area_set_space]将其分é…给一个空间,以便在物ç†ä¸–界中使用创建的[Area2D]。"
#: doc/classes/Physics2DServer.xml:60 doc/classes/Physics2DServer.xml:372
#: doc/classes/PhysicsServer.xml:47 doc/classes/PhysicsServer.xml:362
@@ -50017,15 +50508,15 @@ msgid ""
"two are forces, the impulse clears itself after being applied."
msgstr ""
"在施加的力和扭矩上添加一个有作用点的力。与[method body_apply_impulse]一样,力"
-"和物体原点的åç§»é‡éƒ½åœ¨å…¨å±€å标中。力与脉冲的ä¸åŒä¹‹å¤„在于,虽然两者都是力,但"
-"脉冲在被施加åŽä¼šè‡ªåŠ¨æ¸…é™¤ã€‚"
+"和物体原点的åç§»é‡éƒ½åœ¨å…¨å±€å标中。力与冲é‡çš„ä¸åŒä¹‹å¤„在于,虽然两者都是力,但"
+"冲é‡åœ¨è¢«æ–½åŠ åŽä¼šè‡ªåŠ¨æ¸…é™¤ã€‚"
#: doc/classes/Physics2DServer.xml:259 doc/classes/PhysicsServer.xml:259
msgid ""
"Adds a shape to the body, along with a transform matrix. Shapes are usually "
"referenced by their index, so you should track which shape has a given index."
msgstr ""
-"添加一个形状到身体,以åŠä¸€ä¸ªå˜æ¢çŸ©é˜µã€‚形状通常通过它们的索引æ¥å¼•用,因此您应"
+"添加一个形状到物体,以åŠä¸€ä¸ªå˜æ¢çŸ©é˜µã€‚形状通常通过它们的索引æ¥å¼•用,因此您应"
"该跟踪哪个形状具有给定的索引。"
#: doc/classes/Physics2DServer.xml:282
@@ -50057,15 +50548,16 @@ msgid "Returns the continuous collision detection mode."
msgstr "返回连续碰撞检测模å¼ã€‚"
#: doc/classes/Physics2DServer.xml:351
-#, fuzzy
-msgid "Returns the [Physics2DDirectBodyState] of the body."
-msgstr "返回body的[PhysicsDirectBodyState2D]。"
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
+msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
msgid ""
"Returns the maximum contacts that can be reported. See [method "
"body_set_max_contacts_reported]."
-msgstr "è¿”å›žå¯æŠ¥å‘Šçš„æœ€å¤§è”系数。å‚阅[method body_set_max_contacts_reported]。"
+msgstr "è¿”å›žå¯æŠ¥å‘Šçš„æœ€å¤§æŽ¥è§¦æ•°ã€‚å‚阅[method body_set_max_contacts_reported]。"
#: doc/classes/Physics2DServer.xml:365 doc/classes/PhysicsServer.xml:355
msgid "Returns the body mode."
@@ -50153,8 +50645,8 @@ msgid ""
"Sets the function used to calculate physics for an object, if that object "
"allows it (see [method body_set_omit_force_integration])."
msgstr ""
-"设置用于计算物体物ç†å­¦çš„函数,如果该物体å…许的è¯ï¼ˆè§[method "
-"body_set_omit_force_integration])。"
+"设置用于物体物ç†è¿ç®—的函数,如果该物体å…许的è¯ï¼Œå‚阅[method "
+"body_set_omit_force_integration]。"
#: doc/classes/Physics2DServer.xml:500 doc/classes/PhysicsServer.xml:519
msgid ""
@@ -50223,19 +50715,19 @@ msgid ""
"Note that the method doesn't take effect immediately. The state will change "
"on the next physics frame."
msgstr ""
+"使用 [enum BodyState] 常é‡ä¹‹ä¸€è®¾ç½®ç‰©ä½“状æ€ã€‚\n"
+"请注æ„,该方法ä¸ä¼šç«‹å³ç”Ÿæ•ˆã€‚状æ€å°†åœ¨ä¸‹ä¸€ä¸ªç‰©ç†å¸§å‘生å˜åŒ–。"
#: doc/classes/Physics2DServer.xml:603
-#, fuzzy
msgid ""
"Returns [code]true[/code] if a collision would result from moving in the "
"given direction from a given point in space. Margin increases the size of "
"the shapes involved in the collision detection. [Physics2DTestMotionResult] "
"can be passed to return additional information in."
msgstr ""
-"如果从空间中的给定点å‘给定方å‘移动会导致碰撞,则返回[code]true[/code]。Margin"
-"增加å‚与碰撞检测的形状的大å°ã€‚å¯ä»¥é€šè¿‡[PhysicsTestMotionResult2D]æ¥è¿”回é¢å¤–çš„"
-"ä¿¡æ¯ã€‚设置体中形状的元数æ®ã€‚这个元数æ®ä¸Ž[方法Object.set_meta]ä¸åŒï¼Œå¯ä»¥åœ¨å½¢çж"
-"查询中检索到。"
+"如果从空间中的给定点沿给定方å‘移动会导致碰撞,则返回 [code]true[/code]。边è·"
+"增加了碰撞检测中涉åŠçš„形状的大å°ã€‚ 通过返回[Physics2DTestMotionResult] å¯ä»¥é™„"
+"加信æ¯ã€‚"
#: doc/classes/Physics2DServer.xml:633
msgid ""
@@ -50245,27 +50737,23 @@ msgstr ""
"在两个体之间创建一个阻尼弹簧关节。如果没有指定,第二个体将被å‡å®šä¸ºå…³èŠ‚æœ¬èº«ã€‚"
#: doc/classes/Physics2DServer.xml:641
-#, fuzzy
msgid "Returns the value of a damped spring joint parameter."
-msgstr "è¿”å›žå…³èŠ‚å‚æ•°çš„值。"
+msgstr "è¿”å›žé˜»å°¼å¼¹ç°§å…³èŠ‚å‚æ•°å€¼ã€‚"
#: doc/classes/Physics2DServer.xml:650
-#, fuzzy
msgid ""
"Sets a damped spring joint parameter. See [enum DampedStringParam] for a "
"list of available parameters."
-msgstr ""
-"è®¾ç½®ä¸€ä¸ªé˜»å°¼å¼¹ç°§å…³èŠ‚å‚æ•°ã€‚å‚阅[enum DampedSpringParam]获å–å¯ç”¨å‚数列表。"
+msgstr "è®¾ç½®é˜»å°¼å¼¹ç°§å…³èŠ‚å‚æ•°ã€‚å‚阅[enum DampedStringParam]获å–å¯ç”¨å‚数的列表。"
#: doc/classes/Physics2DServer.xml:657
-#, fuzzy
msgid ""
"Destroys any of the objects created by Physics2DServer. If the [RID] passed "
"is not one of the objects that can be created by Physics2DServer, an error "
"will be sent to the console."
msgstr ""
-"销æ¯ä»»ä½•ç”±PhysicsServer2D创建的对象。如果传入的[RID]䏿˜¯PhysicsServer2Då¯ä»¥åˆ›"
-"å»ºçš„å¯¹è±¡ä¹‹ä¸€ï¼Œåˆ™ä¼šå‘æŽ§åˆ¶å°å‘é€ä¸€ä¸ªé”™è¯¯ã€‚"
+"销æ¯ç”± Physics2DServer 创建的任何对象。如果传递的 [RID] 䏿˜¯ Physics2DServer "
+"å¯ä»¥åˆ›å»ºçš„å¯¹è±¡ä¹‹ä¸€ï¼Œåˆ™ä¼šå‘æŽ§åˆ¶å°å‘é€é”™è¯¯ã€‚"
#: doc/classes/Physics2DServer.xml:664
msgid ""
@@ -50314,6 +50802,8 @@ msgid ""
"CPU power, which can decrease performance. The default value is [code]8[/"
"code]."
msgstr ""
+"设置计算碰撞体速度的迭代次数。迭代次数越多,碰撞就越准确。但是,更大é‡çš„迭代"
+"éœ€è¦æ›´å¤šçš„ CPU 能力,这会é™ä½Žæ€§èƒ½ã€‚默认值为 [code]8[/code]。"
#: doc/classes/Physics2DServer.xml:749 doc/classes/PhysicsServer.xml:859
msgid "Returns the shape data."
@@ -50342,13 +50832,11 @@ msgstr ""
"一个主体。"
#: doc/classes/Physics2DServer.xml:777
-#, fuzzy
msgid ""
"Returns the state of a space, a [Physics2DDirectSpaceState]. This object can "
"be used to make collision/intersection queries."
msgstr ""
-"返回一个空间的状æ€ï¼Œä¸€ä¸ª[PhysicsDirectSpaceState2D]。这个对象å¯ä»¥ç”¨æ¥è¿›è¡Œç¢°"
-"撞/交集查询。"
+"返回空间的状æ€ï¼Œ[Physics2DDirectSpaceState]。此对象å¯ç”¨äºŽè¿›è¡Œç¢°æ’ž/相交查询。"
#: doc/classes/Physics2DServer.xml:785 doc/classes/PhysicsServer.xml:912
msgid "Returns the value of a space parameter."
@@ -50550,8 +51038,8 @@ msgid ""
"far. This way, many overlapping areas can combine their physics to make "
"interesting effects."
msgstr ""
-"这个区域把它的é‡åŠ›/阻尼加到迄今为止已ç»è®¡ç®—过的任何东西上。这样一æ¥ï¼Œè®¸å¤šé‡å "
-"的区域å¯ä»¥ç»“åˆå®ƒä»¬çš„物ç†å­¦æ¥åšå‡ºæœ‰è¶£çš„æ•ˆæžœã€‚"
+"此区域把它的é‡åŠ›/阻尼加到目å‰å·²ç»è®¡ç®—过的对象上。这样一æ¥ï¼Œè®¸å¤šé‡å çš„区域å¯ä»¥"
+"结åˆå®ƒä»¬çš„物ç†è¿ç®—æ¥äº§ç”Ÿæœ‰è¶£çš„æ•ˆæžœã€‚"
#: doc/classes/Physics2DServer.xml:892 doc/classes/PhysicsServer.xml:1206
msgid ""
@@ -50593,7 +51081,7 @@ msgid ""
"Constant for rigid bodies in character mode. In this mode, a body can not "
"rotate, and only its linear velocity is affected by physics."
msgstr ""
-"角色模å¼ä¸‹çš„åˆšä½“çš„å¸¸æ•°ã€‚åœ¨è¿™ç§æ¨¡å¼ä¸‹ï¼Œç‰©ä½“ä¸èƒ½æ—‹è½¬ï¼Œåªæœ‰å®ƒçš„线速度å—物ç†å­¦å½±"
+"角色模å¼ä¸‹åˆšä½“çš„å¸¸æ•°ã€‚åœ¨è¿™ç§æ¨¡å¼ä¸‹ï¼Œç‰©ä½“ä¸èƒ½æ—‹è½¬ï¼Œåªæœ‰å®ƒçš„线速度å—物ç†è¿ç®—å½±"
"å“。"
#: doc/classes/Physics2DServer.xml:913 doc/classes/PhysicsServer.xml:1227
@@ -50646,7 +51134,7 @@ msgstr "常数,用于使物体沉ç¡/唤醒,或得到它是å¦åœ¨æ²‰ç¡ã€‚"
#: doc/classes/Physics2DServer.xml:949 doc/classes/PhysicsServer.xml:1260
msgid "Constant to set/get whether the body can sleep."
-msgstr "常数,用于设置/获å–身体是å¦å¯ä»¥æ²‰ç¡ã€‚"
+msgstr "常é‡ï¼Œç”¨äºŽè®¾ç½®/获å–物体是å¦å¯ä»¥ä¼‘眠。"
#: doc/classes/Physics2DServer.xml:952
msgid "Constant to create pin joints."
@@ -50731,21 +51219,15 @@ msgid "Parameters to be sent to a 2D shape physics query."
msgstr "è¦å‘é€åˆ°2Då½¢çŠ¶ç‰©ç†æŸ¥è¯¢çš„傿•°ã€‚"
#: doc/classes/Physics2DShapeQueryParameters.xml:7
-#, fuzzy
msgid ""
"This class contains the shape and other parameters for 2D intersection/"
"collision queries."
-msgstr ""
-"这个类包å«äºŒç»´äº¤é›†/ç¢°æ’žæŸ¥è¯¢çš„å½¢çŠ¶å’Œå…¶ä»–å‚æ•°ã€‚å‚阅"
-"[PhysicsShapeQueryResult2D]。"
+msgstr "此类包å«ç”¨äºŽ 2D 相交/ç¢°æ’žæŸ¥è¯¢çš„å½¢çŠ¶å’Œå…¶ä»–å‚æ•°ã€‚"
#: doc/classes/Physics2DShapeQueryParameters.xml:16
-#, fuzzy
msgid ""
"Sets the [Shape2D] that will be used for collision/intersection queries."
-msgstr ""
-"返回一个空间的状æ€ï¼Œä¸€ä¸ª[PhysicsDirectSpaceState2D]。这个对象å¯ä»¥ç”¨æ¥è¿›è¡Œç¢°"
-"撞/交集查询。"
+msgstr "设置用于碰撞/相交查询的 [Shape2D]。"
#: doc/classes/Physics2DShapeQueryParameters.xml:22
msgid "If [code]true[/code], the query will take [Area2D]s into account."
@@ -50764,6 +51246,9 @@ msgid ""
"physics_introduction.html#collision-layers-and-masks]Collision layers and "
"masks[/url] in the documentation for more information."
msgstr ""
+"查询将考虑的物ç†å±‚ï¼ˆä½œä¸ºä½æŽ©ç ï¼‰ã€‚有关更多信æ¯ï¼Œè¯·å‚阅文档中的 [url=https://"
+"docs.godotengine.org/zh_CN/stable/tutorials/physics/physics_introduction."
+"html#collision-layers-and-masks]碰撞层和掩ç [/url]。"
#: doc/classes/Physics2DShapeQueryParameters.xml:31
#: doc/classes/PhysicsShapeQueryParameters.xml:31
@@ -50783,7 +51268,7 @@ msgstr "正在查询的形状的è¿åŠ¨ã€‚"
#: doc/classes/Physics2DShapeQueryParameters.xml:40
#: doc/classes/PhysicsShapeQueryParameters.xml:37
msgid "The queried shape's [RID]. See also [method set_shape]."
-msgstr ""
+msgstr "查询形状的 [RID]。å¦è§[method set_shape]。"
#: doc/classes/Physics2DShapeQueryParameters.xml:43
#: doc/classes/PhysicsShapeQueryParameters.xml:40
@@ -50795,11 +51280,10 @@ msgid "Base class for all objects affected by physics in 3D space."
msgstr "在3D空间中å—物ç†å½±å“的所有对象的基类。"
#: doc/classes/PhysicsBody.xml:7
-#, fuzzy
msgid ""
"PhysicsBody is an abstract base class for implementing a physics body. All "
"*Body types inherit from it."
-msgstr "PhysicsBody3D是一个实现物ç†ä½“的抽象基类。所有*Body类型都继承自它。"
+msgstr "PhysicsBody 是用于实现物ç†ä½“的抽象基类。所有 *Body 类型都继承自它。"
#: doc/classes/PhysicsBody.xml:17 doc/classes/PhysicsBody2D.xml:17
#: doc/classes/SoftBody.xml:17
@@ -50831,31 +51315,25 @@ msgstr ""
"PhysicsBody2D是一个用于实现物ç†å®žä½“的抽象基类。所有*Body2D类型都继承自它。"
#: doc/classes/PhysicsBody2D.xml:37
-#, fuzzy
msgid ""
"Both collision_layer and collision_mask. Returns collision_layer when "
"accessed. Updates collision_layer and collision_mask when modified."
-msgstr ""
-"[member collision_layer]和[member collision_mask]。当访问时返回[member "
-"collision_layer]ã€‚ä¿®æ”¹åŽæ›´æ–°[member collision_layer]å’Œ[member "
-"collision_mask]。"
+msgstr "碰撞层和碰撞掩ç ã€‚访问时返回碰撞层。修改时更新碰撞层和碰撞掩ç ã€‚"
#: doc/classes/PhysicsDirectBodyState.xml:4
-#, fuzzy
msgid "Direct access object to a physics body in the [PhysicsServer]."
-msgstr "在[PhysicsServer2D]中直接访问物ç†ä½“。"
+msgstr "直接访问[PhysicsServer]中的物ç†ä½“的对象。"
#: doc/classes/PhysicsDirectBodyState.xml:7
-#, fuzzy
msgid ""
"Provides direct access to a physics body in the [PhysicsServer], allowing "
"safe changes to physics properties. This object is passed via the direct "
"state callback of rigid/character bodies, and is intended for changing the "
"direct state of that body. See [method RigidBody._integrate_forces]."
msgstr ""
-"æä¾›å¯¹[PhysicsServer2D]中的物ç†ä½“的直接访问,å…许安全地改å˜ç‰©ç†å±žæ€§ã€‚这个对象"
-"是通过刚性/字符体的直接状æ€å›žè°ƒä¼ é€’的,目的是为了改å˜è¯¥ä½“的直接状æ€ã€‚å‚阅"
-"[method RigidBody2D._integrate_forces]。"
+"æä¾›å¯¹ [PhysicsServer] 中物ç†å®žä½“的直接访问,å…许安全更改物ç†å±žæ€§ã€‚该对象通过"
+"刚体/角色物体的直接状æ€å›žè°ƒä¼ é€’,直接改å˜è¯¥ç‰©ä½“的状æ€ã€‚å‚阅 [method "
+"RigidBody._integrate_forces]。"
#: doc/classes/PhysicsDirectBodyState.xml:18
msgid ""
@@ -50885,9 +51363,9 @@ msgid ""
"position uses the rotation of the global coordinate system, but is centered "
"at the object's origin."
msgstr ""
-"对物体施加一个有作用点的冲é‡ã€‚冲釿˜¯æ—¶é—´æ— å…³çš„! 在æ¯ä¸€å¸§ä¸­æ–½åŠ ä¸€ä¸ªè„‰å†²å°†äº§ç”Ÿ"
-"一个与帧速率相关的力。出于这个原因,它应该åªåœ¨æ¨¡æ‹Ÿä¸€æ¬¡æ€§å†²å‡»æ—¶ä½¿ç”¨ã€‚该ä½ç½®ä½¿"
-"ç”¨å…¨å±€åæ ‡ç³»çš„æ—‹è½¬ï¼Œä½†ä»¥ç‰©ä½“的原点为中心。"
+"对物体施加一个有作用点的冲é‡ã€‚冲釿˜¯æ—¶é—´æ— å…³çš„! 在æ¯ä¸€å¸§ä¸­æ–½åР冲é‡å°†äº§ç”Ÿä¸€ä¸ª"
+"与帧速率相关的力。出于这个原因,它应该åªåœ¨æ¨¡æ‹Ÿä¸€æ¬¡æ€§å†²å‡»æ—¶ä½¿ç”¨ã€‚该ä½ç½®ä½¿ç”¨å…¨"
+"局忠‡ç³»çš„æ—‹è½¬ï¼Œä½†ä»¥ç‰©ä½“的原点为中心。"
#: doc/classes/PhysicsDirectBodyState.xml:57
msgid ""
@@ -50903,33 +51381,30 @@ msgid "Returns the collider object."
msgstr "返回碰撞对象。"
#: doc/classes/PhysicsDirectBodyState.xml:105
-#, fuzzy
msgid ""
"Returns the number of contacts this body has with other bodies.\n"
"[b]Note:[/b] By default, this returns 0 unless bodies are configured to "
"monitor contacts. See [member RigidBody.contact_monitor]."
msgstr ""
-"返回此实体与其他实体的è”系数。\n"
-"[b] 注æ„:[/b]默认情况下,除éžä¸»ä½“被设为监视è”系人,å¦åˆ™è¿”回0。请å‚阅 "
-"[member RigidBody2D.contact_monitor]。"
+"返回此物体与其他物体的接触次数。\n"
+"[b] 注æ„:[/b]默认情况下,除éžç‰©ä½“被设为监视接触者,å¦åˆ™è¿”回0。å‚阅 [member "
+"RigidBody2D.contact_monitor]。"
#: doc/classes/PhysicsDirectBodyState.xml:113
msgid "Impulse created by the contact. Only implemented for Bullet physics."
msgstr "由接触产生的冲é‡ã€‚仅适用于å­å¼¹ç‰©ç†ã€‚"
#: doc/classes/PhysicsDirectSpaceState.xml:4
-#, fuzzy
msgid "Direct access object to a space in the [PhysicsServer]."
-msgstr "直接访问[PhysicsServer2D]中的一个空间。"
+msgstr "直接访问[PhysicsServer]中空间的对象。"
#: doc/classes/PhysicsDirectSpaceState.xml:7
-#, fuzzy
msgid ""
"Direct access object to a space in the [PhysicsServer]. It's used mainly to "
"do queries against objects and areas residing in a given space."
msgstr ""
-"直接访问[PhysicsServer2D]中的一个空间。它主è¦ç”¨äºŽå¯¹ç»™å®šç©ºé—´ä¸­çš„对象和区域进行"
-"查询。"
+"直接访问[PhysicsServer]中空间的对象。它主è¦ç”¨äºŽå¯¹é©»ç•™åœ¨ç‰¹å®šç©ºé—´çš„对象和区域进"
+"行查询。"
#: doc/classes/PhysicsDirectSpaceState.xml:19
msgid ""
@@ -50945,9 +51420,15 @@ msgid ""
"inside of, will be ignored. Use [method collide_shape] to determine the "
"[Shape]s that the shape is already colliding with."
msgstr ""
+"检查 [Shape] å¯ä»¥ç§»åŠ¨å¤šè¿œè€Œä¸ä¼šå‘ç”Ÿç¢°æ’žã€‚æŸ¥è¯¢çš„æ‰€æœ‰å‚æ•°ï¼ŒåŒ…括形状,都是通过 "
+"[PhysicsShapeQueryParameters] 对象æä¾›çš„。\n"
+"返回一个包å«è¿åŠ¨çš„å®‰å…¨å’Œä¸å®‰å…¨æ¯”例(0 到 1 之间)的数组。安全比例是在没有碰撞"
+"的情况下å¯ä»¥è¿›è¡Œçš„è¿åŠ¨çš„æœ€å¤§æ¯”ä¾‹ã€‚ä¸å®‰å…¨æ¯”例是碰撞必须移动的è·ç¦»çš„æœ€å°éƒ¨åˆ†ã€‚"
+"如果未检测到碰撞,将返回 [code][1.0, 1.0][/code] 的结果。\n"
+"[b]注æ„:[/b] 任何已ç»ç¢°æ’žçš„[Shape2D](比如内部的)会被忽略。使用 [method "
+"collide_shape] 确定形状已ç»ç¢°æ’žçš„ [Shape]。"
#: doc/classes/PhysicsDirectSpaceState.xml:29
-#, fuzzy
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The resulting array "
@@ -50955,12 +51436,11 @@ msgid ""
"[method intersect_shape], the number of returned results can be limited to "
"save processing time."
msgstr ""
-"通过[PhysicsShapeQueryParameters2D]对象对空间检查形状的交集。生æˆçš„æ•°ç»„包å«ä¸€"
-"个与å¦ä¸€ä¸ªå½¢çŠ¶ç›¸äº¤çš„ç‚¹åˆ—è¡¨ã€‚ä¸Ž[method intersect_shape]一样,å¯ä»¥é™åˆ¶è¿”回结果"
-"的数é‡ï¼Œä»¥èŠ‚çœå¤„ç†æ—¶é—´ã€‚"
+"通过[PhysicsShapeQueryParameters]对象给出的形状与空间检查交点。结果数组包å«ä¸€"
+"个形状与å¦ä¸€ä¸ªå½¢çŠ¶ç›¸äº¤çš„ç‚¹çš„åˆ—è¡¨ã€‚ä¸Ž[method intersect_shape]一样,å¯ä»¥é™åˆ¶è¿”"
+"回结果的数é‡ï¼Œä»¥èŠ‚çœå¤„ç†æ—¶é—´ã€‚"
#: doc/classes/PhysicsDirectSpaceState.xml:36
-#, fuzzy
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. If it collides with "
@@ -50976,20 +51456,49 @@ msgid ""
"If the shape did not intersect anything, then an empty dictionary is "
"returned instead."
msgstr ""
-"检查形状的交å‰ç‚¹ï¼Œé€šè¿‡[PhysicsShapeQueryParameters3D]对象,针对空间。如果它与"
-"多个形状碰撞,则选择最近的一个。返回的对象是一个包å«ä»¥ä¸‹å­—段的字典:\n"
+"检查通过[PhysicsShapeQueryParameters]对象给出的形状与空间的交点。如果它与一个"
+"以上的形状å‘生碰撞,则选择最近的。返回的对象是包å«ä»¥ä¸‹å­—段的字典:\n"
"[code]collider_id[/code]:碰撞对象的ID。\n"
-"[code]linear_velocity[/code]:碰撞对象的速度[Vector3]。如果对象是一个"
-"[Area3D],结果是[code](0,0,0)[/code]。\n"
+"[code]linear_velocity[/code]:碰撞对象的速度[Vector3]。如果对象是一个[Area],"
+"结果是[code](0, 0, 0)[/code]。\n"
"[code]normal[/code]:ç‰©ä½“åœ¨äº¤ç‚¹å¤„çš„è¡¨é¢æ³•线。\n"
-"[code]point[/code]:交点。\n"
-"[code]rid[/code]:相交对象的[rid]。\n"
-"[code]shape[/code]:碰撞形状的形状指数。\n"
-"如果形状没有与任何东西相交,则返回一个空字典。"
+"[code]点[/code]:相交点。\n"
+"[code]rid[/code]:相交物体的[RID]。\n"
+"[code]shape[/code]:碰撞形状的形状索引。\n"
+"如果该形状没有与任何物体相交,那么将返回空的字典。"
#: doc/classes/PhysicsDirectSpaceState.xml:55
#, fuzzy
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+"在给定的空间中与一æ¡å°„线相交。返回的对象是具有下列字段的字典:\n"
+"[code]collider[/code]:碰撞的对象。\n"
+"[code]collider_id[/code]:碰撞对象的ID。\n"
+"[code]normal[/code]:ç‰©ä½“åœ¨ç›¸äº¤ç‚¹çš„è¡¨é¢æ³•线。\n"
+"[code]position[/code]:交å‰ç‚¹ã€‚\n"
+"[code]rid[/code]:相交物体的[RID]。\n"
+"[code]形状[/code]:碰撞形状的形状索引。\n"
+"如果射线没有与任何物体相交,那么将返回空的字典。\n"
+"此外,该方法å¯ä»¥æŽ¥å—一个[code]exclude[/code]对象或[RID]数组,该数组将被排除在"
+"碰撞之外,[code]collision_mask[/code]使ީç è¡¨ç¤ºè¦æ£€æŸ¥çš„物ç†å±‚,或者布尔值æ¥ç¡®"
+"定射线是å¦åº”该分别与[PhysicsBody]或[Area]å‘生碰撞。"
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -51006,20 +51515,19 @@ msgid ""
"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
"respectively."
msgstr ""
-"在一个给定的空间中与一æ¡å°„线相交。返回的对象是一个具有下列字段的字典。\n"
-"[code]collider[/code]。碰撞的对象。\n"
-"[code]collider_id[/code]。碰撞对象的ID。\n"
-"[code]normal[/code]: å¯¹è±¡åœ¨äº¤æ±‡ç‚¹çš„è¡¨é¢æ³•线。\n"
-"[code]position[/code](ä½ç½®ï¼‰ã€‚交å‰ç‚¹ã€‚\n"
-"[code]rid[/code]: 相交对象的[RID]。\n"
-"[code]shape[/code]: 碰撞形状的形状索引。\n"
-"如果射线没有与任何物体相交,那么将返回一个空的字典。\n"
-"此外,该方法å¯ä»¥æŽ¥å—一个[code]exclude[/code]数组,该数组中的对象或[RID]将被排"
-"除在碰撞之外,一个[code]collision_mask[/code]使ީç ä»£è¡¨è¦æ£€æŸ¥çš„物ç†å±‚,或者布"
-"尔值æ¥ç¡®å®šå°„线是å¦åº”该分别与[PhysicsBody3D]或[Area3D]å‘生碰撞。"
+"在给定的空间中与一æ¡å°„线相交。返回的对象是具有下列字段的字典:\n"
+"[code]collider[/code]:碰撞的对象。\n"
+"[code]collider_id[/code]:碰撞对象的ID。\n"
+"[code]normal[/code]:ç‰©ä½“åœ¨ç›¸äº¤ç‚¹çš„è¡¨é¢æ³•线。\n"
+"[code]position[/code]:交å‰ç‚¹ã€‚\n"
+"[code]rid[/code]:相交物体的[RID]。\n"
+"[code]形状[/code]:碰撞形状的形状索引。\n"
+"如果射线没有与任何物体相交,那么将返回空的字典。\n"
+"此外,该方法å¯ä»¥æŽ¥å—一个[code]exclude[/code]对象或[RID]数组,该数组将被排除在"
+"碰撞之外,[code]collision_mask[/code]使ީç è¡¨ç¤ºè¦æ£€æŸ¥çš„物ç†å±‚,或者布尔值æ¥ç¡®"
+"定射线是å¦åº”该分别与[PhysicsBody]或[Area]å‘生碰撞。"
-#: doc/classes/PhysicsDirectSpaceState.xml:71
-#, fuzzy
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -51032,23 +51540,22 @@ msgid ""
"The number of intersections can be limited with the [code]max_results[/code] "
"parameter, to reduce the processing time."
msgstr ""
-"检查形状的交å‰ç‚¹ï¼Œé€šè¿‡[PhysicsShapeQueryParameters3D]对象,针对空间。相交形状"
-"在一个包å«ä»¥ä¸‹å­—段的字典数组中返回:\n"
-"[code]collider[/code]:碰撞对象。\n"
+"通过[PhysicsShapeQueryParameters]对象给出的形状与空间检查交点。相交的形状会以"
+"数组的形å¼è¿”å›žï¼Œè¯¥æ•°ç»„åŒ…å«æœ‰ä»¥ä¸‹å­—段的字典:\n"
+"[code]collider[/code]:碰撞的对象。\n"
"[code]collider_id[/code]:碰撞对象的ID。\n"
-"[code]rid[/code]:相交对象的[rid]。\n"
-"[code]shape[/code]:碰撞形状的形状指数。\n"
-"å¯ä»¥ä½¿ç”¨[code]max_results[/code]傿•°é™åˆ¶äº¤é›†çš„æ•°é‡ï¼Œä»¥å‡å°‘å¤„ç†æ—¶é—´ã€‚"
+"[code]rid[/code]:相交物体的[RID]。\n"
+"[code]shape[/code]:碰撞形状的形状索引。\n"
+"å¯ä»¥ç”¨[code]max_results[/code]傿•°é™åˆ¶ç›¸äº¤çš„æ•°é‡ï¼Œä»¥å‡å°‘å¤„ç†æ—¶é—´ã€‚"
#: doc/classes/PhysicsMaterial.xml:4
msgid "A material for physics properties."
-msgstr "具有物ç†å­¦å±žæ€§çš„æè´¨ã€‚"
+msgstr "具有物ç†å±žæ€§çš„æè´¨ã€‚"
#: doc/classes/PhysicsMaterial.xml:7
-#, fuzzy
msgid ""
"Provides a means of modifying the collision properties of a [PhysicsBody]."
-msgstr "æä¾›ä¸€ç§æ–¹æ³•æ¥ä¿®æ”¹[PhysicsBody3D]的碰撞属性。"
+msgstr "æä¾›äº†ä¸€ç§ä¿®æ”¹[PhysicsBody]的碰撞属性的方法。"
#: doc/classes/PhysicsMaterial.xml:15
msgid ""
@@ -51087,13 +51594,12 @@ msgid "Server interface for low-level physics access."
msgstr "用于低级物ç†è®¿é—®çš„æœåŠ¡å™¨æŽ¥å£ã€‚"
#: doc/classes/PhysicsServer.xml:7
-#, fuzzy
msgid ""
"PhysicsServer is the server responsible for all 3D physics. It can create "
"many kinds of physics objects, but does not insert them on the node tree."
msgstr ""
-"PhysicsServer3D是负责所有3D物ç†çš„æœåŠ¡å™¨ã€‚å®ƒå¯ä»¥åˆ›å»ºå¤šç§ç‰©ç†å¯¹è±¡ï¼Œä½†ä¸èƒ½å°†å®ƒä»¬"
-"æ’入节点树。"
+"PhysicsServer是负责所有3D物ç†çš„æœåŠ¡ã€‚å®ƒå¯ä»¥åˆ›å»ºè®¸å¤šç§ç±»çš„物ç†å¯¹è±¡ï¼Œä½†ä¸ä¼šåœ¨èŠ‚"
+"点树上æ’入这些对象。"
#: doc/classes/PhysicsServer.xml:40
msgid "Creates an [Area]."
@@ -51130,7 +51636,7 @@ msgstr ""
msgid ""
"Gives the body a push at a [code]position[/code] in the direction of the "
"[code]impulse[/code]."
-msgstr "在[code]position[/code]impulse[code]è„‰å†²æ–¹å‘æŽ¨åŠ¨ç‰©ä½“[/code]。"
+msgstr "在[code]position[/code]impulse[code]冲釿–¹å‘推动物体[/code]。"
#: doc/classes/PhysicsServer.xml:290
msgid "Gives the body a push to rotate it."
@@ -51142,8 +51648,8 @@ msgid ""
"BodyMode] constants, for the type of body created. Additionally, the body "
"can be created in sleeping state to save processing time."
msgstr ""
-"创建一个物ç†å®žä½“ã€‚å¯¹äºŽåˆ›å»ºçš„å®žä½“ç±»åž‹ï¼Œç¬¬ä¸€ä¸ªå‚æ•°å¯ä»¥æ˜¯[enum BodyMode]常é‡ä¸­çš„"
-"任何值。此外,身体å¯ä»¥åœ¨ç¡çœ çжæ€ä¸‹åˆ›å»ºï¼Œä»¥èŠ‚çœå¤„ç†æ—¶é—´ã€‚"
+"创建物ç†ä½“ã€‚å¯¹äºŽåˆ›å»ºçš„ç‰©ä½“ç±»åž‹ï¼Œç¬¬ä¸€ä¸ªå‚æ•°å¯ä»¥æ˜¯[enum BodyMode]常é‡ä¸­çš„任何"
+"值。此外,物体å¯ä»¥åœ¨ä¼‘眠状æ€ä¸‹åˆ›å»ºï¼Œä»¥èŠ‚çœå¤„ç†æ—¶é—´ã€‚"
#: doc/classes/PhysicsServer.xml:327
msgid ""
@@ -51155,8 +51661,10 @@ msgstr ""
#: doc/classes/PhysicsServer.xml:335
#, fuzzy
-msgid "Returns the [PhysicsDirectBodyState] of the body."
-msgstr "返回body的[PhysicsDirectBodyState2D]。"
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
+msgstr "返回指定属性的åˆå§‹å€¼ã€‚如果属性ä¸å­˜åœ¨ï¼Œåˆ™è¿”回[code]null[/code]。"
#: doc/classes/PhysicsServer.xml:370
msgid ""
@@ -51210,16 +51718,13 @@ msgid "Sets a body state (see [enum BodyState] constants)."
msgstr "设置主体状æ€ï¼ˆè¯·å‚阅[enum BodyState]常é‡ï¼‰ã€‚"
#: doc/classes/PhysicsServer.xml:608
-#, fuzzy
msgid ""
"Returns [code]true[/code] if a collision would result from moving in the "
"given direction from a given point in space. [PhysicsTestMotionResult] can "
"be passed to return additional information in."
msgstr ""
-"如果从空间中的给定点å‘给定方å‘移动会导致碰撞,则返回[code]true[/code]。Margin"
-"增加å‚与碰撞检测的形状的大å°ã€‚å¯ä»¥é€šè¿‡[PhysicsTestMotionResult2D]æ¥è¿”回é¢å¤–çš„"
-"ä¿¡æ¯ã€‚设置体中形状的元数æ®ã€‚这个元数æ®ä¸Ž[方法Object.set_meta]ä¸åŒï¼Œå¯ä»¥åœ¨å½¢çж"
-"查询中检索到。"
+"如果从空间的给定点å‘给定方å‘移动会导致碰撞,则返回[code]true[/code]。å¯ä»¥é€šè¿‡"
+"[PhysicsTestMotionResult]æ¥è¿”回é¢å¤–的信æ¯ã€‚"
#: doc/classes/PhysicsServer.xml:616
msgid ""
@@ -51232,14 +51737,13 @@ msgid ""
msgstr "è®¾ç½®åœ†é”¥ä½“æ‰­æ›²å…³èŠ‚å‚æ•°ï¼ˆè¯·å‚阅[enum ConeTwistJointParam]常é‡ï¼‰ã€‚"
#: doc/classes/PhysicsServer.xml:632
-#, fuzzy
msgid ""
"Destroys any of the objects created by PhysicsServer. If the [RID] passed is "
"not one of the objects that can be created by PhysicsServer, an error will "
"be sent to the console."
msgstr ""
-"销æ¯ä»»ä½•ç”±PhysicsServer2D创建的对象。如果传入的[RID]䏿˜¯PhysicsServer2Då¯ä»¥åˆ›"
-"å»ºçš„å¯¹è±¡ä¹‹ä¸€ï¼Œåˆ™ä¼šå‘æŽ§åˆ¶å°å‘é€ä¸€ä¸ªé”™è¯¯ã€‚"
+"销æ¯ç”± PhysicsServer 创建的任何对象。如果传递的 [RID] 䏿˜¯ PhysicsServer å¯ä»¥"
+"åˆ›å»ºçš„å¯¹è±¡ä¹‹ä¸€ï¼Œåˆ™ä¼šå‘æŽ§åˆ¶å°å‘é€é”™è¯¯ã€‚"
#: doc/classes/PhysicsServer.xml:641
msgid ""
@@ -51305,19 +51809,16 @@ msgid "Creates a [SliderJoint]."
msgstr "创建一个 [SliderJoint]关节。"
#: doc/classes/PhysicsServer.xml:768
-#, fuzzy
msgid "Gets the priority value of the Joint."
-msgstr "获å–Joint3D的优先级值。"
+msgstr "获å–关节的优先级值。"
#: doc/classes/PhysicsServer.xml:775
-#, fuzzy
msgid "Returns the type of the Joint."
-msgstr "返回Joint3D的类型。"
+msgstr "返回关节的类型。"
#: doc/classes/PhysicsServer.xml:783
-#, fuzzy
msgid "Sets the priority value of the Joint."
-msgstr "设置Joint3D的优先级值。"
+msgstr "设置关节的优先级值。"
#: doc/classes/PhysicsServer.xml:790
msgid ""
@@ -51359,6 +51860,10 @@ msgid ""
"[b]Note:[/b] Only has an effect when using the GodotPhysics engine, not the "
"default Bullet physics engine."
msgstr ""
+"设置计算碰撞体速度的迭代次数。迭代次数越多,碰撞就越准确。但是,更大é‡çš„迭代"
+"éœ€è¦æ›´å¤šçš„ CPU 能力,这会é™ä½Žæ€§èƒ½ã€‚默认值为 [code]8[/code]。\n"
+"[b]注æ„:[/b] 仅在使用 GodotPhysics å¼•æ“Žæ—¶æœ‰æ•ˆï¼Œè€Œä¸æ˜¯é»˜è®¤çš„ Bullet 物ç†å¼•"
+"擎。"
#: doc/classes/PhysicsServer.xml:852
msgid ""
@@ -51378,13 +51883,11 @@ msgid "Gets a slider_joint parameter (see [enum SliderJointParam] constants)."
msgstr "获å–slider_joint傿•°ï¼ˆè¯·å‚阅[enum SliderJointParam]常é‡ï¼‰ã€‚"
#: doc/classes/PhysicsServer.xml:904
-#, fuzzy
msgid ""
"Returns the state of a space, a [PhysicsDirectSpaceState]. This object can "
"be used to make collision/intersection queries."
msgstr ""
-"返回一个空间的状æ€ï¼Œä¸€ä¸ª[PhysicsDirectSpaceState2D]。这个对象å¯ä»¥ç”¨æ¥è¿›è¡Œç¢°"
-"撞/交集查询。"
+"返回空间的状æ€ï¼Œ[PhysicsDirectSpaceState]。此对象å¯ç”¨äºŽè¿›è¡Œç¢°æ’ž/相交查询。"
#: doc/classes/PhysicsServer.xml:936
msgid ""
@@ -51393,29 +51896,24 @@ msgid ""
msgstr "è®¾ç½®ç©ºé—´å‚æ•°çš„值。å¯ç”¨å‚数列表ä½äºŽ[enum SpaceParameter]常é‡ä¸Šã€‚"
#: doc/classes/PhysicsServer.xml:942
-#, fuzzy
msgid "The [Joint] is a [PinJoint]."
-msgstr "[Joint3D]是一个[PinJoint3D]。"
+msgstr "该[Joint] 是 [PinJoint]。"
#: doc/classes/PhysicsServer.xml:945
-#, fuzzy
msgid "The [Joint] is a [HingeJoint]."
-msgstr "[Joint3D]是一个[HingeJoint3D]。"
+msgstr "该 [Joint] 是 [HingeJoint]。"
#: doc/classes/PhysicsServer.xml:948
-#, fuzzy
msgid "The [Joint] is a [SliderJoint]."
-msgstr "[Joint3D]是一个[SliderJoint3D]。"
+msgstr "该 [Joint] 是 [SliderJoint]。"
#: doc/classes/PhysicsServer.xml:951
-#, fuzzy
msgid "The [Joint] is a [ConeTwistJoint]."
-msgstr "[Joint3D]是一个[conetwitstjoint 3d]。"
+msgstr "该 [Joint] 是 [ConeTwistJoint]。"
#: doc/classes/PhysicsServer.xml:954
-#, fuzzy
msgid "The [Joint] is a [Generic6DOFJoint]."
-msgstr "[Joint3D]是一个[Generic6DOFJoint3D]。"
+msgstr "该 [Joint] 是 [Generic6DOFJoint]。"
#: doc/classes/PhysicsServer.xml:957
msgid ""
@@ -51436,11 +51934,10 @@ msgstr ""
"越高越强。"
#: doc/classes/PhysicsServer.xml:965
-#, fuzzy
msgid ""
"If above 0, this value is the maximum value for an impulse that this Joint "
"puts on its ends."
-msgstr "如果大于0,则该值是该Joint3D在其末端施加的冲é‡çš„æœ€å¤§å€¼ã€‚"
+msgstr "如果大于0,这个值就是这个关节对其两端施加的冲é‡çš„æœ€å¤§å€¼ã€‚"
#: doc/classes/PhysicsServer.xml:971
msgid "The maximum rotation across the Hinge."
@@ -51584,11 +52081,10 @@ msgid "Represents the size of the [enum SliderJointParam] enum."
msgstr "表示[enum SliderJointParam]枚举的大å°ã€‚"
#: doc/classes/PhysicsServer.xml:1080
-#, fuzzy
msgid ""
"The ease with which the Joint twists, if it's too low, it takes more force "
"to twist the joint."
-msgstr "å…³èŠ‚ä¸‰ç»´æ‰­æ›²çš„éš¾æ˜“ç¨‹åº¦ï¼Œå¦‚æžœå¤ªä½Žï¼Œæ‰­æ›²å…³èŠ‚éœ€è¦æ›´å¤šçš„力。"
+msgstr "å…³èŠ‚æ‰­æ›²çš„éš¾æ˜“ç¨‹åº¦ï¼Œå¦‚æžœå®ƒå¤ªä½Žï¼Œåˆ™éœ€è¦æ›´å¤šçš„åŠ›é‡æ¥æ‰­æ›²å…³èŠ‚ã€‚"
#: doc/classes/PhysicsServer.xml:1092
msgid ""
@@ -51644,89 +52140,74 @@ msgid ""
msgstr "如果[code]set[/code],则此轴上有一个以特定速度为目标的线性电机。"
#: doc/classes/PhysicsServer.xml:1146
-#, fuzzy
msgid "The [Shape] is a [PlaneShape]."
-msgstr "[Shape3D]是一个[RayShape3D]。"
+msgstr "该[Shape] 是 [PlaneShape]。"
#: doc/classes/PhysicsServer.xml:1149
-#, fuzzy
msgid "The [Shape] is a [RayShape]."
-msgstr "[Shape3D]是一个[RayShape3D]。"
+msgstr "该 [Shape] 是 [RayShape]。"
#: doc/classes/PhysicsServer.xml:1152
-#, fuzzy
msgid "The [Shape] is a [SphereShape]."
-msgstr "[Shape3D]是一个[SphereShape3D]。"
+msgstr "该 [Shape] 是一个 [SphereShape]。"
#: doc/classes/PhysicsServer.xml:1155
-#, fuzzy
msgid "The [Shape] is a [BoxShape]."
-msgstr "[Shape3D]是一个[BoxShape3D]。"
+msgstr "该 [Shape] 是一个 [BoxShape]。"
#: doc/classes/PhysicsServer.xml:1158
-#, fuzzy
msgid "The [Shape] is a [CapsuleShape]."
-msgstr "[Shape3D]是一个[CapsuleShape3D]。"
+msgstr "该 [Shape] 是 [CapsuleShape]。"
#: doc/classes/PhysicsServer.xml:1161
-#, fuzzy
msgid "The [Shape] is a [CylinderShape]."
-msgstr "[Shape3D]是[CylinderShape3D]。"
+msgstr "该 [Shape] 是 [CylinderShape]。"
#: doc/classes/PhysicsServer.xml:1164
-#, fuzzy
msgid "The [Shape] is a [ConvexPolygonShape]."
-msgstr "[Shape3D]是[ConvexPolygonShape3D]。"
+msgstr "该 [Shape] 是 [ConvexPolygonShape]。"
#: doc/classes/PhysicsServer.xml:1167
-#, fuzzy
msgid "The [Shape] is a [ConcavePolygonShape]."
-msgstr "[Shape3D]是[ConcavePolygonShape3D]。"
+msgstr "该 [Shape] 是 [ConcavePolygonShape]。"
#: doc/classes/PhysicsServer.xml:1170
-#, fuzzy
msgid "The [Shape] is a [HeightMapShape]."
-msgstr "[Shape3D]是一个[highmapshape3d]。"
+msgstr "该 [Shape] 是 [HeightMapShape]。"
#: doc/classes/PhysicsShapeQueryParameters.xml:4
msgid "Parameters to be sent to a 3D shape physics query."
msgstr "è¦å‘é€åˆ°ä¸‰ç»´å½¢çŠ¶ç‰©ç†æŸ¥è¯¢çš„傿•°ã€‚"
#: doc/classes/PhysicsShapeQueryParameters.xml:7
-#, fuzzy
msgid ""
"This class contains the shape and other parameters for 3D intersection/"
"collision queries."
-msgstr ""
-"此类包å«ä¸‰ç»´ç›¸äº¤/ç¢°æ’žæŸ¥è¯¢çš„å½¢çŠ¶å’Œå…¶ä»–å‚æ•°ã€‚å¦è¯·å‚阅"
-"[PhysicsShapeQueryResult3d]。"
+msgstr "此类包å«ç”¨äºŽ 3D 相交/ç¢°æ’žæŸ¥è¯¢çš„å½¢çŠ¶å’Œå…¶ä»–å‚æ•°ã€‚"
#: doc/classes/PhysicsShapeQueryParameters.xml:16
-#, fuzzy
msgid "Sets the [Shape] that will be used for collision/intersection queries."
-msgstr "将用于填充纹ç†çš„[Gradient]。"
+msgstr "设置将用于碰撞/相交查询的 [Shape]。"
#: doc/classes/PhysicsShapeQueryParameters.xml:22
-#, fuzzy
msgid "If [code]true[/code], the query will take [Area]s into account."
-msgstr "如果[code]true[/code],查询将考虑[Area2D]。"
+msgstr "如果[code]true[/code],查询将考虑[Area]。"
#: doc/classes/PhysicsShapeQueryParameters.xml:25
-#, fuzzy
msgid "If [code]true[/code], the query will take [PhysicsBody]s into account."
-msgstr "如果[code]true[/code],查询将考虑[PhysicsBody2D]。"
+msgstr "如果 [code]true[/code],则查询将考虑 [PhysicsBody]。"
#: doc/classes/PinJoint.xml:4
-#, fuzzy
msgid "Pin joint for 3D PhysicsBodies."
-msgstr "三维形状的图钉关节。"
+msgstr "用于 3D 物ç†ä½“的钉关节。"
#: doc/classes/PinJoint.xml:7
-#, fuzzy
msgid ""
"Pin joint for 3D rigid bodies. It pins 2 bodies (rigid or static) together. "
"See also [Generic6DOFJoint]."
-msgstr "三维刚体的图钉关节。将两个刚体(æˆ–é™æ€)钉在一起。"
+msgstr ""
+"3Dåˆšä½“çš„é’‰å…³èŠ‚ã€‚å®ƒå°†ä¸¤ä¸ªç‰©ä½“ï¼ˆåˆšä½“æˆ–é™æ€ä½“)钉在一起。å‚阅"
+"[Generic6DOFJoint]。"
#: doc/classes/PinJoint.xml:30 doc/classes/PinJoint.xml:41
msgid ""
@@ -51741,22 +52222,19 @@ msgid ""
msgstr "è¢«é’‰åœ¨ä¸€èµ·çš„ç‰©ä½“ä¹‹é—´ä¿æŒå…±é€Ÿçš„力。越高,力越大。"
#: doc/classes/PinJoint.xml:36 doc/classes/PinJoint.xml:47
-#, fuzzy
msgid ""
"If above 0, this value is the maximum value for an impulse that this Joint "
"produces."
-msgstr "如果大于0,这个值就是这个 Joint3D 产生的冲é‡çš„æœ€å¤§å€¼ã€‚"
+msgstr "如果大于0,这个值就是此关节产生的冲é‡çš„æœ€å¤§å€¼ã€‚"
#: doc/classes/PinJoint2D.xml:4
-#, fuzzy
msgid "Pin Joint for 2D shapes."
-msgstr "2D形状的图钉关节。"
+msgstr "用于 2D 形状的钉关节。"
#: doc/classes/PinJoint2D.xml:7
-#, fuzzy
msgid ""
"Pin Joint for 2D rigid bodies. It pins two bodies (rigid or static) together."
-msgstr "用于二维刚体的图钉关节。它将两个物体(åˆšæ€§çš„æˆ–é™æ€çš„)钉在一起。"
+msgstr "用于 2D åˆšä½“çš„é’‰å…³èŠ‚ã€‚å®ƒå°†ä¸¤ä¸ªç‰©ä½“é’‰åœ¨ä¸€èµ·ï¼Œåˆšä½“æˆ–é™æ€ä½“。"
#: doc/classes/PinJoint2D.xml:15
msgid ""
@@ -51812,6 +52290,8 @@ msgid ""
"Returns the center of the plane.\n"
"This method is deprecated, please use [method center] instead."
msgstr ""
+"返回平é¢çš„中心。\n"
+"此方法已被废弃,请使用[method center]代替。"
#: doc/classes/Plane.xml:65
msgid ""
@@ -51924,7 +52404,6 @@ msgid "Class representing a planar [PrimitiveMesh]."
msgstr "表示平é¢çš„类。"
#: doc/classes/PlaneMesh.xml:7
-#, fuzzy
msgid ""
"Class representing a planar [PrimitiveMesh]. This flat mesh does not have a "
"thickness. By default, this mesh is aligned on the X and Z axes; this "
@@ -51935,12 +52414,16 @@ msgid ""
"this, increase [member subdivide_depth] and [member subdivide_width] until "
"you no longer notice UV jittering."
msgstr ""
-"表示平é¢çš„类。这个平é¢ç½‘格没有厚度。默认情况下,这个网格在Xè½´å’ŒZ轴上对é½;è¿™ç§"
-"默认的旋转ä¸é€‚åˆç”¨äºŽå‘Šç¤ºç‰Œæè´¨ã€‚对于告示牌æè´¨ï¼Œä½¿ç”¨[QuadMesh]代替。"
+"è¡¨ç¤ºå¹³é¢ [PrimitiveMesh] 的类。这个平é¢ç½‘格没有厚度。默认情况下,此网格在 X "
+"è½´å’Œ Z 轴上对é½ï¼›æ­¤é»˜è®¤æ—‹è½¬ä¸é€‚åˆä¸Žå¹¿å‘Šç‰Œæè´¨ä¸€èµ·ä½¿ç”¨ã€‚对于广告牌æè´¨ï¼Œè¯·æ”¹"
+"用 [QuadMesh]。\n"
+"[b]注æ„:[/b] å½“ä½¿ç”¨å¤§çº¹ç† [PlaneMesh](例如作为地æ¿ï¼‰æ—¶ï¼Œä½ å¯èƒ½ä¼šå¶ç„¶å‘现 "
+"UV 抖动问题,具体å–决于相机角度。è¦è§£å†³æ­¤é—®é¢˜ï¼Œè¯·å¢žåŠ  [member "
+"subdivide_depth] å’Œ [member subdivide_width],直到你ä¸å†æ³¨æ„到 UV 抖动。"
#: doc/classes/PlaneMesh.xml:16
msgid "Offset from the origin of the generated plane. Useful for particles."
-msgstr ""
+msgstr "从生æˆå¹³é¢çš„原点åç§»ã€‚å¯¹ç²’å­æœ‰ç”¨ã€‚"
#: doc/classes/PlaneMesh.xml:19
msgid "Size of the generated plane."
@@ -51959,28 +52442,25 @@ msgid "Infinite plane shape for 3D collisions."
msgstr "æ— é™çš„å¹³é¢å½¢çŠ¶ï¼Œç”¨äºŽä¸‰ç»´ç¢°æ’žã€‚"
#: doc/classes/PlaneShape.xml:7
-#, fuzzy
msgid ""
"An infinite plane shape for 3D collisions. Note that the [Plane]'s normal "
"matters; anything \"below\" the plane will collide with it. If the "
"[PlaneShape] is used in a [PhysicsBody], it will cause colliding objects "
"placed \"below\" it to teleport \"above\" the plane."
msgstr ""
-"用于三维碰撞的无é™çš„å¹³é¢å½¢çŠ¶ã€‚è¯·æ³¨æ„,[Plane]的法线很é‡è¦ï¼›ä»»ä½• \"低于\" 该平"
-"é¢çš„物体都会与之å‘生碰撞。如果[WorldMarginShape3D]被用于[PhysicsBody3D],它将"
-"导致放置在它 \"下é¢\" 的碰撞物体被传é€åˆ°å¹³é¢ \"上é¢\" 。"
+"用于3D碰撞的无é™çš„å¹³é¢å½¢çŠ¶ã€‚è¯·æ³¨æ„,[Plane]的法线很é‡è¦ï¼›ä»»ä½• \"低于\" 该平é¢"
+"的物体都会与它å‘生碰撞。如果[PlaneShape]被用于[PhysicsBody],它将导致放置在"
+"它 \"下é¢\" 的碰撞物体被传é€åˆ° \"上é¢\" 的平é¢ã€‚"
#: doc/classes/PlaneShape.xml:15
-#, fuzzy
msgid "The [Plane] used by the [PlaneShape] for collision."
-msgstr "[WorldMarginShape3D]用于碰撞的[Plane]å¹³é¢ã€‚"
+msgstr "[PlaneShape] 用于碰撞的 [Plane]。"
#: doc/classes/PointMesh.xml:4
msgid "Mesh with a single Point primitive."
msgstr "å•点原始网格。"
#: doc/classes/PointMesh.xml:7
-#, fuzzy
msgid ""
"The PointMesh is made from a single point. Instead of relying on triangles, "
"points are rendered as a single rectangle on the screen with a constant "
@@ -51994,20 +52474,21 @@ msgid ""
"When using PointMeshes, properties that normally alter vertices will be "
"ignored, including billboard mode, grow, and cull face."
msgstr ""
-"点网格是由一个点构æˆçš„ã€‚ç‚¹ä¸æ˜¯ä¾èµ–于三角形,而是在å±å¹•上以固定大å°å‘ˆçŽ°ä¸ºå•个"
-"矩形。它们的目的是与粒å­ç³»ç»Ÿä¸€èµ·ä½¿ç”¨ï¼Œä½†ä¹Ÿå¯ä»¥ä½œä¸ºä¸€ç§å»‰ä»·çš„æ–¹æ³•æ¥æ¸²æŸ“固定大"
-"å°çš„告示牌精çµ(例如点云)。\n"
-"pointmesh,必须与具有点大å°çš„æè´¨ä¸€èµ·ä½¿ç”¨ã€‚点大å°å¯ä»¥é€šè¿‡[code]POINT_SIZE[/"
-"code]在ç€è‰²å™¨ä¸­è®¿é—®ï¼Œæˆ–者通过设置[member BaseMaterial3D]在[BaseMaterial3D]中"
-"访问。和å˜é‡[member BaseMaterial3D.point_size]。\n"
-"当使用pointmesh时,通常改å˜é¡¶ç‚¹çš„属性将被忽略,包括广告牌模å¼ã€å¢žé•¿å’Œå‰”除é¢ã€‚"
+"PointMesh是由å•个的点构æˆã€‚与其ä¾èµ–三角形与点在å±å¹•上渲染形æˆå…·æœ‰æ’定尺寸的å•"
+"独矩形。其旨在与粒å­ç³»ç»Ÿä¸€èµ·ä½¿ç”¨ï¼Œä½†ä¹Ÿå¯ä»¥ä½œä¸ºä¸€ç§æ¶ˆè€—å°çš„æ–¹å¼æ¥æ¸²æŸ“æ’定尺寸"
+"的广告牌精çµï¼Œä¾‹å¦‚,在点云中。\n"
+"PointMeshes,必须与具有点大å°çš„æè´¨ä¸€èµ·ä½¿ç”¨ã€‚点大å°å¯ä»¥é€šè¿‡[code]POINT_SIZE[/"
+"code]在ç€è‰²å™¨ä¸­è®¿é—®ï¼Œæˆ–者通过设置[member SpatialMaterial."
+"flags_use_point_size]å’Œå˜é‡[member SpatialMaterial.params_point_size]在"
+"[SpatialMaterial]中访问。\n"
+"当使用PointMeshes时,通常改å˜é¡¶ç‚¹çš„属性将被忽略,包括广告牌模å¼ã€å¢žé•¿å’Œå‰”除"
+"é¢ã€‚"
#: doc/classes/Polygon2D.xml:4
msgid "A 2D polygon."
msgstr "一个2D多边形。"
#: doc/classes/Polygon2D.xml:7
-#, fuzzy
msgid ""
"A Polygon2D is defined by a set of points. Each point is connected to the "
"next, with the final point being connected to the first, resulting in a "
@@ -52019,9 +52500,13 @@ msgid ""
"[member ProjectSettings.rendering/limits/buffers/"
"canvas_polygon_index_buffer_size_kb]."
msgstr ""
-"一个Polygon2D是由一组点定义的.æ¯ä¸ªç‚¹ä¸Žä¸‹ä¸€ä¸ªç‚¹ç›¸è¿ž,最åŽä¸€ä¸ªç‚¹ä¸Žç¬¬ä¸€ä¸ªç‚¹ç›¸è¿ž,"
-"从而形æˆä¸€ä¸ªå°é—­çš„多边形.Polygon2Då¯ä»¥ç”¨é¢œè‰²(纯色或æ¸å˜)å¡«å……,也å¯ä»¥ç”¨ç»™å®šçš„è´´"
-"图填充."
+"Polygon2D 由一组点定义。æ¯ä¸ªç‚¹éƒ½è¿žæŽ¥åˆ°ä¸‹ä¸€ä¸ªç‚¹ï¼Œæœ€åŽä¸€ä¸ªç‚¹è¿žæŽ¥åˆ°ç¬¬ä¸€ä¸ªç‚¹ï¼Œä»Ž"
+"而形æˆå°é—­çš„多边形。 Polygon2Dså¯ä»¥å¡«å……颜色(纯色或æ¸å˜è‰²ï¼‰æˆ–填充给定的纹"
+"ç†ã€‚\n"
+"[b]注:[/b] 默认情况下,Godot 一次最多åªèƒ½ç»˜åˆ¶ 4096 个多边形点。è¦å¢žåŠ æ­¤é™"
+"制,请打开项目设置并增加 [member ProjectSettings.rendering/limits/buffers/"
+"canvas_polygon_buffer_size_kb] 和 [member ProjectSettings.rendering/limits/"
+"buffers/canvas_polygon_index_buffer_size_kb]。"
#: doc/classes/Polygon2D.xml:18
msgid ""
@@ -52090,15 +52575,14 @@ msgid "The offset applied to each vertex."
msgstr "应用于æ¯ä¸ªé¡¶ç‚¹çš„ä½ç½®åç§»é‡."
#: doc/classes/Polygon2D.xml:92
-#, fuzzy
msgid ""
"The polygon's list of vertices. The final point will be connected to the "
"first.\n"
"[b]Note:[/b] This returns a copy of the [PoolVector2Array] rather than a "
"reference."
msgstr ""
-"多边形顶点的列表.最åŽä¸€ä¸ªç‚¹å°†è¿žæŽ¥åˆ°ç¬¬ä¸€ä¸ªç‚¹.\n"
-"[b]注æ„:[/b]这将返回[PoolVector2Array]的拷è´,è€Œä¸æ˜¯å¼•用."
+"多边形的顶点列表。最åŽä¸€ç‚¹å°†è¿žæŽ¥åˆ°ç¬¬ä¸€ä¸ªã€‚\n"
+"[b]注æ„:[/b] 这将返回 [PoolVector2Array] çš„å‰¯æœ¬è€Œä¸æ˜¯å¼•用。"
#: doc/classes/Polygon2D.xml:100
msgid ""
@@ -52149,53 +52633,45 @@ msgstr ""
"如果数é‡å°‘,则未定义的顶点将使用[code]color[/code]."
#: doc/classes/PoolByteArray.xml:4
-#, fuzzy
msgid "A pooled [Array] of bytes."
-msgstr "一个打包的字节[Array]。"
+msgstr "[Array] 字节集åˆã€‚"
#: doc/classes/PoolByteArray.xml:7
-#, fuzzy
msgid ""
"An [Array] specifically designed to hold bytes. Optimized for memory usage, "
"does not fragment the memory.\n"
"[b]Note:[/b] This type is passed by value and not by reference."
msgstr ""
-"一个专门用æ¥ä¿å­˜å­—节的[Array]。它紧密地包裹数æ®ï¼Œæ‰€ä»¥å½“数组尺寸较大时,该格å¼"
-"将节çœä¸€ç¬”内存。\n"
-"[b]注æ„:[/b] è¿™ç§ç±»åž‹æ˜¯é€šè¿‡å€¼ä¼ é€’çš„ï¼Œè€Œä¸æ˜¯é€šè¿‡å¼•用。"
+"一个 [Array] 专门设计用于ä¿å­˜å­—节。针对内存使用进行了优化,ä¸ä¼šé€ æˆå†…存碎"
+"片。\n"
+"[b]注æ„:[/b] è¿™ç§ç±»åž‹æ˜¯æŒ‰å€¼ä¼ é€’è€Œä¸æ˜¯æŒ‰å¼•用传递。"
#: doc/classes/PoolByteArray.xml:17
-#, fuzzy
msgid ""
"Constructs a new [PoolByteArray]. Optionally, you can pass in a generic "
"[Array] that will be converted."
-msgstr ""
-"构建一个新的[PackedByteArray]。你å¯ä»¥é€‰æ‹©ä¼ å…¥ä¸€ä¸ªé€šç”¨çš„[Array],它将被转æ¢ã€‚"
+msgstr "构建新的[PoolByteArray]。你å¯ä»¥é€‰æ‹©ä¼ å…¥ä¸€ä¸ªé€šç”¨çš„[Array],它将被转æ¢ã€‚"
#: doc/classes/PoolByteArray.xml:29
-#, fuzzy
msgid "Appends a [PoolByteArray] at the end of this array."
-msgstr "在这个数组的末端添加一个[PackedByteArray]。"
+msgstr "åœ¨è¿™ä¸ªæ•°ç»„çš„æœ€åŽæ·»åŠ [PoolByteArray]。"
#: doc/classes/PoolByteArray.xml:36
-#, fuzzy
msgid ""
"Returns a new [PoolByteArray] with the data compressed. Set the compression "
"mode using one of [enum File.CompressionMode]'s constants."
msgstr ""
-"返回一个新的带有压缩数æ®çš„[PackedByteArray]。使用[enum File.CompressionMode]"
-"ä¸­çš„ä¸€ä¸ªå¸¸é‡æ¥è®¾ç½®åŽ‹ç¼©æ¨¡å¼ã€‚"
+"返回新的[PoolByteArray],其中的数æ®è¢«åŽ‹ç¼©ã€‚ä½¿ç”¨[enum File.CompressionMode]中"
+"的一个常数æ¥è®¾ç½®åŽ‹ç¼©æ¨¡å¼ã€‚"
#: doc/classes/PoolByteArray.xml:44
-#, fuzzy
msgid ""
"Returns a new [PoolByteArray] with the data decompressed. Set "
"[code]buffer_size[/code] to the size of the uncompressed data. Set the "
"compression mode using one of [enum File.CompressionMode]'s constants."
msgstr ""
-"返回一个新的[PackedByteArray],并对数æ®è¿›è¡Œè§£åŽ‹ã€‚ä½¿ç”¨[code]buffer_size[/code]"
-"æ¥è®¾ç½®æœªåŽ‹ç¼©æ•°æ®çš„大å°ã€‚使用[enum File.CompressionMode]ä¸­çš„ä¸€ä¸ªå¸¸é‡æ¥è®¾ç½®åŽ‹ç¼©"
-"模å¼ã€‚"
+"返回新的 [PoolByteArray] 解压数æ®ã€‚ [code]buffer_size[/code] 设置未压缩数æ®çš„"
+"大å°ã€‚使用 [enum File.CompressionMode] 常é‡ä¹‹ä¸€è®¾ç½®åŽ‹ç¼©æ¨¡å¼ã€‚"
#: doc/classes/PoolByteArray.xml:52
msgid ""
@@ -52214,6 +52690,16 @@ msgid ""
"will allow for unbounded output. If any positive value is passed, and the "
"decompression exceeds that ammount in bytes, then an error will be returned."
msgstr ""
+"返回数æ®è§£åŽ‹åŽçš„æ–° [PoolByteArray] 。使用 [enum File.CompressionMode] 的常数"
+"之一设置压缩模å¼ã€‚[b]æ­¤æ–¹æ³•ä»…æŽ¥å— gzip å’Œdeflate压缩模å¼ã€‚[/b]\n"
+"此方法å¯èƒ½æ¯” [code] decompress [/code] 慢,因为它å¯èƒ½éœ€è¦åœ¨è§£åŽ‹æ—¶å¤šæ¬¡é‡æ–°åˆ†é…"
+"其输出缓冲器,因为 [code] decompress [/code] 从一开始就知é“它的输出缓冲器大"
+"å°ã€‚\n"
+"\n"
+"GZIP 的最大压缩比为 1032:1,这æ„味ç€å°åž‹åŽ‹ç¼©æœ‰æ•ˆè½½è·æžæœ‰å¯èƒ½å‡åŽ‹åˆ°æ½œåœ¨çš„éžå¸¸"
+"å¤§è¾“å‡ºã€‚ä¸ºäº†é˜²æ­¢è¿™ç§æƒ…况,您å¯ä»¥æä¾›æœ€å¤§å°ºå¯¸ï¼Œå…许此函数通过 "
+"[code]max_output_size [/code] 以字节进行分é…。通过 -1 å°†å…许无é™åˆ¶è¾“出。如果"
+"通过任何正值,并且解压超过给定的字节值,则将返回错误。"
#: doc/classes/PoolByteArray.xml:67
msgid ""
@@ -52240,7 +52726,6 @@ msgstr ""
"数。"
#: doc/classes/PoolByteArray.xml:79
-#, fuzzy
msgid ""
"Returns a hexadecimal representation of this array as a [String].\n"
"[codeblock]\n"
@@ -52250,7 +52735,7 @@ msgid ""
msgstr ""
"返回该数组的å六进制,表示为一个[String]。\n"
"[codeblock]\n"
-"var array = PackedByteArray([11, 46, 255])\n"
+"var array = PoolByteArray([11, 46, 255])\n"
"print(array.hex_encode()) # Prints: 0b2eff\n"
"[/codeblock]"
@@ -52277,7 +52762,6 @@ msgstr "从数组中删除ä½äºŽç´¢å¼•的元素。"
#: doc/classes/PoolByteArray.xml:114 doc/classes/PoolIntArray.xml:67
#: doc/classes/PoolRealArray.xml:67
-#, fuzzy
msgid ""
"Sets the size of the array. If the array is grown, reserves elements at the "
"end of the array. If the array is shrunk, truncates the array to the new "
@@ -52285,8 +52769,9 @@ msgid ""
"[b]Note:[/b] Added elements are not automatically initialized to 0 and will "
"contain garbage, i.e. indeterminate values."
msgstr ""
-"设置数组的大å°ã€‚如果数组被增大,则ä¿ç•™æ•°ç»„末端的元素。如果数组被缩å°ï¼Œåˆ™å°†æ•°"
-"组截断到新的大å°ã€‚"
+"设置数组的大å°ã€‚如果数组增长,则ä¿ç•™æ•°ç»„末尾的元素。如果数组缩å°ï¼Œåˆ™å°†æ•°ç»„截"
+"断为新大å°ã€‚\n"
+"[b]注æ„:[/b] 添加的元素ä¸ä¼šè‡ªåЍåˆå§‹åŒ–为 0,并且会包å«åžƒåœ¾ï¼Œå³ä¸ç¡®å®šå€¼ã€‚"
#: doc/classes/PoolByteArray.xml:122
msgid "Changes the byte at the given index."
@@ -52299,43 +52784,37 @@ msgid "Returns the size of the array."
msgstr "返回数组的大å°ã€‚"
#: doc/classes/PoolByteArray.xml:136
-#, fuzzy
msgid ""
"Returns the slice of the [PoolByteArray] between indices (inclusive) as a "
"new [PoolByteArray]. Any negative index is considered to be from the end of "
"the array."
msgstr ""
-"返回索引(包括其本身)之间的[PackedByteArray]的片断为一个新的"
-"[PackedByteArray]。任何负的索引都被认为是从数组的末端开始的。"
+"返回索引(包括)之间的[PoolByteArray]的片断为一个新的[PoolByteArray]。任何负"
+"的索引都被认为是从数组的末端开始的。"
#: doc/classes/PoolColorArray.xml:4
-#, fuzzy
msgid "A pooled [Array] of [Color]."
-msgstr "一个包装好的[Color]的[Array]。"
+msgstr "[Color]çš„[Array]的集åˆã€‚"
#: doc/classes/PoolColorArray.xml:7
-#, fuzzy
msgid ""
"An [Array] specifically designed to hold [Color]. Optimized for memory "
"usage, does not fragment the memory.\n"
"[b]Note:[/b] This type is passed by value and not by reference."
msgstr ""
-"一个专门为容纳[Color]而设计的[Array]。紧密地包装数æ®ï¼Œå½“数组尺寸较大时,这将"
-"节çœå†…存。\n"
-"[b]注æ„:[/b] è¿™ç§ç±»åž‹æ˜¯é€šè¿‡å€¼ä¼ é€’çš„ï¼Œè€Œä¸æ˜¯é€šè¿‡å¼•用。"
+"专门用于ä¿å­˜[Color]çš„[Array]。对内存的使用进行了优化,ä¸ä¼šä½¿å†…存碎片化。\n"
+"[b]注æ„:[/b] è¿™ç§ç±»åž‹æ˜¯é€šè¿‡å€¼ä¼ é€’çš„ï¼Œè€Œä¸æ˜¯å¼•用。"
#: doc/classes/PoolColorArray.xml:17
-#, fuzzy
msgid ""
"Constructs a new [PoolColorArray]. Optionally, you can pass in a generic "
"[Array] that will be converted."
msgstr ""
-"构造一个新的[PackedColorArray]。你å¯ä»¥é€‰æ‹©ä¼ å…¥ä¸€ä¸ªé€šç”¨çš„[Array],它将被转æ¢ã€‚"
+"构建新的[PoolColorArray]。你å¯ä»¥é€‰æ‹©ä¼ å…¥ä¸€ä¸ªé€šç”¨çš„[Array],它将被转æ¢ã€‚"
#: doc/classes/PoolColorArray.xml:29
-#, fuzzy
msgid "Appends a [PoolColorArray] at the end of this array."
-msgstr "将一个[PackedColorArray]追加到该数组的尾部。"
+msgstr "åœ¨è¿™ä¸ªæ•°ç»„çš„æœ€åŽæ·»åŠ ä¸€ä¸ª[PoolColorArray]。"
#: doc/classes/PoolColorArray.xml:54 doc/classes/PoolIntArray.xml:55
msgid "Appends a value to the array."
@@ -52356,12 +52835,10 @@ msgid "Changes the [Color] at the given index."
msgstr "更改给定索引处的[Color]。"
#: doc/classes/PoolIntArray.xml:4
-#, fuzzy
msgid "A pooled [Array] of integers ([int])."
-msgstr "一个32使•´æ•°çš„压缩[Array]。"
+msgstr "æ•´æ•°[int]çš„[Array]的集åˆã€‚"
#: doc/classes/PoolIntArray.xml:7
-#, fuzzy
msgid ""
"An [Array] specifically designed to hold integer values ([int]). Optimized "
"for memory usage, does not fragment the memory.\n"
@@ -52372,50 +52849,42 @@ msgid ""
"around. In comparison, [int] uses signed 64-bit integers which can hold much "
"larger values."
msgstr ""
-"一个专门用于ä¿å­˜32使•´æ•°å€¼çš„[阵列]。紧密地包装数æ®ï¼Œæ‰€ä»¥å®ƒä¸ºå¤§çš„æ•°ç»„尺寸节çœ"
-"了内存。\n"
-"[b]注æ„:[/b] è¿™ç§ç±»åž‹æ˜¯é€šè¿‡å€¼ä¼ é€’çš„ï¼Œè€Œä¸æ˜¯é€šè¿‡å¼•用。\n"
-"[b]注æ„:[/b] 该类型存储有符å·çš„32使•´æ•°ï¼Œè¿™æ„味ç€å®ƒå¯ä»¥åœ¨[code][-2^31, 2^31 "
-"- 1][/code]之间å–值,å³[code][-2147483648, 2147483647][/code]。超过这些界é™å°±"
-"会被包起æ¥ã€‚相比之下,[int]使用有符å·çš„64使•´æ•°ï¼Œå¯ä»¥å®¹çº³å¤§å¾—多的值。如果你需"
-"è¦ä¸¥æ ¼æ‰“包64使•´æ•°ï¼Œè¯·å‚阅[PackedInt64Array]。"
+"一个专门用于ä¿å­˜æ•´æ•°å€¼çš„[Array]([int])。对内存的使用进行了优化,ä¸ä¼šä½¿å†…å­˜"
+"碎片化。\n"
+"[b]注æ„:[/b] è¿™ç§ç±»åž‹æ˜¯é€šè¿‡å€¼ä¼ é€’çš„ï¼Œè€Œä¸æ˜¯å¼•用。\n"
+"[b]注æ„:[/b] 这个类型仅é™äºŽæœ‰ç¬¦å·çš„32使•´æ•°ï¼Œè¿™æ„味ç€å®ƒåªèƒ½åœ¨[code][-2^31, "
+"2^31 - 1][/code]的区间å–值,å³[code][-2147483648, 2147483647][/code]。超过这"
+"些界é™å°±ä¼šè¢«åŒ…èµ·æ¥ã€‚相比之下,[int]使用有符å·çš„64使•´æ•°ï¼Œå¯ä»¥å®¹çº³å¤§å¾—多的值。"
#: doc/classes/PoolIntArray.xml:18
-#, fuzzy
msgid ""
"Constructs a new [PoolIntArray]. Optionally, you can pass in a generic "
"[Array] that will be converted."
-msgstr ""
-"构建一个新的[PackedInt32Array]。你å¯ä»¥é€‰æ‹©ä¼ å…¥ä¸€ä¸ªé€šç”¨çš„[Array],它将被转"
-"æ¢ã€‚。"
+msgstr "构建新的[PoolIntArray]。你å¯ä»¥é€‰æ‹©ä¼ å…¥ä¸€ä¸ªé€šç”¨çš„[Array],它将被转æ¢ã€‚"
#: doc/classes/PoolIntArray.xml:30
-#, fuzzy
msgid "Appends a [PoolIntArray] at the end of this array."
-msgstr "在数组的末尾追加一个[PackedInt32Array]。"
+msgstr "åœ¨è¿™ä¸ªæ•°ç»„çš„æœ€åŽæ·»åŠ [PoolIntArray]。"
#: doc/classes/PoolIntArray.xml:44
-#, fuzzy
msgid ""
"Inserts a new int at a given position in the array. The position must be "
"valid, or at the end of the array ([code]idx == size()[/code])."
msgstr ""
-"在数组的给定ä½ç½®æ’入一个新的整数。ä½ç½®å¿…须是有效的,或者ä½äºŽæ•°ç»„的末尾"
-"([code]idx == size()[/code])。"
+"在数组中的指定ä½ç½®æ’入一个新的int。这个ä½ç½®å¿…须是有效的,或者在数组的末端"
+"([code]idx == size()[/code])。"
#: doc/classes/PoolIntArray.xml:75
-#, fuzzy
msgid "Changes the int at the given index."
-msgstr "改å˜ç»™å®šç´¢å¼•处的整数。"
+msgstr "更改给定索引处的 int。"
#: doc/classes/PoolIntArray.xml:81
msgid "Returns the array size."
msgstr "返回数组大å°ã€‚"
#: doc/classes/PoolRealArray.xml:4
-#, fuzzy
msgid "A pooled [Array] of reals ([float])."
-msgstr "一个包装好的[Color]的[Array]。"
+msgstr "实数 [float] çš„[Array]集åˆã€‚"
#: doc/classes/PoolRealArray.xml:7
msgid ""
@@ -52430,59 +52899,60 @@ msgid ""
"store [float]s will use roughly 6 times more memory compared to a "
"[PoolRealArray]."
msgstr ""
+"专门设计用于ä¿å­˜æµ®ç‚¹å€¼çš„ [Array] 。针对内存使用进行了优化,ä¸ä¼šé€ æˆå†…存碎"
+"片。\n"
+"[b]注æ„:[/b] è¿™ç§ç±»åž‹æ˜¯æŒ‰å€¼ä¼ é€’è€Œä¸æ˜¯æŒ‰å¼•用传递。\n"
+"[b]注æ„:[/b] 与 64 ä½åŽŸå§‹ [float] ä¸åŒï¼Œå­˜å‚¨åœ¨ [PoolRealArray] 中的数字是 "
+"32 使µ®ç‚¹æ•°ã€‚è¿™æ„味ç€ä¸ŽåŽŸå§‹ [float] 相比,存储在 [PoolRealArray] 中的值具有较"
+"低的精度。如果您需è¦åœ¨æ•°ç»„中存储 64 使µ®ç‚¹æ•°ï¼Œè¯·ä½¿ç”¨å…·æœ‰ [float] 元素的通用 "
+"[Array],因为这些元素ä»ä¸º 64 ä½ã€‚但是,与 [PoolRealArray] 相比,使用通用 "
+"[Array] 存储 [float] 将使用大约 6 å€çš„内存。"
#: doc/classes/PoolRealArray.xml:18
-#, fuzzy
msgid ""
"Constructs a new [PoolRealArray]. Optionally, you can pass in a generic "
"[Array] that will be converted."
-msgstr ""
-"构造一个新的[PackedColorArray]。你å¯ä»¥é€‰æ‹©ä¼ å…¥ä¸€ä¸ªé€šç”¨çš„[Array],它将被转æ¢ã€‚"
+msgstr "构建新的[PoolRealArray]。你å¯ä»¥é€‰æ‹©ä¼ å…¥ä¸€ä¸ªé€šç”¨çš„[Array],它将被转æ¢ã€‚"
#: doc/classes/PoolRealArray.xml:30
-#, fuzzy
msgid "Appends a [PoolRealArray] at the end of this array."
-msgstr "将一个[PackedColorArray]追加到该数组的尾部。"
+msgstr "åœ¨è¿™ä¸ªæ•°ç»„çš„æœ€åŽæ·»åŠ [PoolRealArray]。"
#: doc/classes/PoolRealArray.xml:75
msgid "Changes the float at the given index."
msgstr "更改给定索引处的浮点数。"
#: doc/classes/PoolStringArray.xml:4
-#, fuzzy
msgid "A pooled [Array] of [String]."
-msgstr "一个由压缩的[String]组æˆçš„[Array]。"
+msgstr "[String] çš„ [Array] 集åˆã€‚"
#: doc/classes/PoolStringArray.xml:7
-#, fuzzy
msgid ""
"An [Array] specifically designed to hold [String]s. Optimized for memory "
"usage, does not fragment the memory.\n"
"[b]Note:[/b] This type is passed by value and not by reference."
msgstr ""
-"一个专门设计用æ¥ä¿å­˜å­—符串的[Array]。通过紧密地包装数æ®ï¼Œå½“数组尺寸较大时,这"
-"将节çœä¸€å®šå†…存。\n"
-"[b]注æ„:[/b]è¯¥ç±»åž‹æ˜¯é€šè¿‡å€¼è€Œä¸æ˜¯å¼•用传递的。"
+"[Array] 专门设计用于ä¿å­˜ [String]。针对内存使用进行了优化,ä¸ä¼šé€ æˆå†…存碎"
+"片。\n"
+"[b]注æ„:[/b] è¿™ç§ç±»åž‹æ˜¯æŒ‰å€¼ä¼ é€’ï¼Œè€Œä¸æ˜¯å¼•用传递。"
#: doc/classes/PoolStringArray.xml:18
-#, fuzzy
msgid ""
"Constructs a new [PoolStringArray]. Optionally, you can pass in a generic "
"[Array] that will be converted."
msgstr ""
-"构造一个新的[PackedStringArray]。或者,您å¯ä»¥ä¼ å…¥å°†è¢«è½¬æ¢çš„通用[Array]。"
+"构建新的[PoolStringArray]。你å¯ä»¥é€‰æ‹©ä¼ å…¥ä¸€ä¸ªé€šç”¨çš„[Array],它将被转æ¢ã€‚"
#: doc/classes/PoolStringArray.xml:30
-#, fuzzy
msgid "Appends a [PoolStringArray] at the end of this array."
-msgstr "在此数组末尾追加[PackedStringArray]。"
+msgstr "åœ¨è¿™ä¸ªæ•°ç»„çš„æœ€åŽæ·»åŠ [PoolStringArray]。"
#: doc/classes/PoolStringArray.xml:56
-#, fuzzy
msgid ""
"Returns a [String] with each element of the array joined with the given "
"[code]delimiter[/code]."
-msgstr "返回与给定[code] id [/code]å…³è”的点的æƒé‡æ¯”例。"
+msgstr ""
+"返回一个[String],数组的æ¯ä¸ªå…ƒç´ éƒ½ç”¨ç»™å®šçš„[code]delimiter[/code]分隔符连接。"
#: doc/classes/PoolStringArray.xml:62
msgid "Appends a string element at end of the array."
@@ -52493,20 +52963,17 @@ msgid "Changes the [String] at the given index."
msgstr "更改给定索引处的[String]。"
#: doc/classes/PoolVector2Array.xml:4
-#, fuzzy
msgid "A pooled [Array] of [Vector2]."
-msgstr "[Vector2]的压缩[Array]。"
+msgstr "[Vector2] çš„ [Array] 集åˆã€‚"
#: doc/classes/PoolVector2Array.xml:7
-#, fuzzy
msgid ""
"An [Array] specifically designed to hold [Vector2]. Optimized for memory "
"usage, does not fragment the memory.\n"
"[b]Note:[/b] This type is passed by value and not by reference."
msgstr ""
-"专门设计用æ¥å®¹çº³Vector2çš„[Array]。通过紧密地包装数æ®ï¼Œå½“数组尺寸较大时,这将"
-"节çœä¸€å®šå†…存。\n"
-"[b] 注æ„:[/b]æ­¤ç±»åž‹æ˜¯é€šè¿‡å€¼ä¼ é€’çš„ï¼Œè€Œä¸æ˜¯é€šè¿‡å¼•用传递的。"
+"专门用æ¥ä¿å­˜[Vector2]çš„[Array]。对内存的使用进行了优化,ä¸ä¼šä½¿å†…存碎片化。\n"
+"[b]注æ„:[/b] è¿™ç§ç±»åž‹æ˜¯é€šè¿‡å€¼ä¼ é€’çš„ï¼Œè€Œä¸æ˜¯å¼•用。"
#: doc/classes/PoolVector2Array.xml:11 doc/classes/TileMap.xml:15
#: doc/classes/TileSet.xml:15
@@ -52514,17 +52981,15 @@ msgid "https://godotengine.org/asset-library/asset/519"
msgstr "https://godotengine.org/asset-library/asset/519"
#: doc/classes/PoolVector2Array.xml:18
-#, fuzzy
msgid ""
"Constructs a new [PoolVector2Array]. Optionally, you can pass in a generic "
"[Array] that will be converted."
msgstr ""
-"构造一个新的[PackedVector2Array]。或者,您å¯ä»¥ä¼ å…¥å°†è¢«è½¬æ¢çš„通用[Array]。"
+"构建新的[PoolVector2Array]。你å¯ä»¥é€‰æ‹©ä¼ å…¥ä¸€ä¸ªé€šç”¨çš„[Array],它将被转æ¢ã€‚"
#: doc/classes/PoolVector2Array.xml:30
-#, fuzzy
msgid "Appends a [PoolVector2Array] at the end of this array."
-msgstr "在此数组末尾追加一个[PackedVector2Array]。"
+msgstr "åœ¨è¿™ä¸ªæ•°ç»„çš„æœ€åŽæ·»åŠ [PoolVector2Array]。"
#: doc/classes/PoolVector2Array.xml:55
msgid "Inserts a [Vector2] at the end."
@@ -52535,33 +53000,29 @@ msgid "Changes the [Vector2] at the given index."
msgstr "在给定索引处更改[Vector2]。"
#: doc/classes/PoolVector3Array.xml:4
-#, fuzzy
msgid "A pooled [Array] of [Vector3]."
-msgstr "[Vector3]的压缩[Array]。"
+msgstr "[Vector3] çš„ [Array] 集åˆã€‚"
#: doc/classes/PoolVector3Array.xml:7
-#, fuzzy
msgid ""
"An [Array] specifically designed to hold [Vector3]. Optimized for memory "
"usage, does not fragment the memory.\n"
"[b]Note:[/b] This type is passed by value and not by reference."
msgstr ""
-"专门设计用æ¥å®¹çº³Vector3çš„[Array]。通过紧密地包装数æ®ï¼Œå½“数组尺寸较大时,这将"
-"节çœä¸€å®šå†…存。\n"
-"[b] 注æ„:[/b]æ­¤ç±»åž‹æ˜¯é€šè¿‡å€¼ä¼ é€’çš„ï¼Œè€Œä¸æ˜¯é€šè¿‡å¼•用传递的。"
+"专门设计æ¥å®¹çº³[Vector3]çš„[Array]。对内存的使用进行了优化,ä¸ä¼šä½¿å†…存碎片"
+"化。\n"
+"[b]注æ„:[/b] è¿™ç§ç±»åž‹æ˜¯é€šè¿‡å€¼ä¼ é€’çš„ï¼Œè€Œä¸æ˜¯å¼•用。"
#: doc/classes/PoolVector3Array.xml:17
-#, fuzzy
msgid ""
"Constructs a new [PoolVector3Array]. Optionally, you can pass in a generic "
"[Array] that will be converted."
msgstr ""
-"构造一个新的[PackedVector3Array]。或者,您å¯ä»¥ä¼ å…¥å°†è¢«è½¬æ¢çš„通用[Array]。"
+"构建新的[PoolVector3Array]。你å¯ä»¥é€‰æ‹©ä¼ å…¥ä¸€ä¸ªé€šç”¨çš„[Array],它将被转æ¢ã€‚"
#: doc/classes/PoolVector3Array.xml:29
-#, fuzzy
msgid "Appends a [PoolVector3Array] at the end of this array."
-msgstr "在此数组末尾追加一个[PackedVector3Array]。"
+msgstr "åœ¨è¿™ä¸ªæ•°ç»„çš„æœ€åŽæ·»åŠ [PoolVector3Array]。"
#: doc/classes/PoolVector3Array.xml:54
msgid "Inserts a [Vector3] at the end."
@@ -52576,18 +53037,18 @@ msgid "Base container control for popups and dialogs."
msgstr "用于弹出窗å£å’Œå¯¹è¯æ¡†çš„基本容器控件。"
#: doc/classes/Popup.xml:7
-#, fuzzy
msgid ""
"Popup is a base [Control] used to show dialogs and popups. It's a subwindow "
"and modal by default (see [Control]) and has helpers for custom popup "
"behavior. All popup methods ensure correct placement within the viewport."
msgstr ""
-"å¼¹å‡ºæ¡†æ˜¯ä¸€ä¸ªç”¨äºŽæ˜¾ç¤ºå¯¹è¯æ¡†å’Œå…¶ä»–弹出框的基类[Control].默认,它是一个å­çª—å£å’Œæ¨¡"
-"æ€(å‚阅[Control]),并且有自定义弹出动作的帮助程åº."
+"Popup 是基本的 [Control]ï¼Œç”¨äºŽæ˜¾ç¤ºå¯¹è¯æ¡†å’Œå¼¹å‡ºçª—å£ã€‚默认情况下,它是一个å­çª—"
+"å£å’Œæ¨¡æ€ï¼Œå‚阅 [Control],并具有自定义弹出行为的辅助程åºã€‚所有弹出方法都确ä¿"
+"在视窗中正确放置。"
#: doc/classes/Popup.xml:16
msgid "Popup (show the control in modal form)."
-msgstr ""
+msgstr "弹出窗å£ï¼ˆä»¥æ¨¡æ€å½¢å¼æ˜¾ç¤ºæŽ§ä»¶ï¼‰ã€‚"
#: doc/classes/Popup.xml:23
msgid ""
@@ -52595,6 +53056,8 @@ msgid ""
"to its current canvas transform, at the current size, or at a size "
"determined by [code]size[/code]."
msgstr ""
+"æ ¹æ®ç›¸å¯¹äºŽå½“å‰ç”»å¸ƒè½¬æ¢ã€å½“å‰å¤§å°æˆ–ç”± [code]size[/code] 确定的大å°ï¼Œåœ¨å±å¹•中央"
+"弹出窗å£ï¼ˆä»¥æ¨¡æ€å½¢å¼æ˜¾ç¤ºæŽ§åˆ¶ï¼‰ã€‚"
#: doc/classes/Popup.xml:31
msgid ""
@@ -52603,6 +53066,9 @@ msgid ""
"then ensuring the popup is no larger than the viewport size multiplied by "
"[code]fallback_ratio[/code]."
msgstr ""
+"相对于当å‰ç”»å¸ƒå˜æ¢åœ¨å±å¹•中央弹出(以模æ€å½¢å¼æ˜¾ç¤ºæŽ§ä»¶ï¼‰ï¼Œå°†å¤§å°é™åˆ¶ä¸º"
+"[code]size[/code],并确ä¿å¼¹å‡ºçª—å£ä¸å¤§äºŽè§†å£å¤§å°ä¹˜ä»¥[code] fallback_ratio[/"
+"code]。"
#: doc/classes/Popup.xml:38
msgid ""
@@ -52610,16 +53076,20 @@ msgid ""
"to the current canvas transform, ensuring the size is never smaller than "
"[code]minsize[/code]."
msgstr ""
+"相对于当å‰ç”»å¸ƒå˜æ¢åœ¨å±å¹•中央弹出(以模æ€å½¢å¼æ˜¾ç¤ºæŽ§ä»¶ï¼‰ï¼Œç¡®ä¿å°ºå¯¸æ°¸è¿œä¸ä¼šå°äºŽ "
+"[code]minsize[/code]。"
#: doc/classes/Popup.xml:45
msgid ""
"Popup (show the control in modal form) in the center of the screen relative "
"to the current canvas transform, scaled at a ratio of size of the screen."
msgstr ""
+"相对于当å‰ç”»å¸ƒå˜æ¢åœ¨å±å¹•中央弹出(以模æ€å½¢å¼æ˜¾ç¤ºæŽ§ä»¶ï¼‰ï¼ŒæŒ‰å±å¹•大å°çš„æ¯”例缩"
+"放。"
#: doc/classes/Popup.xml:51
msgid "Shrink popup to keep to the minimum size of content."
-msgstr ""
+msgstr "缩å°å¼¹å‡ºçª—å£ä»¥ä¿æŒå†…容的最å°å¤§å°ã€‚"
#: doc/classes/Popup.xml:57
msgid ""
@@ -52631,6 +53101,12 @@ msgid ""
"ConfirmationDialog.get_cancel] and hide the buttons in question by setting "
"their [member CanvasItem.visible] property to [code]false[/code]."
msgstr ""
+"如果[code]true[/code],当点击事件å‘生在它之外,或者当它收到[code]ui_cancel[/"
+"code]动作事件时,弹出窗å£ä¸ä¼šè¢«éšè—。\n"
+"[b]注æ„:[/b] å¯ç”¨æ­¤å±žæ€§ä¸ä¼šå½±å“ä»Žæ­¤ç±»ç»§æ‰¿çš„å¯¹è¯æ¡†ä¸­å…³é—­æˆ–å–æ¶ˆæŒ‰é’®çš„行为。作"
+"为解决方法,您å¯ä»¥ä½¿ç”¨ [method WindowDialog.get_close_button] 或 [method "
+"ConfirmationDialog.get_cancel] 并通过将其 [member CanvasItem.visible] 属性设"
+"置为 [code]false[/code] æ¥éšè—有问题的按钮。"
#: doc/classes/Popup.xml:65
msgid ""
@@ -52638,35 +53114,33 @@ msgid ""
"to clear the list of options then create a new one according to the current "
"context."
msgstr ""
+"当弹出窗å£å³å°†æ˜¾ç¤ºæ—¶å‘出。这通常在 [PopupMenu] ä¸­ç”¨äºŽæ¸…é™¤é€‰é¡¹åˆ—è¡¨ï¼Œç„¶åŽæ ¹æ®å½“"
+"å‰ä¸Šä¸‹æ–‡åˆ›å»ºä¸€ä¸ªæ–°é€‰é¡¹ã€‚"
#: doc/classes/Popup.xml:70
msgid "Emitted when a popup is hidden."
msgstr "当弹出窗å£è¢«éšè—æ—¶å‘出."
#: doc/classes/Popup.xml:76
-#, fuzzy
msgid "Notification sent right after the popup is shown."
-msgstr "节点被实例化时收到的通知。"
+msgstr "åœ¨å¼¹å‡ºçª—å£æ˜¾ç¤ºåŽç«‹å³å‘é€é€šçŸ¥ã€‚"
#: doc/classes/Popup.xml:79
-#, fuzzy
msgid "Notification sent right after the popup is hidden."
-msgstr "节点被实例化时收到的通知。"
+msgstr "在弹出窗å£è¢«éšè—åŽç«‹å³å‘é€é€šçŸ¥ã€‚"
#: doc/classes/PopupDialog.xml:4
-#, fuzzy
msgid "Base class for popup dialogs."
-msgstr "分离器的基类。"
+msgstr "å¼¹å‡ºå¯¹è¯æ¡†çš„基类。"
#: doc/classes/PopupDialog.xml:7
msgid ""
"PopupDialog is a base class for popup dialogs, along with [WindowDialog]."
-msgstr ""
+msgstr "PopupDialog æ˜¯å¼¹å‡ºå¯¹è¯æ¡†çš„基类,与 [WindowDialog] 一起。"
#: doc/classes/PopupDialog.xml:17
-#, fuzzy
msgid "Sets a custom [StyleBox] for the panel of the [PopupDialog]."
-msgstr "为 [SpinBox] 的上下箭头设置自定义 [Texture2D]。"
+msgstr "为[PopupDialog]çš„é¢æ¿è®¾ç½®è‡ªå®šä¹‰çš„[StyleBox]。"
#: doc/classes/PopupMenu.xml:4
msgid "PopupMenu displays a list of options."
@@ -52826,7 +53300,7 @@ msgstr ""
"code]定义。\n"
"å¯ä»¥é€‰æ‹©æä¾›[code]id[/code],以åŠåŠ é€Ÿå™¨([code]accel[/code])。如果没有æä¾›"
"[code]id[/code],将从索引中创建一个。如果没有æä¾›[code]accel[/code],则默认的"
-"[code]0[/code]将被分é…给它。有关加速器的更多信æ¯ï¼Œè¯·å‚阅[方法"
+"[code]0[/code]将被分é…给它。有关加速器的更多信æ¯ï¼Œè¯·å‚阅[method "
"get_item_accelerator]。"
#: doc/classes/PopupMenu.xml:129
@@ -52968,11 +53442,10 @@ msgid ""
msgstr "返回与指定索引 [code]idx[/code]å…³è”的工具æç¤ºã€‚"
#: doc/classes/PopupMenu.xml:258
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the popup will be hidden when the window loses "
"focus or not."
-msgstr "返回[code]true[/code],如果窗å£å¤±åŽ»ç„¦ç‚¹æ—¶ï¼Œå¼¹å‡ºçª—å£ä¼šè¢«éšè—。"
+msgstr "如果窗å£å¤±åŽ»ç„¦ç‚¹æ—¶æ˜¯å¦éšè—弹出窗å£ï¼Œåˆ™è¿”回 [code]true[/code]。"
#: doc/classes/PopupMenu.xml:265
msgid ""
@@ -53267,7 +53740,7 @@ msgstr "未选中的å•选按钮项目的 [Texture] 图标。"
#: doc/classes/PopupMenu.xml:545
msgid "[StyleBox] used for the separators. See [method add_separator]."
-msgstr "用于分隔符的[StyleBox]。请å‚阅[方法add_separator]。"
+msgstr "用于分隔符的[StyleBox]。请å‚阅[method add_separator]。"
#: doc/classes/PopupMenu.xml:548
msgid "[Texture] icon for the submenu arrow."
@@ -53318,16 +53791,25 @@ msgid ""
"There is no need to place an opposite portal in an adjacent room, links are "
"made two-way automatically."
msgstr ""
+"[Portal] 是一ç§ç‰¹æ®Šç±»åž‹çš„ [MeshInstance],å…许门户剔除系统从一个空间“看到â€åˆ°"
+"å¦ä¸€ä¸ªç©ºé—´ã€‚它们通常对应于水平几何中的门窗。åªå…许 [Camera] é€è¿‡ä¼ é€é—¨çœ‹åˆ°ï¼Œ"
+"è¿™å…许系统剔除空间中无法é€è¿‡ä¼ é€é—¨çœ‹åˆ°çš„æ‰€æœ‰ç‰©ä½“。这是[b]鮿Œ¡å‰”除[/b]的一ç§å½¢"
+"å¼ï¼Œå¯ä»¥å¤§å¤§æé«˜æ€§èƒ½ã€‚\n"
+"Portalçš„å½¢å¼æœ‰ä¸€äº›é™åˆ¶ï¼š\n"
+"它们必须是å•é¢å‡¸å¤šè¾¹å½¢ï¼Œå¹¶ä¸”é€šå¸¸æ‚¨ä¼šå°†å®ƒä»¬çš„æ­£é¢ [b] å‘外 [/b] 从它们所在的 "
+"[Room] 定å‘。顶点应该ä½äºŽä¸€ä¸ªå¹³é¢ä¸Šï¼ˆå°½ç®¡å®ƒä»¬çš„ä½ç½®ä¸å¿…完美)。\n"
+"无需在相邻空间放置对é¢çš„ä¼ é€é—¨ï¼Œå®ƒä»¬ä¼šè‡ªåŠ¨å»ºç«‹åŒå‘链接。"
#: doc/classes/Portal.xml:20 doc/classes/Room.xml:21
msgid "Sets individual points. Primarily for use by the editor."
-msgstr ""
+msgstr "设置å•个点。主è¦ä¾›ç¼–辑器使用。"
#: doc/classes/Portal.xml:26
msgid ""
"This is a shortcut for setting the linked [Room] in the name of the [Portal] "
"(the name is used during conversion)."
msgstr ""
+"这是在[Portal]çš„å称中设置链接[Room]çš„å¿«æ·æ–¹å¼ï¼ˆå称在转æ¢è¿‡ç¨‹ä¸­ä½¿ç”¨ï¼‰ã€‚"
#: doc/classes/Portal.xml:29
msgid ""
@@ -53337,12 +53819,17 @@ msgid ""
"[Portal] node's [member Spatial.global_transform].\n"
"[b]Note:[/b] These raw points are sanitized for winding order internally."
msgstr ""
+"定义 [Portal] 多边形形状的点(应该是凸é¢ï¼‰ã€‚\n"
+"这些是在 2D 中定义的,[code]0,0[/code] 是 [Portal] 节点的 [member Spatial."
+"global_transform] 的原点。\n"
+"[b]注æ„:[/b] 这些原始点会被整ç†ä»¥ä¾¿åœ¨å†…部缠绕顺åºã€‚"
#: doc/classes/Portal.xml:34
msgid ""
"Visibility through [Portal]s can be turned on and off at runtime - this is "
"useful for having closable doors."
msgstr ""
+"å¯ä»¥åœ¨è¿è¡Œæ—¶æ‰“开和关闭通过 [Portal] çš„å¯è§æ€§ - 这对于具有å¯å…³é—­çš„门很有用。"
#: doc/classes/Portal.xml:37
msgid ""
@@ -53351,12 +53838,17 @@ msgid ""
"to be assigned to neighbouring rooms, you can assign an extra margin through "
"the [Portal] to allow objects to breach without sprawling."
msgstr ""
+"有些物体éžå¸¸å¤§ï¼Œä»¥è‡³äºŽå®ƒä»¬å¯èƒ½ä¼šå‡ºçŽ°åœ¨ä¸æ­¢ä¸€ä¸ª [Room]中(“蔓延â€ï¼‰ã€‚由于我们通"
+"常ä¸å¸Œæœ›å°†*åªæ˜¯*çªç ´è¾¹ç¼˜çš„对象分é…给相邻的房间,因此您å¯ä»¥é€šè¿‡ [Portal] 分é…"
+"é¢å¤–的边è·ï¼Œä»¥å…许对象在ä¸è”“延的情况下çªç ´ã€‚"
#: doc/classes/Portal.xml:40
msgid ""
"Portals default to being two way - see through in both directions, however "
"you can make them one way, visible from the source room only."
msgstr ""
+"Portal默认为åŒå‘ - 在两个方å‘都å¯ä»¥çœ‹åˆ°ï¼Œä½†æ˜¯æ‚¨å¯ä»¥å°†å®ƒä»¬è®¾ä¸ºä¸€ç§ä»Žæºæˆ¿é—´å¯è§"
+"的方å¼ã€‚"
#: doc/classes/Portal.xml:43
msgid ""
@@ -53365,6 +53857,10 @@ msgid ""
"If you want to override this default, set this value to [code]false[/code], "
"and the local [member portal_margin] will take effect."
msgstr ""
+"在大多数情况下,您会希望在Portal中使用默认的 [Portal] è¾¹è·ï¼ˆè¿™æ˜¯åœ¨ "
+"[RoomManager] 中设置的)。\n"
+"如果è¦è¦†ç›–这个默认值,把这个值设置为[code]false[/code],本地的[member "
+"portal_margin]就会生效。"
#: doc/classes/Position2D.xml:4
msgid "Generic 2D position hint for editing."
@@ -53429,16 +53925,15 @@ msgstr ""
"[/codeblock]"
#: doc/classes/PrimitiveMesh.xml:29
-#, fuzzy
msgid ""
"If set, the order of the vertices in each triangle are reversed resulting in "
"the backside of the mesh being drawn.\n"
"This gives the same result as using [constant SpatialMaterial.CULL_BACK] in "
"[member SpatialMaterial.params_cull_mode]."
msgstr ""
-"如果设置,æ¯ä¸ªä¸‰è§’形中顶点的顺åºé¢ å€’,导致网格的背é¢è¢«ç»˜åˆ¶ã€‚\n"
-"这给出了与使用[constant BaseMaterial3D相åŒçš„结果。在[member BaseMaterial3D."
-"cull_mode]中的CULL_BACK]。"
+"如果设置,则æ¯ä¸ªä¸‰è§’形中顶点的顺åºä¼šé¢ å€’,从而绘制网格的背é¢ã€‚\n"
+"这与在 [member SpatialMaterial.params_cull_mode] 中使用 [constant "
+"SpatialMaterial.CULL_BACK] 的结果相åŒã€‚"
#: doc/classes/PrimitiveMesh.xml:33
msgid "The current [Material] of the primitive mesh."
@@ -53471,13 +53966,11 @@ msgid "Number of added edge loops along the X axis."
msgstr "沿X轴添加的边循环数。"
#: doc/classes/ProceduralSky.xml:4
-#, fuzzy
msgid ""
"Type of [Sky] that is generated procedurally based on user input parameters."
-msgstr "与[Sky]一起使用的[Material]æ ¹æ®ç”¨æˆ·è¾“入傿•°ç”ŸæˆèƒŒæ™¯ã€‚"
+msgstr "æ ¹æ®ç”¨æˆ·è¾“å…¥çš„å‚æ•°æŒ‰ç¨‹åºç”Ÿæˆçš„[Sky]类型。"
#: doc/classes/ProceduralSky.xml:7
-#, fuzzy
msgid ""
"ProceduralSky provides a way to create an effective background quickly by "
"defining procedural parameters for the sun, the sky and the ground. The sky "
@@ -53494,20 +53987,18 @@ msgid ""
"relatively frequently, as it is updated on a background thread when multi-"
"threading is available."
msgstr ""
-"ProceduralSkyMaterial通过定义太阳ã€å¤©ç©ºå’Œåœ°é¢çš„程åºå‚数,æä¾›äº†ä¸€ç§å¿«é€Ÿåˆ›å»ºæœ‰"
-"效背景的方法。天空和地é¢éžå¸¸ç›¸ä¼¼ï¼Œå®ƒä»¬ç”±åœ°å¹³çº¿ä¸Šçš„一ç§é¢œè‰²ã€å¦ä¸€ç§é¢œè‰²ä»¥åŠæœ€"
-"åŽæ’入这两ç§é¢œè‰²ä¹‹é—´çš„缓和曲线æ¥å®šä¹‰ã€‚类似地,太阳由天空中的ä½ç½®ã€é¢œè‰²å’Œç¼“å’Œ"
-"æ›²çº¿æ¥æè¿°ã€‚ç„¶è€Œï¼Œå¤ªé˜³è¿˜å®šä¹‰äº†æœ€å°å’Œæœ€å¤§è§’度,这两个值定义了缓和曲线从太阳开"
-"始和结æŸçš„è·ç¦»ï¼Œä»Žè€Œæœ€ç»ˆå®šä¹‰äº†å¤ªé˜³åœ¨å¤©ç©ºä¸­çš„大å°ã€‚\n"
-"[ProceduralSkyMaterial]使用轻é‡çº§ç€è‰²å™¨ç»˜åˆ¶å¤©ç©ºï¼Œå› æ­¤é€‚åˆå®žæ—¶æ›´æ–°ã€‚当你ä¸éœ€è¦"
-"一个ä¸çŽ°å®žçš„å¿«é€Ÿå¤©ç©ºæ—¶ï¼Œè¿™æ˜¯ä¸€ä¸ªå¾ˆå¥½çš„é€‰æ‹©ã€‚\n"
-"[ProceduralSkyMaterial]最多支æŒ4个太阳。æ¯ä¸ªå¤ªé˜³éƒ½ä»Žåœºæ™¯ä¸­ç›¸åº”çš„"
-"[DirectionalLight3D]获å–其颜色ã€èƒ½é‡å’Œæ–¹å‘。"
+"ProceduralSkyæä¾›äº†ä¸€ç§æ–¹æ³•,通过定义太阳ã€å¤©ç©ºå’Œåœ°é¢çš„ç¨‹åºæ€§å‚数,以快速创建"
+"一个有效的背景。天空和地é¢éžå¸¸ç›¸ä¼¼ï¼Œå®ƒä»¬æ˜¯ç”±åœ°å¹³çº¿ä¸Šçš„两ç§é¢œè‰²ä»¥åŠåœ¨è¿™ä¸¤ç§é¢œ"
+"色之间æ’值æ¸å˜æ›²çº¿æ¥å®šä¹‰ã€‚åŒæ ·ï¼Œå¤ªé˜³ä¹Ÿæ˜¯ç”±å¤©ç©ºä¸­çš„ä½ç½®ã€é¢œè‰²å’Œå¹³ç¼“æ›²çº¿æ¥æ"
+"è¿°ã€‚åŒæ—¶ï¼Œå¤ªé˜³ä¹Ÿå®šä¹‰äº†æœ€å°å’Œæœ€å¤§çš„角度,这两个值定义了太阳从开始和结æŸçš„è·ç¦»"
+"的平缓曲线,进而,最终定义了天空中太阳的大å°ã€‚\n"
+"åœ¨å‚æ•°æ”¹å˜åŽï¼Œç¨‹åºæ€§å¤©ç©ºä¼šåœ¨CPU上更新。它被存储在一个纹ç†ä¸­ï¼Œç„¶åŽåœ¨åœºæ™¯ä¸­ä½œä¸º"
+"背景显示。这使得它相对æ¥è¯´ï¼Œä¸é€‚åˆåœ¨æ¸¸æˆè¿›è¡Œè¿‡ç¨‹ä¸­å®žæ—¶æ›´æ–°ã€‚但,如果纹ç†å°ºå¯¸"
+"足够å°ï¼Œå®ƒä»ç„¶å¯ä»¥ç›¸å¯¹é¢‘ç¹åœ°æ›´æ–°ï¼Œå› ä¸ºå½“多线程å¯ç”¨æ—¶ï¼Œå®ƒæ˜¯åœ¨åŽå°çº¿ç¨‹ä¸Šã€‚"
#: doc/classes/ProceduralSky.xml:16
-#, fuzzy
msgid "Color of the ground at the bottom."
-msgstr "标题文字的颜色。"
+msgstr "底部地é¢çš„颜色。"
#: doc/classes/ProceduralSky.xml:19
msgid ""
@@ -53546,40 +54037,38 @@ msgid "Distance from center of sun where it fades out completely."
msgstr "è·ç¦»å¤ªé˜³ä¸­å¿ƒçš„è·ç¦»ï¼Œåœ¨é‚£é‡Œå®ƒå®Œå…¨æ¶ˆå¤±ã€‚"
#: doc/classes/ProceduralSky.xml:43
-#, fuzzy
msgid "Distance from sun where it goes from solid to starting to fade."
-msgstr "è·ç¦»å¤ªé˜³ä¸­å¿ƒçš„è·ç¦»ï¼Œåœ¨é‚£é‡Œå®ƒå®Œå…¨æ¶ˆå¤±ã€‚"
+msgstr "太阳从å‡å›ºåˆ°å¼€å§‹è¤ªè‰²çš„è·ç¦»ã€‚"
#: doc/classes/ProceduralSky.xml:46
msgid "The sun's color."
msgstr "太阳的颜色。"
#: doc/classes/ProceduralSky.xml:49
-#, fuzzy
msgid ""
"How quickly the sun fades away between [member sun_angle_min] and [member "
"sun_angle_max]."
-msgstr "太阳在太阳圆盘边缘和 [member sun_angle_max]之间消失的速度有多快。"
+msgstr ""
+"在 [member sun_angle_min] å’Œ [member sun_angle_max] 之间,太阳消é€çš„速度。"
#: doc/classes/ProceduralSky.xml:52
-#, fuzzy
msgid "Amount of energy contribution from the sun."
-msgstr "æ¥è‡ªå¤©ç©ºçš„能é‡è´¡çŒ®é‡ã€‚"
+msgstr "æ¥è‡ªå¤ªé˜³çš„能é‡è´¡çŒ®é‡ã€‚"
#: doc/classes/ProceduralSky.xml:55
msgid "The sun's height using polar coordinates."
msgstr "用æžå标计算太阳的高度。"
#: doc/classes/ProceduralSky.xml:58
-#, fuzzy
msgid "The direction of the sun using polar coordinates."
-msgstr "ç¢°æ’žç‚¹ï¼Œä»¥å…¨å±€åæ ‡è¡¨ç¤ºã€‚"
+msgstr "用æžå标表示太阳的方å‘。"
#: doc/classes/ProceduralSky.xml:61
msgid ""
"Size of [Texture] that the ProceduralSky will generate. The size is set "
"using [enum TextureSize]."
msgstr ""
+"ProceduralSky将生æˆçš„[Texture]的大å°ã€‚è¯¥å¤§å°æ˜¯ç”¨[enum TextureSize]æ¥è®¾ç½®çš„。"
#: doc/classes/ProceduralSky.xml:66
msgid "Sky texture will be 256x128."
@@ -53645,7 +54134,6 @@ msgid "Contains global variables accessible from everywhere."
msgstr "包å«å¯ä»Žä»»ä½•地方访问的全局å˜é‡ã€‚"
#: doc/classes/ProjectSettings.xml:7
-#, fuzzy
msgid ""
"Contains global variables accessible from everywhere. Use [method "
"get_setting], [method set_setting] or [method has_setting] to access them. "
@@ -53669,16 +54157,22 @@ msgid ""
"[i]also[/i] override the setting with the desired feature tags if you want "
"them to override base project settings on all platforms and configurations."
msgstr ""
-"包å«å¯ä»Žä»»ä½•地方访问的全局å˜é‡ã€‚使用[method get_setting],[method "
+"包å«å¯ä»¥ä»Žä»»ä½•地方访问的全局å˜é‡ã€‚使用[method get_setting]ã€[method "
"set_setting]或[method has_setting]æ¥è®¿é—®å®ƒä»¬ã€‚存储在[code]project.godot[/"
-"code]中的å˜é‡ä¹Ÿè¢«åŠ è½½åˆ°ProjectSettings中,这使得这个对象对于读å–自定义游æˆé…"
-"置选项éžå¸¸æœ‰ç”¨ã€‚\n"
-"命å项目设置属性时,请使用包å«ç±»åˆ«çš„设置的完整路径。例如,项目åç§°çš„ "
-"[code]\"application/config/name\"[/code]。类别和属性åç§°å¯ä»¥åœ¨â€œé¡¹ç›®è®¾ç½®â€å¯¹è¯"
-"框中查看。\n"
-"[b]覆盖:[/b]通过在项目的根目录中创建å为[code]override.cfg[/code]的文件,å¯ä»¥"
-"覆盖任何项目设置。这也å¯ä»¥åœ¨å¯¼å‡ºçš„项目中使用,方法是将该文件与项目二进制文件"
-"放在åŒä¸€ä¸ªç›®å½•中。"
+"code]中的å˜é‡ä¹Ÿè¢«åŠ è½½åˆ°ProjectSettings中,使得这个对象对于读å–自定义游æˆé…ç½®"
+"选项时éžå¸¸æœ‰ç”¨ã€‚\n"
+"当命å一个项目设置属性时,使用设置的完整路径,包括类别。例如,"
+"[code]\"application/config/name\"[/code]为项目å称。类别和属性åç§°å¯ä»¥åœ¨é¡¹ç›®"
+"è®¾ç½®å¯¹è¯æ¡†ä¸­æŸ¥çœ‹ã€‚\n"
+"[b]特性标签:[/b] å¯ä»¥ä½¿ç”¨[url=https://docs.godotengine.org/zh_CN/latest/"
+"tutorials/export/feature_tags.html]特性标签[/url]为特定的平å°å’Œé…置(调试ã€å‘"
+"布...)覆盖项目设置。\n"
+"[b]覆盖:[/b] 任何项目设置都å¯ä»¥é€šè¿‡åœ¨é¡¹ç›®çš„æ ¹ç›®å½•下创建一个å为 "
+"[code]override.cfg[/code] 的文件æ¥è¦†ç›–。这也å¯ä»¥åœ¨å¯¼å‡ºçš„项目中使用,把这个文"
+"件放在与项目二进制文件相åŒçš„目录下。覆盖ä»ä¼šè€ƒè™‘基本项目设置[url=https://"
+"docs.godotengine.org/zh_CN/latest/tutorials/export/feature_tags.html]功能标签"
+"[/url]。因此,如果你想让它们在所有平å°å’Œé…置上覆盖基本项目设置,请确ä¿[i]也[/"
+"i]用所需的特性标签覆盖该设置。"
#: doc/classes/ProjectSettings.xml:22
msgid ""
@@ -53772,13 +54266,33 @@ msgid ""
" path = OS.get_executable_path().get_base_dir().plus_file(\"hello.txt\")\n"
"[/codeblock]"
msgstr ""
+"返回与本地化 [code]path[/code](以 [code]res://[/code] 或 [code]user://[/"
+"code] 开头)相对应的ç»å¯¹åŽŸç”Ÿ OS 路径。返回的路径将因æ“作系统和用户首选项而"
+"异。请å‚阅 [url=https://docs.godotengine.org/zh_CN/stable/tutorials/io/"
+"data_paths.html]Godot 项目中的文件路径[/url] 以查看这些路径转æ¢ä¸ºä»€ä¹ˆã€‚å¦è§"
+"[method localize_path]。\n"
+"[b]注æ„:[/b] [method globalize_path] with [code]res://[/code] 在导出的项目中"
+"ä¸èµ·ä½œç”¨ã€‚相å,当从导出的项目è¿è¡Œæ—¶ï¼Œå°†å¯æ‰§è¡Œæ–‡ä»¶çš„基目录添加到路径中:\n"
+"[codeblock]\n"
+"var path = \"\"\n"
+"if OS.has_feature(\"editor\"):\n"
+" # 从编辑器二进制文件è¿è¡Œã€‚\n"
+" # `path` 将包å«ä½äºŽé¡¹ç›®æ ¹ç›®å½•中的 `hello.txt` çš„ç»å¯¹è·¯å¾„。\n"
+" path = ProjectSettings.globalize_path(\"res://hello.txt\")\n"
+"else:\n"
+" # 从导出的项目è¿è¡Œã€‚\n"
+" # `path` 将包å«å¯æ‰§è¡Œæ–‡ä»¶æ—边的 `hello.txt` çš„ç»å¯¹è·¯å¾„。\n"
+" # 这与使用 `ProjectSettings.globalize_path()` å’Œ `res://` 路径*ä¸*相"
+"åŒï¼Œ\n"
+" # 但在目的上足够接近。\n"
+" path = OS.get_executable_path().get_base_dir().plus_file(\"hello.txt\")\n"
+"[/codeblock]"
#: doc/classes/ProjectSettings.xml:91
msgid "Returns [code]true[/code] if a configuration value is present."
msgstr "如果存在é…置值,则返回[code]true[/code]。"
#: doc/classes/ProjectSettings.xml:100
-#, fuzzy
msgid ""
"Loads the contents of the .pck or .zip file specified by [code]pack[/code] "
"into the resource filesystem ([code]res://[/code]). Returns [code]true[/"
@@ -53791,11 +54305,13 @@ msgid ""
"specify the offset in bytes to the start of the resource pack. This is only "
"supported for .pck files."
msgstr ""
-"将由[code]pack[/code]指定的*.pck或*.zipæ–‡ä»¶çš„å†…å®¹åŠ è½½åˆ°èµ„æºæ–‡ä»¶ç³»ç»Ÿ"
-"([code]res://[/code])。æˆåŠŸæ—¶è¿”å›ž[code]true[/code]。\n"
-"[b]注æ„:[/b] 如果[code]pack[/code]ä¸­çš„æ–‡ä»¶ä¸Žèµ„æºæ–‡ä»¶ç³»ç»Ÿä¸­å·²ç»å­˜åœ¨çš„æ–‡ä»¶æœ‰ç›¸"
-"åŒçš„路径,任何试图加载该文件的å°è¯•将使用[code]pack[/code]中的文件,除éž"
-"[code]replace_files[/code]被设置为[code]false[/code]。"
+"å°†[code]pack[/code]指定的.pck或.zipæ–‡ä»¶çš„å†…å®¹åŠ è½½åˆ°èµ„æºæ–‡ä»¶ç³»ç»Ÿï¼ˆ[code]res://"
+"[/code])。æˆåŠŸæ—¶è¿”å›ž[code]true[/code]。\n"
+"[b]注æ„:[/b] 如果[code]pack[/code]中的文件与已ç»åœ¨èµ„æºæ–‡ä»¶ç³»ç»Ÿä¸­çš„æ–‡ä»¶è·¯å¾„相"
+"åŒï¼Œå°è¯•加载该文件时,将使用[code]pack[/code]中的文件,除éž"
+"[code]replace_files[/code] 被设置为[code]false[/code]。\n"
+"[b]注æ„:[/b] å¯é€‰çš„[code]offset[/code]傿•°ï¼Œå¯ä»¥ç”¨æ¥æŒ‡å®šèµ„æºåŒ…开始的字节åç§»"
+"é‡ã€‚è¿™åªæ”¯æŒ.pck文件。"
#: doc/classes/ProjectSettings.xml:109
msgid ""
@@ -53803,6 +54319,8 @@ msgid ""
"to the absolute, native OS [code]path[/code]. See also [method "
"globalize_path]."
msgstr ""
+"返回对应于ç»å¯¹åŽŸç”Ÿ OS [code]path[/code] 的本地化路径(以 [code]res://[/code] "
+"开头)。å¦è§[method globalize_path]。"
#: doc/classes/ProjectSettings.xml:116
msgid ""
@@ -53825,9 +54343,12 @@ msgid ""
"want to change project settings in exported projects, use [method "
"save_custom] to save [code]override.cfg[/code] file."
msgstr ""
+"å°†é…ç½®ä¿å­˜åˆ° [code]project.godot[/code] 文件中。\n"
+"[b]注æ„:[/b]此方法是为编辑器æ’件使用的,因为修改åŽçš„[ProjectSettings]无法在"
+"è¿è¡Œçš„应用程åºä¸­åŠ è½½å›žæ¥ã€‚å¦‚æžœè¦æ›´æ”¹å¯¼å‡ºé¡¹ç›®ä¸­çš„项目设置,请使用 [method "
+"save_custom] ä¿å­˜ [code]override.cfg[/code] 文件。"
#: doc/classes/ProjectSettings.xml:137
-#, fuzzy
msgid ""
"Saves the configuration to a custom file. The file extension must be [code]."
"godot[/code] (to save in text-based [ConfigFile] format) or [code].binary[/"
@@ -53835,8 +54356,10 @@ msgid ""
"code] file, which is also text, but can be used in exported projects unlike "
"other formats."
msgstr ""
-"å°†é…ç½®ä¿å­˜åˆ°è‡ªå®šä¹‰æ–‡ä»¶ä¸­ã€‚文件扩展å必须是[code].godot[/code](以基于文本的"
-"[ConfigFile]æ ¼å¼ä¿å­˜)或[code].binary[/code](以二进制格å¼ä¿å­˜)。"
+"å°†é…ç½®ä¿å­˜åˆ°è‡ªå®šä¹‰æ–‡ä»¶ã€‚文件扩展å必须是[code].godot[/code](以基于文本的"
+"[ConfigFile]æ ¼å¼ä¿å­˜ï¼‰æˆ–[code].binary[/code](以二进制格å¼ä¿å­˜ï¼‰ã€‚你也å¯ä»¥ä¿"
+"存为[code]override.cfg[/code]文件,它也是文本,但与其他格å¼ä¸åŒï¼Œå¯ä»¥åœ¨å¯¼å‡ºçš„"
+"项目中使用。"
#: doc/classes/ProjectSettings.xml:145
msgid ""
@@ -53876,6 +54399,13 @@ msgid ""
"export preset under [code]Plugins[/code] section. The singleton to access in "
"code was also renamed to [code]GodotPayment[/code]."
msgstr ""
+"逗å·åˆ†éš”的自定义 Android 模å—列表(必须已在 Android 导出模æ¿ä¸­æž„建)使用其 "
+"Java 包路径,例如[code]\"org/godotengine/godot/MyCustomSingleton,com/example/"
+"foo/FrenchFriesFactory\"[/code]。\n"
+"[b]注æ„:[/b] 自 Godot 3.2.2 起,[code]org/godotengine/godot/GodotPaymentV3[/"
+"code] 模å—被弃用,å–而代之的是 [code]GodotPayment[/code] æ’件,该æ’件应在 "
+"Android 中å¯ç”¨åœ¨ [code]Plugins[/code] 部分下导出预设。在代ç ä¸­è®¿é—®çš„å•例也被"
+"é‡å‘½å为 [code]GodotPayment[/code]。"
#: doc/classes/ProjectSettings.xml:175
msgid "Background color for the boot splash."
@@ -53935,13 +54465,12 @@ msgid ""
msgstr "用于项目的图标,在项目加载时设置。导出时也将尽å¯èƒ½ä½¿ç”¨æ­¤å›¾æ ‡ã€‚"
#: doc/classes/ProjectSettings.xml:197
-#, fuzzy
msgid ""
"Icon set in [code].icns[/code] format used on macOS to set the game's icon. "
"This is done automatically on start by calling [method OS.set_native_icon]."
msgstr ""
-"设置[code].icns[/code]æ ¼å¼å›¾æ ‡ï¼Œç”¨äºŽåœ¨macOS上设置游æˆå›¾æ ‡ã€‚这是在å¯åŠ¨æ—¶é€šè¿‡è°ƒ"
-"用[method DisplayServer.set_native_icon]自动完æˆçš„。"
+"在macOS上使用的[code].icns[/code]æ ¼å¼çš„图标集,用于设置游æˆçš„图标。这在å¯åŠ¨æ—¶"
+"通过调用[method OS.set_native_icon]自动完æˆã€‚"
#: doc/classes/ProjectSettings.xml:200
msgid ""
@@ -53957,9 +54486,15 @@ msgid ""
"tutorials/io/data_paths.html]Data paths[/url] in the documentation for more "
"information."
msgstr ""
+"项目å称。它由项目ç»ç†å’Œå‡ºå£å•†ä½¿ç”¨ã€‚å¯ä»¥é€šè¿‡ç¿»è¯‘本地化文件中的值æ¥ç¿»è¯‘项目å"
+"ç§°ã€‚çª—å£æ ‡é¢˜å°†è®¾ç½®ä¸ºåœ¨å¯åŠ¨æ—¶è‡ªåŠ¨åŒ¹é…项目å称。\n"
+"[b]注æ„:[/b] 如果 [member application/config/use_custom_user_dir] 为 "
+"[code]false[/code]ï¼Œæ›´æ”¹æ­¤å€¼ä¹Ÿä¼šæ›´æ”¹ç”¨æˆ·æ•°æ®æ–‡ä»¶å¤¹çš„路径。é‡å‘½å项目åŽï¼Œæ‚¨å°†"
+"无法å†è®¿é—® [code]user://[/code] 中的现有数æ®ï¼Œé™¤éžæ‚¨é‡å‘½åæ—§æ–‡ä»¶å¤¹ä»¥åŒ¹é…æ–°é¡¹"
+"ç›®å称。有关更多信æ¯ï¼Œè¯·å‚阅文档中的 [url=https://docs.godotengine.org/zh_CN/"
+"stable/tutorials/io/data_paths.html]æ•°æ®è·¯å¾„[/url]。"
#: doc/classes/ProjectSettings.xml:204
-#, fuzzy
msgid ""
"Specifies a file to override project settings. For example: [code]user://"
"custom_settings.cfg[/code]. See \"Overriding\" in the [ProjectSettings] "
@@ -53967,9 +54502,10 @@ msgid ""
"[b]Note:[/b] Regardless of this setting's value, [code]res://override.cfg[/"
"code] will still be read to override the project settings."
msgstr ""
-"æŒ‡å®šè¦æ›¿ä»£é¡¹ç›®è®¾ç½®çš„æ–‡ä»¶ã€‚例如:[code]user://custom_settings.cfg[/code]。\n"
-"[b] 注æ„:[/b]无论此设置的值是多少,[code]res://override.cfg[/code]ä»å°†è¢«è¯»å–"
-"以覆盖项目设置(请å‚阅顶部的此类说明)。"
+"指定一个文件æ¥è¦†ç›–项目设置。比如说。[code]user://custom_settings.cfg[/code]。"
+"å‚è§[ProjectSettings]顶部类æè¿°ä¸­çš„ \"Overriding\" ä»¥èŽ·å–æ›´å¤šä¿¡æ¯ã€‚\n"
+"[b]注æ„:[/b]ä¸ç®¡è¿™ä¸ªè®¾ç½®çš„值如何,[code]res://override.cfg[/code]ä»ç„¶ä¼šè¢«è¯»"
+"å–æ¥è¦†ç›–项目设置。"
#: doc/classes/ProjectSettings.xml:208
msgid ""
@@ -54000,15 +54536,21 @@ msgid ""
"default can impact compatibility with some external tools or plugins which "
"expect the default [code].import[/code] folder."
msgstr ""
+"如果 [code]true[/code],项目将使用一个éšè—目录([code].import[/code])æ¥å­˜å‚¨"
+"项目特定的数æ®ï¼ˆå…ƒæ•°æ®ã€ç€è‰²å™¨ç¼“存等)。\n"
+"如果 [code]false[/code],将使用éžéšè—目录 ([code]import[/code])。\n"
+"[b]注æ„:[/b]更改此设置åŽé‡æ–°å¯åŠ¨åº”ç”¨ç¨‹åºã€‚\n"
+"[b]注æ„:[/b] 更改此值有助于在平å°ä¸Šæˆ–使用ä¸å…许éšè—目录模å¼çš„第三方工具。仅"
+"å½“æ‚¨çŸ¥é“æ‚¨çš„çŽ¯å¢ƒéœ€è¦æ—¶æ‰ä¿®æ”¹æ­¤è®¾ç½®ï¼Œå› ä¸ºæ›´æ”¹é»˜è®¤è®¾ç½®ä¼šå½±å“与æŸäº›éœ€è¦é»˜è®¤ "
+"[code].import[/code] 文件夹的外部工具或æ’件的兼容性。"
#: doc/classes/ProjectSettings.xml:217
-#, fuzzy
msgid ""
"Icon set in [code].ico[/code] format used on Windows to set the game's icon. "
"This is done automatically on start by calling [method OS.set_native_icon]."
msgstr ""
-"设置[code].ico[/code]æ ¼å¼å›¾æ ‡ï¼Œåœ¨Windows上用于设置游æˆå›¾æ ‡ã€‚这是在å¯åŠ¨æ—¶é€šè¿‡"
-"调用[method DisplayServer.set_native_icon]自动完æˆçš„。"
+"以[code].ico[/code]æ ¼å¼è®¾ç½®çš„图标,在Windows上用于设置游æˆçš„图标。这在å¯åŠ¨æ—¶"
+"通过调用[method OS.set_native_icon]自动完æˆã€‚"
#: doc/classes/ProjectSettings.xml:220
msgid ""
@@ -54023,6 +54565,13 @@ msgid ""
"initially activated. It will only be active on machines where performance is "
"adequate to render frames at the refresh rate."
msgstr ""
+"帧增é‡çš„æ—¶é—´æ ·æœ¬ä¼šå—到平å°å¼•å…¥çš„éšæœºå˜åŒ–的影å“,å³ä½¿ç”±äºŽ V-Sync 以固定间隔显"
+"示帧也是如此。这会导致抖动。通过过滤输入增é‡ä»¥æ ¡æ­£åˆ·æ–°çŽ‡çš„å¾®å°æ³¢åŠ¨ï¼Œå¢žé‡å¹³æ»‘"
+"通常å¯ä»¥æä¾›æ›´å¥½çš„结果。\n"
+"[b]注æ„:[/b] Delta 平滑仅在 [member display/window/vsync/use_vsync] 开坿—¶å°"
+"试,因为它在没有 V-Sync 的情况下无法正常工作。\n"
+"åœ¨æœ€åˆæ¿€æ´»å¹³æ»‘之å‰ï¼Œä»¥ç¨³å®šçš„帧速率å¯èƒ½éœ€è¦å‡ ç§’钟的时间。它åªä¼šåœ¨æ€§èƒ½è¶³ä»¥ä»¥åˆ·"
+"新率渲染帧的机器上激活。"
#: doc/classes/ProjectSettings.xml:225
msgid ""
@@ -54030,6 +54579,8 @@ msgid ""
"just after the drawing has taken place. This may lead to more consistent "
"deltas and a reduction in frame stutters."
msgstr ""
+"[b]实验性的。[/b] å°†æ¯ä¸€å¸§çš„delta时间的测é‡è½¬ç§»åˆ°ç»˜å›¾å‘生之åŽã€‚è¿™å¯èƒ½ä¼šå¯¼è‡´æ›´"
+"一致的延迟和å‡å°‘帧的åœé¡¿ã€‚"
#: doc/classes/ProjectSettings.xml:228
msgid ""
@@ -54039,6 +54590,10 @@ msgid ""
"application/run/disable_stdout].\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
+"如果 [code]true[/code],则ç¦ç”¨æ‰“å°åˆ°æ ‡å‡†é”™è¯¯ã€‚如果 [code]true[/code],这也会"
+"éšè—ç”± [method @GDScript.push_error] å’Œ [method @GDScript.push_warning] 打å°"
+"的错误和警告消æ¯ã€‚å¦è§[member application/run/disable_stdout]。\n"
+"对此设置的更改åªä¼šåœ¨é‡æ–°å¯åŠ¨åº”ç”¨ç¨‹åºæ—¶åº”用。"
#: doc/classes/ProjectSettings.xml:232
msgid ""
@@ -54047,6 +54602,10 @@ msgid ""
"command line argument. See also [member application/run/disable_stderr].\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
+"如果 [code]true[/code],则ç¦ç”¨æ‰“å°åˆ°æ ‡å‡†è¾“出。这相当于使用 [code]--quiet[/"
+"code] å‘½ä»¤è¡Œå‚æ•°å¯åŠ¨ç¼–è¾‘å™¨æˆ–é¡¹ç›®ã€‚å¦è§[member application/run/"
+"disable_stderr]。\n"
+"对此设置的更改åªä¼šåœ¨é‡æ–°å¯åŠ¨åº”ç”¨ç¨‹åºæ—¶åº”用。"
#: doc/classes/ProjectSettings.xml:236
msgid ""
@@ -54063,6 +54622,15 @@ msgid ""
"([code]stderr[/code]) is always flushed when a line is printed to it.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
+"如果 [code]true[/code]ï¼Œåˆ™æ¯æ¬¡æ‰“å°ä¸€è¡Œæ—¶åˆ·æ–°æ ‡å‡†è¾“出æµã€‚这会影å“终端日志记录"
+"和文件日志记录。\n"
+"è¿è¡Œé¡¹ç›®æ—¶ï¼Œå¦‚果希望由 systemd/journalctl ç­‰æœåŠ¡ç®¡ç†å™¨æ”¶é›†æ—¥å¿—,则必须å¯ç”¨æ­¤"
+"设置。默认情况下,在å‘布版本中ç¦ç”¨æ­¤è®¾ç½®ï¼Œå› ä¸ºå¦‚果快速连续打å°å¤§é‡è¡Œï¼Œåˆ™åœ¨æ¯"
+"个打å°è¡Œä¸Šåˆ·æ–°éƒ½ä¼šå¯¹æ€§èƒ½äº§ç”Ÿè´Ÿé¢å½±å“。此外,如果å¯ç”¨æ­¤è®¾ç½®ï¼Œå¦‚果应用程åºå´©æºƒ"
+"或以其他方å¼è¢«ç”¨æˆ·æ€æ­»ï¼ˆä¸ä¼šâ€œæ­£å¸¸â€å…³é—­ï¼‰ï¼Œåˆ™ä»ä¼šæˆåŠŸå†™å…¥æ—¥å¿—æ–‡ä»¶ã€‚\n"
+"[b]注æ„:[/b] æ— è®ºæ­¤è®¾ç½®å¦‚ä½•ï¼Œæ ‡å‡†é”™è¯¯æµ ([code]stderr[/code]) 在打å°ä¸€è¡Œæ—¶æ€»"
+"是被刷新。\n"
+"对此设置的更改åªä¼šåœ¨é‡æ–°å¯åŠ¨åº”ç”¨ç¨‹åºæ—¶åº”用。"
#: doc/classes/ProjectSettings.xml:242
msgid ""
@@ -54070,6 +54638,9 @@ msgid ""
"performance is less important during debugging.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
+"调试构建覆盖[member application/run/flush_stdout_on_print],因为在调试过程中"
+"性能ä¸é‚£ä¹ˆé‡è¦ã€‚\n"
+"ä»…åœ¨é‡æ–°å¯åŠ¨åº”ç”¨ç¨‹åºæ—¶æ‰ä¼šåº”用此设置的更改。"
#: doc/classes/ProjectSettings.xml:246
msgid ""
@@ -54151,14 +54722,18 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-"音频的输出延迟(毫秒)。较低的值将导致较低的音频延迟,但代价是CPU使用率增加。较"
-"低的值å¯èƒ½ä¼šå¯¼è‡´è¾ƒæ…¢ç¡¬ä»¶ä¸Šçš„声音破裂。"
-#: doc/classes/ProjectSettings.xml:282
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
@@ -54166,14 +54741,14 @@ msgstr ""
"在网络平å°ä¸­æ›´å®‰å…¨åœ°è¦†ç›– [member audio/output_latency],以é¿å…音频问题,尤其"
"是在移动设备上。"
-#: doc/classes/ProjectSettings.xml:285
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
"播放视频时设置为硬编ç éŸ³é¢‘延迟。除éžä½ çŸ¥é“自己在åšä»€ä¹ˆï¼Œå¦åˆ™æœ€å¥½ä¸è¦åŠ¨å®ƒã€‚"
-#: doc/classes/ProjectSettings.xml:288
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -54186,7 +54761,7 @@ msgstr ""
"ä»¶å˜å°ã€‚解压缩速度大多ä¸å—压缩级别的影å“。[code]-1[/code]使用默认的gzip压缩级"
"别,该级别与[code]6[/code]相åŒï¼Œä½†ç”±äºŽåº•层zlib更新,未æ¥å¯èƒ½ä¼šå‘生å˜åŒ–。"
-#: doc/classes/ProjectSettings.xml:291
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -54199,7 +54774,7 @@ msgstr ""
"ä»¶å˜å°ã€‚解压缩速度大多ä¸å—压缩级别的影å“。[code]-1[/code]使用默认的gzip压缩级"
"别,该级别与[code]6[/code]相åŒï¼Œä½†ç”±äºŽåº•层zlib更新,未æ¥å¯èƒ½ä¼šå‘生å˜åŒ–。"
-#: doc/classes/ProjectSettings.xml:294
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -54208,7 +54783,7 @@ msgstr ""
"Zstandard的默认压缩级别。影å“压缩的场景和资æºã€‚较高的级别会以压缩速度为代价导"
"致文件å˜å°ã€‚解压缩速度大多ä¸å—压缩级别的影å“。"
-#: doc/classes/ProjectSettings.xml:297
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
@@ -54216,7 +54791,7 @@ msgstr ""
"在Zstandard中å¯ç”¨ [url=https://github.com/facebook/zstd/releases/tag/"
"v1.3.2]long-distance matching[/url] 。"
-#: doc/classes/ProjectSettings.xml:300
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
@@ -54225,7 +54800,7 @@ msgstr ""
"使用与Zstandard的长è·ç¦»åŒ¹é…进行压缩时,å…许的最大大å°é™åˆ¶(2的幂)。更高的值å¯"
"ä»¥äº§ç”Ÿæ›´å¥½çš„åŽ‹ç¼©ï¼Œä½†æ˜¯åœ¨åŽ‹ç¼©å’Œè§£åŽ‹ç¼©æ—¶éœ€è¦æ›´å¤šçš„内存。"
-#: doc/classes/ProjectSettings.xml:303
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -54236,19 +54811,19 @@ msgstr ""
"ä¸ªè®¾ç½®æ˜¯ä¸ºäº†åœ¨ç§»æ¤æ—§é¡¹ç›®(戈多2)时使用,因为使用æˆå‘˜å˜é‡æ˜¯ä»Žæˆˆå¤š3开始的首选风"
"格。"
-#: doc/classes/ProjectSettings.xml:306
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr "如果[code]true[/code],则当常é‡ç”¨ä½œå‡½æ•°æ—¶ä¼šå‘出警告。"
-#: doc/classes/ProjectSettings.xml:309
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
"如果[code]true[/code],当使用已废弃的关键字如[code]slave[/code]时,å¯ç”¨è­¦å‘Šã€‚"
-#: doc/classes/ProjectSettings.xml:312
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
@@ -54257,7 +54832,7 @@ msgstr ""
"如果[code]true[/code],则å¯ç”¨ç‰¹å®šçš„GDScript警告(请å‚阅[code]debug/gdscript/"
"warnings/*[/code]设置)。如果[code]为false[/code],则ç¦ç”¨æ‰€æœ‰GDScript警告。"
-#: doc/classes/ProjectSettings.xml:315
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
@@ -54265,13 +54840,13 @@ msgstr ""
"如果[code]true[/code],则[code]res://addons[/code]文件夹中的脚本ä¸ä¼šç”Ÿæˆè­¦"
"告。"
-#: doc/classes/ProjectSettings.xml:318
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr "如果为[code]true[/code],当函数被声明为与常é‡åŒå时,å¯ç”¨è­¦å‘Šã€‚"
-#: doc/classes/ProjectSettings.xml:321
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
@@ -54280,7 +54855,7 @@ msgstr ""
"如果为[code]true[/code], 当一个函数与一个å˜é‡åŒå声明时,å¯ç”¨è­¦å‘Šã€‚在未æ¥çš„版"
"本中,当GDScript支æŒç¬¬ä¸€ç±»å‡½æ•°æ—¶ï¼Œè¿™å°†å˜æˆä¸€ä¸ªé”™è¯¯ã€‚"
-#: doc/classes/ProjectSettings.xml:324
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
@@ -54288,20 +54863,20 @@ msgstr ""
"如果[code]为true[/code],则当分é…ç»™å˜é‡çš„函数å¯èƒ½äº§ç”Ÿå¹¶è¿”回函数状æ€è€Œä¸æ˜¯å€¼"
"时,å¯ç”¨è­¦å‘Šã€‚"
-#: doc/classes/ProjectSettings.xml:327
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr "如果[code]true[/code],则在使用函数时å¯ç”¨è­¦å‘Šï¼Œå°±åƒå®ƒæ˜¯å±žæ€§ä¸€æ ·ã€‚"
-#: doc/classes/ProjectSettings.xml:330
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
"如果[code]true[/code],则当三元è¿ç®—符å¯èƒ½å‘出类型ä¸å…¼å®¹çš„值时,将å¯ç”¨è­¦å‘Šã€‚"
-#: doc/classes/ProjectSettings.xml:333
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
@@ -54309,7 +54884,7 @@ msgstr ""
"如果[code]为true[/code],则在用一个整数除以å¦ä¸€ä¸ªæ•´æ•°æ—¶å¯ç”¨è­¦å‘Š(å°æ•°éƒ¨åˆ†å°†è¢«"
"丢弃)。"
-#: doc/classes/ProjectSettings.xml:336
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
@@ -54318,13 +54893,13 @@ msgstr ""
"如果[code]为true[/code]ï¼Œåˆ™åœ¨å°†æµ®ç‚¹å€¼ä¼ é€’ç»™éœ€è¦æ•´æ•°çš„函数时å¯ç”¨è­¦å‘Š(它将被转"
"æ¢å¹¶å¤±åŽ»ç²¾åº¦)。"
-#: doc/classes/ProjectSettings.xml:339
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr "如果[code]true[/code],则在将属性当作函数使用时å¯ç”¨è­¦å‘Šã€‚"
-#: doc/classes/ProjectSettings.xml:342
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -54335,7 +54910,7 @@ msgstr ""
"傿•°)调用函数时å¯ç”¨è­¦å‘Šã€‚这样的返回值有时使用[enum Error] 枚举æ¥è¡¨ç¤ºå¯èƒ½çš„é”™"
"误。"
-#: doc/classes/ProjectSettings.xml:345
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
@@ -54344,7 +54919,7 @@ msgstr ""
"如果[code]true[/code],则在定义局部或å­ç±»æˆå‘˜å˜é‡æ—¶å¯ç”¨è­¦å‘Šï¼Œè¯¥å±€éƒ¨æˆ–å­ç±»æˆå‘˜"
"å˜é‡å°†åœ¨ä¸Šå±‚阴影å˜é‡(如æˆå‘˜å˜é‡)。"
-#: doc/classes/ProjectSettings.xml:348
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
@@ -54353,7 +54928,7 @@ msgstr ""
"如果[code]true[/code]ï¼Œåˆ™åœ¨è°ƒç”¨å¯¹å‘¨å›´ä»£ç æ²¡æœ‰å½±å“çš„è¡¨è¾¾å¼æ—¶å¯ç”¨è­¦å‘Šï¼Œä¾‹å¦‚å°†"
"[code]2 + 2[/code]写æˆè¯­å¥ã€‚"
-#: doc/classes/ProjectSettings.xml:351
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
@@ -54362,18 +54937,18 @@ msgstr ""
"如果[code]true[/code]ï¼Œåˆ™åœ¨è°ƒç”¨å¯¹å‘¨å›´ä»£ç æ²¡æœ‰å½±å“çš„ä¸‰å…ƒè¡¨è¾¾å¼æ—¶å¯ç”¨è­¦å‘Šï¼Œä¾‹å¦‚"
"å°†[code]42(如果激活else 0[/code])写入语å¥ã€‚"
-#: doc/classes/ProjectSettings.xml:354
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr "如果[code]true[/code],所有警告将被报告为错误。"
-#: doc/classes/ProjectSettings.xml:357
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr "如果[code]true[/code]ï¼Œåˆ™åœ¨ä½¿ç”¨ä»¥å‰æ²¡æœ‰èµ‹å€¼çš„å˜é‡æ—¶å¯ç”¨è­¦å‘Šã€‚"
-#: doc/classes/ProjectSettings.xml:360
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
@@ -54382,7 +54957,7 @@ msgstr ""
"如果[code]true[/code],则在使用赋值æ“作符[code]+=[/code](如果å˜é‡ä¹‹å‰æ²¡æœ‰èµ‹"
"值)为å˜é‡èµ‹å€¼æ—¶å¯ç”¨è­¦å‘Šã€‚"
-#: doc/classes/ProjectSettings.xml:363
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
@@ -54390,7 +54965,7 @@ msgstr ""
"如果[code]true[/code],则在检测到ä¸å¯è¾¾çš„ä»£ç æ—¶å¯ç”¨è­¦å‘Š(例如在始终执行的"
"[code]return[/code]语å¥ä¹‹åŽ)。"
-#: doc/classes/ProjectSettings.xml:366
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
@@ -54398,52 +54973,52 @@ msgstr ""
"如果[code]true[/code],则在使用类型å¯èƒ½ä¸ŽæœŸæœ›çš„å‡½æ•°å‚æ•°ä¸å…¼å®¹çš„è¡¨è¾¾å¼æ—¶å¯ç”¨è­¦"
"告。"
-#: doc/classes/ProjectSettings.xml:369
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr "如果[code]true[/code],则在执行ä¸å®‰å…¨çš„å¼ºåˆ¶è½¬æ¢æ—¶å¯ç”¨è­¦å‘Šã€‚"
-#: doc/classes/ProjectSettings.xml:372
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
"如果[code]true[/code],则在调用类中ä¸èƒ½ä¿è¯åœ¨ç¼–译时存在的方法时å¯ç”¨è­¦å‘Šã€‚"
-#: doc/classes/ProjectSettings.xml:375
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
"如果[code]true[/code],则在访问类中ä¸èƒ½ä¿è¯åœ¨ç¼–译时存在的属性时å¯ç”¨è­¦å‘Šã€‚"
-#: doc/classes/ProjectSettings.xml:378
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
-msgstr "如果[code]true[/code]ï¼Œåˆ™åœ¨ä¿¡å·æœªä½¿ç”¨æ—¶å¯ç”¨è­¦å‘Šã€‚"
+msgstr "如果[code]true[/code]ï¼Œå½“ä¸€ä¸ªå‡½æ•°å‚æ•°æœªä½¿ç”¨æ—¶ï¼Œå¯ç”¨è­¦å‘Šã€‚"
-#: doc/classes/ProjectSettings.xml:381
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
-msgstr "如果[code]true[/code],则在局部å˜é‡æœªä½¿ç”¨æ—¶å¯ç”¨è­¦å‘Šã€‚"
+msgstr "如果[code]true[/code],当一个æˆå‘˜å˜é‡æœªä½¿ç”¨æ—¶ï¼Œå¯ç”¨è­¦å‘Šã€‚"
-#: doc/classes/ProjectSettings.xml:384
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr "如果[code]true[/code]ï¼Œåˆ™åœ¨ä¿¡å·æœªä½¿ç”¨æ—¶å¯ç”¨è­¦å‘Šã€‚"
-#: doc/classes/ProjectSettings.xml:387
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr "如果[code]true[/code],则在局部å˜é‡æœªä½¿ç”¨æ—¶å¯ç”¨è­¦å‘Šã€‚"
-#: doc/classes/ProjectSettings.xml:390
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
+"如果 [code]true[/code],则在声明与函数åŒåçš„å˜é‡æ—¶å¯ç”¨è­¦å‘Šã€‚当 GDScript 支æŒ"
+"一æµå‡½æ•°æ—¶ï¼Œè¿™å°†åœ¨æœªæ¥ç‰ˆæœ¬ä¸­å˜æˆé”™è¯¯ã€‚"
-#: doc/classes/ProjectSettings.xml:393
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
@@ -54451,12 +55026,11 @@ msgstr ""
"如果[code]true[/code],则在将返回[code]void[/code]的函数的结果赋值给å˜é‡æ—¶å¯"
"用警告。"
-#: doc/classes/ProjectSettings.xml:396
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr "å½“å¼•æ“Žå´©æºƒæ—¶ï¼Œåœ¨å›žæº¯ä¹‹å‰æ˜¾ç¤ºçš„æ¶ˆæ¯ã€‚"
-#: doc/classes/ProjectSettings.xml:399
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -54466,25 +55040,25 @@ msgid ""
"VSync, e.g. to perform non-real-time rendering of static frames, or test the "
"project under lag conditions."
msgstr ""
-"æ¯ç§’å…è®¸çš„æœ€å¤§å¸§æ•°ã€‚å¦‚æžœæ¸¸æˆæ˜¯å¡é¡¿çš„,æ¯ç§’的实际帧数å¯èƒ½ä»ç„¶ä½ŽäºŽè¿™ä¸ªå€¼ã€‚\n"
-"如果[member display/window/vsync/use_vsync]被å¯ç”¨ï¼Œå®ƒå°†ä¼˜å…ˆä¸”强制帧数ä¸èƒ½è¶…过"
-"监视器的刷新率。\n"
-"因此,这个设置主è¦ç”¨äºŽå°†æœ€å¤§FPSé™ä½Žåˆ°åž‚ç›´åŒæ­¥ä»¥ä¸‹ï¼Œä¾‹å¦‚æ‰§è¡Œé™æ€å¸§çš„éžå®žæ—¶æ¸²"
-"染,或在延迟æ¡ä»¶ä¸‹æµ‹è¯•项目。"
+"å…许的æ¯ç§’最大帧数。如果游æˆå»¶è¿Ÿï¼Œå®žé™…çš„æ¯ç§’帧数å¯èƒ½ä½ŽäºŽè¿™ä¸ªå€¼ã€‚\n"
+"如果å¯ç”¨[member display/window/vsync/use_vsync],这将优先考虑,强制的FPS值ä¸"
+"能超过显示器的刷新率。\n"
+"å› æ­¤ï¼Œè¿™ä¸ªè®¾ç½®ä¸»è¦æ˜¯é™ä½Žä½ŽäºŽVSync的最大FPSï¼Œä¾‹å¦‚ï¼Œå¯¹é™æ€å¸§è¿›è¡Œéžå®žæ—¶æ¸²æŸ“,或"
+"者在延迟æ¡ä»¶ä¸‹æµ‹è¯•项目。"
-#: doc/classes/ProjectSettings.xml:404
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr "调试GDScriptæ—¶å…许的最大调用堆栈。"
-#: doc/classes/ProjectSettings.xml:407
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr "åˆ†æžæ—¶æ¯ä¸ªå¸§å…许的最大函数数é‡ã€‚"
-#: doc/classes/ProjectSettings.xml:410
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr "æ¯ç§’钟打å°å¸§åˆ°æ ‡å‡†è¾“出。"
-#: doc/classes/ProjectSettings.xml:413
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
@@ -54493,70 +55067,70 @@ msgstr ""
"è¿è¡Œæ—¶æ‰“å°æ›´å¤šä¿¡æ¯åˆ°æ ‡å‡†è¾“出。它显示诸如内存泄æ¼ã€å“ªäº›åœºæ™¯å’Œèµ„æºæ­£åœ¨åŠ è½½ç­‰ä¿¡"
"æ¯ã€‚"
-#: doc/classes/ProjectSettings.xml:416
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr "最大的å¯è§†è„šæœ¬è°ƒç”¨å †æ ˆï¼Œä»¥é¿å…æ— é™é€’归。"
-#: doc/classes/ProjectSettings.xml:419
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr "碰撞形状之间接触点的颜色,在调试èœå•中å¯ç”¨â€œå¯è§ç¢°æ’žå½¢çŠ¶â€æ—¶å¯è§ã€‚"
-#: doc/classes/ProjectSettings.xml:422
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
-msgstr "碰撞形状的颜色,当在调试èœå•中å¯ç”¨â€œå¯è§ç¢°æ’žå½¢çŠ¶â€æ—¶å¯è§ã€‚"
+msgstr ""
+"设置当调试èœå•中的å¯ç”¨ \"å¯è§çš„碰撞形状\" 时,2Dç‰©ç†æ˜¯å¦ä¼šåœ¨æ¸¸æˆä¸­æ˜¾ç¤ºç¢°æ’žè½®"
+"廓。"
-#: doc/classes/ProjectSettings.xml:425
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr "当在调试èœå•中å¯ç”¨â€œå¯è§ç¢°æ’žå½¢çŠ¶â€æ—¶ï¼Œç¢°æ’žå½¢çŠ¶ä¹‹é—´æ˜¾ç¤ºçš„æœ€å¤§æŽ¥è§¦ç‚¹æ•°ã€‚"
-#: doc/classes/ProjectSettings.xml:428
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr "碰撞形状的颜色,当在调试èœå•中å¯ç”¨â€œå¯è§ç¢°æ’žå½¢çŠ¶â€æ—¶å¯è§ã€‚"
-#: doc/classes/ProjectSettings.xml:431
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr "被ç¦ç”¨çš„导航几何图形的颜色,在调试èœå•中å¯ç”¨â€œå¯è§å¯¼èˆªâ€æ—¶å¯è§ã€‚"
-#: doc/classes/ProjectSettings.xml:434
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr "导航几何图形的颜色,在调试èœå•中å¯ç”¨â€œå¯è§å¯¼èˆªâ€æ—¶å¯è§ã€‚"
-#: doc/classes/ProjectSettings.xml:437
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr "鼠标光标的自定义图åƒ(最大256×256)。"
-#: doc/classes/ProjectSettings.xml:440
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr "自定义鼠标光标图åƒçš„热点。"
-#: doc/classes/ProjectSettings.xml:443
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr "工具æç¤ºç›¸å¯¹äºŽé¼ æ ‡å…‰æ ‡çƒ­ç‚¹çš„ä½ç½®åç§»é‡ã€‚"
-#: doc/classes/ProjectSettings.xml:446
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-"如果[code]true[/code],å…许在Windowså’ŒmacOS上显示HiDPI。这个设置对桌é¢Linux没"
-"有影å“,因为dpi感知回退在那里ä¸å—支æŒã€‚"
+"如果[code]true[/code],å…许在Windowsã€macOSå’ŒHTML5å¹³å°ä¸Šæ˜¾ç¤ºHiDPI。这个设置对"
+"桌é¢Linux没有影å“ï¼Œå› ä¸ºå®ƒä¸æ”¯æŒDPI感知回退。"
-#: doc/classes/ProjectSettings.xml:449
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
@@ -54564,7 +55138,7 @@ msgstr ""
"如果[code]true[/code]ï¼Œåˆ™ä¿æŒå±å¹•打开(å³ä½¿åœ¨ä¸æ´»åŠ¨çš„æƒ…å†µä¸‹),因此å±å¹•ä¿æŠ¤ç¨‹åº"
"ä¸ä¼šæŽ¥ç®¡ã€‚适用于桌é¢å’Œç§»åЍ平å°ã€‚"
-#: doc/classes/ProjectSettings.xml:452
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -54572,8 +55146,12 @@ msgid ""
"you have to set [member display/window/size/width] and [member display/"
"window/size/height] accordingly."
msgstr ""
+"在移动设备上使用的默认å±å¹•æ–¹å‘。\n"
+"[b]注æ„:[/b]è®¾ç½®ä¸ºçºµå‘æ—¶ï¼Œæ­¤é¡¹ç›®è®¾ç½®ä¸ä¼šè‡ªåŠ¨ç¿»è½¬é¡¹ç›®åˆ†è¾¨çŽ‡çš„å®½åº¦å’Œé«˜åº¦ã€‚ç›¸"
+"å,您必须相应地设置 [member display/window/size/width] å’Œ [member display/"
+"window/size/height]。"
-#: doc/classes/ProjectSettings.xml:456
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
@@ -54581,7 +55159,7 @@ msgstr ""
"如果[code]true[/code],主指示器将自动éšè—。这åªä¼šå½±å“没有物ç†home键的iOS设"
"备。"
-#: doc/classes/ProjectSettings.xml:459
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -54590,28 +55168,41 @@ msgid ""
"[b]Note:[/b] This feature is implemented on HTML5, Linux, macOS, Windows, "
"and Android."
msgstr ""
+"如果 [code]true[/code],则å…许窗å£èƒŒæ™¯çš„é€åƒç´ é€æ˜Žåº¦ã€‚è¿™ä¼šå½±å“æ€§èƒ½ï¼Œå› æ­¤é™¤éž"
+"需è¦ï¼Œå¦åˆ™å°†å…¶ä¿ç•™ä¸º [code]false[/code]。\n"
+"有关更多详细信æ¯ï¼Œè¯·å‚阅 [member OS."
+"window_per_pixel_transparency_enabled]。\n"
+"[b]注æ„:[/b] 此功能在 HTML5ã€Linuxã€macOSã€Windows å’Œ Android 上实现。"
-#: doc/classes/ProjectSettings.xml:464
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
"[b]Note:[/b] This feature is implemented on HTML5, Linux, macOS, Windows, "
"and Android."
msgstr ""
+"å¯åŠ¨æ—¶å°†çª—å£èƒŒæ™¯è®¾ç½®ä¸ºé€æ˜Žã€‚\n"
+"有关更多详细信æ¯ï¼Œè¯·å‚阅 [member OS."
+"window_per_pixel_transparency_enabled]。\n"
+"[b]注æ„:[/b] 此功能在 HTML5ã€Linuxã€macOSã€Windows å’Œ Android 上实现。"
-#: doc/classes/ProjectSettings.xml:469
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
+"强制主窗å£å§‹ç»ˆåœ¨é¡¶éƒ¨ã€‚\n"
+"[b]注æ„:[/b] 此设置在 iOSã€Android å’Œ HTML5 上被忽略。"
-#: doc/classes/ProjectSettings.xml:473
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
+"å¼ºåˆ¶ä¸»çª—å£æ— è¾¹æ¡†ã€‚\n"
+"[b]注æ„:[/b] 此设置在 iOSã€Android å’Œ HTML5 上被忽略。"
-#: doc/classes/ProjectSettings.xml:477
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -54624,8 +55215,15 @@ msgid ""
"fullscreen mode.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
+"项目å¯åŠ¨æ—¶å°†ä¸»çª—å£è®¾ç½®ä¸ºå…¨å±ã€‚请注æ„ï¼Œè¿™ä¸æ˜¯ [i] 独立 çš„[/i] 免屿˜¾ç¤ºã€‚在 "
+"Windows å’Œ Linux 上,无边框窗å£ç”¨äºŽæ¨¡æ‹Ÿå…¨å±ã€‚在 macOS 上,会创建一个新的桌é¢"
+"用于显示正在è¿è¡Œçš„项目。\n"
+"无论平å°å¦‚何,å¯ç”¨å…¨å±éƒ½ä¼šæ›´æ”¹çª—å£å¤§å°ä»¥åŒ¹é…显示器的大å°ã€‚å› æ­¤ï¼Œè¯·ç¡®ä¿æ‚¨çš„项"
+"目在å¯ç”¨å…¨å±æ¨¡å¼æ—¶æ”¯æŒ [url=https://docs.godotengine.org/zh_CN/stable/"
+"tutorials/rendering/multiple_resolutions.html]多ç§åˆ†è¾¨çއ[/url]。\n"
+"[b]注æ„:[/b] 在 iOSã€Android å’Œ HTML5 上忽略此设置。"
-#: doc/classes/ProjectSettings.xml:482
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
@@ -54634,26 +55232,27 @@ msgstr ""
"设置游æˆçš„主视窗高度。在桌é¢å¹³å°ä¸Šï¼Œè¿™æ˜¯é»˜è®¤çš„窗å£å¤§å°ã€‚当å¯ç”¨æ‹‰ä¼¸æ¨¡å¼è®¾ç½®"
"æ—¶ï¼Œä¹Ÿä½¿ç”¨æ­¤å‚æ•°ä½œä¸ºå‚考。"
-#: doc/classes/ProjectSettings.xml:485
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
-msgstr "默认情况下å…许窗å£å¯è°ƒæ•´å¤§å°ã€‚"
+msgstr ""
+"å…许窗å£é»˜è®¤å¯è°ƒæ•´å¤§å°ã€‚\n"
+"[b]注æ„:[/b] 这个设置在iOSå’ŒAndroid上将忽略。"
-#: doc/classes/ProjectSettings.xml:489
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr "如果大于0,则在è¿è¡Œæ¸¸æˆæ—¶è¦†ç›–窗å£é«˜åº¦ã€‚用于测试拉伸模å¼ã€‚"
-#: doc/classes/ProjectSettings.xml:492
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr "如果大于0,则在è¿è¡Œæ¸¸æˆæ—¶è¦†ç›–窗å£å®½åº¦ã€‚用于测试拉伸模å¼ã€‚"
-#: doc/classes/ProjectSettings.xml:495
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
@@ -54662,13 +55261,13 @@ msgstr ""
"设置游æˆçš„主视窗宽度。在桌é¢å¹³å°ä¸Šï¼Œè¿™æ˜¯é»˜è®¤çš„窗å£å¤§å°ã€‚当å¯ç”¨æ‹‰ä¼¸æ¨¡å¼è®¾ç½®"
"æ—¶ï¼Œä¹Ÿä½¿ç”¨æ­¤å‚æ•°ä½œä¸ºå‚考。"
-#: doc/classes/ProjectSettings.xml:498
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr "指定è¦ä½¿ç”¨çš„å¹³æ¿é©±åŠ¨ç¨‹åºã€‚如果为空,将使用默认驱动程åºã€‚"
-#: doc/classes/ProjectSettings.xml:501
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -54680,7 +55279,7 @@ msgstr ""
"较高的输入延迟和较低的帧率为代价。如果[code]false[/code]ï¼Œåž‚ç›´åŒæ­¥å°†è¢«ç¦ç”¨ï¼Œ"
"然而,许多平å°ä»å°†æ‰§è¡Œå®ƒ(如手机平å°å’ŒHTML5)。"
-#: doc/classes/ProjectSettings.xml:504
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -54696,7 +55295,7 @@ msgstr ""
"[b]注:[/b]这个选项是实验性的,旨在缓解一些用户的å¡é¡¿ä½“验。然而,有些用户在使"
"ç”¨å®ƒæ—¶ä½“éªŒåˆ°åž‚ç›´åŒæ­¥å¸§çއå‡åŠ(例如从60 FPSé™è‡³30 FPS)。"
-#: doc/classes/ProjectSettings.xml:508
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -54711,18 +55310,26 @@ msgid ""
"prime-run %command%\n"
"[/codeblock]"
msgstr ""
+"è¿è¡Œé¡¹ç›®æ—¶é™„加到 Godot è‡ªå·±çš„å‘½ä»¤è¡Œçš„å‘½ä»¤è¡Œå‚æ•°ã€‚è¿™ä¸ä¼šå½±å“编辑器本身。\n"
+"å¯ä»¥ä½¿ç”¨ [code]%command%[/code] å ä½ç¬¦ä½¿å¦ä¸€ä¸ªå¯æ‰§è¡Œæ–‡ä»¶è¿è¡Œ Godot。å ä½ç¬¦å°†"
+"替æ¢ä¸º Godot 自己的命令行。程åºç‰¹å®šçš„傿•°åº”该放在 [i] å ä½ç¬¦ä¹‹å‰ [/i],而 "
+"Godot ç‰¹å®šå‚æ•°åº”该放在 [i] å ä½ç¬¦ä¹‹åŽ [/i]。\n"
+"例如,这å¯ç”¨äºŽå¼ºåˆ¶é¡¹ç›®åœ¨ Linux 上的 NVIDIA Optimus 系统中的专用 GPU 上è¿"
+"行:\n"
+"[codeblock]\n"
+"prime-run %command%\n"
+"[/codeblock]"
-#: doc/classes/ProjectSettings.xml:516
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-"æœç´¢ç‰¹å®šäºŽé¡¹ç›®çš„脚本模æ¿è·¯å¾„。脚本模æ¿å°†åœ¨ç‰¹å®šäºŽç¼–辑器的路径和特定于项目的路"
-"径中进行æœç´¢ã€‚"
+"对于项目特定的脚本模æ¿çš„æœç´¢è·¯å¾„ã€‚ Godot 将在编辑器的特定路径和此项目的路径中"
+"æœç´¢ã€‚"
-#: doc/classes/ProjectSettings.xml:519
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -54733,7 +55340,7 @@ msgstr ""
"[code]tscn[/code],如果你也想解æžä½ çš„场景文件,特别是如果你使用的是在场景文件"
"中åºåˆ—化的内置脚本。"
-#: doc/classes/ProjectSettings.xml:522
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
@@ -54741,16 +55348,15 @@ msgstr ""
"[member ScrollContainer.scroll_deadzone],它将用于所有[ScrollContainer]s,除"
"éžé‡å†™ã€‚"
-#: doc/classes/ProjectSettings.xml:525
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-"如果[code]为true[/code],则切æ¢Windowså’ŒUWPå¯¹è¯æ¡†ä¸­çš„Cancelå’ŒOK按钮,以éµå¾ªç•Œ"
-"é¢çº¦å®šã€‚"
+"如果[code]true[/code],在Windowså’ŒUWPçš„å¯¹è¯æ¡†ä¸­äº¤æ¢ç¡®å®šå’Œå–消按钮,以éµå¾ªç•Œé¢"
+"惯例。"
-#: doc/classes/ProjectSettings.xml:530
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
@@ -54758,31 +55364,31 @@ msgstr ""
"用于项目的自定义[Theme]èµ„æºæ–‡ä»¶çš„路径([code]theme[/code]或通用[code]tres[/"
"code]/[code]res[/code]扩展å)。"
-#: doc/classes/ProjectSettings.xml:533
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr "自定义[Font]资æºçš„路径,用于项目的所有GUI元素的默认字体。"
-#: doc/classes/ProjectSettings.xml:536
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr "如果[code]true[/code],确ä¿ä½¿ç”¨çš„主题将在HiDPI下工作。"
-#: doc/classes/ProjectSettings.xml:539
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr "在[Tree], [ItemList]ç­‰æŽ§ä»¶ä¸­ä¸ºå¢žé‡æœç´¢è®¾ç½®è®¡æ—¶å™¨(以毫秒为å•ä½)。"
-#: doc/classes/ProjectSettings.xml:542
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr "检测[TextEdit]空闲的计时器(å•ä½ä¸ºç§’)。"
-#: doc/classes/ProjectSettings.xml:545
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr "工具æç¤ºçš„默认延迟(以秒为å•ä½)。"
-#: doc/classes/ProjectSettings.xml:548
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -54794,7 +55400,7 @@ msgstr ""
"[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„"
"内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。"
-#: doc/classes/ProjectSettings.xml:552
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -54805,7 +55411,7 @@ msgstr ""
"[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„"
"内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。"
-#: doc/classes/ProjectSettings.xml:556
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -54816,7 +55422,7 @@ msgstr ""
"[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„"
"内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。"
-#: doc/classes/ProjectSettings.xml:560
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -54830,7 +55436,7 @@ msgstr ""
"[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„"
"内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。"
-#: doc/classes/ProjectSettings.xml:564
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -54843,7 +55449,7 @@ msgstr ""
"[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„"
"内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。"
-#: doc/classes/ProjectSettings.xml:568
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -54856,7 +55462,7 @@ msgstr ""
"[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„"
"内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。"
-#: doc/classes/ProjectSettings.xml:572
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -54870,7 +55476,7 @@ msgstr ""
"[b]注æ„:[/b] 默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬å¯¹äºŽå‡ ä¸ª"
"[Control]的内部逻辑是必è¦çš„。然而,分é…给动作的事件å¯ä»¥è¢«ä¿®æ”¹ã€‚"
-#: doc/classes/ProjectSettings.xml:576
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -54881,7 +55487,7 @@ msgstr ""
"[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„"
"内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。"
-#: doc/classes/ProjectSettings.xml:580
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -54895,7 +55501,7 @@ msgstr ""
"[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„"
"内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。"
-#: doc/classes/ProjectSettings.xml:584
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -54909,7 +55515,7 @@ msgstr ""
"[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„"
"内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。"
-#: doc/classes/ProjectSettings.xml:588
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -54920,7 +55526,7 @@ msgstr ""
"[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„"
"内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。"
-#: doc/classes/ProjectSettings.xml:592
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -54932,7 +55538,7 @@ msgstr ""
"[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„"
"内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。"
-#: doc/classes/ProjectSettings.xml:596
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -54943,7 +55549,7 @@ msgstr ""
"[b]注æ„:[/b]默认的[code]ui_*[/code]动作ä¸èƒ½è¢«åˆ é™¤ï¼Œå› ä¸ºå®ƒä»¬æ˜¯å‡ ä¸ª[Control]çš„"
"内部逻辑所必需的。但是,å¯ä»¥ä¿®æ”¹åˆ†é…给该æ“作的事件。"
-#: doc/classes/ProjectSettings.xml:600
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -54954,465 +55560,446 @@ msgid ""
"because they can't run at the target frame rate.\n"
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
+"如果 [code]true[/code],按键/触摸/æ“纵æ†äº‹ä»¶å°†åœ¨æ¯ä¸ªç©ºé—²å¸§å’Œç‰©ç†å¸§ä¹‹å‰åˆ·"
+"新。\n"
+"如果 [code]false[/code],此类事件将在引擎迭代之间æ¯ä¸ªç©ºé—²å¸§ä»…刷新一次。\n"
+"å¯ç”¨æ­¤åŠŸèƒ½å¯ä»¥å¤§å¤§æé«˜å¯¹è¾“入的å“åº”èƒ½åŠ›ï¼Œç‰¹åˆ«æ˜¯åœ¨éœ€è¦æ¯ä¸ªå¯è§ï¼ˆç©ºé—²ï¼‰å¸§è¿è¡Œå¤š"
+"个物ç†å¸§çš„设备中,因为它们无法以目标帧速率è¿è¡Œã€‚\n"
+"[b]注:[/b] ç›®å‰ä»…在 Android 中实现。"
-#: doc/classes/ProjectSettings.xml:606
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr "如果[code]true[/code]ï¼Œåˆ™åœ¨ç‚¹å‡»æˆ–æ»‘åŠ¨è§¦æ‘¸å±æ—¶å‘é€é¼ æ ‡è¾“入事件。"
-#: doc/classes/ProjectSettings.xml:609
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr "如果[code]true[/code],则在点击或拖动鼠标时å‘é€è§¦æ‘¸è¾“入事件。"
-#: doc/classes/ProjectSettings.xml:612
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr "工具æç¤ºçš„默认延迟(以秒为å•ä½)。"
-#: doc/classes/ProjectSettings.xml:615
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr "2D物ç†å±‚1çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:618
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr "2D物ç†å±‚10çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:621
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr "2D物ç†å±‚11çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:624
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr "2D物ç†å±‚12çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:627
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr "2D物ç†å±‚13çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:630
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr "2D物ç†å±‚14çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:633
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr "2D物ç†å±‚15çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:636
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr "2D物ç†å±‚16çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:639
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr "2D物ç†å±‚17çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:642
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr "2D物ç†å±‚18çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:645
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr "2D物ç†å±‚19çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:648
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr "2D物ç†å±‚2çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:651
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr "2D物ç†å±‚20çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:654
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
-msgstr "2D物ç†å±‚2çš„å¯é€‰å称。"
+msgstr "2D 物ç†å±‚ 21 çš„å¯é€‰åç§° ."
-#: doc/classes/ProjectSettings.xml:657
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
-msgstr "2D物ç†å±‚2çš„å¯é€‰å称。"
+msgstr "2D物ç†å±‚22 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:660
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
-msgstr "2D物ç†å±‚2çš„å¯é€‰å称。"
+msgstr "2D物ç†å±‚23çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:663
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
-msgstr "2D物ç†å±‚2çš„å¯é€‰å称。"
+msgstr "2D物ç†å±‚24çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:666
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
-msgstr "2D物ç†å±‚2çš„å¯é€‰å称。"
+msgstr "2D物ç†å±‚25çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:669
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
-msgstr "2D物ç†å±‚2çš„å¯é€‰å称。"
+msgstr "2D物ç†å±‚26çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:672
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
-msgstr "2D物ç†å±‚2çš„å¯é€‰å称。"
+msgstr "2D物ç†å±‚27çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:675
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
-msgstr "2D物ç†å±‚2çš„å¯é€‰å称。"
+msgstr "2D物ç†å±‚28çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:678
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
-msgstr "2D物ç†å±‚2çš„å¯é€‰å称。"
+msgstr "2D物ç†å±‚29çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:681
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr "2D物ç†å±‚3çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:684
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
-msgstr "2D物ç†å±‚3çš„å¯é€‰å称。"
+msgstr "2D物ç†å±‚30çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:687
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
-msgstr "2D物ç†å±‚3çš„å¯é€‰å称。"
+msgstr "2D物ç†å±‚31çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:690
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
-msgstr "2D物ç†å±‚3çš„å¯é€‰å称。"
+msgstr "2D物ç†å±‚32çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:693
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr "2D物ç†å±‚4çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:696
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr "2D物ç†å±‚5çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:699
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr "2D物ç†å±‚6çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:702
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr "2D物ç†å±‚7çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:705
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr "2D物ç†å±‚8çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:708
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr "2D物ç†å±‚9çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:711
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr "2D物ç†å±‚1çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:714
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr "2D渲染层10çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:717
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr "2D渲染层11çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:720
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr "2D渲染层12çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:723
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr "2D渲染层13çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:726
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr "2D渲染层14çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:729
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr "2D渲染层15çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:732
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr "2D渲染层16çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:735
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr "2D渲染层17çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:738
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr "2D渲染层18çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:741
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr "2D渲染层19çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:744
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr "2D 渲染层 2 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:747
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr "2D 渲染层 20 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:750
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr "2D 渲染层 3 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:753
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr "2D 渲染层 4 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:756
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr "2D 渲染层 5 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:759
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr "2D 渲染层 6 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:762
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr "2D 渲染层 7 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:765
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr "2D 渲染层 8 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:768
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr "2D 渲染层 9 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:771
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr "3D物ç†å±‚1 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:774
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr "3D物ç†å±‚10 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:777
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr "3D物ç†å±‚11 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:780
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr "3D物ç†å±‚12 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:783
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr "3D物ç†å±‚13 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:786
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr "3D物ç†å±‚14 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:789
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr "3D物ç†å±‚15 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:792
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr "3D物ç†å±‚16 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:795
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr "3D物ç†å±‚17 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:798
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr "3D物ç†å±‚18 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:801
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr "3D物ç†å±‚19 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:804
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr "3D物ç†å±‚2 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:807
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr "3D物ç†å±‚20 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:810
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
-msgstr "3D物ç†å±‚2 çš„å¯é€‰å称。"
+msgstr "3D物ç†å±‚ 21 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:813
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
-msgstr "3D物ç†å±‚2 çš„å¯é€‰å称。"
+msgstr "3D物ç†å±‚22 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:816
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
-msgstr "3D物ç†å±‚2 çš„å¯é€‰å称。"
+msgstr "3D物ç†å±‚23 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:819
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
-msgstr "3D物ç†å±‚2 çš„å¯é€‰å称。"
+msgstr "3D物ç†å±‚24 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:822
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
-msgstr "3D物ç†å±‚2 çš„å¯é€‰å称。"
+msgstr "3D物ç†å±‚ 25 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:825
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
-msgstr "3D物ç†å±‚2 çš„å¯é€‰å称。"
+msgstr "3D物ç†å±‚26 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:828
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
-msgstr "3D物ç†å±‚2 çš„å¯é€‰å称。"
+msgstr "3D物ç†å±‚27 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:831
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
-msgstr "3D物ç†å±‚2 çš„å¯é€‰å称。"
+msgstr "3D物ç†å±‚28 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:834
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
-msgstr "3D物ç†å±‚2 çš„å¯é€‰å称。"
+msgstr "3D物ç†å±‚29 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:837
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr "3D物ç†å±‚3 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:840
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
-msgstr "3D物ç†å±‚3 çš„å¯é€‰å称。"
+msgstr "3D物ç†å±‚30 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:843
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
-msgstr "3D物ç†å±‚3 çš„å¯é€‰å称。"
+msgstr "3D物ç†å±‚31 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:846
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
-msgstr "3D物ç†å±‚3 çš„å¯é€‰å称。"
+msgstr "3D物ç†å±‚32 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:849
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr "3D物ç†å±‚4 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:852
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr "3D物ç†å±‚5 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:855
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr "3D物ç†å±‚6 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:858
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr "3D物ç†å±‚7 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:861
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr "3D物ç†å±‚8 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:864
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr "3D物ç†å±‚9 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:867
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr "3D渲染层1 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:870
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr "3D渲染层10 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:873
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr "3D渲染层11 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:876
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr "3D渲染层12 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:879
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr "3D渲染层13 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:882
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr "3D渲染层14 çš„å¯é€‰åç§°"
-#: doc/classes/ProjectSettings.xml:885
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr "3D渲染层15 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:888
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr "3D渲染层16 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:891
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr "3D渲染层17 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:894
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr "3D渲染层18 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:897
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr "3D渲染层19 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:900
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr "3D渲染层2 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:903
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr "3D渲染层20 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:906
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr "3D渲染层3 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:909
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr "3D渲染层4 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:912
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr "3D渲染层5 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:915
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr "3D渲染层6 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:918
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr "3D渲染层7 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:921
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr "3D渲染层8 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:924
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr "3D渲染层9 çš„å¯é€‰å称。"
-#: doc/classes/ProjectSettings.xml:927
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
@@ -55420,33 +56007,35 @@ msgstr ""
"如果给定语言的翻译ä¸å¯ç”¨ï¼Œåˆ™ä½¿ç”¨é»˜è®¤åœ°åŸŸã€‚如果留空,将使用 [code]en[/code],"
"å³è‹±æ–‡ã€‚"
-#: doc/classes/ProjectSettings.xml:930
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr "如果ä¸ä¸ºç©ºï¼Œé‚£ä¹ˆå½“从编辑器中è¿è¡Œé¡¹ç›®æ—¶ï¼Œå°†ä½¿ç”¨è¯¥è¯­è¨€ã€‚"
-#: doc/classes/ProjectSettings.xml:933
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr "如果[code]true[/code],将所有输出记录到文件中。"
-#: doc/classes/ProjectSettings.xml:936
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
+"[member logging/file_logging/enable_file_logging] 的桌é¢è¦†ç›–,因为在 移动 / "
+"Web å¹³å°ä¸Šä¸å®¹æ˜“访问日志文件。"
-#: doc/classes/ProjectSettings.xml:939
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
-msgstr "项目中的日志的路径。建议使用[code]user://[/code]作为路径。"
+msgstr "项目中日志的路径。建议使用 [code]user://[/code] 路径。"
-#: doc/classes/ProjectSettings.xml:942
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
-msgstr "指定å…许的日志文件的最大数é‡(用于旋转)。"
+msgstr "指定å…许的最大日志文件数é‡ï¼ˆç”¨äºŽè½®æ¢ï¼‰ã€‚"
-#: doc/classes/ProjectSettings.xml:947
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
@@ -55454,7 +56043,7 @@ msgstr ""
"Godot使用一个消æ¯é˜Ÿåˆ—æ¥å»¶è¿Ÿä¸€äº›å‡½æ•°è°ƒç”¨ã€‚如果你的空间用完了(你会看到一个错"
"误),你å¯ä»¥åœ¨è¿™é‡Œå¢žåР大å°ã€‚"
-#: doc/classes/ProjectSettings.xml:950
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -55465,7 +56054,7 @@ msgstr ""
"以é¿å…åœ¨çº¿ç¨‹ä¸Šåœæ­¢è¯·æ±‚它们的æœåŠ¡å™¨ã€‚å¦‚æžœåœ¨çº¿ç¨‹ä¸­åŠ è½½èµ„æºæ—¶æœåС噍ç»å¸¸å¡é¡¿ï¼Œè¯·"
"增加此数字。"
-#: doc/classes/ProjectSettings.xml:953
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
@@ -55474,90 +56063,84 @@ msgstr ""
"å…许调试器输出的最大字符é‡ã€‚超过这个值,内容就会被放弃。这有助于é¿å…调试器的"
"è¿žæŽ¥åœæ»žã€‚"
-#: doc/classes/ProjectSettings.xml:956
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-"å…许调试器å‘é€çš„æœ€å¤§é”™è¯¯æ•°ã€‚超过这个值,内容就会被抛弃。这有助于é¿å…调试器的"
-"è¿žæŽ¥åœæ»žã€‚"
+"å…许作为调试器输出å‘é€çš„æœ€å¤§é”™è¯¯æ•°ã€‚超过此值,内容将被删除。这有助于é¿å…调试"
+"å™¨çš„è¿žæŽ¥åœæ»žã€‚"
-#: doc/classes/ProjectSettings.xml:959
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-"å…许调试器输出的最大字符é‡ã€‚超过这个值,内容就会被放弃。这有助于é¿å…调试器的"
-"è¿žæŽ¥åœæ»žã€‚"
+"å…许作为调试器输出å‘é€çš„æœ€å¤§æ¶ˆæ¯é‡ã€‚超过此值,内容将被删除。这有助于é¿å…调试"
+"å™¨çš„è¿žæŽ¥åœæ»žã€‚"
-#: doc/classes/ProjectSettings.xml:962
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-"å…许从调试器å‘é€çš„æœ€å¤§è­¦å‘Šæ•°ã€‚超过这个值,内容就会被抛弃。这有助于é¿å…调试器"
-"çš„è¿žæŽ¥åœæ»žã€‚"
+"å…许作为调试器输出å‘é€çš„æœ€å¤§è­¦å‘Šæ•°ã€‚超过此值,内容将被删除。这有助于é¿å…调试"
+"å™¨çš„è¿žæŽ¥åœæ»žã€‚"
-#: doc/classes/ProjectSettings.xml:965
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-"用于ååºåˆ—化Godotæ•°æ®çš„æ•°æ®åŒ…对等æµçš„默认大å°ã€‚超过这个大å°ï¼Œæ•°æ®ä¼šè¢«ä¸¢å¼ƒã€‚"
+"用于ååºåˆ—化 Godot æ•°æ®çš„æ•°æ®åŒ…å¯¹ç­‰æµ (stream) 的默认大å°ï¼ˆä»¥å­—节为å•ä½ï¼ŒæŒ‡å®š"
+"为 2 的幂)。默认值 [code]16[/code] 等于 65,536 字节。超过此大å°ï¼Œæ•°æ®å°†è¢«ä¸¢"
+"弃。"
-#: doc/classes/ProjectSettings.xml:968
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr "使用TCP的连接å°è¯•的超时(以秒为å•ä½ï¼‰ã€‚"
-#: doc/classes/ProjectSettings.xml:971
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr "[WebRTCDataChannel]输入缓冲区的最大尺寸(å•ä½ï¼šåƒå­—节)。"
-#: doc/classes/ProjectSettings.xml:974
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
-msgstr "[WebRTCDataChannel]输入缓冲区的最大尺寸(å•ä½ï¼šåƒå­—节)。"
+msgstr "[WebSocketClient] 输入缓冲区的最大尺寸,以 kiB 为å•ä½ã€‚"
-#: doc/classes/ProjectSettings.xml:977
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
-msgstr ""
+msgstr "[WebSocketClient] 的最大并å‘输入数æ®åŒ…数。"
-#: doc/classes/ProjectSettings.xml:980
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
-msgstr "[WebRTCDataChannel]输入缓冲区的最大尺寸(å•ä½ï¼šåƒå­—节)。"
+msgstr "[WebSocketClient]输出缓冲区的最大尺寸,以kiB为å•ä½ã€‚"
-#: doc/classes/ProjectSettings.xml:983
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
-msgstr ""
+msgstr "[WebSocketClient]的最大并å‘输出数æ®åŒ…æ•°é‡ã€‚"
-#: doc/classes/ProjectSettings.xml:986
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
-msgstr "[WebRTCDataChannel]输入缓冲区的最大尺寸(å•ä½ï¼šåƒå­—节)。"
+msgstr "[WebSocketServer]输入缓冲区的最大尺寸,以kiB为å•ä½ã€‚"
-#: doc/classes/ProjectSettings.xml:989
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
-msgstr ""
+msgstr "[WebSocketServer] 的最大并å‘输入数æ®åŒ…æ•°é‡ã€‚"
-#: doc/classes/ProjectSettings.xml:992
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
-msgstr "[WebRTCDataChannel]输入缓冲区的最大尺寸(å•ä½ï¼šåƒå­—节)。"
+msgstr "[WebSocketServer] 输出缓冲区的最大尺寸,以 kiB 为å•ä½ã€‚"
-#: doc/classes/ProjectSettings.xml:995
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
-msgstr ""
+msgstr "[WebSocketServer] 的最大并å‘输出数æ®åŒ…æ•°é‡ã€‚"
-#: doc/classes/ProjectSettings.xml:998
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
@@ -55565,11 +56148,11 @@ msgstr ""
"对远程文件系统的预读å–é‡ã€‚更高的值å¯ä»¥å‡å°‘延迟的影å“,但代价是更高的带宽消"
"耗。"
-#: doc/classes/ProjectSettings.xml:1001
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr "远程文件系统使用的页é¢å¤§å°ï¼ˆå­—节)。"
-#: doc/classes/ProjectSettings.xml:1004
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -55583,35 +56166,39 @@ msgstr ""
"certificates.crt]Mozillaè¯ä¹¦åŒ…[/url]。如果留空,将使用默认的è¯ä¹¦åŒ…。\n"
"如果有疑问,让这个设置为空。"
-#: doc/classes/ProjectSettings.xml:1008
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
"当自动创建节点å称时,在这个项目中设置大å°å†™çš„ç±»åž‹ã€‚è¿™ä¸»è¦æ˜¯ç¼–辑器设置。"
-#: doc/classes/ProjectSettings.xml:1011
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr "用什么æ¥åˆ†éš”节点å称和编å·ã€‚è¿™ä¸»è¦æ˜¯ä¸€ä¸ªç¼–辑器的设置。"
-#: doc/classes/ProjectSettings.xml:1014
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
-msgstr "用于broad-phase 2D 哈希网格算法的哈希表的大å°ã€‚"
+msgstr ""
+"用于宽相 2D 哈希网格算法的哈希表的大å°ã€‚\n"
+"[b]注æ„:[/b] 如果å¯ç”¨äº† [member ProjectSettings.physics/2d/use_bvh],则ä¸ä½¿"
+"用。"
-#: doc/classes/ProjectSettings.xml:1018
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
+"用于宽相2D哈希网格算法的å•元尺寸,åƒç´ å•ä½ã€‚\n"
+"[b]注æ„:[/b] 如果å¯ç”¨[member ProjectSettings.physics/2D/use_bvh],则ä¸ä½¿ç”¨ã€‚"
-#: doc/classes/ProjectSettings.xml:1022
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -55623,9 +56210,15 @@ msgid ""
"common/physics_fps], [code]60[/code] by default) will bring the object to a "
"stop in one iteration."
msgstr ""
+"2D 中的默认角阻尼。\n"
+"[b]注æ„:[/b] 良好的值在 [code]0[/code] 到 [code]1[/code] 的范围内。在值为 "
+"[code]0[/code] 时,对象将继续以相åŒçš„速度移动。大于 [code]1[/code] 的值将旨在"
+"ä¸åˆ°ä¸€ç§’的时间内将速度é™ä½Žåˆ° [code]0[/code],例如[code]2[/code] 的值将旨在在"
+"åŠç§’内将速度é™ä½Žåˆ° [code]0[/code]。等于或大于物ç†å¸§é€ŸçŽ‡çš„å€¼å°†ä½¿å¯¹è±¡åœ¨ä¸€æ¬¡è¿­ä»£"
+"ä¸­åœæ­¢ï¼Œ[member ProjectSettings.physics/common/physics_fps]默认情况下为 "
+"[code]60[/code]。"
-#: doc/classes/ProjectSettings.xml:1026
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -55636,17 +56229,16 @@ msgid ""
"Physics2DServer.AREA_PARAM_GRAVITY, 98)\n"
"[/codeblock]"
msgstr ""
-"2D中默认的é‡åŠ›å¼ºåº¦ã€‚\n"
-"[b]注æ„:[/b]这个属性åªåœ¨é¡¹ç›®å¯åŠ¨æ—¶è¢«è¯»å–。若è¦åœ¨è¿è¡Œæ—¶æ”¹å˜é»˜è®¤çš„é‡åŠ›ï¼Œè¯·ä½¿ç”¨"
-"以下代ç ç¤ºä¾‹ã€‚\n"
+"2D中默认的é‡åŠ›å¼ºåº¦ï¼Œå•ä½ï¼šæ¯ç§’平方åƒç´ ã€‚\n"
+"[b]注æ„:[/b]这个属性åªåœ¨é¡¹ç›®å¯åŠ¨æ—¶è¢«è¯»å–。è¦åœ¨è¿è¡Œæ—¶æ”¹å˜é»˜è®¤çš„é‡åŠ›ï¼Œè¯·ä½¿ç”¨ä»¥"
+"下代ç ç¤ºä¾‹ï¼š\n"
"[codeblock]\n"
"# 设置默认的é‡åŠ›å¼ºåº¦ä¸º98。\n"
-"PhysicsServer2D.area_set_param(get_viewport().find_world_2d().get_space(), "
-"PhysicsServer2D.area_PARAM_GRAVITY, 98)\n"
+"Physics2DServer.area_set_param(get_viewport().find_world_2d().get_space(), "
+"Physics2DServer.AREA_PARAM_GRAVITY, 98)\n"
"[/codeblock]"
-#: doc/classes/ProjectSettings.xml:1034
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -55657,16 +56249,16 @@ msgid ""
"Physics2DServer.AREA_PARAM_GRAVITY_VECTOR, Vector2(0, 1))\n"
"[/codeblock]"
msgstr ""
-"2D中默认的é‡åŠ›æ–¹å‘。\n"
-"[b]注æ„:[/b]这个属性åªåœ¨é¡¹ç›®å¯åŠ¨æ—¶è¢«è¯»å–。若è¦åœ¨è¿è¡Œæ—¶æ”¹å˜é»˜è®¤çš„é‡åŠ›å‘é‡ï¼Œè¯·"
-"使用下é¢çš„代ç ç¤ºä¾‹ã€‚\n"
+"2D 中的默认é‡åŠ›æ–¹å‘。\n"
+"[b]注:[/b] 该属性仅在项目å¯åŠ¨æ—¶è¯»å–。è¦åœ¨è¿è¡Œæ—¶æ›´æ”¹é»˜è®¤é‡åŠ›å‘é‡ï¼Œè¯·ä½¿ç”¨ä»¥ä¸‹"
+"代ç ç¤ºä¾‹ï¼š\n"
"[codeblock]\n"
-"# 设置默认的é‡åŠ›æ–¹å‘为`Vector2(0, 1)`。\n"
-"PhysicsServer2D.area_set_param(get_viewport().find_world_2d().get_space(), "
-"PhysicsServer2D.area_PARAM_GRAVITY_VECTOR, Vector2(0, 1))\n"
+"# 设置默认é‡åŠ›æ–¹å‘为`Vector2(0, 1)`。\n"
+"Physics2DServer.area_set_param(get_viewport().find_world_2d().get_space(), "
+"Physics2DServer.AREA_PARAM_GRAVITY_VECTOR, Vector2(0, 1))\n"
"[/codeblock]"
-#: doc/classes/ProjectSettings.xml:1042
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -55678,50 +56270,54 @@ msgid ""
"common/physics_fps], [code]60[/code] by default) will bring the object to a "
"stop in one iteration."
msgstr ""
+"2D 中的默认线性阻尼。\n"
+"[b]注:[/b]良好的值在[code]0[/code]到[code]1[/code]的范围内。在值为 [code]0[/"
+"code] 时,对象将继续以相åŒçš„速度移动。大于 [code]1[/code] 的值将旨在ä¸åˆ°ä¸€ç§’"
+"的时间内将速度é™ä½Žåˆ° [code]0[/code],例如[code]2[/code] 的值将旨在åŠç§’内将速"
+"度é™ä½Žåˆ° [code]0[/code]。等于或大于物ç†å¸§é€ŸçŽ‡çš„å€¼å°†ä½¿å¯¹è±¡åœ¨ä¸€æ¬¡è¿­ä»£ä¸­åœæ­¢ï¼Œ"
+"[member ProjectSettings.physics/common/physics_fps],默认情况下为 [code]60[/"
+"code]。"
-#: doc/classes/ProjectSettings.xml:1046
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-"在broad-phase 2D哈希网格算法中,定义相对于å•元而言的构æˆå¤§åž‹ç‰©ä½“的表é¢å°ºå¯¸çš„"
-"阈值。"
+"定义构æˆå¤§å¯¹è±¡çš„表é¢å°ºå¯¸çš„阈值,与宽相 2D 散列网格算法中的å•元有关。\n"
+"[b]注æ„:[/b]如果å¯ç”¨äº†[member ProjectSettings.physics/2d/use_bvh],则ä¸ä½¿"
+"用。"
-#: doc/classes/ProjectSettings.xml:1050
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-"设置用于2D物ç†çš„物ç†å¼•擎。\n"
-"\"DEFAULT \"å’Œ \"GodotPhysics2D \"是一样的,因为目å‰è¿˜æ²¡æœ‰ä½¿ç”¨å…¶ä»–çš„2D物ç†å¼•"
-"擎。"
+"设置用于 2D 物ç†çš„物ç†å¼•擎。\n"
+"\"DEFAULT\" å’Œ \"GodotPhysics\" æ˜¯ä¸€æ ·çš„ï¼Œå› ä¸ºç›®å‰æ²¡æœ‰å®žçް坿›¿ä»£çš„ 2D ç‰©ç†æœ"
+"务。"
-#: doc/classes/ProjectSettings.xml:1054
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-"角速度阈值。在此阈值以下,2D物ç†ä½“å°†è¢«è§†ä¸ºä¸æ´»åŠ¨ã€‚å‚阅[constant "
-"physicsServer2D.SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]。"
+"阈值角速度,在该阈值下 2D 物ç†ä½“å°†è¢«è§†ä¸ºéžæ´»åŠ¨ã€‚å‚阅 [constant "
+"Physics2DServer.SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]。"
-#: doc/classes/ProjectSettings.xml:1057
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-"线性速度的阈值。在此阈值下二维物ç†ä½“è¢«è®¤ä¸ºæ˜¯ä¸æ´»åŠ¨çš„ã€‚å‚阅[constant "
+"线性速度的阈值。在此阈值下2D物ç†ä½“è¢«è®¤ä¸ºæ˜¯éžæ´»åŠ¨çš„ã€‚å‚阅[constant "
"PhysicsServer2D.SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]。"
-#: doc/classes/ProjectSettings.xml:1060
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -55735,30 +56331,31 @@ msgstr ""
"[b]警告:[/b] 从Godot 3.2开始,关于物ç†è¿ç®—使用多线程的å馈ä¸ä¸€ã€‚请务必评估它"
"是å¦ç¡®å®žç»™ä½ å¸¦æ¥äº†é¢å¤–的性能,并且在使用它时没有过时。"
-#: doc/classes/ProjectSettings.xml:1064
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-"2D物ç†ç‰©ä½“䏿´»åŠ¨çš„æ—¶é—´ï¼ˆä»¥ç§’ä¸ºå•ä½ï¼‰ã€‚在此之å‰ï¼Œ2D物ç†ä½“将进入ç¡çœ çжæ€ã€‚å‚阅"
+"2D物ç†ç‰©ä½“éžæ´»åŠ¨çš„æ—¶é—´ï¼Œä»¥ç§’ä¸ºå•ä½ã€‚在此之å‰ï¼Œ2D物ç†ç‰©ä½“将进入休眠状æ€ã€‚å‚阅"
"[constant PhysicsServer2D.SPACE_PARAM_BODY_TIME_TO_SLEEP]。"
-#: doc/classes/ProjectSettings.xml:1067
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
+"å¯ç”¨è¾¹ç•Œä½“ç§¯å±‚æ¬¡ç»“æž„è€Œä¸æ˜¯æ•£åˆ—网格,用于 2D 物ç†ç©ºé—´åˆ†åŒºã€‚è¿™å¯èƒ½ä¼šæä¾›æ›´å¥½çš„"
+"性能。"
-#: doc/classes/ProjectSettings.xml:1070
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-"设置三维物ç†ä¸–ç•Œçš„åˆ›å»ºæ˜¯å¦æ”¯æŒ[SoftBody3D]物ç†è¿ç®—(åªé€‚用于Bullet物ç†å¼•擎)。"
+"设置是å¦åœ¨æ”¯æŒ [SoftBody] 物ç†çš„æƒ…况下创建 3D 物ç†ä¸–界。仅适用于 Bullet 物ç†"
+"引擎。"
-#: doc/classes/ProjectSettings.xml:1073
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -55770,9 +56367,15 @@ msgid ""
"common/physics_fps], [code]60[/code] by default) will bring the object to a "
"stop in one iteration."
msgstr ""
+"3D 中的默认角阻尼。\n"
+"[b]注æ„:[/b] 良好的值在 [code]0[/code] 到 [code]1[/code] 的范围内。在值为 "
+"[code]0[/code] 时,对象将继续以相åŒçš„速度移动。大于 [code]1[/code] 的值将旨在"
+"ä¸åˆ°ä¸€ç§’的时间内将速度é™ä½Žåˆ° [code]0[/code],例如[code]2[/code] 的值将旨在åŠ"
+"秒内将速度é™ä½Žåˆ° [code]0[/code]。等于或大于物ç†å¸§é€ŸçŽ‡çš„å€¼å°†ä½¿å¯¹è±¡åœ¨ä¸€æ¬¡è¿­ä»£ä¸­"
+"åœæ­¢ï¼Œ[member ProjectSettings.physics/common/physics_fps]默认情况下为 "
+"[code]60[/code]。"
-#: doc/classes/ProjectSettings.xml:1077
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -55783,17 +56386,16 @@ msgid ""
"PhysicsServer.AREA_PARAM_GRAVITY, 9.8)\n"
"[/codeblock]"
msgstr ""
-"3D中默认的é‡åŠ›å¼ºåº¦ã€‚\n"
-"[b]注æ„:[/b]这个属性åªåœ¨é¡¹ç›®å¯åŠ¨æ—¶è¢«è¯»å–。若è¦åœ¨è¿è¡Œæ—¶æ”¹å˜é»˜è®¤çš„é‡åŠ›ï¼Œè¯·ä½¿ç”¨"
-"以下代ç ç¤ºä¾‹ã€‚\n"
+"3D 中的默认é‡åŠ›å¼ºåº¦ï¼Œå•ä½ï¼šç±³/秒平方。\n"
+"[b]注:[/b] 该属性仅在项目å¯åŠ¨æ—¶è¯»å–。è¦åœ¨è¿è¡Œæ—¶æ›´æ”¹é»˜è®¤é‡åŠ›ï¼Œè¯·ä½¿ç”¨ä»¥ä¸‹ä»£ç "
+"示例:\n"
"[codeblock]\n"
-"# 设置默认的é‡åŠ›å¼ºåº¦ä¸º9.8。\n"
-"PhysicsServer3D.area_set_param(get_viewport().find_world().get_space(), "
-"PhysicsServer3D.AREA_PARAM_GRAVITY, 9.8)\n"
+"# 设置默认é‡åŠ›å¼ºåº¦ä¸º9.8。\n"
+"PhysicsServer.area_set_param(get_viewport().find_world().get_space(), "
+"PhysicsServer.AREA_PARAM_GRAVITY, 9.8)\n"
"[/codeblock]"
-#: doc/classes/ProjectSettings.xml:1085
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -55804,16 +56406,16 @@ msgid ""
"PhysicsServer.AREA_PARAM_GRAVITY_VECTOR, Vector3(0, -1, 0))\n"
"[/codeblock]"
msgstr ""
-"3D中默认的é‡åŠ›æ–¹å‘。\n"
-"[b]注æ„:[/b]这个属性åªåœ¨é¡¹ç›®å¯åŠ¨æ—¶è¢«è¯»å–。若è¦åœ¨è¿è¡Œæ—¶æ”¹å˜é»˜è®¤çš„é‡åŠ›å‘é‡ï¼Œè¯·"
-"使用下é¢çš„代ç ç¤ºä¾‹ã€‚\n"
+"3D 中的默认é‡åŠ›æ–¹å‘。\n"
+"[b]注:[/b] 该属性仅在项目å¯åŠ¨æ—¶è¯»å–。è¦åœ¨è¿è¡Œæ—¶æ›´æ”¹é»˜è®¤é‡åŠ›å‘é‡ï¼Œè¯·ä½¿ç”¨ä»¥ä¸‹"
+"代ç ç¤ºä¾‹ï¼š\n"
"[codeblock]\n"
-"# 设置默认的é‡åŠ›æ–¹å‘为`Vector3(0, -1, 0)`。\n"
-"PhysicsServer3D.area_set_param(get_viewport().find_world().get_space(), "
-"PhysicsServer3D.AREA_PARAM_GRAVITY_VECTOR, Vector3(0, -1, 0))\n"
+"# 设置默认é‡åŠ›æ–¹å‘为`Vector3(0, -1, 0)`。\n"
+"PhysicsServer.area_set_param(get_viewport().find_world().get_space(), "
+"PhysicsServer.AREA_PARAM_GRAVITY_VECTOR, Vector3(0, -1, 0))\n"
"[/codeblock]"
-#: doc/classes/ProjectSettings.xml:1093
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -55825,30 +56427,38 @@ msgid ""
"common/physics_fps], [code]60[/code] by default) will bring the object to a "
"stop in one iteration."
msgstr ""
+"3D 中的默认线性阻尼。\n"
+"[b]注:[/b]好的值在[code]0[/code]到[code]1[/code]的范围内。在值为 [code]0[/"
+"code] 时,对象将继续以相åŒçš„速度移动。大于 [code]1[/code] 的值将旨在ä¸åˆ°ä¸€ç§’"
+"的时间内将速度é™ä½Žåˆ° [code]0[/code],例如[code]2[/code] 的值将旨在åŠç§’内将速"
+"度é™ä½Žåˆ° [code]0[/code]。等于或大于物ç†å¸§é€ŸçŽ‡çš„å€¼å°†ä½¿å¯¹è±¡åœ¨ä¸€æ¬¡è¿­ä»£ä¸­åœæ­¢ï¼Œ"
+"[member ProjectSettings.physics/common/physics_fps]默认情况下为 [code]60[/"
+"code]。"
-#: doc/classes/ProjectSettings.xml:1097
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
+"å…è®¸ä½¿ç”¨è¾¹ç•Œä½“ç§¯å±‚æ¬¡ç»“æž„è€Œä¸æ˜¯å…«å‰æ ‘进行 3D 物ç†ç©ºé—´åˆ†åŒºã€‚è¿™å¯èƒ½ä¼šæä¾›æ›´å¥½çš„"
+"性能。"
-#: doc/classes/ProjectSettings.xml:1100
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
"physics engine. The \"GodotPhysics\" engine is still supported as an "
"alternative."
msgstr ""
-"设置3D物ç†å­¦çš„物ç†å¼•擎。\n"
-"ç›®å‰ \"DEFAULT \"是[url=https://bulletphysics.org]Bullet[/url]物ç†å¼•擎。ä»ç„¶"
-"æ”¯æŒ \"GodotPhysics3D \"引擎作为替代。"
+"设置用于 3D 物ç†çš„物ç†å¼•擎。\n"
+"\"DEFAULT\"ç›®å‰æ˜¯ [url=https://bulletphysics.org]Bullet[/url] 物ç†å¼•擎。ä»ç„¶"
+"支æŒ\"GodotPhysics\"引擎作为替代。"
-#: doc/classes/ProjectSettings.xml:1104
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr "在根视图上å¯ç”¨ [member Viewport.physics_object_picking]。"
-#: doc/classes/ProjectSettings.xml:1107
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -55861,8 +56471,15 @@ msgid ""
"picking input events during pause (so nodes won't get them) and flushing "
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
+"如果å¯ç”¨ï¼Œ2D å’Œ 3D 物ç†pickåœ¨æš‚åœæ—¶ä¼šè¿™æ ·è¡¨çŽ°ï¼š\n"
+"- æš‚åœå¼€å§‹æ—¶ï¼Œæ‚¬åœæˆ–æ•获的æ¯ä¸ªç¢°æ’žå¯¹è±¡ï¼ˆä»…é™ 3D)都会从该状æ€ä¸­é‡Šæ”¾å‡ºæ¥ï¼ŒèŽ·å¾—"
+"相关的鼠标退出回调,除éžå…¶æš‚åœæ¨¡å¼ä½¿å…¶å…于暂åœã€‚\n"
+"- åœ¨æš‚åœæœŸé—´ï¼Œpickåªè€ƒè™‘ä¸å—æš‚åœçš„碰撞对象,å‘é€è¾“入事件和输入/退出回调到他们"
+"预期。\n"
+"如果ç¦ç”¨ï¼Œåˆ™ä½¿ç”¨è¿‡åŽ»çš„è¡Œä¸ºï¼ŒåŒ…æ‹¬åœ¨æš‚åœæœŸé—´æŽ’队等待pick输入事件(因此节点ä¸ä¼š"
+"获å–它们),并在æ¢å¤æ—¶æ ¹æ®2D/3D世界的状æ€åˆ·æ–°è¯¥é˜Ÿåˆ—。"
-#: doc/classes/ProjectSettings.xml:1113
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -55875,8 +56492,7 @@ msgstr ""
"[b]注æ„:[/b] 这个属性åªåœ¨é¡¹ç›®å¯åŠ¨æ—¶è¢«è¯»å–。è¦åœ¨è¿è¡Œæ—¶æ”¹å˜ç‰©ç†FPS,请设置"
"[member Engine.iterations_per_second]æ¥ä»£æ›¿ã€‚"
-#: doc/classes/ProjectSettings.xml:1117
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -55891,12 +56507,17 @@ msgid ""
"[b]Note:[/b] This property is only read when the project starts. To change "
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-"æŽ§åˆ¶ç‰©ç†æ—¶é’Ÿä¸Žå®žæ—¶åŒæ­¥çš„程度。为0æˆ–æ›´å°‘ï¼Œåˆ™æ˜¯åŒæ­¥çš„。这样的值建议用于网络游"
-"æˆï¼Œå› ä¸ºæ—¶é’ŸåŒæ­¥å¾ˆé‡è¦ã€‚较高的数值会导致游æˆä¸­çš„æ—¶é’Ÿå’ŒçœŸå®žæ—¶é’Ÿæœ‰è¾ƒå¤§çš„å差,"
-"但å…许平滑帧率抖动。默认值0.5对大多数人æ¥è¯´åº”该是没有问题的;高于2的值å¯èƒ½ä¼š"
-"导致游æˆå¯¹æŽ‰å¸§çš„å应有明显的延迟,ä¸å»ºè®®ä½¿ç”¨ã€‚"
+"æŽ§åˆ¶ç‰©ç†æ—¶é’Ÿå®žæ—¶åŒæ­¥çš„程度。如果是0æˆ–æ›´å°‘ï¼Œæ—¶é’Ÿæ˜¯åŒæ­¥çš„。这样的值建议用于网络"
+"游æˆï¼Œå› ä¸ºæ—¶é’Ÿçš„åŒæ­¥æ€§å¾ˆé‡è¦ã€‚较高的值会导致游æˆä¸­çš„æ—¶é’Ÿå’ŒçœŸå®žæ—¶é’Ÿçš„å差较"
+"大,但å¯ä»¥å¹³æ»‘帧速率的抖动。默认值0.5对大多数人æ¥è¯´åº”是ä¸é”™çš„;超过2的值å¯èƒ½"
+"会导致游æˆå¯¹æŽ‰å¸§çš„å应有明显的延迟,因此ä¸å»ºè®®ä½¿ç”¨ã€‚\n"
+"[b]注æ„:[/b]ä¸ºäº†èŽ·å¾—æœ€ä½³æ•ˆæžœï¼Œå½“ä½¿ç”¨è‡ªå®šä¹‰ç‰©ç†æ’值解决方案时,应该通过将"
+"[member physics/common/physics_jitter_fix]设置为[code]0[/code]æ¥ç¦ç”¨ç‰©ç†æŠ–动"
+"ä¿®å¤ã€‚\n"
+"[b]注æ„:[/b] 这个属性åªåœ¨é¡¹ç›®å¯åŠ¨æ—¶è¢«è¯»å–。è¦åœ¨è¿è¡Œæ—¶æ”¹å˜ç‰©ç†FPS,请设置"
+"[member Engine.physics_jitter_fix]。"
-#: doc/classes/ProjectSettings.xml:1122
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -55905,8 +56526,12 @@ msgid ""
"exports. A non-default setting that works better on your machine may "
"adversely affect performance for end users."
msgstr ""
+"[b]实验性的。[/b]åœ¨ä¸Šä¼ æ‰¹å¤„ç†æ•°æ®ä¹‹å‰ä½¿ç”¨NULLæ•°æ®è°ƒç”¨[code]glBufferData[/"
+"code]。这å¯èƒ½ä¸æ˜¯å¿…需的,但å¯ä»¥ç”¨äºŽå®‰å…¨ã€‚\n"
+"[b]注æ„:[/b] å°å¿ƒä½¿ç”¨ã€‚建议您将其ä¿ç•™ä¸ºå¯¼å‡ºçš„默认值。在您的计算机上效果更好"
+"çš„éžé»˜è®¤è®¾ç½®å¯èƒ½ä¼šå¯¹æœ€ç»ˆç”¨æˆ·çš„æ€§èƒ½äº§ç”Ÿä¸åˆ©å½±å“。"
-#: doc/classes/ProjectSettings.xml:1126
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -55915,8 +56540,12 @@ msgid ""
"exports. A non-default setting that works better on your machine may "
"adversely affect performance for end users."
msgstr ""
+"[b]实验性的。[/b] 如果设置为 on,则使用 [code]GL_STREAM_DRAW[/code] 标志进行"
+"批处ç†ç¼“冲区上传。如果关闭,则使用 [code]GL_DYNAMIC_DRAW[/code] 标志。\n"
+"[b]注æ„:[/b] å°å¿ƒä½¿ç”¨ã€‚建议您将其ä¿ç•™ä¸ºå¯¼å‡ºçš„默认值。在您的计算机上效果更好"
+"çš„éžé»˜è®¤è®¾ç½®å¯èƒ½ä¼šå¯¹æœ€ç»ˆç”¨æˆ·çš„æ€§èƒ½äº§ç”Ÿä¸åˆ©å½±å“。"
-#: doc/classes/ProjectSettings.xml:1130
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -55926,8 +56555,13 @@ msgid ""
"exports. A non-default setting that works better on your machine may "
"adversely affect performance for end users."
msgstr ""
+"[b]实验性的。[/b]如果设置为,则适用缓冲孤立 - [code]glBufferData [/code] 在上"
+"ä¼ æ–°æ•°æ®ä¹‹å‰ä½¿ç”¨ NULL æ•°æ®å’Œå®Œæ•´ç¼“冲器大å°è¿›è¡Œè°ƒç”¨ã€‚这对于é¿å…æŸäº›ç¡¬ä»¶å‡ºçްåœ"
+"滞éžå¸¸é‡è¦ã€‚\n"
+"[b]注æ„:[/b] å°å¿ƒä½¿ç”¨ã€‚建议您将此作为导出的默认值。在机器上效果更好的éžé»˜è®¤"
+"设置å¯èƒ½ä¼šå¯¹æœ€ç»ˆç”¨æˆ·çš„æ€§èƒ½äº§ç”Ÿä¸åˆ©å½±å“。"
-#: doc/classes/ProjectSettings.xml:1134
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -55936,17 +56570,22 @@ msgid ""
"exports. A non-default setting that works better on your machine may "
"adversely affect performance for end users."
msgstr ""
+"[b] 实验性的。[/b] 如果设置为开å¯ï¼Œåˆ™ä½¿ç”¨ [code]GL_STREAM_DRAW[/code] 标志进"
+"行旧缓冲区上传。如果关闭,则使用 [code]GL_DYNAMIC_DRAW[/code] 标志。\n"
+"[b]注æ„:[/b] å°å¿ƒä½¿ç”¨ã€‚建议您将其ä¿ç•™ä¸ºå¯¼å‡ºçš„默认值。在您的计算机上效果更好"
+"çš„éžé»˜è®¤è®¾ç½®å¯èƒ½ä¼šå¯¹æœ€ç»ˆç”¨æˆ·çš„æ€§èƒ½äº§ç”Ÿä¸åˆ©å½±å“。"
-#: doc/classes/ProjectSettings.xml:1138
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
"Not available in GLES3 when [member rendering/batching/options/use_batching] "
"is off."
msgstr ""
+"在固定模å¼å’Œç¼©æ”¾æ¨¡å¼ä¹‹é—´è¿›è¡Œé€‰æ‹©ï¼Œå‰è€…ä¿ç•™äº†ä¸Žå›¾ç¨¿(artwork)相匹é…的角缩放。\n"
+"当[member rendering/batching/options/use_batching]关闭时,在GLES3中ä¸å¯ç”¨ã€‚"
-#: doc/classes/ProjectSettings.xml:1142
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -55956,14 +56595,13 @@ msgid ""
"NVIDIA GPUs at the cost of performance. This option affects GLES2 and GLES3 "
"rendering, but only on desktop platforms."
msgstr ""
-"一些NVIDIA GPU驱动有一个bug,对[code]draw_rect[/code]方法产生闪çƒé—®é¢˜ï¼Œç‰¹åˆ«æ˜¯"
-"在[TileMap]中使用时。详情请å‚考[url=https://github.com/godotengine/godot/"
+"一些NVIDIA GPU驱动有bug,对[code]draw_rect[/code]方法产生闪çƒé—®é¢˜ï¼Œç‰¹åˆ«æ˜¯åœ¨"
+"[TileMap]中使用时。详情å‚阅[url=https://github.com/godotengine/godot/"
"issues/9913]GitHub issue 9913[/url]。\n"
-"如果为[code]true[/code],该选项将为此类NVIDIA GPUå¯ç”¨ä¸€ä¸ª \"安全 \"的代ç è·¯"
-"径,但会牺牲性能。这个选项åªå½±å“GLES2渲染åŽç«¯ï¼Œè€Œä¸”åªå½±å“桌é¢å¹³å°ã€‚在使用"
-"VulkanåŽç«¯æ—¶ï¼Œå®ƒæ˜¯ä¸å¿…è¦çš„。"
+"如果[code]为true[/code],该选项将为此类NVIDIA GPUå¯ç”¨ \"安全\" 的代ç è·¯å¾„,但"
+"会牺牲性能。这个选项会影å“GLES2å’ŒGLES3的渲染,但åªåœ¨æ¡Œé¢å¹³å°ä¸Šã€‚"
-#: doc/classes/ProjectSettings.xml:1146
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -55977,8 +56615,16 @@ msgid ""
"with hardware skinning, [code]VERTEX[/code] is the position [i]before[/i] "
"skinning."
msgstr ""
+"如果 [code]true[/code],则在 CPU è€Œéž GPU 上执行 2D 蒙皮。这æä¾›äº†ä¸Žå„ç§ç¡¬ä»¶"
+"的更大兼容性,并且在æŸäº›æƒ…况下也å¯èƒ½æ›´å¿«ã€‚\n"
+"当å‰ä»…在 [member rendering/batching/options/use_batching] å¤„äºŽæ´»åŠ¨çŠ¶æ€æ—¶å¯"
+"用。\n"
+"[b]注æ„:[/b] 䏿”¯æŒæŠ—锯齿软件蒙皮多边形,将在没有抗锯齿的情况下渲染。\n"
+"[b]注æ„:[/b] 使用内置 [code]VERTEX[/code] 的自定义ç€è‰²å™¨åœ¨åº”用蒙皮 [i]之åŽ[/"
+"i]以 [code]VERTEX[/code] ä½ç½®è¿è¡Œ ,而使用硬件蒙皮,[code] VERTEX[/code] 是被"
+"应用蒙皮 [i]ä¹‹å‰ [/i] çš„ä½ç½®ã€‚"
-#: doc/classes/ProjectSettings.xml:1152
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -55986,14 +56632,19 @@ msgid ""
"Consider using the project setting [member rendering/batching/precision/"
"uv_contract] to prevent artifacts."
msgstr ""
+"如果 [code]true[/code],则在 2D 渲染中强制将顶点对é½åˆ°åƒç´ ã€‚å¯èƒ½æœ‰åŠ©äºŽæŸäº›åƒ"
+"素艺术风格。\n"
+"è¿™ç§æ•æ‰æ˜¯åœ¨é¡¶ç‚¹ç€è‰²å™¨ä¸­çš„ GPU 上执行的。\n"
+"考虑使用项目设置[member rendering/batching/precision/uv_contract] æ¥é˜²æ­¢å‡ºçް"
+"伪影。"
-#: doc/classes/ProjectSettings.xml:1157
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
-msgstr ""
+msgstr "å½“æ‰¹å¤„ç†æ‰“开时,这会定期打å°å¸§è¯Šæ–­æ—¥å¿—。请注æ„,这会é™ä½Žæ€§èƒ½ã€‚"
-#: doc/classes/ProjectSettings.xml:1160
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -56001,8 +56652,11 @@ msgid ""
"on each frame. This makes it easy to identify visual differences. "
"Performance will be degraded."
msgstr ""
+"[b] 实验性的。[/b] 用于针对旧渲染器的回归测试。如果打开并设置 "
+"[code]use_batching[/code],渲染器将在æ¯ä¸€å¸§ä¸Šäº¤æ›¿ä½¿ç”¨æ—§æ¸²æŸ“å™¨å’Œæ‰¹å¤„ç†æ¸²æŸ“器。"
+"这使得识别视觉差异å˜å¾—容易。性能会下é™ã€‚"
-#: doc/classes/ProjectSettings.xml:1163
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -56011,8 +56665,11 @@ msgid ""
"off. With large values the cost of overlap tests may lead to diminishing "
"returns."
msgstr ""
+"ç¯æœ‰å¯èƒ½é˜»æ­¢è¿žæŽ¥é¡¹ç›®ï¼Œå¹¶ç ´å批处ç†çš„许多性能优势。此设置å¯ç”¨äº†ä¸€äº›å¤æ‚的逻"
+"辑,如果它们的照明相似,并且é‡å æµ‹è¯•通过,则å…许加入项目。这å¯ä»¥æ˜¾ç€æé«˜æŸäº›"
+"游æˆçš„æ€§èƒ½ã€‚设置为 0 以关闭。对于较大的值,é‡å æµ‹è¯•çš„æˆæœ¬å¯èƒ½ä¼šå¯¼è‡´æ”¶ç›Šé€’å‡ã€‚"
-#: doc/classes/ProjectSettings.xml:1166
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -56023,8 +56680,12 @@ msgid ""
"to give the threshold. This can reduce fill rate requirements in scenes with "
"a lot of lighting."
msgstr ""
+"设置必须由剪切æ“作ä¿å­˜ä»¥æ¿€æ´»å…‰å‰ªåˆ‡çš„æ€»å±å¹•区域的比例(以åƒç´ ä¸ºå•ä½ï¼‰ã€‚è¿™å¯ä»¥"
+"防止部分物体被渲染到光照区域之外。较低的值会让剪切更强。值为 1 ä¸å‰ªåˆ‡ä»»ä½•项,"
+"值为 0 剪切æ¯ä¸ªé¡¹ã€‚使用该值的4的幂,以强调较低的范围,并乘以以åƒç´ ä¸ºå•ä½çš„æ€»"
+"å±å¹•é¢ç§¯ä»¥ç»™å‡ºé˜ˆå€¼ã€‚è¿™å¯ä»¥é™ä½Žå…·æœ‰å¤§é‡ç…§æ˜Žçš„åœºæ™¯ä¸­çš„å¡«å……çŽ‡è¦æ±‚。"
-#: doc/classes/ProjectSettings.xml:1169
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -56033,25 +56694,31 @@ msgid ""
"turn this off unless you can guarantee your target hardware will work with "
"this method."
msgstr ""
+"å¯ç”¨æ­¤è®¾ç½®ä½¿ç”¨ä¼ ç»Ÿæ–¹æ³•绘制仅包å«ä¸€ä¸ªçŸ©å½¢çš„æ‰¹æ¬¡ã€‚传统方法更快(大约快两å€ï¼‰ï¼Œ"
+"但å¯èƒ½ä¼šå¯¼è‡´æŸäº›ç³»ç»Ÿå‡ºçŽ°é—ªçƒã€‚ä¸ºäº†ç›´æŽ¥ä¸Žéžæ‰¹å¤„ç†æ¸²æŸ“器比较性能,您å¯ä»¥å°†å…¶è®¾"
+"置为 trueï¼Œä½†å»ºè®®å°†å…¶å…³é—­ï¼Œé™¤éžæ‚¨å¯ä»¥ä¿è¯æ‚¨çš„目标硬件å¯ä»¥ä½¿ç”¨æ­¤æ–¹æ³•。"
-#: doc/classes/ProjectSettings.xml:1172
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
+"打开和关闭 2D 批处ç†ã€‚批处ç†é€šè¿‡å‡å°‘图形 API ç»˜åˆ¶è°ƒç”¨çš„æ•°é‡æ¥æé«˜æ€§èƒ½ã€‚"
-#: doc/classes/ProjectSettings.xml:1175
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
-msgstr ""
+msgstr "在编辑器中打开 2D 批处ç†ã€‚"
-#: doc/classes/ProjectSettings.xml:1178
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
+"为批处ç†é¡¶ç‚¹ä¿ç•™çš„缓冲区大å°ã€‚æ›´å¤§çš„å°ºå¯¸æ”¯æŒæ›´å¤§çš„æ‰¹æ¬¡ï¼Œä½†æ‰€ç”¨å†…存的收益递"
+"å‡ã€‚这应该åªä¼šå¯¹æ€§èƒ½äº§ç”Ÿå¾ˆå°çš„å½±å“。"
-#: doc/classes/ProjectSettings.xml:1181
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -56059,16 +56726,22 @@ msgid ""
"code] above which vertices will be translated to colored format. A value of "
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
+"在顶点格å¼ä¸­åŒ…å«é¢œè‰²æ˜¯æœ‰ä»£ä»·çš„,但是,ä¸åŒ…å«é¢œè‰²ä¼šé˜»æ­¢è·¨é¢œè‰²æ›´æ”¹è¿›è¡Œæ‰¹å¤„ç†ã€‚"
+"此阈值会确定 [code] 顶点颜色更改次数 / 顶点总数 [/code] 的比率,高于该值的顶"
+"点将被转æ¢ä¸ºå½©è‰²æ ¼å¼ã€‚值 0 将始终使用彩色顶点,1 永远ä¸ä¼šä½¿ç”¨å½©è‰²é¡¶ç‚¹ã€‚"
-#: doc/classes/ProjectSettings.xml:1184
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
"however for each item lookahead, so there is a trade off, with diminishing "
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
+"在æŸäº›æƒ…况下,批处ç†ç¨‹åºå¯ä»¥é‡æ–°æŽ’åºé¡¹ç›®ä»¥ä¾¿æ›´å¥½åœ°åŠ å…¥å®ƒä»¬ã€‚è¿™å¯èƒ½ä¼šæœ‰æ›´å¥½çš„"
+"性能。然而,æ¯ä¸ªé¡¹çš„预先查看(lookahead)都需è¦é‡å æµ‹è¯•,但收益递å‡ï¼Œå› æ­¤éœ€è¦æƒ"
+"衡。如果您没有得到任何好处,将此设置为 0 将关闭它。"
-#: doc/classes/ProjectSettings.xml:1187
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -56076,8 +56749,11 @@ msgid ""
"this has diminishing returns and has a runtime cost so a small value is "
"recommended."
msgstr ""
+"设置命令数以预先查看(lookahead)ï¼Œä»¥ç¡®å®šæ˜¯å¦æ‰¹é‡æ¸²æŸ“项目。值为 1 å¯ä»¥åŠ å…¥ç”±å•"
+"个命令组æˆçš„项目,0 关闭连接。ç†è®ºä¸Šï¼Œè¾ƒé«˜çš„值更有å¯èƒ½åŠ å…¥ï¼Œä½†è¿™ä¼šé™ä½Žå›žæŠ¥ï¼Œ"
+"并且具有è¿è¡Œæˆæœ¬ï¼Œå› æ­¤å»ºè®®ä½¿ç”¨å°‘é‡å€¼ã€‚"
-#: doc/classes/ProjectSettings.xml:1190
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -56086,53 +56762,60 @@ msgid ""
"coordinates used. Note that this can result in a slight squashing of border "
"texels."
msgstr ""
+"在æŸäº›å¹³å°ï¼ˆå°¤å…¶æ˜¯ç§»åЍ平å°ï¼‰ä¸Šï¼Œç€è‰²å™¨ä¸­çš„精度问题å¯èƒ½ä¼šå¯¼è‡´è¯»å– 1 texel 超出"
+"边界,尤其是在缩放 rect 的情况下。这尤其会导致瓷砖地图中瓷砖周围的边界伪"
+"影。\n"
+"此调整通过对使用的 UV åæ ‡è¿›è¡Œå°å¹…收缩æ¥å¯¹æ­¤è¿›è¡Œæ ¡æ­£ã€‚请注æ„,这å¯èƒ½ä¼šå¯¼è‡´è¾¹"
+"界纹ç†çš„轻微挤压。"
-#: doc/classes/ProjectSettings.xml:1194
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
"both ranged from 0.0 to 1.0.\n"
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
+"UV收缩é‡ã€‚这个数字除以1000000,是总纹ç†å°ºå¯¸çš„一个比例,宽度和高度都在0.0到1.0"
+"之间。\n"
+"除éžä¸ºäº†çº æ­£ç‰¹å®šç¡¬ä»¶ä¸Šçš„问题,å¦åˆ™è¯·ä½¿ç”¨é»˜è®¤å€¼ã€‚"
-#: doc/classes/ProjectSettings.xml:1198
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
-msgstr ""
+msgstr "使用 [constant BakedLightmap.BAKE_QUALITY_HIGH] 时采集的光样本é‡ã€‚"
-#: doc/classes/ProjectSettings.xml:1201
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
-msgstr ""
+msgstr "使用 [constant BakedLightmap.BAKE_QUALITY_LOW] 时采集的光样本é‡ã€‚"
-#: doc/classes/ProjectSettings.xml:1204
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
-msgstr ""
+msgstr "使用 [constant BakedLightmap.BAKE_QUALITY_MEDIUM] 时采集的光样本é‡ã€‚"
-#: doc/classes/ProjectSettings.xml:1207
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
-msgstr ""
+msgstr "使用 [constant BakedLightmap.BAKE_QUALITY_ULTRA] 时采集的光样本é‡ã€‚"
-#: doc/classes/ProjectSettings.xml:1210
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
"Environment.background_color] in particular. To change this default color "
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-"é»˜è®¤èƒŒæ™¯é€æ˜Žé¢œè‰²ã€‚使用[Environment]å¯è¦†ç›–æ¯ä¸ª[Viewport]。具体请å‚阅[member "
-"Environment.background_mode]å’Œ[member Environment.background_color]。è¦ä»¥ä»£ç "
-"æ–¹å¼æ›´æ”¹æ­¤é»˜è®¤é¢œè‰²ï¼Œè¯·ä½¿ç”¨use [method RenderingServer."
-"set_default_clear_color]。"
+"é»˜è®¤èƒŒæ™¯é€æ˜Žé¢œè‰²ã€‚使用 [Environment] å¯è¦†ç›–æ¯ä¸ª[Viewport]。具体请å‚阅 "
+"[member Environment.background_mode] 和 [member Environment."
+"background_color]。è¦ä»¥ä»£ç æ–¹å¼æ›´æ”¹æ­¤é»˜è®¤é¢œè‰²ï¼Œè¯·ä½¿ç”¨ [method "
+"RenderingServer.set_default_clear_color]。"
-#: doc/classes/ProjectSettings.xml:1213
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -56145,61 +56828,73 @@ msgstr ""
"境,都会在场景加载时加载默认环境。如果ä¸ä¾èµ–默认环境,最好删除"
"[code]default_env.tres[/code],或者在这里指定ä¸åŒçš„默认环境。"
-#: doc/classes/ProjectSettings.xml:1216
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
+"使用åŠç²¾åº¦æµ®ç‚¹é¡¶ç‚¹åŽ‹ç¼©å¯èƒ½ä¼šåœ¨æŸäº›å¹³å°ä¸Šäº§ç”Ÿæ¸²æŸ“错误(尤其是iOS)。这些在粒å­"
+"中尤为明显。ç¦ç”¨åŠç²¾åº¦æµ®ç‚¹å¯èƒ½ä¼šè§£å†³è¿™äº›é—®é¢˜ã€‚"
-#: doc/classes/ProjectSettings.xml:1219
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
"iOS specific override for [member rendering/gles2/compatibility/"
"disable_half_float], due to poor support for half-float vertex compression "
"on many devices."
msgstr ""
+"对[member rendering/gles2/compatibility/disable_half_float]çš„iOS特定é‡å†™ï¼Œå› "
+"为在许多设备上对åŠç²¾åº¦æµ®ç‚¹é¡¶ç‚¹åŽ‹ç¼©çš„æ”¯æŒä¸ä½³ã€‚"
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
"If [code]true[/code] and available on the target Android device, enables "
"high floating point precision for all shader computations in GLES2.\n"
"[b]Warning:[/b] High floating point precision can be extremely slow on older "
"devices and is often not available at all. Use with caution."
msgstr ""
+"如果 [code]true[/code] 并且在目标 Android 设备上å¯ç”¨ï¼Œåˆ™ä¸º GLES2 中的所有ç€è‰²"
+"器计算å¯ç”¨é«˜æµ®ç‚¹ç²¾åº¦ã€‚\n"
+"[b]警告:[/b] 高浮点精度在旧设备上å¯èƒ½éžå¸¸æ…¢ï¼Œè€Œä¸”通常根本ä¸å¯ç”¨ã€‚谨慎使用。"
-#: doc/classes/ProjectSettings.xml:1226
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
-msgstr ""
+msgstr "æ··åˆå½¢çŠ¶çš„æœ€å¤§ç¼“å†²åŒºå¤§å°ã€‚任何比这更大的混åˆå½¢çŠ¶éƒ½ä¸èµ·ä½œç”¨ã€‚"
-#: doc/classes/ProjectSettings.xml:1229
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
-msgstr ""
+msgstr "绘制多边形的最大缓冲区大å°ã€‚任何大于此的多边形都ä¸èµ·ä½œç”¨ã€‚"
-#: doc/classes/ProjectSettings.xml:1232
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
-msgstr ""
+msgstr "绘制多边形的最大索引缓冲区大å°ã€‚任何大于此的多边形都ä¸èµ·ä½œç”¨ã€‚"
-#: doc/classes/ProjectSettings.xml:1235
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
+"用于绘制直接对象(ImmediateGeometry 节点)的最大缓冲区大å°ã€‚使用超过此大å°çš„"
+"节点将无法工作。"
-#: doc/classes/ProjectSettings.xml:1238
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
"(especially mobile) only support 102. Setting this low will slightly reduce "
"memory usage and may decrease shader compile times."
msgstr ""
+"æ¯ä¸ªå¯¹è±¡å¯æ¸²æŸ“的最大ç¯å…‰æ•°ã€‚这进一步å—到硬件支æŒçš„é™åˆ¶ã€‚å¤§å¤šæ•°è®¾å¤‡ä»…æ”¯æŒ 409 "
+"个ç¯å…‰ï¼Œè€Œè®¸å¤šè®¾å¤‡ï¼ˆå°¤å…¶æ˜¯ç§»åŠ¨è®¾å¤‡ï¼‰ä»…æ”¯æŒ 102 ç¯ã€‚将此设置为低会略微å‡å°‘内存"
+"使用并å¯èƒ½å‡å°‘ç€è‰²å™¨ç¼–译时间。"
-#: doc/classes/ProjectSettings.xml:1241
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -56208,8 +56903,12 @@ msgid ""
"web. For most uses, the default value is suitable, but consider lowering as "
"much as possible on web export."
msgstr ""
+"䏀叧䏭坿¸²æŸ“元素的最大数é‡ã€‚如果æ¯å¸§å¯è§æ›´å¤šå…ƒç´ ï¼Œåˆ™ä¸ä¼šç»˜åˆ¶å®ƒä»¬ã€‚请记ä½ï¼Œå…ƒ"
+"素是指网格表é¢è€Œä¸æ˜¯ç½‘格本身。将此值设置得较低会略微å‡å°‘内存使用é‡å¹¶å¯èƒ½å‡å°‘"
+"ç€è‰²å™¨ç¼–译时间,尤其是在 Web 上。对于大多数用途,默认值是åˆé€‚的,但考虑在 "
+"Web 导出时尽å¯èƒ½é™ä½Žã€‚"
-#: doc/classes/ProjectSettings.xml:1244
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -56217,8 +56916,11 @@ msgid ""
"uses, the default value is suitable, but consider lowering as much as "
"possible on web export."
msgstr ""
+"䏀叧䏭坿¸²æŸ“的最大ç¯å…‰æ•°ã€‚如果使用的ç¯å…‰æ•°è¶…过此数é‡ï¼Œåˆ™å®ƒä»¬å°†è¢«å¿½ç•¥ã€‚将此值"
+"设置得较低会略微å‡å°‘内存使用é‡å¹¶å¯èƒ½å‡å°‘ç€è‰²å™¨ç¼–译时间,尤其是在 Web 上。对于"
+"大多数用途,默认值是åˆé€‚的,但考虑在 Web 导出时尽å¯èƒ½é™ä½Žã€‚"
-#: doc/classes/ProjectSettings.xml:1247
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -56226,25 +56928,28 @@ msgid ""
"particularly on web. For most uses, the default value is suitable, but "
"consider lowering as much as possible on web export."
msgstr ""
+"䏀叧䏭坿¸²æŸ“的最大å射探针数。如果使用的å射探针数超过此数é‡ï¼Œåˆ™å®ƒä»¬å°†è¢«å¿½"
+"略。将此值设置得较低会略微å‡å°‘内存使用é‡å¹¶å¯èƒ½å‡å°‘ç€è‰²å™¨ç¼–译时间,尤其是在 "
+"Web 上。对于大多数用途,默认值是åˆé€‚的,但考虑在 Web 导出时尽å¯èƒ½é™ä½Žã€‚"
-#: doc/classes/ProjectSettings.xml:1250
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
+"ç€è‰²å™¨æœ‰ä¸€ä¸ªä¸æ–­å¢žåŠ çš„æ—¶é—´å˜é‡ã€‚在æŸäº›æ—¶å€™ï¼Œå®ƒéœ€è¦å›žæ»šåˆ°é›¶ä»¥é¿å…ç€è‰²å™¨åŠ¨ç”»çš„"
+"精度错误。此设置用于设定时间(以秒为å•ä½ï¼‰ã€‚"
-#: doc/classes/ProjectSettings.xml:1253
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-"如果[code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨S3纹ç†åŽ‹ç¼©ç®—æ³•å¯¼å…¥VRAM压缩的纹ç†ã€‚è¿™ç§"
-"算法åªåœ¨æ¡Œé¢å¹³å°å’Œæ¸¸æˆæœºä¸Šæ”¯æŒã€‚"
+"如果[code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨PNGæ ¼å¼å¯¼å…¥æ— æŸçº¹ç†ã€‚å¦åˆ™ï¼Œå°†é»˜è®¤ä½¿ç”¨"
+"WebP。"
-#: doc/classes/ProjectSettings.xml:1256
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -56252,19 +56957,21 @@ msgid ""
"Note that compression levels above 6 are very slow and offer very little "
"savings."
msgstr ""
-"Zlib的默认压缩级别。影å“压缩的场景和资æºã€‚较高的级别会以压缩速度为代价导致文"
-"ä»¶å˜å°ã€‚解压缩速度大多ä¸å—压缩级别的影å“。[code]-1[/code]使用默认的gzip压缩级"
-"别,该级别与[code]6[/code]相åŒï¼Œä½†ç”±äºŽåº•层zlib更新,未æ¥å¯èƒ½ä¼šå‘生å˜åŒ–。"
+"æ— æŸWebP的默认压缩级别。更高的级别会产生更å°çš„æ–‡ä»¶ï¼Œä½†ä¼šç‰ºç‰²åŽ‹ç¼©é€Ÿåº¦ã€‚è§£åŽ‹é€Ÿ"
+"度大多ä¸å—压缩级别的影å“。支æŒçš„值是0到9。请注æ„,高于6的压缩级别是éžå¸¸æ…¢çš„,"
+"而且节çœçš„å ç”¨éžå¸¸å°‘。"
-#: doc/classes/ProjectSettings.xml:1259
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
"attributes data. Recommended to be enabled if targeting mobile devices. "
"Requires manual reimport of meshes after toggling."
msgstr ""
+"导入时,网格顶点数æ®å°†åœ¨å•个顶点缓冲区内分æˆä¸¤ä¸ªæµï¼Œä¸€ä¸ªç”¨äºŽä½ç½®æ•°æ®ï¼Œå¦ä¸€ä¸ª"
+"用于交错属性数æ®ã€‚如果用于移动设备,建议å¯ç”¨ã€‚切æ¢åŽéœ€è¦æ‰‹åЍ釿–°å¯¼å…¥ç½‘格。"
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -56272,8 +56979,11 @@ msgid ""
"choose from these the most relevant based on a screen space metric, in order "
"to give the best overall performance."
msgstr ""
+"确定将在任何时候使用的çƒä½“鮿Œ¡å™¨çš„æœ€å¤§æ•°é‡ã€‚\n"
+"尽管一个场景中å¯ä»¥æœ‰è®¸å¤šé®æŒ¡ç‰©ï¼Œä½†ç³»ç»Ÿä¼šæ ¹æ®å±å¹•空间度é‡ä»Žè¿™äº›é®æŒ¡ç‰©ä¸­é€‰æ‹©æœ€"
+"相关的æ¯ä¸€å¸§ï¼Œä»¥æä¾›æœ€ä½³çš„æ•´ä½“性能。"
-#: doc/classes/ProjectSettings.xml:1266
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -56282,24 +56992,30 @@ msgid ""
"It will flip named portal meshes (i.e. [code]-portal[/code]) on the initial "
"convertion to [Portal] nodes."
msgstr ""
+"默认的惯例是,portal的法线从æºç©ºé—´å‘外。\n"
+"å¦‚æžœä½ åœ¨å»ºé€ å…³å¡æ—¶ä¸å°å¿ƒå°†portalæœå‘了错误的方å‘,这个设置å¯ä»¥è§£å†³è¿™ä¸ªé—®"
+"题。\n"
+"它将在åˆå§‹è½¬æ¢ä¸º[Portal]节点时翻转命åçš„portal网格(å³[code]-portal[/"
+"code])。"
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
+"æ˜¾ç¤ºè½¬æ¢æ—¥å¿—。\n"
+"[b]注æ„:[/b] 这将在导出时自动ç¦ç”¨ã€‚"
-#: doc/classes/ProjectSettings.xml:1275
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-"如果[code]true[/code],图å—地图的碰撞将被当作è¿åЍ体处ç†ã€‚如果[code]false[/"
-"code]ï¼Œç¢°æ’žå°†è¢«å½“ä½œé™æ€ä½“æ¥å¤„ç†ã€‚"
+"如果 [code]true[/code],游æˆå›žè°ƒå°†ä½œä¸º [code] ä¿¡å· [/code] å‘é€ã€‚如果"
+"[code]false[/code],它们将作为[code]通知[/code]å‘é€ã€‚"
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -56307,14 +57023,19 @@ msgid ""
"efficient, but can be switched off in case you wish to use empty [Spatial]s "
"for markers or some other purpose."
msgstr ""
+"如果å¯ç”¨ï¼Œåœ¨åˆå¹¶ç½‘格时,系统还将å°è¯•删除ä¸å†æœ‰ä»»ä½•å­é¡¹çš„ [Spatial] 节点。\n"
+"å‡å°‘场景树中 [Node] 的数é‡å¯ä»¥æé«˜é历效率,但如果您希望将空的 [Spatial] 用于"
+"标记或其他目的,则å¯ä»¥å°†å…¶å…³é—­ã€‚"
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
+"在 PVS ç”ŸæˆæœŸé—´æ˜¾ç¤ºæ—¥å¿—。\n"
+"[b]注æ„:[/b] 这将在导出时自动ç¦ç”¨ã€‚"
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -56323,31 +57044,37 @@ msgid ""
"when it is set to [code]false[/code], i.e. there are problems with the "
"default method."
msgstr ""
+"ä½¿ç”¨ç”Ÿæˆ PVS(潜在å¯è§é›†ï¼‰æ•°æ®çš„简化方法。当多个portal连接相邻空间时,结果å¯"
+"能ä¸å‡†ç¡®ã€‚\n"
+"[b]注æ„:[/b]ä¸€èˆ¬åªæœ‰åœ¨è®¾ç½®ä¸º[code]false[/code]æ—¶é‡åˆ°bug,å³é»˜è®¤æ–¹æ³•有问题"
+"时,æ‰åº”该使用该选项。"
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
+"如果 [code]true[/code],则分é…具有高动æ€èŒƒå›´ï¼ˆHDR)的主帧缓冲区。高动æ€èŒƒå›´å…"
+"许使用大于 1 的 [Color] 值。\n"
+"[b]注æ„:[/b] 仅在 GLES3 åŽç«¯å¯ç”¨ã€‚"
-#: doc/classes/ProjectSettings.xml:1294
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-"由于性能或驱动支æŒé—®é¢˜ï¼Œåœ¨ç§»åŠ¨è®¾å¤‡ä¸Šå°†å¯¹ [member rendering/quality/"
-"shadow_atlas/size]ä»¥ä½Žé…æ•°å€¼è¦†ç›–。"
+"由于性能问题或驱动支æŒï¼Œç§»åŠ¨è®¾å¤‡ä¸Šçš„ [member rendering/quality/depth/hdr] çš„"
+"低端覆盖。"
-#: doc/classes/ProjectSettings.xml:1297
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
"对一些GPU供应商(通常是移动设备)ç¦ç”¨æ·±åº¦é¢„处ç†ï¼Œå› ä¸ºä»–们的架构已ç»åšäº†è¿™ä¸ªã€‚"
-#: doc/classes/ProjectSettings.xml:1300
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
@@ -56356,7 +57083,7 @@ msgstr ""
"如果 [code]true[/code],则在渲染æè´¨ä¹‹å‰æ‰§è¡Œå…ˆå‰çš„æ·±åº¦ä¼ é€’ã€‚å½“ä½¿ç”¨å¤æ‚çš„ææ–™"
"和照明时,这会æé«˜é«˜é€æ”¯åœºæ™¯çš„æ€§èƒ½ã€‚"
-#: doc/classes/ProjectSettings.xml:1303
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
@@ -56365,7 +57092,7 @@ msgstr ""
"æ–¹å‘æ€§é˜´å½±çš„大å°ï¼Œä»¥åƒç´ ä¸ºå•ä½ã€‚更高的值会导致更清晰的阴影,但会以性能为代"
"价。该值将被四èˆäº”入到最接近的2次方。"
-#: doc/classes/ProjectSettings.xml:1306
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
@@ -56373,8 +57100,7 @@ msgstr ""
"由于性能和驱动支æŒçš„问题,在移动设备上会对[member rendering/quality/"
"directional_shadow/size] ä»¥ä½Žé…æ•°å€¼è¦†ç›–。"
-#: doc/classes/ProjectSettings.xml:1309
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -56383,14 +57109,13 @@ msgid ""
"support GLES3 and falls back to GLES2. In such cases, this property is not "
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-"è¦ä½¿ç”¨çš„视频驱动(\"GLES2 \"或 \"Vulkan\")。\n"
-"[b]注æ„:[/b] 使用中的åŽç«¯å¯ä»¥åœ¨è¿è¡Œæ—¶é€šè¿‡[code]--rendering-driver[/code]命令"
-"è¡Œå‚æ•°æ¥è¦†ç›–。\n"
-"[b]修订说明:[/b] 在DisplayServer分离åŽä¸å†æœ‰æ•ˆã€‚\n"
-"åœ¨è¿™ç§æƒ…况下,这个属性ä¸ä¼šè¢«æ›´æ–°ï¼Œæ‰€ä»¥ä½¿ç”¨[code]OS.get_current_video_driver[/"
-"code]æ¥åœ¨è¿è¡Œæ—¶æŸ¥è¯¢å®ƒã€‚"
+"è¦ä½¿ç”¨çš„视频驱动(\"GLES2\"或 \"GLES3\")。\n"
+"[b]注æ„:[/b]使用中的åŽç«¯å¯ä»¥åœ¨è¿è¡Œæ—¶é€šè¿‡[code]--video-driver[/code]命令行å‚"
+"æ•°è€Œè¦†ç›–ï¼Œå¦‚æžœç›®æ ‡ç³»ç»Ÿä¸æ”¯æŒGLES3,è¦é€€å›žåˆ°GLES2,则å¯ä»¥é€šè¿‡[member "
+"rendering/quality/driver/fallback_to_gles2]é€‰é¡¹ã€‚åœ¨è¿™ç§æƒ…况下,这个属性ä¸ä¼šè¢«"
+"更新,所以在è¿è¡Œæ—¶ä½¿ç”¨[method OS.get_current_video_driver]æ¥æŸ¥è¯¢ã€‚"
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -56401,28 +57126,35 @@ msgid ""
"VRAM-compressed textures will be exported on Android and iOS, increasing the "
"data pack's size."
msgstr ""
+"如果 [code]true[/code]ï¼Œä¸”ä¸æ”¯æŒ GLES3 驱动程åºï¼Œåˆ™å…许回退到 GLES2 驱动程"
+"åºã€‚\n"
+"[b]注æ„:[/b] 两个显å¡é©±åЍ䏿˜¯äº’相替代的,所以为 GLES3 设计的游æˆåœ¨å›žé€€åˆ° "
+"GLES2 æ—¶å¯èƒ½æ— æ³•正常è¿è¡Œã€‚特别是,GLES3 åŽç«¯çš„æŸäº›åŠŸèƒ½åœ¨ GLES2 中ä¸å¯ç”¨ã€‚å¯ç”¨"
+"此设置还æ„å‘³ç€ ETC å’Œ ETC2 VRAM 压缩纹ç†å°†åœ¨ Android å’Œ iOS 上导出,从而增加"
+"æ•°æ®åŒ…的大å°ã€‚"
-#: doc/classes/ProjectSettings.xml:1317
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
"angles, at the cost of performance. Only power-of-two values are valid (2, "
"4, 8, 16)."
msgstr ""
+"用于å¯ç”¨å„å‘异性的纹ç†çš„æœ€å¤§å„å‘异性过滤器级别。从倾斜角度查看时,较高的值将"
+"导致更清晰的纹ç†ï¼Œä½†ä¼šç‰ºç‰²æ€§èƒ½ã€‚åªæœ‰äºŒçš„æŒ‡æ•°å€çš„值(如2ã€4ã€8ã€16)是有效。"
-#: doc/classes/ProjectSettings.xml:1320
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
"but can be significantly slower on some hardware.\n"
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-"设置è¦ä½¿ç”¨çš„MSAA样本数(2çš„n次幂)。MSAA用于å‡å°‘多边形边缘的锯齿。较高的MSAA"
-"值å¯ä»¥ä½¿è¾¹ç¼˜æ›´å¹³æ»‘,但在æŸäº›ç¡¬ä»¶ä¸Šä¼šæ˜Žæ˜¾å˜æ…¢ã€‚\n"
+"设置è¦ä½¿ç”¨çš„MSAA样本数。MSAA用æ¥å‡å°‘多边形边缘的混å ã€‚较高的MSAA值å¯ä»¥ä½¿è¾¹ç¼˜"
+"更平滑,但在æŸäº›ç¡¬ä»¶ä¸Šä¼šæ˜Žæ˜¾å˜æ…¢ã€‚\n"
"[b]注æ„:[/b] MSAA在使用GLES2åŽç«¯çš„HTML5导出中ä¸å¯ç”¨ã€‚"
-#: doc/classes/ProjectSettings.xml:1324
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -56430,8 +57162,11 @@ msgid ""
"Values around [code]0.5[/code] generally give the best results. See also "
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
+"如果设置为大于 [code]0.0[/code] 的值,对比度自适应é”化将应用于 3D 视å£ã€‚这具"
+"æœ‰è¾ƒä½Žçš„æ€§èƒ½æˆæœ¬ï¼Œå¯ç”¨äºŽæ¢å¤ä½¿ç”¨ FXAA æ—¶æŸå¤±çš„一些é”度。 [code]0.5[/code] 附"
+"近的值通常会给出最好的结果。å¦è§[member rendering/quality/filters/use_fxaa]。"
-#: doc/classes/ProjectSettings.xml:1327
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -56444,9 +57179,15 @@ msgid ""
"mobile platforms. Due to this, it is recommended to leave this option "
"disabled when targeting mobile platforms."
msgstr ""
+"如果 [code]true[/code],则使用快速åŽå¤„ç†è¿‡æ»¤å™¨ä½¿æ¡å¸¦æ˜Žæ˜¾ä¸é‚£ä¹ˆæ˜Žæ˜¾ã€‚在æŸäº›æƒ…"
+"况下,去带å¯èƒ½ä¼šå¼•å…¥ç¨å¾®æ˜Žæ˜¾çš„æŠ–动模å¼ã€‚å»ºè®®ä»…åœ¨å®žé™…éœ€è¦æ—¶å¯ç”¨ debanding,因"
+"为抖动模å¼ä¼šä½¿æ— æŸåŽ‹ç¼©çš„å±å¹•截图更大。\n"
+"[b]注æ„:[/b] 仅在 GLES3 åŽç«¯å¯ç”¨ã€‚ [member rendering/quality/depth/hdr] 也必"
+"须为 [code]true[/code] æ‰èƒ½ä½¿åŽ»è‰²å¸¦æœ‰æ•ˆã€‚\n"
+"[b]注æ„:[/b] 已知在移动平å°ä¸Šçš„åŽ»è‰²å¸¦å­˜åœ¨ç ´åæ¸²æŸ“的问题。因此,建议在用于移"
+"åŠ¨å¹³å°æ—¶ç¦ç”¨æ­¤é€‰é¡¹ã€‚"
-#: doc/classes/ProjectSettings.xml:1332
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -56455,11 +57196,12 @@ msgid ""
"recovered by enabling contrast-adaptive sharpening (see [member rendering/"
"quality/filters/sharpen_intensity])."
msgstr ""
-"使用快速的近似抗锯齿。FXAAæ˜¯ä¸€ç§æµè¡Œçš„å±å¹•空间抗锯齿方法,它的速度很快,但会"
-"使图åƒçœ‹èµ·æ¥å¾ˆæ¨¡ç³Šï¼Œç‰¹åˆ«æ˜¯åœ¨è¾ƒä½Žçš„分辨率。在1440på’Œ4K等大分辨率下,ä»ç„¶å¯ä»¥ç›¸"
-"对良好地工作。"
+"在根视窗中å¯ç”¨FXAA。FXAAæ˜¯ä¸€ç§æµè¡Œçš„å±å¹•空间抗锯齿方法,它速度快,但会使图åƒ"
+"看起æ¥å¾ˆæ¨¡ç³Šï¼Œç‰¹åˆ«æ˜¯åœ¨ä½Žåˆ†è¾¨çŽ‡ä¸‹ã€‚åœ¨1440på’Œ4K这样的大分辨率下,å¯ä»¥å·¥ä½œå¾—比较"
+"好。一些æŸå¤±çš„é”度å¯ä»¥é€šè¿‡å¯ç”¨å¯¹æ¯”度适应性é”åŒ–æ¥æ¢å¤ï¼Œå‚阅[member rendering/"
+"quality/filters/sharpen_intensity]。"
-#: doc/classes/ProjectSettings.xml:1335
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -56472,7 +57214,7 @@ msgstr ""
"å¯èƒ½ä¼šæé«˜ç§»åŠ¨è®¾å¤‡çš„æ€§èƒ½ã€‚å¦‚æžœ [code]false[/code],则使用线性 mipmap 过滤(也"
"称为“三线性过滤â€ï¼‰ã€‚"
-#: doc/classes/ProjectSettings.xml:1338
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -56486,7 +57228,7 @@ msgstr ""
"[code]SCREEN_TEXTURE[/code]å’Œ[code]DEPTH_TEXTURE[/code]å°†ä¸èƒ½åœ¨ç€è‰²å™¨ä¸­ä½¿ç”¨ï¼Œ"
"而åŽå¤„ç†æ•ˆæžœå°†ä¸èƒ½åœ¨[Environment]中使用。"
-#: doc/classes/ProjectSettings.xml:1341
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
@@ -56495,53 +57237,58 @@ msgstr ""
"由于性能或驱动支æŒé—®é¢˜ï¼Œåœ¨ç§»åŠ¨è®¾å¤‡ä¸Šå¯¹[member rendering/quality/"
"intended_usage/framebuffer_allocation]ä»¥ä½Žé…æ•°å€¼è¦†ç›–。"
-#: doc/classes/ProjectSettings.xml:1344
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
+"在烘焙光照贴图中å¯ç”¨åŒä¸‰æ¬¡é‡‡æ ·ã€‚这会导致更平滑的照明,但会å ç”¨æ›´å¤šå¸¦å®½ã€‚在 "
+"GLES2 ä¸Šï¼Œåªæœ‰åœ¨é‡æ–°å¯åŠ¨åº”ç”¨ç¨‹åºæ—¶æ‰ä¼šåº”用对此设置的更改。"
-#: doc/classes/ProjectSettings.xml:1347
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-"由于性能问题或驱动支æŒï¼Œåœ¨ç§»åŠ¨è®¾å¤‡ä¸Šå°†å¯¹[member rendering/quality/shading/"
-"force_vertex_shading]ä»¥ä½Žé…æ•°å€¼è¦†ç›–。"
+"在移动设备上对[member rendering/quality/lightmapping/use_bicubic_sampling]进"
+"行低端覆盖,以å‡å°‘带宽使用。"
-#: doc/classes/ProjectSettings.xml:1350
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
+"å射探针使用的图集的大å°ã€‚较大的尺寸å¯ä»¥å¸¦æ¥æ›´é«˜çš„视觉质é‡ï¼Œè€Œè¾ƒå°çš„尺寸会更"
+"å¿«å¹¶å ç”¨æ›´å°‘的内存。"
-#: doc/classes/ProjectSettings.xml:1353
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
+"用于å射图集的细分数。较高的数字会é™ä½Žæ¯ä¸ªå›¾é›†çš„è´¨é‡ï¼Œä½†å…许您使用更多细分。"
-#: doc/classes/ProjectSettings.xml:1356
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
+"如果 [code]true[/code]ï¼Œåˆ™ä½¿ç”¨å¤§é‡æ ·æœ¬æ¥åˆ›å»ºå射探针和全景背景(天空)的模糊"
+"å˜ä½“。这些模糊的å˜ä½“å¯ä»¥è¢«ç²—ç³™çš„ææ–™ä½¿ç”¨ã€‚"
-#: doc/classes/ProjectSettings.xml:1359
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-"ç”±äºŽæ€§èƒ½é—®é¢˜æˆ–é©±åŠ¨ç¨‹åºæ”¯æŒï¼Œç§»åŠ¨è®¾å¤‡ä¸Šå°†å¯¹ [member rendering/quality/"
-"reflections/ggx_samples] 以低性能数值覆盖。"
+"由于性能问题或驱动器支æŒï¼Œåœ¨ç§»åŠ¨è®¾å¤‡ä¸Šå¯¹[member rendering/quality/"
+"reflections/high_quality_ggx]进行低端覆盖。"
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -56551,19 +57298,22 @@ msgid ""
"[b]Note:[/b] Low and mid range hardware do not support complex irradiance "
"maps well and may crash if this is set too high."
msgstr ""
+"é™åˆ¶è¾ç…§åº¦è´´å›¾çš„大å°ï¼Œé€šå¸¸ç”± [member Sky.radiance_size] 确定。与[member "
+"rendering/quality/reflections/high_quality_ggx] 类似,更大的尺寸会产生更高质"
+"é‡çš„è¾ç…§åº¦è´´å›¾ã€‚使用高频 HDRI 贴图时使用较高的值,å¦åˆ™è¯·å°½å¯èƒ½é™ä½Žè¯¥å€¼ã€‚\n"
+"[b]注æ„:[/b] 中低档硬件ä¸èƒ½å¾ˆå¥½åœ°æ”¯æŒå¤æ‚çš„è¾ç…§åº¦è´´å›¾ï¼Œå¦‚果设置太高å¯èƒ½ä¼šå´©"
+"溃。"
-#: doc/classes/ProjectSettings.xml:1366
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-"如果 [code]true[/code],则对åå°„æŽ¢é’ˆå’Œå…¨æ™¯èƒŒæ™¯ï¼ˆå¤©ç©ºï¼‰ä½¿ç”¨çº¹ç†æ•°ç»„è€Œä¸æ˜¯ "
-"mipmap。这å‡å°‘了åå°„ä¸Šçš„æŠ–åŠ¨å™ªå£°å’Œæ”¾å¤§ä¼ªå½±ï¼Œä½†è®¡ç®—é€Ÿåº¦è¦æ…¢å¾—多,并且使用 "
-"[member rendering/quality/reflections/roughness_layers]æ—¶è¦èŠ±è´¹æ›´å¤šçš„å†…å­˜ã€‚"
+"如果[code]true[/code],对åå°„æŽ¢é’ˆå’Œå…¨æ™¯èƒŒæ™¯ï¼ˆå¤©ç©ºï¼‰ä½¿ç”¨çº¹ç†æ•°ç»„è€Œä¸æ˜¯"
+"mipmaps。这å¯ä»¥å‡å°‘åå°„çš„æŠ–åŠ¨å™ªå£°ï¼Œä½†è¦æ¶ˆè€—更多的性能和内存。"
-#: doc/classes/ProjectSettings.xml:1369
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
@@ -56572,7 +57322,7 @@ msgstr ""
"由于性能问题或驱动支æŒï¼Œåœ¨ç§»åŠ¨è®¾å¤‡ä¸Šå°†å¯¹[member rendering/quality/"
"reflections/texture_array_reflections]以低性能数值覆盖。"
-#: doc/classes/ProjectSettings.xml:1372
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
@@ -56580,7 +57330,7 @@ msgstr ""
"如果 [code]true[/code],则使用速度更快但质é‡è¾ƒä½Žçš„ Blinn æ¨¡åž‹è€Œä¸æ˜¯ GGX 模型"
"æ¥ç”Ÿæˆæ¨¡ç³Šå射。"
-#: doc/classes/ProjectSettings.xml:1375
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
@@ -56589,7 +57339,7 @@ msgstr ""
"由于性能或驱动支æŒé—®é¢˜ï¼Œåœ¨ç§»åŠ¨è®¾å¤‡ä¸Šå°†å¯¹[member rendering/quality/shading/"
"force_blinn_over_ggx]以低值覆盖。"
-#: doc/classes/ProjectSettings.xml:1378
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
@@ -56597,7 +57347,7 @@ msgstr ""
"如果 [code]true[/code],则使用速度更快但质é‡è¾ƒä½Žçš„ Lambert æè´¨ç…§æ˜Žæ¨¡åž‹è€Œä¸"
"是 Burley。"
-#: doc/classes/ProjectSettings.xml:1381
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
@@ -56606,7 +57356,7 @@ msgstr ""
"由于性能问题或驱动支æŒï¼Œåœ¨ç§»åŠ¨è®¾å¤‡ä¸Šå°†å¯¹[member rendering/quality/shading/"
"force_lambert_over_burley]ä»¥ä½Žé…æ•°å€¼è¦†ç›–。"
-#: doc/classes/ProjectSettings.xml:1384
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
@@ -56615,7 +57365,7 @@ msgstr ""
"如果 [code]true[/code],则为所有渲染强制顶点ç€è‰²ã€‚è¿™å¯ä»¥å¤§å¤§æé«˜æ€§èƒ½ï¼Œä½†ä¹Ÿä¼š"
"æžå¤§åœ°é™ä½Žè´¨é‡ã€‚å¯ç”¨äºŽä¼˜åŒ–低端移动设备的性能。"
-#: doc/classes/ProjectSettings.xml:1387
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
@@ -56624,7 +57374,7 @@ msgstr ""
"由于性能问题或驱动支æŒï¼Œåœ¨ç§»åŠ¨è®¾å¤‡ä¸Šå°†å¯¹[member rendering/quality/shading/"
"force_vertex_shading]ä»¥ä½Žé…æ•°å€¼è¦†ç›–。"
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -56634,8 +57384,12 @@ msgid ""
"energy or attenuation values.\n"
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
+"如果 [code]true[/code],则为 [OmniLight] å’Œ [SpotLight] å¯ç”¨æ–°çš„物ç†å…‰è¡°å‡ã€‚"
+"这会以éžå¸¸å°çš„æ€§èƒ½æˆæœ¬èŽ·å¾—æ›´é€¼çœŸçš„ç…§æ˜Žå¤–è§‚ã€‚å¯ç”¨ç‰©ç†å…‰è¡°å‡åŽï¼Œç”±äºŽæ–°çš„è¡°å‡å…¬"
+"å¼ï¼Œç¯å…‰ä¼šæ˜¾å¾—更暗。这å¯ä»¥é€šè¿‡è°ƒæ•´ç¯å…‰çš„èƒ½é‡æˆ–è¡°å‡å€¼æ¥è¡¥å¿ã€‚\n"
+"对此设置的更改åªä¼šåœ¨é‡æ–°å¯åŠ¨åº”ç”¨ç¨‹åºæ—¶åº”用。"
-#: doc/classes/ProjectSettings.xml:1394
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -56643,21 +57397,25 @@ msgid ""
"Setting higher than a quarter of the [member rendering/quality/shadow_atlas/"
"size] will not result in a perceptible increase in visual quality."
msgstr ""
+"立方体贴图的大å°ï¼Œåœ¨å°†é˜´å½±å¤åˆ¶åˆ°é˜´å½±å›¾é›†ä¸­ä¹‹å‰å°†å…¶æ¸²æŸ“到其中。当与更高的 "
+"[member rendering/quality/shadow_atlas/size] 一起使用时,更高的数字会导致更高"
+"分辨率的阴影。设置高于 [member rendering/quality/shadow_atlas/size] 的四分之"
+"一ä¸ä¼šå¯¼è‡´è§†è§‰è´¨é‡çš„æ˜Žæ˜¾æé«˜ã€‚"
-#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400
-#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr "阴影贴图的细分象é™å¤§å°ã€‚请å‚阅阴影映射文档。"
-#: doc/classes/ProjectSettings.xml:1409
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr "阴影图集的尺寸(用于OmniLightså’ŒSpotLightsï¼‰ã€‚è§æ–‡æ¡£ã€‚"
-#: doc/classes/ProjectSettings.xml:1412
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
@@ -56665,7 +57423,7 @@ msgstr ""
"由于性能或驱动支æŒé—®é¢˜ï¼Œåœ¨ç§»åŠ¨è®¾å¤‡ä¸Šå°†å¯¹ [member rendering/quality/"
"shadow_atlas/size]ä»¥ä½Žé…æ•°å€¼è¦†ç›–。"
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -56675,24 +57433,30 @@ msgid ""
"uses 16 samples to emulate linear filtering in the shader. This results in a "
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
+"阴影过滤模å¼ã€‚较高的质é‡è®¾ç½®ä¼šäº§ç”Ÿæ›´å¹³æ»‘çš„é˜´å½±ï¼Œåœ¨ç§»åŠ¨æ—¶é—ªçƒæ›´å°‘。\"ç¦ç”¨ \"是"
+"最快的选项,但也有最低的质é‡ã€‚\"PCF5 \"更平滑,但也更慢。\"PCF13 \"是最平滑的"
+"选项,但也是最慢的。\n"
+"[b]注æ„:[/b] 当使用GLES2åŽç«¯æ—¶ï¼Œ\"PCF13 \"选项实际上使用16ä¸ªæ ·æœ¬æ¥æ¨¡æ‹Ÿç€è‰²å™¨"
+"中的线性滤波。这导致了与GLES3åŽç«¯äº§ç”Ÿçš„阴影外观相似。"
-#: doc/classes/ProjectSettings.xml:1419
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-"由于性能或驱动支æŒé—®é¢˜ï¼Œåœ¨ç§»åŠ¨è®¾å¤‡ä¸Šå°†å¯¹ [member rendering/quality/"
-"shadow_atlas/size]ä»¥ä½Žé…æ•°å€¼è¦†ç›–。"
+"由于性能问题或驱动器支æŒï¼Œåœ¨ç§»åŠ¨è®¾å¤‡ä¸Šå¯¹ [member rendering/quality/shadows/"
+"filter_mode] 进行低端覆盖。"
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
+"强制 [MeshInstance] 始终在 CPU 上执行蒙皮(适用于 GLES2 和 GLES3)。\n"
+"å¦è§[member rendering/quality/skinning/software_skinning_fallback]。"
-#: doc/classes/ProjectSettings.xml:1426
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -56703,48 +57467,57 @@ msgid ""
"shaders will behave in a different way, because the bone transform will be "
"already applied to the modelview matrix."
msgstr ""
+"å½“ç¡¬ä»¶ä¸æ”¯æŒ GLES2 的默认 GPU 蒙皮过程时,å…许 [MeshInstance] 在 CPU 上执行蒙"
+"皮。\n"
+"如果 [code]false[/code]ï¼Œåˆ™åœ¨è¿™ç§æƒ…况下使用 GPU 上的替代蒙皮过程(在大多数情"
+"况下较慢)。\n"
+"å¦è§[member rendering/quality/skinning/force_software_skinning]。\n"
+"[b]注æ„:[/b] 当触å‘软件蒙皮回退时,自定义顶点ç€è‰²å™¨å°†ä»¥ä¸åŒçš„æ–¹å¼è¿è¡Œï¼Œå› ä¸º"
+"éª¨éª¼å˜æ¢å·²ç»åº”用于模型视图矩阵。"
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
+"æ¸²æŸ“å…«å‰æ ‘(octree)的平衡å¯ä»¥æ”¹å˜ä¸ºæœ‰åˆ©äºŽæ›´å°çš„ ([code]0[/code]) 或更大的 "
+"([code]1[/code]) 分支。\n"
+"在æŸäº›é¡¹ç›®ä¸­ï¼Œè¾ƒå¤§çš„分支å¯ä»¥æ˜¾ç€æé«˜æ€§èƒ½ã€‚"
-#: doc/classes/ProjectSettings.xml:1436
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
+"å¯ç”¨è¾¹ç•Œä½“ç§¯å±‚æ¬¡ç»“æž„è€Œä¸æ˜¯å…«å‰æ ‘æ¥æ¸²æŸ“空间分区。这å¯èƒ½ä¼šå¸¦æ¥æ›´å¥½çš„æ€§èƒ½ã€‚"
-#: doc/classes/ProjectSettings.xml:1439
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
-msgstr ""
+msgstr "æé«˜æ¬¡è¡¨é¢æ•£å°„的质é‡ï¼Œä½†æˆæœ¬æ˜¾ç€å¢žåŠ ã€‚"
-#: doc/classes/ProjectSettings.xml:1442
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
-msgstr "地下散射效应的强度。"
+msgstr "æ¬¡è¡¨é¢æ•£å°„的质é‡è®¾ç½®ï¼ˆé‡‡æ ·ï¼‰ã€‚"
-#: doc/classes/ProjectSettings.xml:1445
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
-msgstr "地下散射效应的强度。"
+msgstr "ç”¨äºŽæ¬¡è¡¨é¢æ•£å°„样本的最大åŠå¾„。"
-#: doc/classes/ProjectSettings.xml:1448
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
-msgstr ""
+msgstr "åŠ æƒæ¬¡è¡¨é¢æ•£å°„样本。有助于é¿å…从å±å¹•çš„ä¸ç›¸å…³éƒ¨åˆ†è¯»å–样本。"
-#: doc/classes/ProjectSettings.xml:1451
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
-msgstr ""
+msgstr "使用高质é‡çš„体素锥体追踪。这会产生更好看的å射,但 GPU 消耗è¦é«˜å¾—多。"
-#: doc/classes/ProjectSettings.xml:1454
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
@@ -56753,16 +57526,18 @@ msgstr ""
"渲染的线程模型。在线程上进行渲染å¯ä»¥æžå¤§åœ°æé«˜æ€§èƒ½ï¼Œä½†åŒæ­¥åˆ°ä¸»çº¿ç¨‹ä¸Šä¼šå¯¼è‡´æ›´"
"多的抖动。"
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
"Try enabling this option if you see any visual anomalies in 3D (such as "
"incorrect object visibility)."
msgstr ""
+"如果 [code]true[/code],则将在渲染和 Godot 物ç†ä¸­ä½¿ç”¨çº¿ç¨‹å®‰å…¨ç‰ˆæœ¬çš„ BVH(边界"
+"体积层次结构)。\n"
+"如果您在 3D ä¸­çœ‹åˆ°ä»»ä½•è§†è§‰å¼‚å¸¸ï¼Œä¾‹å¦‚ä¸æ­£ç¡®çš„å¯è§æ€§å¯¹è±¡ï¼Œè¯·å°è¯•å¯ç”¨æ­¤é€‰é¡¹ã€‚"
-#: doc/classes/ProjectSettings.xml:1461
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -56774,11 +57549,14 @@ msgid ""
"located inside the project folder then restart the editor (see [member "
"application/config/use_hidden_project_data_directory])."
msgstr ""
-"如果[code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨BPTC算法导入VRAM压缩的纹ç†ã€‚è¿™ç§çº¹ç†åŽ‹"
-"缩算法åªåœ¨æ¡Œé¢å¹³å°ä¸Šæ”¯æŒï¼Œè€Œä¸”åªåœ¨ä½¿ç”¨Vulkan渲染器时支æŒã€‚"
+"如果 [code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨ BPTC 算法导入 VRAM 压缩的纹ç†ã€‚此纹"
+"ç†åŽ‹ç¼©ç®—æ³•ä»…åœ¨æ¡Œé¢å¹³å°å¾—到支æŒï¼Œå¹¶ä¸”仅在使用 GLES3 渲染器时æ‰å—支æŒã€‚\n"
+"[b]注æ„:[/b]更改此设置ä¸ä¼š[i]ä¸[/i]å½±å“之å‰å·²ç»å¯¼å…¥çš„纹ç†ã€‚è¦å°†æ­¤è®¾ç½®åº”用于"
+"已导入的纹ç†ï¼Œè¯·é€€å‡ºç¼–辑器,删除ä½äºŽé¡¹ç›®æ–‡ä»¶å¤¹å†…çš„ [code].import/[/code] 文件"
+"夹,然åŽé‡æ–°å¯åŠ¨ç¼–è¾‘å™¨ï¼ˆå‚阅 [member application/config/"
+"use_hidden_project_data_directory])。"
-#: doc/classes/ProjectSettings.xml:1465
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -56789,11 +57567,14 @@ msgid ""
"located inside the project folder then restart the editor (see [member "
"application/config/use_hidden_project_data_directory])."
msgstr ""
-"如果[code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨BPTC算法导入VRAM压缩的纹ç†ã€‚è¿™ç§çº¹ç†åŽ‹"
-"缩算法åªåœ¨æ¡Œé¢å¹³å°ä¸Šæ”¯æŒï¼Œè€Œä¸”åªåœ¨ä½¿ç”¨Vulkan渲染器时支æŒã€‚"
+"如果 [code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨Ericsson纹ç†åŽ‹ç¼©ç®—æ³•å¯¼å…¥ VRAM 压缩的"
+"纹ç†ã€‚æ­¤ç®—æ³•ä¸æ”¯æŒçº¹ç†ä¸­çš„ alpha 通é“。\n"
+"[b]注æ„:[/b]更改此设置ä¸ä¼š[i]ä¸[/i]å½±å“之å‰å·²ç»å¯¼å…¥çš„纹ç†ã€‚è¦å°†æ­¤è®¾ç½®åº”用于"
+"已导入的纹ç†ï¼Œè¯·é€€å‡ºç¼–辑器,删除ä½äºŽé¡¹ç›®ä¸­çš„ [code].import/[/code] 文件夹,然"
+"åŽé‡æ–°å¯åŠ¨ç¼–è¾‘å™¨ï¼Œå‚阅 [member application/config/"
+"use_hidden_project_data_directory]。"
-#: doc/classes/ProjectSettings.xml:1469
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -56804,11 +57585,14 @@ msgid ""
"located inside the project folder then restart the editor (see [member "
"application/config/use_hidden_project_data_directory])."
msgstr ""
-"如果[code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨BPTC算法导入VRAM压缩的纹ç†ã€‚è¿™ç§çº¹ç†åŽ‹"
-"缩算法åªåœ¨æ¡Œé¢å¹³å°ä¸Šæ”¯æŒï¼Œè€Œä¸”åªåœ¨ä½¿ç”¨Vulkan渲染器时支æŒã€‚"
+"如果 [code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨ Ericsson Texture Compression 2 算法"
+"导入 VRAM 压缩的纹ç†ã€‚仅在使用 GLES3 æ¸²æŸ“å™¨æ—¶ï¼Œæ‰æ”¯æŒæ­¤çº¹ç†åŽ‹ç¼©ç®—æ³•ã€‚\n"
+"[b]注æ„:[/b]更改此设置[i]ä¸[/i]会影å“之å‰å·²ç»å¯¼å…¥çš„纹ç†ã€‚è¦å°†æ­¤è®¾ç½®åº”用于已"
+"导入的纹ç†ï¼Œè¯·é€€å‡ºç¼–辑器,删除ä½äºŽé¡¹ç›®ä¸­çš„ [code].import/[/code] 文件夹,然åŽ"
+"釿–°å¯åŠ¨ç¼–è¾‘å™¨ï¼Œå‚阅 [member application/config/"
+"use_hidden_project_data_directory]。"
-#: doc/classes/ProjectSettings.xml:1473
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -56819,11 +57603,14 @@ msgid ""
"located inside the project folder then restart the editor (see [member "
"application/config/use_hidden_project_data_directory])."
msgstr ""
-"如果[code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨BPTC算法导入VRAM压缩的纹ç†ã€‚è¿™ç§çº¹ç†åŽ‹"
-"缩算法åªåœ¨æ¡Œé¢å¹³å°ä¸Šæ”¯æŒï¼Œè€Œä¸”åªåœ¨ä½¿ç”¨Vulkan渲染器时支æŒã€‚"
+"如果 [code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨ PowerVR 纹ç†åŽ‹ç¼©ç®—æ³•å¯¼å…¥ VRAM 压缩的"
+"纹ç†ã€‚此纹ç†åŽ‹ç¼©ç®—æ³•ä»…åœ¨ iOS ä¸Šå—æ”¯æŒã€‚\n"
+"[b]注æ„:[/b]更改此设置[i]ä¸ä¼š[/i]å½±å“之å‰å·²ç»å¯¼å…¥çš„纹ç†ã€‚è¦å°†æ­¤è®¾ç½®åº”用于已"
+"导入的纹ç†ï¼Œè¯·é€€å‡ºç¼–辑器,删除ä½äºŽé¡¹ç›®ä¸­çš„ [code].import/[/code] 文件夹,然åŽ"
+"釿–°å¯åŠ¨ç¼–è¾‘å™¨ï¼Œå‚阅 [member application/config/"
+"use_hidden_project_data_directory]。"
-#: doc/classes/ProjectSettings.xml:1477
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -56834,15 +57621,19 @@ msgid ""
"located inside the project folder then restart the editor (see [member "
"application/config/use_hidden_project_data_directory])."
msgstr ""
-"如果[code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨BPTC算法导入VRAM压缩的纹ç†ã€‚è¿™ç§çº¹ç†åŽ‹"
-"缩算法åªåœ¨æ¡Œé¢å¹³å°ä¸Šæ”¯æŒï¼Œè€Œä¸”åªåœ¨ä½¿ç”¨Vulkan渲染器时支æŒã€‚"
+"如果 [code]true[/code],纹ç†å¯¼å…¥å™¨å°†ä½¿ç”¨ S3 纹ç†åŽ‹ç¼©ç®—æ³•å¯¼å…¥ VRAM 压缩的纹"
+"ç†ã€‚此算法仅在桌é¢å¹³å°å’ŒæŽ§åˆ¶å°ä¸­å—支æŒã€‚\n"
+"[b]注æ„:[/b]更改此设置[i]ä¸ä¼š[/i]å½±å“之å‰å·²ç»å¯¼å…¥çš„纹ç†ã€‚è¦å°†æ­¤è®¾ç½®åº”用于已"
+"导入的纹ç†ï¼Œè¯·é€€å‡ºç¼–辑器,删除ä½äºŽé¡¹ç›®ä¸­çš„ [code].import/[/code] 文件夹,然åŽ"
+"釿–°å¯åŠ¨ç¼–è¾‘å™¨ï¼Œå‚阅 [member application/config/"
+"use_hidden_project_data_directory]。"
-#: doc/classes/ProjectSettings.xml:1481
-#, fuzzy
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
-msgstr "用于[VisibilityNotifier2D]的二维哈希网格的å•元格大å°ã€‚"
+msgstr ""
+"用于 [VisibilityNotifier2D] 使用的 2D 哈希网格的å•元格大å°ï¼Œä»¥åƒç´ ä¸ºå•ä½ã€‚"
#: doc/classes/ProximityGroup.xml:4 doc/classes/ProximityGroup.xml:7
msgid "General-purpose proximity detection node."
@@ -56869,9 +57660,8 @@ msgid "https://godotengine.org/asset-library/asset/129"
msgstr "https://godotengine.org/asset-library/asset/129"
#: doc/classes/QuadMesh.xml:17
-#, fuzzy
msgid "Offset of the generated Quad. Useful for particles."
-msgstr "生æˆçš„纹ç†çš„高度。"
+msgstr "生æˆçš„ Quad çš„åç§»é‡ã€‚å¯¹ç²’å­æœ‰ç”¨ã€‚"
#: doc/classes/QuadMesh.xml:20
msgid "Size on the X and Y axes."
@@ -56903,7 +57693,7 @@ msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/3d/using_transforms."
"html#interpolating-with-quaternions"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/3d/using_transforms."
+"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/using_transforms."
"html#interpolating-with-quaternions"
#: doc/classes/Quat.xml:20
@@ -56939,16 +57729,19 @@ msgid ""
"error, so methods such as [method @GDScript.is_zero_approx] will not work "
"reliably."
msgstr ""
+"返回此四元数与 [code]to[/code] 之间的角度。这是从一个到å¦ä¸€ä¸ªæ—‹è½¬æ‰€éœ€çš„角度大"
+"å°ã€‚\n"
+"[b]注æ„:[/b]该方法的浮点错误率异常高,因此[method@GDScript.is_zero_approx]ç­‰"
+"方法结果ä¸å¯é ã€‚"
#: doc/classes/Quat.xml:63
-#, fuzzy
msgid ""
"Performs a cubic spherical interpolation between quaternions [code]pre_a[/"
"code], this vector, [code]b[/code], and [code]post_b[/code], by the given "
"amount [code]weight[/code]."
msgstr ""
-"在四元数[code]preA[/code]ã€æ­¤å‘é‡ã€[code]b[/code]å’Œ[code]postB[/code]之间,通"
-"过给定的é‡[code]t[/code],执行一个三维çƒé¢æ’值。"
+"在四元数 [code]pre_a[/code]ã€è¯¥å‘é‡ [code]b[/code] å’Œ [code]post_b[/code] 之"
+"间执行三次çƒé¢æ’值,按给定的 [code]weight[/code]。"
#: doc/classes/Quat.xml:70
msgid "Returns the dot product of two quaternions."
@@ -56969,14 +57762,13 @@ msgid "Returns the inverse of the quaternion."
msgstr "返回四元数的å–逆。(译注:å³xyz的值分别å–å)."
#: doc/classes/Quat.xml:89
-#, fuzzy
msgid ""
"Returns [code]true[/code] if this quaternion and [code]quat[/code] are "
"approximately equal, by running [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-"通过对æ¯ä¸ªç»„ä»¶è¿è¡Œ[method @GDScript.is_equal_approx],如果这个四元组和"
-"[code]quat[/code]大致相等,则返回[code]true[/code]。"
+"通过在æ¯ä¸ªåˆ†é‡ä¸Šè¿›è¡Œ [method @GDScript.is_equal_approx],如果此四元数和 "
+"[code]quat[/code] 近似相等,则返回 [code]true[/code]。"
#: doc/classes/Quat.xml:95
msgid "Returns whether the quaternion is normalized or not."
@@ -57078,7 +57870,6 @@ msgid "A class for generating pseudo-random numbers."
msgstr "一个用于生æˆä¼ªéšæœºæ•°çš„ç±»ã€‚"
#: doc/classes/RandomNumberGenerator.xml:7
-#, fuzzy
msgid ""
"RandomNumberGenerator is a class for generating pseudo-random numbers. It "
"currently uses [url=http://www.pcg-random.org/]PCG32[/url].\n"
@@ -57098,25 +57889,28 @@ msgid ""
"The [code]0[/code] value documented here is a placeholder, and not the "
"actual default seed."
msgstr ""
-"RandomNumberGenerator是一个用于生æˆä¼ªéšæœºæ•°çš„ç±»ã€‚å®ƒç›®å‰ä½¿ç”¨[url=http://www."
+"RandomNumberGenerator 是一个用于生æˆä¼ªéšæœºæ•°çš„ç±»ã€‚å®ƒç›®å‰ä½¿ç”¨ [url=http://www."
"pcg-random.org/]PCG32[/url]。\n"
-"[b]注æ„:[/b] 底层算法是一个实现细节。因此,它ä¸åº”该被用æ¥åœ¨ä¸åŒçš„Godot版本中"
-"产生å¯é‡å¤çš„éšæœºæµã€‚\n"
-"基于一个与时间有关的ç§å­ï¼Œç”Ÿæˆä¸€ä¸ªéšæœºçš„æµ®ç‚¹æ•°ï¼ˆåœ¨ä¸€ä¸ªç»™å®šçš„èŒƒå›´å†…ï¼‰ã€‚\n"
+"[b]注:[/b]底层算法是实现细节。因此,跨 Godot 版本的å¯é‡å¤éšæœºæµä¸åº”该ä¾èµ–于"
+"此。\n"
+"è¦æ ¹æ®æ—¶é—´ç›¸å…³ç§å­ç”Ÿæˆéšæœºæµ®ç‚¹æ•°ï¼Œåœ¨ç»™å®šèŒƒå›´å†…ï¼š\n"
"[codeblock]\n"
"var rng = RandomNumberGenerator.new()\n"
"func _ready():\n"
" rng.randomize()\n"
" var my_random_number = rng.randf_range(-10.0, 10.0)\n"
-"[/codeblock]"
+"[/codeblock]\n"
+"[b]注:[/b] [member seed] å’Œ [member state] å±žæ€§çš„é»˜è®¤å€¼æ˜¯ä¼ªéšæœºçš„,在调用"
+"[method randomize] 时会å‘生å˜åŒ–。此处记录的 [code]0[/code] 值是一个å ä½ç¬¦ï¼Œè€Œ"
+"䏿˜¯å®žé™…的默认ç§å­ã€‚"
#: doc/classes/RandomNumberGenerator.xml:19
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/math/random_number_generation."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/math/random_number_generation."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/math/"
+"random_number_generation.html"
#: doc/classes/RandomNumberGenerator.xml:25
msgid ""
@@ -57182,6 +57976,19 @@ msgid ""
"state], and not the initial seed value, which is going to be fixed in Godot "
"4.0."
msgstr ""
+"æ ¹æ®ç»™å®šçš„ç§å­å€¼åˆå§‹åŒ–éšæœºæ•°ç”Ÿæˆå™¨çжæ€ã€‚给定的ç§å­å°†æä¾›å¯é‡å¤çš„ä¼ªéšæœºæ•°åº"
+"列。\n"
+"[b]注:[/b] RNG 没有雪崩效应,å¯ä»¥è¾“å‡ºç›¸ä¼¼çš„éšæœºæµç»™å®šç›¸ä¼¼çš„ç§å­ã€‚如果ç§å­æ¥"
+"è‡ªå¤–éƒ¨ï¼Œè¯·è€ƒè™‘ä½¿ç”¨å“ˆå¸Œå‡½æ•°æ¥æé«˜ç§å­è´¨é‡ã€‚\n"
+"[b]注:[/b]设置这个属性会产生改å˜å†…部[member state]的副作用,所以一定è¦åœ¨ä¿®æ”¹"
+"[member state][i]之å‰[/i]åˆå§‹åŒ–ç§å­ï¼š\n"
+"[codeblock]\n"
+"var rng = RandomNumberGenerator.new()\n"
+"rng.seed = hash(\"Godot\")\n"
+"rng.state = 100 # Restore to some previously saved state.\n"
+"[/codeblock]\n"
+"[b]警告:[/b]该属性的getter返回之å‰çš„[member state]ï¼Œè€Œä¸æ˜¯åˆå§‹ç§å­å€¼ï¼Œè¿™å°†åœ¨"
+"Godot 4.0中修å¤ã€‚"
#: doc/classes/RandomNumberGenerator.xml:78
msgid ""
@@ -57201,6 +58008,18 @@ msgid ""
"initialize the random number generator with arbitrary input, use [member "
"seed] instead."
msgstr ""
+"éšæœºæ•°ç”Ÿæˆå™¨çš„当å‰çжæ€ã€‚ä¿å­˜å¹¶æ¢å¤æ­¤å±žæ€§ï¼Œä»¥å°†ç”Ÿæˆå™¨æ¢å¤åˆ°ä¹‹å‰çš„状æ€ï¼š\n"
+"[codeblock]\n"
+"var rng = RandomNumberGenerator.new()\n"
+"print(rng.randf())\n"
+"var saved_state = rng.state # Store current state.\n"
+"print(rng.randf()) # Advance internal state.\n"
+"rng.state = saved_state # Restore the state.\n"
+"print(rng.randf()) # Prints the same value as in previous.\n"
+"[/codeblock]\n"
+"[b]注æ„:[/b] ä¸è¦å°†çжæ€è®¾ç½®ä¸ºä»»æ„å€¼ï¼Œå› ä¸ºéšæœºæ•°ç”Ÿæˆå™¨è¦æ±‚状æ€å…·æœ‰æŸäº›ç‰¹æ€§æ‰"
+"能正常è¿è¡Œã€‚它应该åªè®¾ç½®ä¸ºæ¥è‡ªçжæ€å±žæ€§æœ¬èº«çš„值。è¦ä½¿ç”¨ä»»æ„输入åˆå§‹åŒ–éšæœºæ•°ç”Ÿ"
+"æˆå™¨ï¼Œè¯·æ”¹ç”¨ [member seed]。"
#: doc/classes/Range.xml:4
msgid "Abstract base class for range-based controls."
@@ -57312,7 +58131,6 @@ msgid "Query the closest object intersecting a ray."
msgstr "查询与射线相交的最近物体。"
#: doc/classes/RayCast.xml:7
-#, fuzzy
msgid ""
"A RayCast represents a line from its origin to its destination position, "
"[code]cast_to[/code]. It is used to query the 3D space in order to find the "
@@ -57329,15 +58147,15 @@ msgid ""
"queries are required between physics frames (or during the same frame), use "
"[method force_raycast_update] after adjusting the raycast."
msgstr ""
-"RayCast表示一æ¡ä»ŽåŽŸç‚¹åˆ°ç›®æ ‡ä½ç½®[code]cast_to[/code]çš„ç›´çº¿ã€‚å®ƒè¢«ç”¨æ¥æŸ¥è¯¢3D空"
-"间,以便沿ç€å°„线的路径找到最近的物体。\n"
-"RayCast3Då¯ä»¥å¿½ç•¥ä¸€äº›ç‰©ä½“,通过[code]add_exception[/code]将它们添加到异常列表"
-"中,通过设置碰撞层进行适当的过滤,或者通过类型掩ç è¿‡æ»¤ç‰©ä½“类型。\n"
-"RayCast3Då¯ä»¥è¢«é…置为报告[Area3D]([member collide_with_areas])和"
-"[PhysicsBody2D]([member collide_with_bodies])之间或彼此间的碰撞。\n"
-"åªæœ‰è¢«æ¿€æ´»çš„Raycastæ‰èƒ½å¤ŸæŸ¥è¯¢ç©ºé—´å¹¶æŠ¥å‘Šç¢°æ’žæƒ…况。\n"
-"RayCast2D在æ¯ä¸€ä¸ªç‰©ç†å¸§ä¸­è®¡ç®—交集(è§[Node]),结果被缓存起æ¥ï¼Œä»¥ä¾¿ä»¥åŽå¯ä»¥ç”¨"
-"到下一帧。如果在物ç†å¸§ä¹‹é—´éœ€è¦å¤šæ¬¡æŸ¥è¯¢ï¼ˆæˆ–在åŒä¸€å¸§ä¸­ï¼‰ï¼Œè¯·åœ¨è°ƒæ•´å°„线广播åŽä½¿"
+"RayCast 表示从起点到终点ä½ç½®çš„线,[code]cast_to[/code]。它用于检测 3D 空间,"
+"以便找到沿光线路径最近的对象。\n"
+"RayCast å¯ä»¥å¿½ç•¥æŸäº›å¯¹è±¡ï¼Œæ–¹æ³•是通过 [code]add_exception[/code] 将它们添加到"
+"例外列表中,或者通过使用碰撞层和掩ç è®¾ç½®ï¼Œè¿›è¡Œé€‚当的过滤。\n"
+"RayCast å¯ä»¥é…置为报告与 [Area]([member collide_with_areas]) å’Œ/或 "
+"[PhysicsBody]([member collide_with_bodies]) 的碰撞。\n"
+"åªæœ‰å¯ç”¨çš„光线投射æ‰èƒ½æ£€æµ‹ç©ºé—´å¹¶æŠ¥å‘Šç¢°æ’žã€‚\n"
+"RayCast 计算æ¯ä¸ªç‰©ç†å¸§çš„交集(å‚阅 [Node]),并将结果缓存起æ¥ï¼Œä»¥ä¾¿ç¨åŽä½¿ç”¨ï¼Œ"
+"直到下一帧。如果物ç†å¸§ä¹‹é—´ï¼ˆæˆ–åŒä¸€å¸§æœŸé—´ï¼‰éœ€è¦å¤šæ¬¡æ£€æµ‹ï¼Œè¯·åœ¨è°ƒæ•´å…‰çº¿æŠ•å°„åŽä½¿"
"用[method force_raycast_update]。"
#: doc/classes/RayCast.xml:22 doc/classes/RayCast2D.xml:21
@@ -57357,7 +58175,6 @@ msgid "Removes all collision exceptions for this ray."
msgstr "删除此射线的所有碰撞异常。"
#: doc/classes/RayCast.xml:41
-#, fuzzy
msgid ""
"Updates the collision information for the ray.\n"
"Use this method to update the collision information immediately instead of "
@@ -57365,10 +58182,10 @@ msgid ""
"ray or its parent has changed state.\n"
"[b]Note:[/b] [code]enabled[/code] is not required for this to work."
msgstr ""
-"更新光线的碰撞信æ¯ã€‚\n"
-"使用这个方法å¯ä»¥ç«‹å³æ›´æ–°ç¢°æ’žä¿¡æ¯ï¼Œè€Œä¸æ˜¯ç­‰å¾…下一次[code]_physics_process[/"
-"code]è°ƒç”¨ï¼Œä¾‹å¦‚å½“å°„çº¿æˆ–å®ƒçš„çˆ¶è¿›ç¨‹çŠ¶æ€æ”¹å˜æ—¶ã€‚\n"
-"[b]注æ„:[/b] å¹¶ä¸éœ€è¦[member enabled]为[code]true[/code]æ‰èƒ½å·¥ä½œã€‚"
+"更新射线的碰撞信æ¯ã€‚\n"
+"ä½¿ç”¨æ­¤æ–¹æ³•ç«‹å³æ›´æ–°ç¢°æ’žä¿¡æ¯ï¼Œè€Œä¸æ˜¯ç­‰å¾…下一个 [code]_physics_process[/code] è°ƒ"
+"用,例如,如果光线或其父级已更改状æ€ã€‚\n"
+"[b]注æ„:[/b] [code]enabled[/code]ä¸éœ€è¦æ­¤åŠŸèƒ½ã€‚"
#: doc/classes/RayCast.xml:49 doc/classes/RayCast2D.xml:47
msgid ""
@@ -57441,14 +58258,12 @@ msgid ""
msgstr "光线相对于光线投射的 [code]position[/code]的目标点,。"
#: doc/classes/RayCast.xml:114
-#, fuzzy
msgid "If [code]true[/code], collision with [Area]s will be reported."
-msgstr "如果[code]true[/code],将报告与[Area2D]的碰撞。"
+msgstr "如果 [code]true[/code],将å馈与 [Area] 的碰撞。"
#: doc/classes/RayCast.xml:117
-#, fuzzy
msgid "If [code]true[/code], collision with [PhysicsBody]s will be reported."
-msgstr "如果[code]true[/code],会报告与[PhysicsBody2D]的碰撞。"
+msgstr "如果 [code]true[/code],将å馈与 [PhysicsBody] 的碰撞。"
#: doc/classes/RayCast.xml:120 doc/classes/RayCast2D.xml:116
msgid ""
@@ -57458,6 +58273,10 @@ msgid ""
"masks]Collision layers and masks[/url] in the documentation for more "
"information."
msgstr ""
+"光线的碰撞é®ç½©ã€‚åªæœ‰åœ¨é®ç½©ä¸­å¯ç”¨è‡³å°‘一个碰撞层中物体,æ‰ä¼šè¢«æ£€æµ‹åˆ°ã€‚有关更多"
+"ä¿¡æ¯ï¼Œè¯·å‚阅文档中的 [url=https://docs.godotengine.org/zh_CN/stable/"
+"tutorials/physics/physics_introduction.html#collision-layers-and-masks]碰撞层"
+"和掩ç [/url]。"
#: doc/classes/RayCast.xml:123
msgid ""
@@ -57468,6 +58287,11 @@ msgid ""
"If set to [code]Color(0.0, 0.0, 0.0)[/code] (by default), the color set in "
"[member ProjectSettings.debug/shapes/collision/shape_color] is used."
msgstr ""
+"如果在 [b]Debug[/b] èœå•中å¯ç”¨äº†å¯è§ç¢°æ’žå½¢çж [b]Visible Collision Shapes[/"
+"b],则å¯ç”¨äºŽåœ¨ç¼–辑器中和è¿è¡Œæ—¶ç»˜åˆ¶å½¢çŠ¶çš„è‡ªå®šä¹‰é¢œè‰²ã€‚å¦‚æžœ [RayCast] 与æŸç‰©ä½“å‘"
+"生碰撞,此颜色将在è¿è¡Œæ—¶çªå‡ºæ˜¾ç¤ºã€‚\n"
+"如果设置为 [code]Color(0.0, 0.0, 0.0)[/code](默认),则使用 [member "
+"ProjectSettings.debug/shapes/collision/shape_color] 中设置的颜色。"
#: doc/classes/RayCast.xml:127
msgid ""
@@ -57476,17 +58300,19 @@ msgid ""
"Collision Shapes[/b] to be enabled in the [b]Debug[/b] menu for the debug "
"shape to be visible at run-time."
msgstr ""
+"如果设置为 [code]1[/code],则将一æ¡çº¿ç”¨ä½œè°ƒè¯•形状。å¦åˆ™ï¼Œå°†ç»˜åˆ¶ä¸€ä¸ªæˆªæ–­çš„金字"
+"å¡”æ¥è¡¨ç¤º [RayCast]。需è¦åœ¨ [b]调试[/b] èœå•中å¯ç”¨å¯è§ç¢°æ’žå½¢çж [b]Visible "
+"Collision Shapes[/b],以便调试形状在è¿è¡Œæ—¶å¯è§ã€‚"
#: doc/classes/RayCast.xml:130 doc/classes/RayCast2D.xml:119
msgid "If [code]true[/code], collisions will be reported."
msgstr "如果 [code]true[/code],将报告碰撞。"
#: doc/classes/RayCast.xml:133
-#, fuzzy
msgid ""
"If [code]true[/code], collisions will be ignored for this RayCast's "
"immediate parent."
-msgstr "如果 [code]true[/code],则此 RayCast3D 的直接父级的碰撞将被忽略。"
+msgstr "如果 [code]true[/code],则此 RayCast 的直接父级的碰撞将被忽略。"
#: doc/classes/RayCast2D.xml:7
msgid ""
@@ -57518,7 +58344,6 @@ msgstr ""
"用[method force_raycast_update]。"
#: doc/classes/RayCast2D.xml:40
-#, fuzzy
msgid ""
"Updates the collision information for the ray. Use this method to update the "
"collision information immediately instead of waiting for the next "
@@ -57526,9 +58351,9 @@ msgid ""
"changed state.\n"
"[b]Note:[/b] [code]enabled[/code] is not required for this to work."
msgstr ""
-"更新光线的碰撞信æ¯ã€‚使用这个方法å¯ä»¥ç«‹å³æ›´æ–°ç¢°æ’žä¿¡æ¯ï¼Œè€Œä¸æ˜¯ç­‰å¾…下一次"
-"[code]_physics_process[/code]è°ƒç”¨ï¼Œä¾‹å¦‚å½“å°„çº¿æˆ–å®ƒçš„çˆ¶è¿›ç¨‹çŠ¶æ€æ”¹å˜æ—¶ã€‚\n"
-"[b]注æ„:[/b] å¹¶ä¸éœ€è¦[member enabled]为[code]true[/code]æ‰èƒ½å·¥ä½œã€‚"
+"更新射线的碰撞信æ¯ã€‚ä½¿ç”¨æ­¤æ–¹æ³•ç«‹å³æ›´æ–°ç¢°æ’žä¿¡æ¯ï¼Œè€Œä¸æ˜¯ç­‰å¾…下一次 "
+"[code]_physics_process[/code] 调用,例如,如果光线或其父级已更改状æ€ã€‚\n"
+"[b]注æ„:[/b] [code]enabled[/code]ä¸éœ€è¦æ­¤åŠŸèƒ½ã€‚"
#: doc/classes/RayCast2D.xml:101
msgid ""
@@ -57555,15 +58380,15 @@ msgid "Ray shape for 3D collisions."
msgstr "用于 3D 碰撞的射线形状。"
#: doc/classes/RayShape.xml:7
-#, fuzzy
msgid ""
"Ray shape for 3D collisions, which can be set into a [PhysicsBody] or "
"[Area]. A ray is not really a collision body; instead, it tries to separate "
"itself from whatever is touching its far endpoint. It's often useful for "
"characters."
msgstr ""
-"3D 碰撞的射线形状,å¯ä»¥è®¾ç½®ä¸º [PhysicsBody3D] 或 [Area3D]ã€‚å°„çº¿å¹¶ä¸æ˜¯çœŸæ­£çš„碰"
-"撞体;相å,它试图将自己与接触其远端的任何东西分开。它通常对角色很有用。"
+"用于3D碰撞的射线形状,它å¯ä»¥è¢«è®¾ç½®æˆä¸€ä¸ª[PhysicsBody]或[Area]。一æ¡å°„çº¿å¹¶ä¸æ˜¯"
+"真正的碰撞体;然而,它试图将自己与其远端点接触的东西分开。这通常对角色很有"
+"用。"
#: doc/classes/RayShape.xml:15 doc/classes/RayShape2D.xml:15
msgid "The ray's length."
@@ -57587,20 +58412,19 @@ msgstr ""
"任何东西分开。它通常对角色很有用。"
#: doc/classes/Rect2.xml:4
-#, fuzzy
msgid "2D axis-aligned bounding box."
-msgstr "轴对é½åŒ…围盒。"
+msgstr "2D 轴对é½è¾¹ç•Œæ¡†ã€‚"
#: doc/classes/Rect2.xml:7
-#, fuzzy
msgid ""
"[Rect2] consists of a position, a size, and several utility functions. It is "
"typically used for fast overlap tests.\n"
"It uses floating-point coordinates.\n"
"The 3D counterpart to [Rect2] is [AABB]."
msgstr ""
-"[Rect2] 由一个ä½ç½®ã€ä¸€ä¸ªå¤§å°å’Œå‡ ä¸ªå®žç”¨åŠŸèƒ½ç»„æˆã€‚它通常用于快速é‡å æµ‹è¯•。\n"
-"å®ƒä½¿ç”¨æµ®ç‚¹åæ ‡ã€‚"
+"[Rect2] ç”±ä¸€ä¸ªåæ ‡ã€ä¸€ä¸ªå¤§å°å’Œå‡ ä¸ªå®žç”¨å‡½æ•°ç»„æˆã€‚它通常用于快速é‡å æµ‹è¯•。\n"
+"å®ƒä½¿ç”¨æµ®ç‚¹åæ ‡ã€‚\n"
+"[Rect2] 在 3D 中对应 [AABB]。"
#: doc/classes/Rect2.xml:22
msgid "Constructs a [Rect2] by position and size."
@@ -57629,40 +58453,54 @@ msgid ""
msgstr "如果此 [Rect2] 完全包å«å¦ä¸€ä¸ªï¼Œåˆ™è¿”回 [code]true[/code]。"
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
-msgstr "返回包å«ç»™å®šç‚¹çš„æ­¤ [Rect2] 的扩展。"
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
+msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr "返回 [Rect2] é¢ç§¯ã€‚"
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr "返回 [Rect2] çš„å‰¯æœ¬ï¼Œè¯¥å‰¯æœ¬å‘æ‰€æœ‰è¾¹å¢žé•¿äº†ç»™å®šæ•°é‡çš„å•ä½ã€‚"
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr "返回 [Rect2] 的副本,该副本分别å‘å„边增长了给定数é‡çš„å•ä½ã€‚"
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr "返回[Rect2]å‘[enum Margin]æ–¹å‘增长给定数é‡å•ä½çš„副本。"
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr "如果[Rect2]为flat或空,则返回[code]true[/code]。"
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
-msgstr "如果 [Rect2] 包å«ç‚¹ï¼Œåˆ™è¿”回 [code]true[/code]。"
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
+msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -57674,7 +58512,7 @@ msgstr ""
"如果 [code]include_borders[/code] 是 [code]true[/code],如果它们的边界接触,"
"å³ä½¿æ²¡æœ‰äº¤å‰ï¼Œå®ƒä»¬ä¹Ÿä¼šè¢«è§†ä¸ºé‡å ã€‚"
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
@@ -57683,7 +58521,7 @@ msgstr ""
"通过在æ¯ä¸ªç»„件上调用 [code]is_equal_approx[/code],如果此 [Rect2] å’Œ "
"[code]rect[/code] 大致相等,则返回 [code]true[/code]。"
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr "返回一个更大的 [Rect2],其中包å«è¿™ä¸ª [Rect2] å’Œ [code]b[/code]。"
@@ -57708,7 +58546,6 @@ msgid "Base class for reference-counted objects."
msgstr "引用计数对象的基类。"
#: doc/classes/Reference.xml:7
-#, fuzzy
msgid ""
"Base class for any object that keeps a reference count. [Resource] and many "
"other helper objects inherit this class.\n"
@@ -57724,11 +58561,13 @@ msgid ""
"free references that are no longer in use. This means that unused references "
"will linger on for a while before being removed."
msgstr ""
-"ä»»ä½•ä¿æŒå¼•用计数的对象的基类。[Resource]和许多其他辅助对象都继承了这个类。\n"
-"与[Object]ä¸åŒçš„æ˜¯ï¼Œå¼•用ä¿ç•™äº†ä¸€ä¸ªå†…部引用计数器,因此当且仅当它们ä¸å†è¢«ä½¿ç”¨"
-"时就会被自动释放。因此,引用ä¸éœ€è¦é€šè¿‡[method Object.free]手动释放。\n"
-"在ç»å¤§å¤šæ•°çš„使用情况下,实例化和使用[Reference]派生的类型就是你需è¦åšçš„全部事"
-"情。这个类中æä¾›çš„æ–¹æ³•åªé€‚用于高级用户,如果误用的è¯ä¼šå¯¼è‡´é—®é¢˜ã€‚"
+"ä»»ä½•ä¿æŒå¼•用计数对象的基类。 [Resource] 和许多其他辅助对象继承了这个类。\n"
+"与其他 [Object] 类型ä¸åŒï¼ŒReferences ä¿ç•™ä¸€ä¸ªå†…部引用计数器,以便在ä¸ä½¿ç”¨ä¸”ä»…"
+"在那时自动释放。因此,ä¸éœ€è¦ä½¿ç”¨ [method Object.free] 手动释放引用。\n"
+"在ç»å¤§å¤šæ•°ç”¨ä¾‹ä¸­ï¼Œæ‚¨åªéœ€è¦å®žä¾‹åŒ–和使用 [Reference] 派生类型。此类中æä¾›çš„æ–¹æ³•"
+"仅适用于高级用户,如果误用å¯èƒ½ä¼šå¯¼è‡´é—®é¢˜ã€‚\n"
+"[b]注æ„:[/b]在C#中,引用ä¸å†ä½¿ç”¨åŽä¸ä¼šç«‹å³é‡Šæ”¾ã€‚相å,垃圾收集将定期è¿è¡Œå¹¶é‡Š"
+"放ä¸å†ä½¿ç”¨çš„引用。这æ„å‘³ç€æœªä½¿ç”¨çš„引用会在被删除之å‰åœç•™ä¸€æ®µæ—¶é—´ã€‚"
#: doc/classes/Reference.xml:19
msgid ""
@@ -57764,15 +58603,14 @@ msgid "Reference frame for GUI."
msgstr "GUI的引用框架。"
#: doc/classes/ReferenceRect.xml:7
-#, fuzzy
msgid ""
"A rectangle box that displays only a [member border_color] border color "
"around its rectangle. [ReferenceRect] has no fill [Color]. If you need to "
"display a rectangle filled with a solid color, consider using [ColorRect] "
"instead."
msgstr ""
-"一个矩形框,åªåœ¨å…¶çŸ©å½¢å‘¨å›´æ˜¾ç¤ºä¸€ä¸ª[member border_color]边框颜色。"
-"[ReferenceRect]没有填充[Color]。"
+"矩形框,仅在其矩形周围显示 [member border_color] 边框颜色。 [ReferenceRect] "
+"没有填充 [Color]ã€‚å¦‚æžœä½ éœ€è¦æ˜¾ç¤ºå¡«å……纯色的矩形,请考虑使用 [ColorRect] 。"
#: doc/classes/ReferenceRect.xml:15
msgid "Sets the border [Color] of the [ReferenceRect]."
@@ -57782,7 +58620,7 @@ msgstr "设置 [ReferenceRect] 的边框 [Color]。"
msgid ""
"Sets the border width of the [ReferenceRect]. The border grows both inwards "
"and outwards with respect to the rectangle box."
-msgstr ""
+msgstr "设置 [ReferenceRect] 的边框宽度。边界相对于矩形框å‘内和å‘外生长。"
#: doc/classes/ReferenceRect.xml:21
msgid ""
@@ -57797,7 +58635,6 @@ msgid "Captures its surroundings to create reflections."
msgstr "æ•æ‰å…¶å‘¨å›´çš„环境,以创造å射。"
#: doc/classes/ReflectionProbe.xml:7
-#, fuzzy
msgid ""
"Capture its surroundings as a dual paraboloid image, and stores versions of "
"it with increasing levels of blur to simulate different material "
@@ -57816,17 +58653,22 @@ msgid ""
"the same time for a single mesh. If possible, split up large meshes that "
"span over multiple reflection probes into smaller ones."
msgstr ""
-"将其周围环境æ•获为立方体图,并存储其版本,使其模糊程度增加,以模拟ä¸åŒçš„ææ–™"
-"粗糙度。\n"
-"[ReflectionProbe] 用于以性能为代价创建高质é‡çš„å射。它å¯ä»¥ä¸Ž [GIProbe] å’Œå±å¹•"
-"空间å射相结åˆï¼Œå®žçŽ°é«˜è´¨é‡çš„å射。[ReflectionProbe]渲染其[member cull_mask]中"
-"的所有对象,因此更新它们å¯èƒ½ç›¸å½“昂贵。最好用é‡è¦çš„陿€å¯¹è±¡æ›´æ–°å®ƒä»¬ä¸€æ¬¡ï¼Œç„¶åŽ"
-"放下它们。"
+"å°†å…¶å‘¨å›´çŽ¯å¢ƒæ•æ‰ä¸ºåŒæŠ›ç‰©é¢å›¾åƒï¼Œå¹¶ä»¥è¶Šæ¥è¶Šé«˜çš„æ¨¡ç³Šåº¦å­˜å‚¨å…¶ç‰ˆæœ¬ï¼Œä»¥æ¨¡æ‹Ÿä¸åŒçš„"
+"æè´¨ç²—糙度。\n"
+"[ReflectionProbe]用于以性能为代价创建高质é‡çš„å射。它å¯ä»¥ä¸Ž[GIProbe]å’Œå±å¹•空"
+"é—´å射相结åˆï¼Œå®žçŽ°é«˜è´¨é‡çš„å射。[ReflectionProbe]渲染其[member cull_mask]内的"
+"所有对象,所以更新它们å¯èƒ½ç›¸å½“消耗资æºã€‚最好是用é‡è¦çš„陿€å¯¹è±¡æ›´æ–°ä¸€æ¬¡ï¼Œç„¶åŽ"
+"å°±ä¸åŽ»ç®¡äº†ã€‚\n"
+"[b]注æ„:[/b] 默认情况下,Godotåªä¼šæ¸²æŸ“16个åå°„æŽ¢é’ˆã€‚å¦‚æžœéœ€è¦æ›´å¤šï¼Œå¯ä»¥å¢žåР图"
+"集的细分数é‡ã€‚这个设置å¯ä»¥åœ¨[member ProjectSettings.rendering/quality/"
+"reflections/atlas_subdiv]找到。\n"
+"[b]注æ„:[/b] 对于一个网格,GLES2åŽç«¯åªèƒ½åŒæ—¶æ˜¾ç¤ºä¸¤ä¸ªå射探针。如果å¯èƒ½çš„è¯ï¼Œ"
+"把跨越多个å射探针的大网格分割æˆå°ç½‘格。"
#: doc/classes/ReflectionProbe.xml:13
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/reflection_probes.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/3d/reflection_probes.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/reflection_probes.html"
#: doc/classes/ReflectionProbe.xml:19
msgid ""
@@ -57838,7 +58680,6 @@ msgstr ""
"得在矩形房间中的åå°„çœ‹èµ·æ¥æ›´æ­£ç¡®ã€‚"
#: doc/classes/ReflectionProbe.xml:22
-#, fuzzy
msgid ""
"Sets the cull mask which determines what objects are drawn by this probe. "
"Every [VisualInstance] with a layer included in this cull mask will be "
@@ -57846,9 +58687,9 @@ msgid ""
"likely to take up a lot of space in the reflection in order to save on "
"rendering cost."
msgstr ""
-"设置剔除蒙版,它决定了探测所绘制的对象。æ¯ä¸ªåŒ…å«åœ¨è¿™ä¸ªå‰”除蒙版中的图层"
-"[VisualInstance3D]éƒ½å°†è¢«æŽ¢é’ˆæ¸²æŸ“ã€‚ä¸ºäº†èŠ‚çœæ¸²æŸ“æˆæœ¬ï¼Œæœ€å¥½åªåŒ…å«å¤§çš„物体,因为"
-"它们很å¯èƒ½ä¼šå ç”¨å¤§é‡çš„å射空间。"
+"设置剔除é®ç½©ï¼Œç¡®å®šæ­¤æŽ¢é’ˆç»˜åˆ¶çš„对象。这个剔除蒙版中包å«ä¸€ä¸ªå±‚çš„æ¯ä¸ª "
+"[VisualInstance] 都将由探测器渲染。最好åªåŒ…å«å¯èƒ½åœ¨å射中å ç”¨å¤§é‡ç©ºé—´çš„大物"
+"ä½“ï¼Œä»¥èŠ‚çœæ¸²æŸ“æˆæœ¬ã€‚"
#: doc/classes/ReflectionProbe.xml:25
msgid ""
@@ -57878,7 +58719,7 @@ msgstr "定义å射强度。"
msgid ""
"Sets the ambient light color to be used when this probe is set to [member "
"interior_enable]."
-msgstr ""
+msgstr "设置环境光的颜色,当此探针被设置为[member interior_enable]时使用。"
#: doc/classes/ReflectionProbe.xml:37
msgid ""
@@ -57886,22 +58727,24 @@ msgid ""
"light for this reflection probe when set to [member interior_enable]. Useful "
"so that ambient light matches the color of the room."
msgstr ""
+"当设置为 [member internal_enable] 时,设置å射对该å射探测器的环境光的影å“程"
+"度的贡献值。环境光与房间的颜色相匹é…中很有用。"
#: doc/classes/ReflectionProbe.xml:40
msgid ""
"Sets the energy multiplier for this reflection probe's ambient light "
"contribution when set to [member interior_enable]."
msgstr ""
+"当设置为[member interior_enable]时,为该å射探针的环境光贡献设置能é‡ä¹˜æ•°ã€‚"
#: doc/classes/ReflectionProbe.xml:43
-#, fuzzy
msgid ""
"If [code]true[/code], reflections will ignore sky contribution. Ambient "
"lighting is then controlled by the [code]interior_ambient_*[/code] "
"properties."
msgstr ""
-"如果 [code]true[/code],å射将忽略天空因素。等效于 [member ReflectionProbe."
-"interior]。"
+"如果[code]true[/code],å射将忽略天空的贡献。然åŽçŽ¯å¢ƒç…§æ˜Žç”±"
+"[code]internal_ambient_*[/code]属性控制。"
#: doc/classes/ReflectionProbe.xml:46
msgid ""
@@ -57924,9 +58767,8 @@ msgstr ""
"ALWAYS](一直)。"
#: doc/classes/ReflectionProbe.xml:57
-#, fuzzy
msgid "Update the probe once on the next frame."
-msgstr "更新一次视窗,然åŽè®¾ç½®ä¸ºç¦ç”¨ã€‚"
+msgstr "在下一帧更新一次探针。"
#: doc/classes/ReflectionProbe.xml:60
msgid ""
@@ -57942,7 +58784,6 @@ msgid "Class for searching text for patterns using regular expressions."
msgstr "ä½¿ç”¨æ­£åˆ™è¡¨è¾¾å¼æœç´¢æ–‡æœ¬çš„类。"
#: modules/regex/doc_classes/RegEx.xml:7
-#, fuzzy
msgid ""
"A regular expression (or regex) is a compact language that can be used to "
"recognise strings that follow a specific pattern, such as URLs, email "
@@ -58009,11 +58850,11 @@ msgid ""
"[b]Tip:[/b] You can use [url=https://regexr.com/]Regexr[/url] to test "
"regular expressions online."
msgstr ""
-"正则表达å¼ï¼ˆæˆ–ç§°regex)是一ç§ç´§å‡‘的语言,å¯ç”¨äºŽè¯†åˆ«ç¬¦åˆç‰¹å®šè¡¨è¾¾å¼çš„字符串,如"
+"正则表达å¼ï¼ˆæˆ–ç§°regex)是一ç§ç´§å‡‘的语言,å¯ç”¨äºŽè¯†åˆ«éµå¾ªç‰¹å®šæ¨¡å¼çš„字符串,如"
"URLã€ç”µå­é‚®ä»¶åœ°å€ã€å®Œæ•´å¥å­ç­‰ã€‚例如,一个[code]ab[0-9][/code]的正则表达å¼å¯ä»¥"
"找到[code]ab[/code]åŽé¢è·Ÿç€[code]0[/code]到[code]9[/code]的任何数字的字符串。"
"è¦æƒ³æ›´æ·±å…¥åœ°äº†è§£ï¼Œä½ å¯ä»¥å¾ˆå®¹æ˜“地在互è”网上找到å„ç§æ•™ç¨‹å’Œè¯¦ç»†è§£é‡Šã€‚\n"
-"首先,在使用RegEx对象之å‰ï¼Œéœ€è¦ç”¨[method compile]对其进行æœç´¢æ¨¡å¼çš„编译。\n"
+"首先,在使用RegEx对象之å‰ï¼Œéœ€è¦ç”¨[method compile] 对其进行æœç´¢æ¨¡å¼çš„编译。\n"
"[codeblock]\n"
"var regex = RegEx.new()\n"
"regex.compile(\"\\\\w-(\\\\d+)\")\n"
@@ -58021,7 +58862,7 @@ msgstr ""
"在为表达å¼è½¬ä¹‰ä¹‹å‰ï¼Œå¿…须先为GDScript转义æœç´¢æ¨¡å¼ã€‚例如,[code]compile(\"\\\\d"
"+\")[/code]会被RegEx读æˆ[code]\\d+[/code]ã€‚åŒæ ·ï¼Œ[code]compile(\"\\\"(?:\\\\"
"\\\\.|[^\\\"])*\\\")[/code]会被读作[code]\"(?:\\.|[^\"])*\"[/code]。\n"
-"使用[method search],你å¯ä»¥åœ¨ç»™å®šçš„æ–‡æœ¬ä¸­æ‰¾åˆ°è¡¨è¾¾å¼ã€‚如果找到一个表达å¼ï¼Œå°†è¿”"
+"使用 [method search] ,你å¯ä»¥åœ¨ç»™å®šçš„æ–‡æœ¬ä¸­åŒ¹é…模å¼ã€‚如果匹é…到一个模å¼ï¼Œå°†è¿”"
"回[RegExMatch],你å¯ä»¥ä½¿ç”¨[method RegExMatch.get_string]å’Œ[method RegExMatch."
"get_start]等方法检索结果的细节。\n"
"[codeblock]\n"
@@ -58029,10 +58870,10 @@ msgstr ""
"regex.compile(\"\\\\w-(\\\\d+)\")\n"
"var result = regex.search(\"abc n-0123\")\n"
"if result:\n"
-" print(result.get_string()) # 这会输出n-0123\n"
+" print(result.get_string()) # Would print n-0123\n"
"[/codeblock]\n"
"æ•获组的结果[code]()[/code]å¯ä»¥é€šè¿‡å‘[RegExMatch]中的å„ç§æ–¹æ³•ä¼ é€’ç»„å·æ¥æ£€ç´¢ã€‚"
-"组0是默认的,并且将总是指整个表达å¼ã€‚在上é¢çš„例å­ä¸­ï¼Œè°ƒç”¨[code]result."
+"默认是组0,并且将总是指整个模å¼ã€‚在上é¢çš„例å­ä¸­ï¼Œè°ƒç”¨[code]result."
"get_string(1)[/code]会得到[code]0123[/code]。\n"
"这个版本的RegEx也支æŒå‘½åçš„æ•获组,åç§°å¯ä»¥ç”¨æ¥æ£€ç´¢ç»“果。如果两个或更多的组有"
"相åŒçš„å称,那么这个åç§°å°†åªæŒ‡ç¬¬ä¸€ä¸ªæœ‰åŒ¹é…的组。\n"
@@ -58041,26 +58882,26 @@ msgstr ""
"regex.compile(\"d(?<digit>[0-9]+)|x(?<digit>[0-9a-f]+)\")\n"
"var result = regex.search(\"the number is x2f\")\n"
"if result:\n"
-" print(result.get_string(\"digit\")) # 这会输出 2f\n"
+" print(result.get_string(\"digit\")) # Would print 2f\n"
"[/codeblock]\n"
-"如果你需è¦å¤„ç†å¤šä¸ªç»“果,[method search_all]ä¼šç”Ÿæˆæ‰€æœ‰ä¸é‡å çš„结果的列表。为了"
-"方便起è§ï¼Œè¿™å¯ä»¥å’Œä¸€ä¸ª[code]for[/code]循环结åˆèµ·æ¥ã€‚\n"
+"如果你需è¦å¤„ç†å¤šä¸ªç»“果,[method search_all]会生æˆä¸€ä¸ªæ‰€æœ‰ä¸é‡å çš„结果列表。为"
+"了方便起è§ï¼Œè¿™å¯ä»¥å’Œä¸€ä¸ª[code]for[/code]循环结åˆèµ·æ¥ã€‚\n"
"[codeblock]\n"
"for result in regex.search_all(\"d01, d03, d0c, x3f and x42\"):\n"
" print(result.get_string(\"digit\"))\n"
-"# 这会输出 01 03 0 3f 42\n"
+"# Would print 01 03 0 3f 42\n"
"[/codeblock]\n"
"[b]使用RegEx分割字符串的例å­ï¼š[/b]\n"
"[codeblock]\n"
"var regex = RegEx.new()\n"
"regex.compile(\"\\\\S+\") # Negated whitespace character class.\n"
"var results = []\n"
-"for match in regex.search_all(\"One Two \\n\\tThree\"):\n"
-" results.push_back(match.get_string())\n"
-"# `results`æ•°ç»„çŽ°åœ¨åŒ…å« \"One\", \"Two\", \"Three\".\n"
+"for result in regex.search_all(\"One Two \\n\\tThree\"):\n"
+" results.push_back(result.get_string())\n"
+"# The `results` array now contains \"One\", \"Two\", \"Three\".\n"
"[/codeblock]\n"
"[b]注æ„:[/b] Godotçš„regex实现是基于[url=https://www.pcre.org/]PCRE2[/url] "
-"库。你å¯ä»¥æŸ¥çœ‹å®Œæ•´çš„表达å¼å‚考[url=https://www.pcre.org/current/doc/html/"
+"库。你å¯ä»¥æŸ¥çœ‹å®Œæ•´çš„æ¨¡å¼å‚考[url=https://www.pcre.org/current/doc/html/"
"pcre2pattern.html]这里[/url]。\n"
"[b]æç¤ºï¼š[/b] ä½ å¯ä»¥ä½¿ç”¨[url=https://regexr.com/]Regexr[/url]æ¥åœ¨çº¿æµ‹è¯•正则表"
"è¾¾å¼ã€‚"
@@ -58331,8 +59172,8 @@ msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/resources."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/resources."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/getting_started/step_by_step/"
+"resources.html"
#: doc/classes/Resource.xml:18
msgid ""
@@ -59018,23 +59859,40 @@ msgid ""
"emoji) are [i]not[/i] supported on Windows. They will display as unknown "
"characters instead. This will be resolved in Godot 4.0."
msgstr ""
+"富文本å¯ä»¥åŒ…å«è‡ªå®šä¹‰æ–‡æœ¬ã€å­—体ã€å›¾åƒå’Œä¸€äº›åŸºæœ¬æ ¼å¼ã€‚标签将这些作为内部标签堆"
+"栈进行管ç†ã€‚它还å¯ä»¥é€‚应给定的宽度/高度。\n"
+"[b]注æ„:[/b] 为 [member bbcode_text] 设置内容会清除标签堆栈并从属性的内容中"
+"é‡å»ºå®ƒã€‚对 [member bbcode_text] 所åšçš„ä»»ä½•ç¼–è¾‘éƒ½å°†åˆ é™¤ä»Žå…¶ä»–æ‰‹åŠ¨æ¥æºï¼ˆä¾‹å¦‚ "
+"[method append_bbcode] å’Œ [code]push_*[/code] / [method pop] 方法)所åšçš„å…ˆå‰"
+"编辑。\n"
+"[b]注æ„:[/b] RichTextLabel 䏿”¯æŒçº ç¼ çš„ BBCode 标签。例如,ä¸è¦ä½¿ç”¨ [code]"
+"[b]bold[i]bold italic[/b]italic[/i][/code],而是使用 [code][b]bold[i]bold "
+"italic[/i][/ b][i]italic[/i][/code]。\n"
+"[b]注æ„:[/b] [code]push_*/pop[/code] 函数ä¸ä¼šå½±å“BBCode。\n"
+"[b]注æ„:[/b] 与 [Label] ä¸åŒï¼ŒRichTextLabel 没有 [i] 属性 [/i] 将文本水平对"
+"é½åˆ°ä¸­å¿ƒã€‚相å,å¯ç”¨ [member bbcode_enabled] 并将文本括在 [code][center][/"
+"code] 标签中,如下所示:[code][center]Example[/center][/code]。目å‰ä¹Ÿæ²¡æœ‰åž‚ç›´"
+"坹齿–‡æœ¬çš„内置方法,但这å¯ä»¥é€šè¿‡ä¾èµ–锚点/容器和 [member fit_content_height] "
+"å±žæ€§æ¥æ¨¡æ‹Ÿã€‚\n"
+"[b]注æ„:[/b] [code]0xffff[/code] 之åŽçš„ Unicode 字符(例如大多数表情符å·ï¼‰"
+"在 Windows 上 [i] 䏿”¯æŒ [/i]。它们将显示为未知字符。这将在 Godot 4.0 中解"
+"决。"
#: doc/classes/RichTextLabel.xml:16
msgid "https://godotengine.org/asset-library/asset/132"
msgstr "https://godotengine.org/asset-library/asset/132"
#: doc/classes/RichTextLabel.xml:26
-#, fuzzy
msgid ""
"Adds an image's opening and closing tags to the tag stack, optionally "
"providing a [code]width[/code] and [code]height[/code] to resize the image.\n"
"If [code]width[/code] or [code]height[/code] is set to 0, the image size "
"will be adjusted in order to keep the original aspect ratio."
msgstr ""
-"将图åƒçš„开头和结尾标签添加到标签堆中,å¯é€‰æ‹©æä¾›[code]width[/code]å’Œ"
-"[code]height[/code]æ¥è°ƒæ•´å›¾åƒçš„大å°ï¼Œå¹¶æä¾›[code]color[/code]æ¥ä¿®æ”¹å›¾åƒã€‚\n"
-"如果[code]width[/code]或[code]height[/code]被设置为0,图åƒçš„大å°å°†è¢«è°ƒæ•´ï¼Œä»¥"
-"ä¿æŒåŽŸå§‹é•¿å®½æ¯”ã€‚"
+"将图åƒçš„开头和结尾标签添加到标签堆中,å¯ä»¥é€‰æ‹©æä¾›[code]width[/code]å’Œ"
+"[code]height[/code]æ¥è°ƒæ•´å›¾åƒçš„大å°ã€‚\n"
+"如果[code]width[/code]或[code]height[/code]被设置为0,图åƒçš„大å°è¢«è°ƒæ•´ä¸ºä¿æŒ"
+"原始长宽比。"
#: doc/classes/RichTextLabel.xml:34
msgid "Adds raw non-BBCode-parsed text to the tag stack."
@@ -59051,6 +59909,12 @@ msgid ""
"a future method call, append the [member bbcode_text] instead of using "
"[method append_bbcode]."
msgstr ""
+"è§£æž [code]bbcode[/code] å¹¶æ ¹æ®éœ€è¦å°†æ ‡ç­¾æ·»åŠ åˆ°æ ‡ç­¾å †æ ˆä¸­ã€‚è¿”å›žè§£æžç»“果,æˆåŠŸ"
+"则返回[constant OK]。\n"
+"[b]注æ„:[/b] 使用此方法,您无法关闭在之å‰çš„ [method append_bbcode] 调用中打"
+"å¼€çš„æ ‡ç­¾ã€‚è¿™æ ·åšæ˜¯ä¸ºäº†æé«˜æ€§èƒ½ï¼Œç‰¹åˆ«æ˜¯åœ¨æ›´æ–°å¤§åž‹ RichTextLabels æ—¶ï¼Œå› ä¸ºæ¯æ¬¡"
+"é‡å»ºæ•´ä¸ª BBCode 会更慢。如果您ç»å¯¹éœ€è¦åœ¨å°†æ¥çš„æ–¹æ³•调用中关闭标签,请附加 "
+"[member bbcode_text] è€Œä¸æ˜¯ä½¿ç”¨ [method append_bbcode]。"
#: doc/classes/RichTextLabel.xml:48
msgid "Clears the tag stack and sets [member bbcode_text] to an empty string."
@@ -59079,6 +59943,9 @@ msgid ""
"may cause a crash. If you wish to hide it or any of its children, use their "
"[member CanvasItem.visible] property."
msgstr ""
+"返回垂直滚动æ¡ã€‚\n"
+"[b]警告:[/b] 这是一个必需的内部节点,删除和释放它å¯èƒ½ä¼šå¯¼è‡´å´©æºƒã€‚如果您希望"
+"éšè—它或其任何å­é¡¹ï¼Œè¯·ä½¿ç”¨å®ƒä»¬çš„ [member CanvasItem.visible] 属性。"
#: doc/classes/RichTextLabel.xml:79
msgid "Returns the number of visible lines."
@@ -59248,9 +60115,11 @@ msgid ""
"add_text] will reset this to [code]false[/code]. Use instead [method "
"append_bbcode] to preserve BBCode formatting."
msgstr ""
+"如果 [code]true[/code],标签使用 BBCode æ ¼å¼ã€‚\n"
+"[b]注æ„:[/b] å°è¯•使用 [method add_text] 更改 [RichTextLabel] 的文本会将其é‡"
+"置为 [code]false[/code]。改用 [method append_bbcode] æ¥ä¿ç•™ BBCode æ ¼å¼ã€‚"
#: doc/classes/RichTextLabel.xml:245
-#, fuzzy
msgid ""
"The label's text in BBCode format. Is not representative of manual "
"modifications to the internal tag stack. Erases changes made by other "
@@ -59261,11 +60130,12 @@ msgid ""
"append_bbcode] for adding text instead, unless you absolutely need to close "
"a tag that was opened in an earlier method call."
msgstr ""
-"标签的文本为BBCodeæ ¼å¼ã€‚ä¸ä»£è¡¨å¯¹å†…部标签栈的手动修改。在编辑时,会删除其他方"
-"法所åšçš„修改。\n"
-"[b]注æ„:[/b] ä¸å»ºè®®ä½¿ç”¨[code]+=[/code]æ“作符和[code]bbcode_text[/code](例如"
-"[code]bbcode_text += \"some string\"[/code]),因为它å–代了整个文本,会导致速"
-"度é™ä½Žã€‚使用[method append_bbcode]æ¥ä»£æ›¿æ·»åŠ æ–‡æœ¬ã€‚"
+"BBCode æ ¼å¼çš„æ ‡ç­¾æ–‡æœ¬ã€‚ä¸ä»£è¡¨å¯¹å†…部标签栈的手动修改。编辑时擦除通过其他方法所"
+"åšçš„æ›´æ”¹ã€‚\n"
+"[b]注æ„:[/b] ä¸å»ºè®®å°† [code]+=[/code] è¿ç®—符与 [code]bbcode_text[/code] 一起"
+"使用(例如 [code]bbcode_text += \"some string\"[/code]ï¼‰ï¼Œå› ä¸ºå®ƒä¼šæ›¿æ¢æ•´ä¸ªæ–‡"
+"本并å¯èƒ½å¯¼è‡´é€Ÿåº¦å˜æ…¢ã€‚使用 [method append_bbcode] 代替添加文本,除éžä½ å¿…须关"
+"é—­åœ¨å…ˆå‰æ–¹æ³•调用中打开的标签。"
#: doc/classes/RichTextLabel.xml:249
msgid ""
@@ -59349,17 +60219,15 @@ msgstr ""
"[member bbcode_text]。"
#: doc/classes/RichTextLabel.xml:284
-#, fuzzy
msgid ""
"The restricted number of characters to display in the label. If [code]-1[/"
"code], all characters will be displayed.\n"
"[b]Note:[/b] Setting this property updates [member percent_visible] based on "
"current [method get_total_character_count]."
msgstr ""
-"è¦æ˜¾ç¤ºçš„字符范围,数值为0.0å’Œ1.0之间的[float]。当分é…一个超出范围的值时,它和"
-"分é…1.0是一样的。\n"
-"[b]注æ„:[/b] 设置这个属性会根æ®å½“å‰çš„[method get_total_character_count]æ›´æ–°"
-"[member visible_characters]。"
+"在标签中显示的字符数é™åˆ¶ã€‚如果[code]-1[/code],将显示所有字符。\n"
+"[b]注æ„:[/b] 设置此属性会根æ®å½“å‰çš„[method get_total_character_count]æ›´æ–°"
+"[member percent_visible]。"
#: doc/classes/RichTextLabel.xml:292
msgid ""
@@ -59488,15 +60356,14 @@ msgid "Handle for a [Resource]'s unique ID."
msgstr "[Resource] 的唯一 ID çš„å¥æŸ„。"
#: doc/classes/RID.xml:7
-#, fuzzy
msgid ""
"The RID type is used to access the unique integer ID of a resource. They are "
"opaque, which means they do not grant access to the associated resource by "
"themselves. They are used by and with the low-level Server classes such as "
"[VisualServer]."
msgstr ""
-"该RID类型用于访问资æºçš„唯一整数ID。它们是ä¸é€æ˜Žçš„,这æ„味ç€å®ƒä»¬æœ¬èº«å¹¶ä¸æŽˆäºˆå¯¹"
-"相关资æºçš„访问。它们被低级别的æœåŠ¡å™¨ç±»ä½¿ç”¨ï¼Œå¦‚[RenderingServer]。"
+"RID类型用于访问资æºçš„唯一整数ID。它们ä¸é€æ˜Žï¼Œè¿™æ„味ç€å…¶æœ¬èº«å¹¶ä¸æŽˆäºˆå¯¹ç›¸å…³èµ„æº"
+"的访问。它们被低级别的æœåŠ¡ç±»ä½¿ç”¨ï¼Œå¦‚[VisualServer]。"
#: doc/classes/RID.xml:16
msgid ""
@@ -59750,7 +60617,7 @@ msgid ""
"function, if defined."
msgstr ""
"如果 [code]true[/code],则该物体的内力积分将被ç¦ç”¨ï¼ˆå¦‚é‡åŠ›æˆ–ç©ºæ°”æ‘©æ“¦ï¼‰ã€‚é™¤äº†"
-"碰撞å“åº”ä¹‹å¤–ï¼Œèº«ä½“å°†ä»…æ ¹æ® [method _integrate_forces] 函数确定的方å¼ç§»åŠ¨ï¼ˆå¦‚"
+"碰撞å“åº”ä¹‹å¤–ï¼Œç‰©ä½“å°†ä»…æ ¹æ® [method _integrate_forces] 函数确定的方å¼ç§»åŠ¨ï¼ˆå¦‚"
"果已定义)。"
#: doc/classes/RigidBody.xml:158
@@ -59794,9 +60661,9 @@ msgid ""
"different granularity. Use [method _integrate_forces] as your process loop "
"for precise control of the body state."
msgstr ""
-"物体的线速度。å¯ä»¥å¶å°”使用,但是[b]ä¸è¦æ¯ä¸€å¸§éƒ½è®¾ç½®å®ƒ[/b],因为物ç†å­¦å¯èƒ½åœ¨å¦"
-"一个线程中è¿è¡Œï¼Œå¹¶ä¸”以ä¸åŒé—´éš”çš„è¿è¡Œã€‚使用[method _integrate_forces]作为你的"
-"进程循环,以精确控制身体状æ€ã€‚"
+"物体的线速度。å¯ä»¥å¶å°”使用,但是[b]ä¸è¦æ¯ä¸€å¸§éƒ½è®¾ç½®å®ƒ[/b],因为物ç†å¯èƒ½åœ¨å¦ä¸€"
+"个线程中è¿è¡Œï¼Œå¹¶ä¸”以ä¸åŒçš„间隔。使用[method _integrate_forces]作为你的进程循"
+"环,以精确控制物体状æ€ã€‚"
#: doc/classes/RigidBody.xml:172 doc/classes/RigidBody2D.xml:149
msgid "The body's mass."
@@ -59835,7 +60702,6 @@ msgstr ""
"置。"
#: doc/classes/RigidBody.xml:192
-#, fuzzy
msgid ""
"Emitted when a collision with another [PhysicsBody] or [GridMap] occurs. "
"Requires [member contact_monitor] to be set to [code]true[/code] and [member "
@@ -59844,15 +60710,14 @@ msgid ""
"[code]body[/code] the [Node], if it exists in the tree, of the other "
"[PhysicsBody] or [GridMap]."
msgstr ""
-"当一个物体与这个物体接触时å‘出。需è¦å°† [member contact_monitor] 设置为 "
-"[code]true[/code] 并将 [member contacts_reported] 设置为足够高以检测所有碰"
-"撞。\n"
-"此信å·ä¸ä»…接收与此碰撞的物体,还接收其 [RID] ([code]body_id[/code])ã€ç¢°æ’žç‰©ä½“"
-"的形状索引 ([code]body_shape[/code]) 和形状索引从这个身体 "
-"([code]local_shape[/code]) å¦ä¸€ä¸ªèº«ä½“碰撞。"
+"当与å¦ä¸€ä¸ª[PhysicsBody]或[GridMap]å‘生碰撞时触å‘。需è¦å°†[member "
+"contact_monitor]设置为[code]true[/code],并且将[member contacts_reported]设置"
+"得足够高以检测所有的碰撞。如果[MeshLibrary]有碰撞[Shape],[GridMap]就会被检测"
+"到。\n"
+"[code]body[/code]的[Node],如果它存在于树中,则是其他[PhysicsBody]或[GridMap]"
+"的节点。"
#: doc/classes/RigidBody.xml:199
-#, fuzzy
msgid ""
"Emitted when the collision with another [PhysicsBody] or [GridMap] ends. "
"Requires [member contact_monitor] to be set to [code]true[/code] and [member "
@@ -59861,15 +60726,14 @@ msgid ""
"[code]body[/code] the [Node], if it exists in the tree, of the other "
"[PhysicsBody] or [GridMap]."
msgstr ""
-"当一个物体与这个物体接触时å‘出。需è¦å°† [member contact_monitor] 设置为 "
-"[code]true[/code] 并将 [member contacts_reported] 设置为足够高以检测所有碰"
-"撞。\n"
-"此信å·ä¸ä»…接收与此碰撞的物体,还接收其 [RID] ([code]body_id[/code])ã€ç¢°æ’žç‰©ä½“"
-"的形状索引 ([code]body_shape[/code]) 和形状索引从这个身体 "
-"([code]local_shape[/code]) å¦ä¸€ä¸ªèº«ä½“碰撞。"
+"当与å¦ä¸€ä¸ª[PhysicsBody]或[GridMap]çš„ç¢°æ’žç»“æŸæ—¶è§¦å‘。需è¦å°†[member "
+"contact_monitor]设置为[code]true[/code],并且将[member contacts_reported]设置"
+"得足够高以检测到所有的碰撞。如果[MeshLibrary]有碰撞[Shape],[GridMap]就会被检"
+"测到。\n"
+"[code]body[/code]的[Node],如果它存在于树中,则是其他[PhysicsBody]或[GridMap]"
+"的节点。"
#: doc/classes/RigidBody.xml:209
-#, fuzzy
msgid ""
"Emitted when one of this RigidBody's [Shape]s collides with another "
"[PhysicsBody] or [GridMap]'s [Shape]s. Requires [member contact_monitor] to "
@@ -59892,18 +60756,23 @@ msgid ""
"[ConcavePolygonShape] with Bullet physics if you need shape indices."
msgstr ""
"当[PhysicsBody]或[GridMap]的一个形状[Shape]进入这个区域的一个形状[Shape]æ—¶å‘"
-"出的。需è¦å°†ç›‘控[member monitoring]设置为[code]true[/code]。如果[MeshLibrary]"
-"有碰撞形状[Shape],就会检测到[GridMap]。\n"
-"[code]body_id[/code]傿•°æ˜¯[PhysicsServer]使用的[PhysicsBody]或[MeshLibrary]çš„"
-"[CollisionObject]的RID。\n"
-"[code]body[/code] 傿•°æ˜¯[PhysicsBody]或[GridMap]çš„[Node],如果它存在于树"
-"中。\n"
-"[code]body_shape[/code] 傿•°æ˜¯ç”±[PhysicsServer]使用的[PhysicsBody]或[GridMap]"
-"的[Shape]的索引。\n"
-"[code]local_shape[/code] 傿•°æ˜¯[PhysicsServer]使用的这个区域的[Shape]的索引。"
+"出的。需è¦å°†ç›‘控[member monitoring]设置为[code]true[/code],且[member "
+"contacts_reported]设置的足够高以检测所有碰撞。如果[MeshLibrary]有碰撞形状"
+"[Shape],就会检测到[GridMap]。\n"
+"[code]body_id[/code]由[PhysicsServer]使用的其他[PhysicsBody]或[MeshLibrary]的"
+"[CollisionObject]的[RID]。\n"
+"[code]body[/code] 其他[PhysicsBody]或[GridMap]的[Node](如果它存在于树中)。\n"
+"[code]body_shape_index[/code] 由[PhysicsServer]使用的其他[PhysicsBody]或"
+"[GridMap]的[Shape]的索引。用 [code]body."
+"shape_owner_get_owner(body_shape_index)[/code]èŽ·å– [CollisionShape] 节点。\n"
+"[code]local_shape[/code] 由[PhysicsServer]使用的这个刚体(RigidBody)的[Shape]"
+"的索引。用[code]self.shape_owner_get_owner(local_shape_index)[/code]获å–"
+"[CollisionShape]节点。\n"
+"[b]注æ„:[/b]当使用[ConcavePolygonShape]时,对于å­å¼¹çš„物ç†è¿ç®—无法识别形状索"
+"引。如果你需è¦å½¢çŠ¶æŒ‡æ•°ï¼Œåœ¨ä½¿ç”¨[ConcavePolygonShape]和对于å­å¼¹çš„物ç†è¿ç®—时,ä¸"
+"è¦ä½¿ç”¨å¤šä¸ª[CollisionShape]。"
#: doc/classes/RigidBody.xml:223
-#, fuzzy
msgid ""
"Emitted when the collision between one of this RigidBody's [Shape]s and "
"another [PhysicsBody] or [GridMap]'s [Shape]s ends. Requires [member "
@@ -59926,16 +60795,25 @@ msgid ""
"[ConcavePolygonShape]. Don't use multiple [CollisionShape]s when using a "
"[ConcavePolygonShape] with Bullet physics if you need shape indices."
msgstr ""
-"当[PhysicsBody]或[GridMap]的一个形状[Shape]进入这个区域的一个形状[Shape]æ—¶å‘"
-"出的。需è¦å°†ç›‘控[member monitoring]设置为[code]true[/code]。如果[MeshLibrary]"
-"有碰撞形状[Shape],就会检测到[GridMap]。\n"
-"[code]body_id[/code]傿•°æ˜¯[PhysicsServer]使用的[PhysicsBody]或[MeshLibrary]çš„"
-"[CollisionObject]的RID。\n"
-"[code]body[/code] 傿•°æ˜¯[PhysicsBody]或[GridMap]çš„[Node],如果它存在于树"
+"当此 RigidBody çš„ [Shape] 之一与å¦ä¸€ä¸ª [PhysicsBody] 或 [GridMap] çš„ [Shape] "
+"ä¹‹é—´çš„ç¢°æ’žç»“æŸæ—¶å‘出。需è¦å°† [member contact_monitor] 设置为 [code]true[/"
+"code] 并将 [member contacts_reported] 设置为足够高以检测所有碰撞。如果 "
+"[MeshLibrary] 有碰撞 [Shape],就会检测到 [GridMap]。\n"
+"[code]body_rid[/code] [PhysicsServer] 使用的其他 [PhysicsBody] 或 "
+"[MeshLibrary] 的 [CollisionObject] 的 [RID]。如果网格具有 [Shape],则检测到 "
+"[GridMap]。\n"
+"[code]body[/code] 其他 [PhysicsBody] 或 [GridMap] 的 [Node],如果它存在于树"
"中。\n"
-"[code]body_shape[/code] 傿•°æ˜¯ç”±[PhysicsServer]使用的[PhysicsBody]或[GridMap]"
-"的[Shape]的索引。\n"
-"[code]local_shape[/code] 傿•°æ˜¯[PhysicsServer]使用的这个区域的[Shape]的索引。"
+"[code]body_shape_index[/code] [PhysicsServer] 使用的其他 [PhysicsBody] 或 "
+"[GridMap] 的 [Shape] 的索引。使用 [code]body."
+"shape_owner_get_owner(body_shape_index)[/code] æ¥èŽ·å– [CollisionShape] 节"
+"点。\n"
+"[code]local_shape_index[/code] [PhysicsServer] 使用的这个 RigidBody 的 "
+"[Shape] 的索引。使用 [code]self.shape_owner_get_owner(local_shape_index)[/"
+"code] èŽ·å– [CollisionShape] 节点。\n"
+"[b]注æ„:[/b]使用[ConcavePolygonShape]时,对于å­å¼¹çš„物ç†è¿ç®—无法识别形状索"
+"引。如果需è¦å½¢çŠ¶ç´¢å¼•ï¼Œè¯·ä¸è¦åœ¨ä½¿ç”¨å¸¦æœ‰å¯¹äºŽå­å¼¹çš„物ç†è¿ç®—çš„ "
+"[ConcavePolygonShape] 时使用多个 [CollisionShape]。"
#: doc/classes/RigidBody.xml:233 doc/classes/RigidBody2D.xml:208
msgid ""
@@ -59980,7 +60858,6 @@ msgid "A body that is controlled by the 2D physics engine."
msgstr "ç”±2D物ç†å¼•擎控制的实体。"
#: doc/classes/RigidBody2D.xml:7
-#, fuzzy
msgid ""
"This node implements simulated 2D physics. You do not control a RigidBody2D "
"directly. Instead, you apply forces to it (gravity, impulses, etc.) and the "
@@ -60002,17 +60879,18 @@ msgid ""
"The center of mass is always located at the node's origin without taking "
"into account the [CollisionShape2D] centroid offsets."
msgstr ""
-"这个节点实现了模拟的2D物ç†è¿ç®—。你ä¸èƒ½ç›´æŽ¥æŽ§åˆ¶ä¸€ä¸ªRigidBody2D。相å,你对它施"
-"加力(é‡åŠ›ã€å†²åŠ›ç­‰ï¼‰ï¼Œç‰©ç†æ¨¡æ‹Ÿä¼šæ ¹æ®å®ƒçš„è´¨é‡ã€æ‘©æ“¦åŠ›å’Œå…¶ä»–ç‰©ç†å±žæ€§æ¥è®¡ç®—出结"
-"果的è¿åŠ¨ã€‚\n"
-"一个RigidBody2D有4ç§è¡Œä¸º[member mode]。刚性ã€é™æ€ã€è§’色和è¿åŠ¨ã€‚\n"
-"[b]注æ„:[/b]ä½ ä¸åº”该æ¯ä¸€å¸§ç”šè‡³ç»å¸¸æ”¹å˜RigidBody2Dçš„[code]ä½ç½®[/code]或[code]"
-"线性速度[/code]。如果你需è¦ç›´æŽ¥å½±å“身体的状æ€ï¼Œè¯·ä½¿ç”¨[method "
-"_integrate_forces],它å…许你直接访问物ç†å­¦çжæ€ã€‚\n"
-"也请记ä½ï¼Œç‰©ç†ä½“管ç†è‡ªå·±çš„å˜æ¢ï¼Œå®ƒè¦†ç›–äº†ä½ è®¾ç½®çš„å˜æ¢ã€‚所以任何直接或间接的å˜"
-"æ¢ï¼ˆåŒ…括节点或其父体的缩放)将åªåœ¨ç¼–辑器中å¯è§ï¼Œå¹¶åœ¨è¿è¡Œæ—¶ç«‹å³é‡ç½®ã€‚\n"
-"如果你需è¦è¦†ç›–默认的物ç†è¡Œä¸ºæˆ–者在è¿è¡Œæ—¶æ·»åŠ ä¸€ä¸ªå˜æ¢ï¼Œä½ å¯ä»¥å†™ä¸€ä¸ªè‡ªå®šä¹‰çš„åˆ"
-"力。å‚阅[member custom_integrator]。"
+"该节点实现了模拟的2D物ç†ã€‚ä½ ä¸èƒ½ç›´æŽ¥æŽ§åˆ¶ä¸€ä¸ªRigidBody2D。而是,你对它施加力"
+"(é‡åŠ›ã€å†²åŠ›ç­‰ï¼‰ï¼Œç‰©ç†æ¨¡æ‹Ÿä¼šæ ¹æ®å®ƒçš„è´¨é‡ã€æ‘©æ“¦åŠ›å’Œå…¶ä»–ç‰©ç†å±žæ€§æ¥è®¡ç®—出è¿åŠ¨ç»“"
+"果。\n"
+"RigidBody2D有4ç§è¡Œä¸º[member mode]。刚性ã€é™æ€ã€è§’色和è¿åŠ¨ã€‚\n"
+"[b]注æ„:[/b] ä½ ä¸åº”该æ¯ä¸€å¸§æˆ–ç»å¸¸æ”¹å˜RigidBody2Dçš„[code]position[/code]或"
+"[code]linear_velocity[/code]。如果需è¦ç›´æŽ¥å½±å“物体的状æ€ï¼Œè¯·ä½¿ç”¨[method "
+"_integrate_forces],它å…许你直接访问物ç†çжæ€ã€‚\n"
+"è¦è®°ä½ï¼Œç‰©ç†ç‰©ä½“在自己管ç†å˜æ¢ï¼Œå®ƒä¼šè¦†ç›–ä½ çš„å˜æ¢è®¾ç½®ã€‚所以任何直接或间接的å˜"
+"æ¢ï¼ˆåŒ…括节点或其父级的缩放)将åªåœ¨ç¼–辑器中å¯è§ï¼Œå¹¶åœ¨è¿è¡Œæ—¶ç«‹å³é‡ç½®ã€‚\n"
+"如果你需è¦é‡è½½é»˜è®¤çš„物ç†è¡Œä¸ºæˆ–者在è¿è¡Œæ—¶æ·»åŠ å˜æ¢ï¼Œä½ å¯ä»¥å†™ä¸€ä¸ªè‡ªå®šä¹‰çš„åˆåŠ›ã€‚"
+"å‚阅[member custom_integrator]。\n"
+"è´¨é‡ä¸­å¿ƒæ€»æ˜¯ä½äºŽèŠ‚ç‚¹çš„åŽŸç‚¹ï¼Œè€Œä¸è€ƒè™‘[CollisionShape2D]中心点的å移。"
#: doc/classes/RigidBody2D.xml:15
msgid "https://godotengine.org/asset-library/asset/119"
@@ -60058,7 +60936,6 @@ msgstr ""
"行为很有用。"
#: doc/classes/RigidBody2D.xml:91
-#, fuzzy
msgid ""
"Returns [code]true[/code] if a collision would result from moving in the "
"given vector. [code]margin[/code] increases the size of the shapes involved "
@@ -60072,7 +60949,6 @@ msgstr ""
"è¯ï¼‰ã€‚"
#: doc/classes/RigidBody2D.xml:97
-#, fuzzy
msgid ""
"Damps the body's [member angular_velocity]. If [code]-1[/code], the body "
"will use the [b]Default Angular Damp[/b] defined in [b]Project > Project "
@@ -60080,9 +60956,11 @@ msgid ""
"See [member ProjectSettings.physics/2d/default_angular_damp] for more "
"details about damping."
msgstr ""
-"对物体的 [member angular_velocity]进行阻尼è¿ç®—。如果 [code]-1[/code],主体将"
+"对物体的 [member angular_velocity]进行阻尼è¿ç®—。如果 [code]-1[/code],物体将"
"使用 [b]Project(项目) > Project Settings(项目设置) > Physics(物ç†)> 2d[/b] 中"
-"定义的 [b]Default Angular Damp(默认角度阻尼)[/b]。"
+"定义的 [b]Default Angular Damp(默认角度阻尼)[/b]。\n"
+"有关阻尼的更多详细信æ¯ï¼Œè¯·å‚阅 [member ProjectSettings.physics/2d/"
+"default_angular_damp]。"
#: doc/classes/RigidBody2D.xml:104
msgid "The body's total applied force."
@@ -60100,6 +60978,11 @@ msgid ""
"[member mode] is [constant MODE_CHARACTER]. It can still be put to sleep "
"manually by setting its [member sleeping] property to [code]true[/code]."
msgstr ""
+"如果[code]true[/code],身体å¯ä»¥åœ¨æ²¡æœ‰è¿åŠ¨çš„æƒ…å†µä¸‹è¿›å…¥ç¡çœ æ¨¡å¼ã€‚è§[member "
+"sleeping]。\n"
+"[b]注æ„:[/b] RigidBody2D çš„[member mode] 为[constant MODE_CHARACTER] æ—¶ä¸ä¼š"
+"自动进入休眠模å¼ã€‚ä»ç„¶å¯ä»¥é€šè¿‡å°†å…¶ [member sleep] 属性设置为 [code]true[/"
+"code] æ¥æ‰‹åŠ¨ä½¿å…¶ä¼‘çœ ã€‚"
#: doc/classes/RigidBody2D.xml:118
msgid ""
@@ -60110,7 +60993,6 @@ msgstr ""
"[member contacts_reported]。"
#: doc/classes/RigidBody2D.xml:121
-#, fuzzy
msgid ""
"The maximum number of contacts that will be recorded. Requires [member "
"contact_monitor] to be set to [code]true[/code].\n"
@@ -60120,8 +61002,8 @@ msgid ""
msgstr ""
"将被记录的最大接触次数。需è¦å°† [member contact_monitor] 设置为 [code]true[/"
"code]。\n"
-"[b]注:[/b]接触次数与碰撞次数ä¸åŒã€‚平行边之间的碰撞将导致两个接触(æ¯ç«¯ä¸€"
-"个),平行é¢ä¹‹é—´çš„碰撞将导致四个接触(æ¯ä¸ªè§’一个)。"
+"[b]注:[/b]接触次数与碰撞次数ä¸åŒã€‚平行边之间的碰撞将æ„味ç€ä¸¤ä¸ªæŽ¥è§¦ï¼ˆæ¯ç«¯ä¸€"
+"个),平行é¢ä¹‹é—´çš„碰撞将æ„味ç€å››ä¸ªæŽ¥è§¦ï¼ˆæ¯ä¸ªè§’一个)。"
#: doc/classes/RigidBody2D.xml:125
msgid ""
@@ -60147,14 +61029,15 @@ msgstr ""
"[method _integrate_forces] 函数确定的方å¼ç§»åŠ¨ã€‚"
#: doc/classes/RigidBody2D.xml:132
-#, fuzzy
msgid ""
"The body's friction. Values range from [code]0[/code] (frictionless) to "
"[code]1[/code] (maximum friction).\n"
"Deprecated, use [member PhysicsMaterial.friction] instead via [member "
"physics_material_override]."
msgstr ""
-"物体的摩擦。å–值范围从[code]0[/code](无摩擦)到[code]1[/code](最大摩擦)。"
+"物体的摩擦。å–值范围从[code]0[/code](无摩擦)到[code]1[/code](最大摩擦)。\n"
+"已弃用,通过 [member Physics_material_override] 使用 [member PhysicsMaterial."
+"friction]。"
#: doc/classes/RigidBody2D.xml:136
msgid ""
@@ -60174,12 +61057,11 @@ msgid ""
"this function allows you to set a custom value. Set 0 inertia to return to "
"automatically computing it."
msgstr ""
-"物体的惯性矩。这就åƒè´¨é‡ï¼Œä½†å¯¹äºŽæ—‹è½¬æ¥è¯´ï¼šå®ƒå†³å®šäº†æ—‹è½¬èº«ä½“需è¦å¤šå¤§çš„力矩。惯"
-"性矩通常是由质é‡å’Œå½¢çŠ¶è‡ªåŠ¨è®¡ç®—å‡ºæ¥çš„,但是这个函数å…许你设置一个自定义值。设"
-"ç½®0惯性会切æ¢å›žè‡ªåŠ¨è®¡ç®—ã€‚"
+"物体的惯性力矩。这就åƒè´¨é‡ï¼Œä½†å¯¹äºŽæ—‹è½¬æ¥è¯´ï¼šå®ƒå†³å®šäº†æ—‹è½¬ç‰©ä½“需è¦å¤šå¤§çš„力矩。"
+"惯性力矩通常是由质é‡å’Œå½¢çŠ¶è‡ªåŠ¨è®¡ç®—å‡ºæ¥çš„,但是这个函数å…许你设置一个自定义"
+"值。设置0惯性会切æ¢å›žè‡ªåŠ¨è®¡ç®—ã€‚"
#: doc/classes/RigidBody2D.xml:142
-#, fuzzy
msgid ""
"Damps the body's [member linear_velocity]. If [code]-1[/code], the body will "
"use the [b]Default Linear Damp[/b] in [b]Project > Project Settings > "
@@ -60189,7 +61071,9 @@ msgid ""
msgstr ""
"对物体的[member linear_velocity]进行阻尼è¿ç®—。如果[code]-1[/code],物体将使用"
"[b]Project(项目) > Project Settings(项目设置) > Physics(物ç†)> 2d[/b]中的"
-"[b]Default Linear Damp(默认线性阻尼)[/b]。"
+"[b]Default Linear Damp(默认线性阻尼)[/b]。\n"
+"有关阻尼的更多详细信æ¯ï¼Œè¯·å‚阅 [member ProjectSettings.physics/2d/"
+"default_linear_damp]。"
#: doc/classes/RigidBody2D.xml:152
msgid "The body's mode. See [enum Mode] for possible values."
@@ -60204,7 +61088,6 @@ msgstr ""
"Physics(物ç†)> 2d[/b] 中的 [b] Default Gravity(默认é‡åŠ›) [/b] 值。"
#: doc/classes/RigidBody2D.xml:169
-#, fuzzy
msgid ""
"Emitted when a collision with another [PhysicsBody2D] or [TileMap] occurs. "
"Requires [member contact_monitor] to be set to [code]true[/code] and [member "
@@ -60213,15 +61096,13 @@ msgid ""
"[code]body[/code] the [Node], if it exists in the tree, of the other "
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-"当一个物体与这个物体接触时å‘出。需è¦å°† [member contact_monitor] 设置为 "
-"[code]true[/code] 并将 [member contacts_reported] 设置为足够高以检测所有碰"
-"撞。\n"
-"此信å·ä¸ä»…接收与此碰撞的物体,还接收其 [RID] ([code]body_id[/code])ã€ç¢°æ’žç‰©ä½“"
-"的形状索引 ([code]body_shape[/code]) 和形状索引从这个身体 "
-"([code]local_shape[/code]) å¦ä¸€ä¸ªèº«ä½“碰撞。"
+"当与å¦ä¸€ä¸ª[PhysicsBody2D]或[TileMap]å‘生碰撞时触å‘。需è¦å°†[member "
+"contact_monitor]设置为[code]true[/code],并且将[member contacts_reported]设置"
+"得足够高以检测所有的碰撞。如果[TileSet]有碰撞[Shape2D],就会检测到[TileMap]"
+"的。\n"
+"[code]body[/code]是其他[PhysicsBody2D]或[TileMap]的[Node],如果它存在于树中。"
#: doc/classes/RigidBody2D.xml:176
-#, fuzzy
msgid ""
"Emitted when the collision with another [PhysicsBody2D] or [TileMap] ends. "
"Requires [member contact_monitor] to be set to [code]true[/code] and [member "
@@ -60230,15 +61111,13 @@ msgid ""
"[code]body[/code] the [Node], if it exists in the tree, of the other "
"[PhysicsBody2D] or [TileMap]."
msgstr ""
-"当一个物体与这个物体接触时å‘出。需è¦å°† [member contact_monitor] 设置为 "
-"[code]true[/code] 并将 [member contacts_reported] 设置为足够高以检测所有碰"
-"撞。\n"
-"此信å·ä¸ä»…接收与此碰撞的物体,还接收其 [RID] ([code]body_id[/code])ã€ç¢°æ’žç‰©ä½“"
-"的形状索引 ([code]body_shape[/code]) 和形状索引从这个身体 "
-"([code]local_shape[/code]) å¦ä¸€ä¸ªèº«ä½“碰撞。"
+"当与å¦ä¸€ä¸ª[PhysicsBody2D]或[TileMap]çš„ç¢°æ’žç»“æŸæ—¶å‘出的。需è¦å°† [member "
+"contact_monitor] 设置为 [code]true[/code] 并将 [member contacts_reported] 设"
+"置为足够高以检测所有碰撞。如果[TileSet]有碰撞[Shape2D],就会检测到"
+"[TileMap]。\n"
+"[code]body[/code] 其他[PhysicsBody2D]或[TileMap]的[Node](如果它存在于树中)。"
#: doc/classes/RigidBody2D.xml:186
-#, fuzzy
msgid ""
"Emitted when one of this RigidBody2D's [Shape2D]s collides with another "
"[PhysicsBody2D] or [TileMap]'s [Shape2D]s. Requires [member contact_monitor] "
@@ -60257,20 +61136,22 @@ msgid ""
"RigidBody2D used by the [Physics2DServer]. Get the [CollisionShape2D] node "
"with [code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-"当[PhysicsBody2D]或[TileMap]的一个[Shape2D]离开这个Area2D的一个[Shape2D]æ—¶å‘"
-"出的。需è¦å°†ç›‘控[member monitoring]设置为[code]true[/code]。如果[TileSet]有碰"
-"撞形状[Shape2D]s,就会检测到[TileMap]s。\n"
-"[code]body_id[/code] 傿•°æ˜¯[Physics2DServer]使用的[PhysicsBody2D]或[TileSet]"
-"的[CollisionObject2D]的RID。\n"
-"[code]body[/code]傿•°æ˜¯[PhysicsBody2D]或[TileMap]çš„[Node],如果它存在于树中的"
-"è¯ã€‚\n"
-"[code]body_shape[/code] 傿•°æ˜¯[Physics2DServer]使用的[PhysicsBody2D]或"
-"[TileMap]的[Shape2D]的索引。\n"
-"[code]local_shape[/code] 傿•°æ˜¯[Physics2DServer]使用的这个Area2Dçš„[Shape2D]çš„"
-"索引。"
+"当这个RigidBody2Dçš„[Shape2D]与å¦ä¸€ä¸ª[PhysicsBody2D]或[TileMap]çš„[Shape2D]碰撞"
+"æ—¶å‘å‡ºã€‚è¦æ±‚ [member contact_monitor] 设置为 [code]true[/code] 并且 [member "
+"contacts_reported] 设置得足够高,以检测所有碰撞。如果 [TileMap] 具有碰撞 "
+"[Shape2D],就会检测到 [TileSet]。\n"
+"[code]body_rid[/code] 由 [Physics2DServer] 使用的其他 [PhysicsBody2D] 或 "
+"[TileSet] 的 [CollisionObject2D] 的 [RID]。\n"
+"[code]body[/code]其他[PhysicsBody2D]或[TileMap]的[Node](如果它存在于树上)。\n"
+"[code]body_shape_index [/code] 其他 [PhysicsBody2D] 或 [TileMap] 使用 "
+"[Physics2DServer] 的 [Shape2D] 索引。获得带有 [code]body."
+"shape_owner_get_owner (body_shape_index)[/code] 的 [CollisionShape2D] 节"
+"点。\n"
+"[code]local_shape_index [/code] [Physics2DServer] 使用的此 RigidBody2D 的 "
+"[Shape2D] 索引。获得带有 [code]self.shape_owner_get_owner "
+"(local_shape_index)[/code] 的 [CollisionShape2D] 节点。"
#: doc/classes/RigidBody2D.xml:199
-#, fuzzy
msgid ""
"Emitted when the collision between one of this RigidBody2D's [Shape2D]s and "
"another [PhysicsBody2D] or [TileMap]'s [Shape2D]s ends. Requires [member "
@@ -60289,17 +61170,20 @@ msgid ""
"RigidBody2D used by the [Physics2DServer]. Get the [CollisionShape2D] node "
"with [code]self.shape_owner_get_owner(local_shape_index)[/code]."
msgstr ""
-"当[PhysicsBody2D]或[TileMap]çš„[Shape2D]之一进入此Area2Dçš„[Shape2D]之一时å‘"
-"出。需è¦å°†ç›‘控[member monitoring]设置为[code]true[/code]。如果[TileSet]有碰撞"
-"形状[Shape2D]s,就会检测到[TileMap]s。\n"
-"[code]body_id[/code]傿•°æ˜¯ [Physics2DServer]使用的[PhysicsBody2D]或[TileSet]"
-"的[CollisionObject2D]的RID。\n"
-"[code]body[/code]傿•°æ˜¯ [PhysicsBody2D]或[TileMap]çš„[节点],如果它在树上存在"
-"çš„è¯ã€‚\n"
-"[code]body_shape[/code] 傿•°æ˜¯[Physics2DServer]使用的[PhysicsBody2D]或"
-"[TileMap]的[Shape2D]的索引。\n"
-"[code]local_shape[/code] 傿•°æ˜¯[Physics2DServer]使用的这个Area2Dçš„[Shape2D]çš„"
-"索引。"
+"当这个RigidBody2D的一个[Shape2D]å’Œå¦ä¸€ä¸ª[PhysicsBody2D]或[TileMap]çš„[Shape2D]"
+"ä¹‹é—´çš„ç¢°æ’žç»“æŸæ—¶è§¦å‘ã€‚è¦æ±‚[member contact_monitor]设置为[code]true[/code],"
+"[member contacts_reported]设置得足够高以检测所有的碰撞。如果[TileSet]有碰撞"
+"[Shape2D],就会检测到[TileMap]的。\n"
+"[code]body_rid[/code] [Physics2DServer]使用的其他[PhysicsBody2D]或[TileSet]的"
+"[CollisionObject2D]的 [RID]。\n"
+"[code]body[/code] å¦ä¸€ä¸ª[PhysicsBody2D]或[TileMap]çš„[Node],如果它存在于树"
+"中。\n"
+"[code]body_shape_index[/code] 由[Physics2DServer]使用的其他[PhysicsBody2D]或"
+"[TileMap]的[Shape2D]的索引。用[code]body."
+"shape_owner_get_owner(body_shape_index)[/code]获得[CollisionShape2D]节点。\n"
+"[code]local_shape_index[/code]这个RigidBody2D的[Shape2D]的索引,由"
+"[Physics2DServer]使用。用[code]self.shape_owner_get_owner(local_shape_index)"
+"[/code]获å–[CollisionShape2D]节点。"
#: doc/classes/RigidBody2D.xml:215
msgid ""
@@ -60331,7 +61215,7 @@ msgid ""
"Continuous collision detection disabled. This is the fastest way to detect "
"body collisions, but can miss small, fast-moving objects."
msgstr ""
-"ç¦ç”¨è¿žç»­ç¢°æ’žæ£€æµ‹ã€‚这是检测身体碰撞的最快方法,但å¯èƒ½ä¼šé”™è¿‡å°åž‹ã€å¿«é€Ÿç§»åŠ¨çš„ç‰©"
+"ç¦ç”¨è¿žç»­ç¢°æ’žæ£€æµ‹ã€‚这是检测物体碰撞的最快方法,但å¯èƒ½ä¼šé”™è¿‡å°åž‹ã€å¿«é€Ÿç§»åŠ¨çš„ç‰©"
"体。"
#: doc/classes/RigidBody2D.xml:230
@@ -60349,7 +61233,7 @@ msgstr ""
#: doc/classes/Room.xml:4
msgid "Room node, used to group objects together locally for [Portal] culling."
-msgstr ""
+msgstr "Room 节点,用于在本地将对象组åˆåœ¨ä¸€èµ·ä»¥è¿›è¡Œ [Portal] 剔除。"
#: doc/classes/Room.xml:7
msgid ""
@@ -60373,6 +61257,19 @@ msgid ""
"placed over non-occluded openings between rooms. These will often be placed "
"over doors and windows."
msgstr ""
+"[Portal] 剔除系统需è¦ä½¿ç”¨åœ¨ç§°ä¸º [Room] 的区域中按ä½ç½®åˆ†ç»„åœ¨ä¸€èµ·çš„å¯¹è±¡æ¥æž„建关"
+"å¡ã€‚在许多情况下,这些将对应于建筑物中的实际空间,但ä¸ä¸€å®šï¼ˆå³¡è°·åŒºåŸŸå¯èƒ½è¢«è§†"
+"为空间)。\n"
+"如果[VisualInstance] çš„[code]portal_mode[/code] 设置为[code]STATIC[/code](ä¸"
+"移动) 或 [code]DYNAMIC[/code](仅在空间内移动),那么任何作为[Room]çš„å­ä»£æˆ–å­™"
+"代的[VisualInstance]将被分é…到该空间。\n"
+"在内部,空间边界必须形æˆä¸€ä¸ª [b] 凸多边形 [/b],默认情况下,这由您放置在空间"
+"内的对象的几何形状自动确定。\n"
+"您也å¯ä»¥ç²¾ç¡®æŒ‡å®š [b] 手动绑定 [/b]。如果放置一个å称以[code]Bound_[/code]为å‰"
+"缀的[MeshInstance],它将关闭几何体的边界生æˆï¼Œè€Œæ˜¯åœ¨è½¬æ¢é˜¶æ®µä½¿ç”¨è¿™ä¸ª"
+"MeshInstance的顶点直接计算凸多边形(è§[RoomManager])。\n"
+"为了从一个空间看到相邻的空间,[Portal]必须放置在空间之间的éžé®æŒ¡å¼€å£ä¸Šã€‚这些"
+"通常会放置在门窗上。"
#: doc/classes/Room.xml:27
msgid ""
@@ -60385,6 +61282,11 @@ msgid ""
"room hull, and save the resulting points, allowing you to edit them to "
"further refine the bound."
msgstr ""
+"如果设置了 [code]points[/code],则会从这些点构建 [Room] 边界凸多边形。如果未"
+"设置点,则空间边界将æ¥è‡ªæ‰‹åŠ¨è¾¹ç•Œï¼ˆ[MeshInstance] åç§°å‰ç¼€ä¸º [code]Bound_[/"
+"code]),或æ¥è‡ªç©ºé—´å†…的几何体。\n"
+"请注æ„,您å¯ä»¥ä½¿ç”¨ [code]Generate Points[/code] 编辑器按钮开始。这将使用几何"
+"体或手动绑定æ¥ç”Ÿæˆç©ºé—´å¤–壳,并ä¿å­˜ç»“果点,å…许您编辑它们以进一步细化边界。"
#: doc/classes/Room.xml:31
msgid ""
@@ -60392,16 +61294,20 @@ msgid ""
"(bounds) are simplified, by removing similar planes. A value of 0 gives no "
"simplification, 1 gives maximum simplification."
msgstr ""
+"[code]simplify[/code] å€¼é€šè¿‡ç§»é™¤ç›¸ä¼¼çš„å¹³é¢æ¥ç¡®å®šç©ºé—´å¤–壳(边界)的简化程度。"
+"值 0 表示ä¸ç®€åŒ–,1 表示最大程度的简化。"
#: doc/classes/Room.xml:34
msgid ""
"The room hull simplification can either use the default value set in the "
"[RoomManager], or override this and use the per room setting."
msgstr ""
+"空间外壳简化å¯ä»¥ä½¿ç”¨ [RoomManager] 中设置的默认值,也å¯ä»¥è¦†ç›–它并使用æ¯ä¸ªç©ºé—´"
+"的设置。"
#: doc/classes/RoomGroup.xml:4
msgid "Groups [Room]s together to allow common functionality."
-msgstr ""
+msgstr "å°† [Room] 组åˆåœ¨ä¸€èµ·ä»¥å®žçŽ°é€šç”¨åŠŸèƒ½ã€‚"
#: doc/classes/RoomGroup.xml:7
msgid ""
@@ -60418,6 +61324,14 @@ msgid ""
"[code]notification[/code]s as they enter and exit the [b]gameplay area[/b] "
"(see [RoomManager] for details)."
msgstr ""
+"尽管å¯ä»¥å•独指定 [Room] 行为,但有时为一组空间编写功能会更快更方便。\n"
+"[RoomGroup] 应作为 [b] 空间列表 [/b](您的 [Room] 的父 [Node])的å­é¡¹è€Œè®¾ç½®ï¼Œ"
+"而 [Room] 应作为 [RoomGroup] çš„å­é¡¹ä¾æ¬¡è®¾ç½®ä»¥ä¾¿å°†å®ƒä»¬åˆ†é…ç»™ RoomGroup。\n"
+"例如,[RoomGroup] å¯ç”¨äºŽæŒ‡å®š [b]outside[/b] çš„ [Room],并在玩家进入/退出该区"
+"域时打开或关闭定å‘å…‰ã€å¤©ç©ºæˆ–雨效果。\n"
+"当 [code]gameplay_monitor[/code] 开坿—¶ï¼Œ[RoomGroup] 收到 [b]游æˆå›žè°ƒ[/b],在"
+"他们进入和退出时[b]游æˆåŒº[/b]时,作为 [code] ä¿¡å· [/code] 或 [code] 通知 [/"
+"code] (详è§[RoomManager])。"
#: doc/classes/RoomGroup.xml:18
msgid ""
@@ -60430,10 +61344,15 @@ msgid ""
"when the camera is within the house, the house is used as the source room, "
"but outside the house, the terrain room would be used instead."
msgstr ""
+"此优先级将应用于组内的 [Room]。 [Room] 优先级å…许使用 [b] 内部空间 [/b]ã€ç©º"
+"é—´ [i] 内 [/i] å¦ä¸€ä¸ªç©ºé—´æˆ–多个空间。\n"
+"当 [Camera] ä½äºŽå¤šä¸ªç©ºé—´ï¼ˆå¸¸è§„和内部)内时,优先级较高的空间将优先处ç†ã€‚å› "
+"此,例如,在地形“空间â€å†…的房屋,您å¯ä»¥ä½¿æˆ¿å±‹å…·æœ‰æ›´é«˜çš„优先级,以便当相机在房"
+"屋内时,房屋用作æºç©ºé—´ï¼Œä½†åœ¨æˆ¿å±‹å¤–,将改为使用地形空间。"
#: doc/classes/RoomManager.xml:4
msgid "The RoomManager node is used to control the portal culling system."
-msgstr ""
+msgstr "RoomManager 节点用于控制portal剔除系统。"
#: doc/classes/RoomManager.xml:7
msgid ""
@@ -60444,6 +61363,10 @@ msgid ""
"is controlled by the [RoomManager] node, and the [RoomManager] also contains "
"settings that are common throughout the portal system."
msgstr ""
+"为了使用portal鮿Œ¡å‰”除系统,您必须使用 [Room] å’Œ [Portal] æ¥æž„建您的关å¡ã€‚在"
+"这些å¯ä»¥åœ¨è¿è¡Œæ—¶ä½¿ç”¨ä¹‹å‰ï¼Œå®ƒä»¬å¿…é¡»ç»è¿‡ä¸€ä¸ªç®€çŸ­çš„转æ¢è¿‡ç¨‹æ¥æž„建 [code] room "
+"graph [/code],这是portal剔除所需的è¿è¡Œæ—¶æ•°æ®ã€‚ [code]portal graph[/code]ç”±"
+"[RoomManager]节点控制,[RoomManager]è¿˜åŒ…å«æ•´ä¸ªportal系统通用的设置。"
#: doc/classes/RoomManager.xml:15
msgid ""
@@ -60451,6 +61374,8 @@ msgid ""
"before unloading a level, when transitioning from level to level, or "
"returning to a main menu."
msgstr ""
+"该方法会从[b]portal graph[/b]æ¸…é™¤æ‰€æœ‰è½¬æ¢æ•°æ®ã€‚在å¸è½½å…³å¡ã€ä»Žå…³å¡è½¬æ¢åˆ°å…³å¡æˆ–"
+"返回主èœå•时使用此选项。"
#: doc/classes/RoomManager.xml:21
msgid ""
@@ -60511,6 +61436,45 @@ msgid ""
"tree, to avoid confusion. See [CullInstance] for a full description of "
"portal modes."
msgstr ""
+"这是整个portal剔除系统中最é‡è¦çš„功能。没有它,系统就无法è¿è¡Œã€‚\n"
+"首先,它é历作为 [code] room list [/code] 的节点(以åŠå…¶ä¸­çš„ [RoomGroup])å­"
+"节点的æ¯ä¸ª [Room],并将其转æ¢å¹¶æ·»åŠ åˆ° [code] room graph [/code]。\n"
+"这适用于éµå¾ªç‰¹æ®Šå‘½å约定的 [Room] 节点和 [Spatial] 节点。它们应该以å‰ç¼€ "
+"[i]'Room_'[/i] å¼€å¤´ï¼Œç„¶åŽæ˜¯æ‚¨å¸Œæœ›ä¸ºç©ºé—´å‘½åçš„å称,例如[i]'Room_lounge'[/i]。"
+"这将自动为您将此类 [Room] 转æ¢ä¸º [Room] 节点。如果您想构建整个空间系统,这很"
+"有用,例如Blender,并在您处ç†å…³å¡æ—¶å¤šæ¬¡é‡æ–°å¯¼å…¥ã€‚\n"
+"转æ¢å°†å°è¯•将作为 [Room] çš„å­ä»£å’Œå­™ä»£çš„ [VisualInstance] 分é…给空间。这些应该"
+"被赋予åˆé€‚çš„ [code] portal mode [/code](å‚è§ [CullInstance] 文档)。默认的 "
+"[code] portal mode [/code] 是 [code]STATIC[/code] - è¿è¡Œå…³å¡æ—¶ä¸ä¼šç§»åŠ¨çš„å¯¹"
+"象,通常是大多数对象。\n"
+"转æ¢é€šå¸¸ä¼šä½¿ç”¨è¿™äº› [VisualInstance](和 [Portal])的几何形状æ¥è®¡ç®—空间的凸多"
+"边形边界。这些边界将显示在带有线框的编辑器中。或者,您å¯ä»¥ä¸ºä»»ä½•空间指定手动"
+"自定义边界,请å‚阅 [Room] 文档。\n"
+"æ ¹æ®å®šä¹‰ï¼Œç©ºé—´å†…çš„ [Camera] å¯ä»¥çœ‹åˆ°ç©ºé—´å†…的所有其他东西(这是使用凸多边形的"
+"一个优势)。但是,为了从一个空间看到相邻的空间,您必须放置 [Portal],它代表摄"
+"åƒæœºå¯ä»¥çœ‹åˆ°çš„å¼€å£ï¼Œå¦‚窗户和门。\n"
+"[Portal] å®žé™…ä¸Šåªæ˜¯ä¸“门的 [MeshInstance]。实际上,您通常会首先通过创建 "
+"[MeshInstance],尤其是 [code]plane[/code] 网格实例æ¥åˆ›å»ºportal。您å¯ä»¥åœ¨ç¼–辑"
+"器中移动平é¢ä»¥è¦†ç›–窗户或门å£ï¼Œæ­£é¢æœç©ºé—´å¤–。为了让转æ¢è¿‡ç¨‹çŸ¥é“您希望此网格æˆ"
+"为portalï¼Œæˆ‘ä»¬å†æ¬¡ä½¿ç”¨ç‰¹æ®Šçš„命å约定。è¦è½¬æ¢ä¸º [Portal] çš„ [MeshInstance] 应"
+"以å‰ç¼€ [i]'Portal_'[/i] 开头。\n"
+"您现在有一个选择 - 您å¯ä»¥å°†åç§°ä¿ç•™ä¸º [i]'Portal_'[/i],并å…许系统自动检测最"
+"近的 [Room] 进行链接。在大多数情况下,这将正常工作。\n"
+"å¦ä¸€ç§æ–¹æ³•是手动指定è¦é“¾æŽ¥åˆ°çš„ [Room],在portalåç§°åŽé™„加一个åŽç¼€ï¼Œè¯¥åŽç¼€åº”该"
+"是您è¦é“¾æŽ¥åˆ°çš„空间的å称。例如,[i]'Portal_lounge'[/i] å°†å°è¯•链接到å为 "
+"[i]'Room_lounge'[/i] 的空间。\n"
+"这里有一个特殊情况——Godot ä¸å…许两个节点共享相åŒçš„å称。如果您想手动将多个"
+"portal通å‘åŒä¸€ä¸ªç©ºé—´æ€Žä¹ˆåŠžï¼Ÿå½“ç„¶ï¼Œå®ƒä»¬éƒ½éœ€è¦è¢«è°ƒç”¨ï¼Œä¾‹å¦‚[i]'Portal_lounge'[/"
+"i]?\n"
+"解决方案是通é…符。在空间å称之åŽï¼Œå¦‚果您使用字符 [i]'*'[/i],则该字符åŠå…¶åŽçš„"
+"任何内容都将被忽略。因此,您å¯ä»¥ä½¿ç”¨ä¾‹å¦‚ [i]'Portal_lounge*0'[/i]ã€"
+"[i]'Portal_lounge*1'[/i] 等。\n"
+"请注æ„,已ç»è½¬æ¢ä¸º [Portal] èŠ‚ç‚¹ï¼ˆè€Œä¸æ˜¯ [MeshInstance])的 [Portal] ä»ç„¶éœ€è¦"
+"éµå¾ªç›¸åŒçš„命å约定,因为它们在转æ¢è¿‡ç¨‹ä¸­æ¯æ¬¡éƒ½ä¼šé‡æ–°é“¾æŽ¥ã€‚\n"
+"建议您仅将对象放置在希望留在这些空间内的空间中 - å³ [code]portal mode[/code]"
+"是 [code]STATIC[/code] 或 [code]DYNAMIC[/code](ä¸ç©¿è¶Š Portal)。 "
+"[code]GLOBAL[/code] å’Œ [code]ROAMING[/code] 对象最好放置在场景树的å¦ä¸€éƒ¨åˆ†ï¼Œ"
+"以é¿å…混淆。有关portal模å¼çš„完整说明,请å‚阅 [CullInstance]。"
#: doc/classes/RoomManager.xml:39
msgid ""
@@ -60522,6 +61486,12 @@ msgid ""
"Switching to [code]active[/code] will have no effect when the [code]room "
"graph[/code] is unloaded (the rooms have not yet been converted)."
msgstr ""
+"打开和关闭portal剔除系统。\n"
+"éœ€è¦æ³¨æ„的是,当portalå‰”é™¤å¤„äºŽæ´»åŠ¨çŠ¶æ€æ—¶ï¼Œå®ƒè´Ÿè´£ [b]所有[/b] 3d 剔除。æŸäº›ç¼–"
+"辑器功能å¯èƒ½æ›´éš¾ä½¿ç”¨ï¼Œå› æ­¤åˆ‡æ¢æ´»åŠ¨æ ‡å¿—æ—¨åœ¨ç¡®ä¿æ‚¨çš„ [Room] / [Portal] 布局在编"
+"辑器中工作。\n"
+"当[code]room graph[/code]被å¸è½½ï¼ˆç©ºé—´å°šæœªè½¬æ¢ï¼‰æ—¶ï¼Œåˆ‡æ¢åˆ°[code]active[/code]"
+"å°†ä¸èµ·ä½œç”¨ã€‚"
#: doc/classes/RoomManager.xml:44
msgid ""
@@ -60530,6 +61500,9 @@ msgid ""
"room.\n"
"Toggling this setting turns this debug view on and off."
msgstr ""
+"大型物体å¯ä»¥â€œè”“å»¶â€è¶…过一个以上的空间。该设置对于å¯è§†åŒ–那些蔓延在当å‰ç©ºé—´å¤–çš„"
+"对象会很有用。\n"
+"åˆ‡æ¢æ­¤è®¾ç½®å¯æ‰“开和关闭此调试视图。"
#: doc/classes/RoomManager.xml:48
msgid ""
@@ -60540,6 +61513,10 @@ msgid ""
"In most cases you can set this here for all portals. It is possible to "
"override the margin for each portal."
msgstr ""
+"通常我们ä¸å¸Œæœ›åªæœ‰[b]刚好[/b]跨越边界进入相邻[Room]的物体蔓延到那个空间。为防"
+"æ­¢è¿™ç§æƒ…况å‘生,æ¯ä¸ª [Portal] 都有一个é¢å¤–çš„è¾¹è·æˆ–容差区,物体å¯ä»¥åœ¨å…¶ä¸­è¿›å…¥"
+"而ä¸ä¼šè”“延到相邻的空间。\n"
+"在大多数情况下,您å¯ä»¥åœ¨æ­¤å¤„为所有portal设置此项。å¯ä»¥è¦†ç›–æ¯ä¸ªportal的边è·ã€‚"
#: doc/classes/RoomManager.xml:52
msgid ""
@@ -60554,6 +61531,14 @@ msgid ""
"[code]NOTIFICATION_EXIT_GAMEPLAY[/code]\n"
"Signals: [code]\"gameplay_entered\"[/code], [code]\"gameplay_exited\"[/code]"
msgstr ""
+"使用部分或完整 PVS 时,游æˆç›‘视器å…许您在漫游对象或空间进入或退出 [b] 游æˆåŒº"
+"域 [/b] 时接收回调。游æˆåŒºåŸŸè¢«å®šä¹‰ä¸ºä¸»è¦æˆ–æ¬¡è¦ PVS。\n"
+"例如,这些回调å…许您å‡å°‘对远离玩家的对象的处ç†ï¼Œæˆ–者打开和关闭 AI。\n"
+"您å¯ä»¥é€‰æ‹©é€šè¿‡ [code]_notification[/code] å‡½æ•°æŽ¥æ”¶å›žè°ƒä½œä¸ºé€šçŸ¥ï¼Œæˆ–ä½œä¸ºä¿¡å·æŽ¥"
+"收。\n"
+"[code]NOTIFICATION_ENTER_GAMEPLAY[/code]\n"
+"[code]NOTIFICATION_EXIT_GAMEPLAY[/code]\n"
+"ä¿¡å·ï¼š[code]\"gameplay_entered\"[/code], [code]\"gameplay_exited\"[/code]"
#: doc/classes/RoomManager.xml:60
msgid ""
@@ -60565,6 +61550,11 @@ msgid ""
"will only operate on exported or running projects, in order to prevent "
"accidental alteration to the scene and loss of data."
msgstr ""
+"如果å¯ç”¨ï¼Œç³»ç»Ÿå°†åœ¨è½¬æ¢æœŸé—´å°è¯•åˆå¹¶ [Room] å†…çš„ç›¸ä¼¼ç½‘æ ¼ï¼ˆç‰¹åˆ«æ˜¯åœ¨ææ–™æ–¹é¢ï¼‰ã€‚"
+"è¿™å¯ä»¥æ˜¾ç€å‡å°‘æ¸²æŸ“æœŸé—´æ‰€éœ€çš„ç»˜åˆ¶è°ƒç”¨å’ŒçŠ¶æ€æ›´æ”¹çš„æ•°é‡ï¼Œå°½ç®¡ä»£ä»·æ˜¯é™ä½Žäº†å‰”除粒"
+"度。\n"
+"[b]注æ„:[/b]æ­¤æ“作在转æ¢è¿‡ç¨‹ä¸­çš„è¿è¡Œæ—¶è¿è¡Œï¼Œå¹¶ä¸”åªä¼šåœ¨å¯¼å‡ºæˆ–è¿è¡Œçš„项目上è¿"
+"行,以防止æ„外更改场景和丢失数æ®ã€‚"
#: doc/classes/RoomManager.xml:64
msgid ""
@@ -60574,6 +61564,9 @@ msgid ""
"level. Here you can alter the threshold at which the editor warning appears. "
"There are no other side effects."
msgstr ""
+"转æ¢ç©ºé—´æ—¶ï¼Œå¦‚果检测到空间之间有é‡å ï¼Œç¼–辑器会警告您。é‡å ä¼šå¹²æ‰°ç¡®å®šæ‘„åƒæœºå’Œ"
+"ç‰©ä½“æ‰€åœ¨çš„ç©ºé—´ã€‚æ ¹æ®æ‚¨çš„levelï¼Œå°‘é‡æ˜¯å¯ä»¥æŽ¥å—的。您å¯ä»¥åœ¨æ­¤å¤„更改出现编辑器警"
+"告的阈值。没有其他副作用。"
#: doc/classes/RoomManager.xml:67
msgid ""
@@ -60583,6 +61576,9 @@ msgid ""
"recursion depth.\n"
"[b]Note:[/b] This value is unused when using [code]Full[/code] PVS mode."
msgstr ""
+"portal渲染是递归的 - æ¯æ¬¡é€šè¿‡è¾ƒæ—©çš„portal看到一个portalæ—¶ï¼Œéƒ½ä¼šäº§ç”Ÿä¸€äº›æˆæœ¬ã€‚"
+"出于这个原因,并为了防止无é™å¾ªçŽ¯çš„å¯èƒ½æ€§ï¼Œæ­¤è®¾ç½®å¯¹é€’归深度æä¾›äº†ç¡¬æ€§é™åˆ¶ã€‚\n"
+"[b]注:[/b] 使用[code]Full[/code] PVS æ¨¡å¼æ—¶ä¸ä½¿ç”¨è¯¥å€¼ã€‚"
#: doc/classes/RoomManager.xml:71
msgid ""
@@ -60591,6 +61587,9 @@ msgid ""
"to override this behaviour and force it to use a particular camera to get a "
"better idea of what the occlusion culling is doing."
msgstr ""
+"Portal 剔除通常使用当å‰çš„ [Camera] / 多个[Camera] 进行æ“作,但是为了在编辑器"
+"中进行调试,您å¯ä»¥ä½¿ç”¨æ­¤è®¾ç½®æ¥è¦†ç›–此行为并强制它使用特定的相机以更好地了解é®"
+"挡的内容剔除正在åšã€‚"
#: doc/classes/RoomManager.xml:75
msgid ""
@@ -60602,9 +61601,29 @@ msgid ""
"rooms will be frustum culled, and rendered if they are within the view "
"frustum."
msgstr ""
+"å¯é€‰åœ°ï¼Œåœ¨è½¬æ¢æœŸé—´ï¼Œå¯ä»¥è®¡ç®—从æ¯ä¸ªç©ºé—´å¯èƒ½å¯è§çš„空间的潜在å¯è§é›† (PVS)。这å¯"
+"用于帮助动æ€é—¨æˆ·å‰”除,或完全替代门户剔除。\n"
+"在 [code]Full[/code] PVS 模å¼ä¸‹ï¼Œæ½œåœ¨å¯è§ç©ºé—´å†…的所有对象都将被剔除,如果它们"
+"在视锥体内,则进行渲染。"
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -60621,20 +61640,33 @@ msgid ""
"override this value if desired.\n"
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
+"在转æ¢è¿‡ç¨‹ä¸­ï¼Œ[Room] å†…å¯¹è±¡çš„å‡ ä½•å½¢çŠ¶ï¼Œæˆ–è‡ªå®šä¹‰æŒ‡å®šçš„æ‰‹åŠ¨ç»‘å®šï¼Œç”¨äºŽç”Ÿæˆ [b] "
+"凸多边形绑定 [/b]。\n"
+"这个凸多边形在å¯è§æ€§ç³»ç»Ÿä¸­æ˜¯ [b] 必需的 [/b],并且用于许多目的。最é‡è¦çš„æ˜¯ï¼Œ"
+"它用于决定[Camera](或物体)是å¦åœ¨[Room]内。凸多边形生æˆç®—法很好,但有时它会"
+"创建太多(或太少)的平é¢ï¼Œæ— æ³•很好地表示空间体积。\n"
+"[code]room_simplify[/code] 值å¯ç”¨äºŽå¯¹è¯¥è¿‡ç¨‹è¿›è¡Œç²¾ç»†æŽ§åˆ¶ã€‚它决定了如何相似平é¢"
+"æ‰èƒ½å°†å®ƒä»¬è§†ä¸ºç›¸åŒï¼ˆå¹¶åˆ é™¤é‡å¤é¡¹ï¼‰ã€‚该值å¯ä»¥è®¾ç½®åœ¨ 0(无简化)和 1(最大简"
+"化)之间。\n"
+"此处设置的值是所有空间的默认值,但如果需è¦ï¼Œä¸ªåˆ«ç©ºé—´å¯ä»¥è¦†ç›–此值。\n"
+"空间凸包在编辑器中显示为线框。"
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
"we refer to as the [code]roomlist[/code] (the roomlist is not a special node "
"type, it is normally just a [Spatial])."
msgstr ""
+"è¦ä½¿ [Room] 转æ¢è¿‡ç¨‹æˆåŠŸï¼Œæ‚¨å¿…é¡»å°† [RoomManager] æŒ‡å‘ [Room] å’Œ [RoomGroup] "
+"的父 [Node],我们将其称为 [code]roomlist[/code](roomlist 䏿˜¯ä¸€ä¸ªç‰¹æ®Šçš„节点"
+"ç±»åž‹ï¼Œå®ƒé€šå¸¸åªæ˜¯ä¸€ä¸ª [Room])。"
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
-msgstr ""
+msgstr "当在编辑器中使用portal工具时,显示[Portal]的边界。"
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -60643,28 +61675,33 @@ msgid ""
"Sometimes using the larger gameplay area of the secondary PVS may be "
"preferable."
msgstr ""
+"å½“å¯¹è±¡è¿›å…¥å’Œé€€å‡ºæ¸¸æˆæ—¶æŽ¥æ”¶æ¸¸æˆå›žè°ƒæ—¶ï¼Œ[b]游æˆåŒºåŸŸ[/b]å¯ä»¥ç”±[Room]的主è¦"
+"PVS(潜在å¯è§é›†ï¼‰æˆ–次è¦PVS(主è¦PVSåŠå…¶ç›¸é‚»çš„PVS)定义[Room])。\n"
+"æœ‰æ—¶ä½¿ç”¨æ¬¡è¦ PVS 的较大游æˆåŒºåŸŸå¯èƒ½æ›´å¯å–。"
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
+"在è¿è¡Œæ—¶ä»…使用 [Portal] æ¥ç¡®å®šå¯è§æ€§ã€‚ [Room]的转æ¢ä¸ä¼šäº§ç”ŸPVS,无法使用游æˆ"
+"通知。"
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
-msgstr ""
+msgstr "使用 PVS å’Œ [Portal] çš„ç»„åˆæ¥ç¡®å®šå¯è§æ€§ï¼ˆè¿™é€šå¸¸æ˜¯æœ€å¿«å’Œæœ€å‡†ç¡®çš„)。"
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
-msgstr ""
+msgstr "仅使用 [Room] çš„ PVS(潜在å¯è§é›†ï¼‰æ¥ç¡®å®šå¯è§æ€§ã€‚"
#: doc/classes/RootMotionView.xml:4
msgid "Editor-only helper for setting up root motion in [AnimationTree]."
-msgstr ""
+msgstr "在[AnimationTree]中设置根è¿åŠ¨çš„ä»…ç¼–è¾‘å™¨å¯ç”¨çš„辅助工具。"
#: doc/classes/RootMotionView.xml:7
msgid ""
@@ -60681,23 +61718,30 @@ msgid ""
"[code]extends RootMotionView[/code]. Additionally, it must not be a "
"[code]@tool[/code] script."
msgstr ""
+"[i]Root motion[/i] 指的是一ç§åŠ¨ç”»æŠ€æœ¯ï¼Œå…¶ä¸­ä½¿ç”¨ç½‘æ ¼çš„éª¨æž¶ä¸ºè§’è‰²æä¾›åŠ¨åŠ›ã€‚åœ¨å¤„"
+"ç† 3D åŠ¨ç”»æ—¶ï¼Œä¸€ç§æµè¡Œçš„æŠ€æœ¯æ˜¯åŠ¨ç”»å¸ˆä½¿ç”¨æ ¹éª¨æž¶éª¨éª¼æ¥ä¸ºéª¨æž¶çš„其余部分æä¾›è¿"
+"动。这å…许以步骤实际匹é…下方地æ¿çš„æ–¹å¼ä¸ºè§’色设置动画。它还å…许在过场动画期间"
+"与对象进行精确交互。å¦è§[AnimationTree]。\n"
+"[b]注æ„:[/b] [RootMotionView] 仅在编辑器中å¯è§ã€‚在è¿è¡Œçš„项目中会自动éšè—,在"
+"è¿è¡Œçš„项目中也会转æ¢ä¸ºæ™®é€šçš„[Node]。这æ„味ç€é™„加到 [RootMotionView] 节点的脚"
+"本 [i] å¿…é¡» [/i] 具有 [code] 继承节点 [/code] è€Œä¸æ˜¯ [code] 继承 "
+"RootMotionView[/code]。此外,它ä¸èƒ½æ˜¯ [code]@tool[/code] 脚本。"
#: doc/classes/RootMotionView.xml:11
msgid ""
"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
"html#root-motion"
msgstr ""
-"https://docs.godotengine.org/en/latest/tutorials/animation/animation_tree."
+"https://docs.godotengine.org/zh_CN/latest/tutorials/animation/animation_tree."
"html#root-motion"
#: doc/classes/RootMotionView.xml:17
msgid "Path to an [AnimationTree] node to use as a basis for root motion."
-msgstr ""
+msgstr "用作根è¿åŠ¨åŸºç¡€çš„ [AnimationTree] 节点的路径。"
#: doc/classes/RootMotionView.xml:20
-#, fuzzy
msgid "The grid's cell size in 3D units."
-msgstr "图å—地图的å•元大å°ã€‚"
+msgstr "以 3D å•ä½è¡¨ç¤ºçš„网格å•元大å°ã€‚"
#: doc/classes/RootMotionView.xml:23
msgid "The grid's color."
@@ -60708,16 +61752,17 @@ msgid ""
"The grid's radius in 3D units. The grid's opacity will fade gradually as the "
"distance from the origin increases until this [member radius] is reached."
msgstr ""
+"以 3D å•ä½è¡¨ç¤ºçš„网格åŠå¾„。éšç€ä¸ŽåŽŸç‚¹çš„è·ç¦»å¢žåŠ ï¼Œç½‘æ ¼çš„ä¸é€æ˜Žåº¦å°†é€æ¸æ¶ˆå¤±ï¼Œç›´"
+"到达到此åŠå¾„ [member radius]。"
#: doc/classes/RootMotionView.xml:29
-#, fuzzy
msgid ""
"If [code]true[/code], the grid's points will all be on the same Y coordinate "
"([i]local[/i] Y = 0). If [code]false[/code], the points' original Y "
"coordinate is preserved."
msgstr ""
-"如果[code] true [/code],则粒å­å°†ä½¿ç”¨çˆ¶èŠ‚ç‚¹çš„åæ ‡ç©ºé—´ã€‚如果[code]false[/"
-"code]ï¼Œåˆ™ä½¿ç”¨å…¨å±€åæ ‡ã€‚"
+"如果 [code]true[/code],则网格的点都将ä½äºŽç›¸åŒçš„ Y åæ ‡ä¸Šï¼ˆ[i]local[/i] Y = "
+"0)。如果 [code]false[/code],则ä¿ç•™ç‚¹çš„原始 Y åæ ‡ã€‚"
#: doc/classes/SceneState.xml:4
msgid "A script interface to a scene file's data."
@@ -60908,7 +61953,6 @@ msgid "Manages the game loop via a hierarchy of nodes."
msgstr "é€šè¿‡èŠ‚ç‚¹å±‚æ¬¡ç»“æž„ç®¡ç†æ¸¸æˆå¾ªçŽ¯ã€‚"
#: doc/classes/SceneTree.xml:7
-#, fuzzy
msgid ""
"As one of the most important classes, the [SceneTree] manages the hierarchy "
"of nodes in a scene as well as scenes themselves. Nodes can be added, "
@@ -60922,28 +61966,28 @@ msgid ""
"thus in charge of the game loop."
msgstr ""
"作为最é‡è¦çš„类之一,[SceneTree]管ç†ç€åœºæ™¯ä¸­èŠ‚ç‚¹çš„å±‚æ¬¡ç»“æž„ä»¥åŠåœºæ™¯æœ¬èº«ã€‚节点å¯"
-"ä»¥è¢«æ·»åŠ ã€æ£€ç´¢å’Œåˆ é™¤ã€‚整个场景树(以åŠå½“å‰åœºæ™¯ï¼‰å¯ä»¥è¢«æš‚åœã€‚场景å¯ä»¥è¢«åŠ è½½ã€"
-"切æ¢å’Œé‡æ–°åŠ è½½ã€‚\n"
-"你也å¯ä»¥ä½¿ç”¨[SceneTree]将你的节点组织æˆç»„:æ¯ä¸ªèŠ‚ç‚¹éƒ½å¯ä»¥è¢«åˆ†é…到你想è¦åˆ›å»ºçš„"
-"组,例如一个 \"敌人 \"组。然åŽä½ å¯ä»¥è¿­ä»£è¿™äº›ç»„,甚至å¯ä»¥ä¸€æ¬¡è°ƒç”¨æ–¹æ³•并设置所"
+"ä»¥è¢«æ·»åŠ ã€æ£€ç´¢å’Œåˆ é™¤ã€‚整个场景树å¯ä»¥è¢«æš‚åœï¼ŒåŒ…括当å‰åœºæ™¯ã€‚场景å¯ä»¥è¢«åŠ è½½ã€åˆ‡"
+"æ¢å’Œé‡æ–°åŠ è½½ã€‚\n"
+"你也å¯ä»¥ä½¿ç”¨[SceneTree]将你的节点组织æˆç»„,æ¯ä¸ªèŠ‚ç‚¹éƒ½å¯ä»¥è¢«åˆ†é…到你想è¦åˆ›å»ºçš„"
+"组,例如一个 \"敌人\" 组。然åŽä½ å¯ä»¥è¿­ä»£è¿™äº›ç»„,甚至å¯ä»¥ä¸€æ¬¡è°ƒç”¨æ–¹æ³•并设置所"
"有组æˆå‘˜çš„属性。\n"
-"[SceneTree]是场景使用的默认[MainLoop]实现,因此负责游æˆçš„循环。"
+"[SceneTree]由场景使用的默认[MainLoop]实现,因此负责游æˆçš„循环。"
#: doc/classes/SceneTree.xml:12
msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/scene_tree."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/scene_tree."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/getting_started/step_by_step/"
+"scene_tree.html"
#: doc/classes/SceneTree.xml:13
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/viewports/multiple_resolutions."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/viewports/multiple_resolutions."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/viewports/"
+"multiple_resolutions.html"
#: doc/classes/SceneTree.xml:21
msgid ""
@@ -60960,6 +62004,16 @@ msgid ""
"immediately, use [method call_group_flags] with the [constant "
"GROUP_CALL_REALTIME] flag."
msgstr ""
+"对给定组的æ¯ä¸ªæˆå‘˜è°ƒç”¨ [code]method[/code]。您å¯ä»¥é€šè¿‡åœ¨æ–¹æ³•è°ƒç”¨ç»“æŸæ—¶æŒ‡å®šå‚"
+"æ•°æ¥å°†å‚数传递给 [code]method[/code]。此方法等效于使用 [constant "
+"GROUP_CALL_DEFAULT] 标志调用 [method call_group_flags]。\n"
+"[b]注:[/b] [code]method[/code]最多åªèƒ½æœ‰5ä¸ªå‚æ•°ï¼ˆæ€»å…±7ä¸ªå‚æ•°ä¼ é€’给这个方"
+"法)。\n"
+"[b]注æ„:[/b] 由于设计é™åˆ¶ï¼Œå¦‚æžœå‚æ•°ä¹‹ä¸€ä¸º [code]null[/code],[method "
+"call_group] å°†é™é»˜å¤±è´¥ã€‚\n"
+"[b]注æ„:[/b] [method call_group] 将始终调用具有一帧延迟的方法,其方å¼ç±»ä¼¼äºŽ "
+"[method Object.call_deferred]。è¦ç«‹å³è°ƒç”¨æ–¹æ³•,请将 [method "
+"call_group_flags] 与 [constant GROUP_CALL_REALTIME] 标志一起使用。"
#: doc/classes/SceneTree.xml:33
msgid ""
@@ -60976,9 +62030,20 @@ msgid ""
"GROUP_CALL_REVERSE, \"bases\", \"destroy\")\n"
"[/codeblock]"
msgstr ""
+"对给定组的æ¯ä¸ªæˆå‘˜è°ƒç”¨ [code]method[/code],éµä»Žç»™å®šçš„ [enum "
+"GroupCallFlags]。您å¯ä»¥é€šè¿‡åœ¨æ–¹æ³•è°ƒç”¨ç»“æŸæ—¶æŒ‡å®šå‚æ•°æ¥å°†å‚数传递给 "
+"[code]method[/code]。\n"
+"[b]注:[/b] [code]method[/code]最多åªèƒ½æœ‰5ä¸ªå‚æ•°ï¼ˆæ€»å…±8ä¸ªå‚æ•°ä¼ é€’给这个方"
+"法)。\n"
+"[b]注æ„:[/b] 由于设计é™åˆ¶ï¼Œå¦‚æžœå‚æ•°ä¹‹ä¸€ä¸º [code]null[/code],[method "
+"call_group_flags] å°†é™é»˜å¤±è´¥ã€‚\n"
+"[codeblock]\n"
+"# ç«‹å³ä»¥ç›¸å的顺åºè°ƒç”¨è¯¥æ–¹æ³•。\n"
+"get_tree().call_group_flags(SceneTree.GROUP_CALL_REALTIME | SceneTree."
+"GROUP_CALL_REVERSE, \"bases\", \"destroy\")\n"
+"[/codeblock]"
#: doc/classes/SceneTree.xml:46
-#, fuzzy
msgid ""
"Changes the running scene to the one at the given [code]path[/code], after "
"loading it into a [PackedScene] and creating a new instance.\n"
@@ -60989,13 +62054,14 @@ msgid ""
"node is added on the next idle frame. You won't be able to access it "
"immediately after the [method change_scene] call."
msgstr ""
-"将正在è¿è¡Œçš„场景改å˜ä¸ºç»™å®šçš„[code]path[/code]上的场景,在将其加载到一个"
+"将正在è¿è¡Œçš„场景改å˜ä¸ºæŒ‡å®šçš„[code]path[/code]中的场景,在将其加载到"
"[PackedScene]中并创建一个新的实例。\n"
"æˆåŠŸæ—¶è¿”å›ž[constant OK],如果[code]path[/code]ä¸èƒ½è¢«åŠ è½½åˆ°ä¸€ä¸ª[PackedScene]"
-"中,则返回[constant ERR_CANT_CREATE],如果该场景ä¸èƒ½è¢«å®žä¾‹åŒ–。"
+"中,,该场景ä¸èƒ½è¢«å®žä¾‹åŒ–,则返回[constant ERR_CANT_CREATE]。\n"
+"[b]注æ„:[/b]åœºæ™¯æ”¹å˜æœ‰å»¶è¿Ÿï¼Œå³æ–°çš„场景节点是在下一个空闲帧中添加。在[method "
+"change_scene]调用之åŽï¼Œä½ ä¸èƒ½ç«‹å³è®¿é—®å®ƒã€‚"
#: doc/classes/SceneTree.xml:55
-#, fuzzy
msgid ""
"Changes the running scene to a new instance of the given [PackedScene].\n"
"Returns [constant OK] on success or [constant ERR_CANT_CREATE] if the scene "
@@ -61004,12 +62070,13 @@ msgid ""
"node is added on the next idle frame. You won't be able to access it "
"immediately after the [method change_scene_to] call."
msgstr ""
-"将正在è¿è¡Œçš„场景改å˜ä¸ºä¸€ä¸ªç»™å®šçš„[PackedScene]的新实例。\n"
+"将正在è¿è¡Œçš„场景改å˜ä¸ºç»™å®šçš„[PackedScene]的新实例。\n"
"æˆåŠŸæ—¶è¿”å›ž[constant OK],如果场景ä¸èƒ½è¢«å®žä¾‹åŒ–,则返回[constant "
-"ERR_CANT_CREATE]。"
+"ERR_CANT_CREATE]。\n"
+"[b]注æ„:[/b] åœºæ™¯çš„æ”¹å˜æ˜¯å»¶è¿Ÿçš„,新的场景节点是在下一个空闲帧中添加。在调用"
+"[method change_scene_to]之åŽï¼Œä½ ä¸èƒ½ç«‹å³è®¿é—®å®ƒã€‚"
#: doc/classes/SceneTree.xml:65
-#, fuzzy
msgid ""
"Returns a [SceneTreeTimer] which will [signal SceneTreeTimer.timeout] after "
"the given time in seconds elapsed in this [SceneTree]. If "
@@ -61027,13 +62094,14 @@ msgstr ""
"返回一个[SceneTreeTimer],在这个[SceneTree]中ç»è¿‡ç»™å®šçš„æ—¶é—´ï¼ˆç§’)åŽï¼Œè¯¥"
"[SceneTreeTimer.timeout]å°†å‘出信å·ã€‚如果[code]pause_mode_process[/code]被设置"
"为[code]false[/code],暂åœ[SceneTree]也将暂åœè¯¥å®šæ—¶å™¨ã€‚\n"
-"常用于创建一个一次性的延迟定时器,如下é¢çš„例å­ã€‚\n"
+"常用于创建一次性的延迟定时器,如下é¢çš„例å­:\n"
"[codeblock]\n"
"func some_function():\n"
" print(\"start\")\n"
" yield(get_tree().create_timer(1.0), \"timeout\")\n"
" print(\"end\")\n"
-"[/codeblock]"
+"[/codeblock]\n"
+"计时器将在其时间结æŸåŽè¢«è‡ªåŠ¨é‡Šæ”¾ã€‚"
#: doc/classes/SceneTree.xml:79
msgid ""
@@ -61069,13 +62137,12 @@ msgid "Returns [code]true[/code] if the given group exists."
msgstr "如果给定的组存在,返回[code]true[/code]。"
#: doc/classes/SceneTree.xml:129
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the most recent [InputEvent] was marked as "
"handled with [method set_input_as_handled]."
msgstr ""
-"å¦‚æžœèŠ‚ç‚¹æ­£åœ¨å¤„ç†æœªè¢«å¤„ç†çš„输入(å‚阅[方法set_process_unhandled_input]),则返回"
-"[code]true[/code]。"
+"å¦‚æžœèŠ‚ç‚¹æ­£åœ¨å¤„ç†æœªè¢«å¤„ç†çš„输入(å‚阅[method set_process_unhandled_input]),则"
+"返回[code]true[/code]。"
#: doc/classes/SceneTree.xml:135
msgid ""
@@ -61104,7 +62171,6 @@ msgid ""
msgstr "将给定的对象排队准备删除,å³åœ¨å½“å‰å¸§ä¹‹åŽè°ƒç”¨ [method Object.free] 。"
#: doc/classes/SceneTree.xml:166
-#, fuzzy
msgid ""
"Quits the application at the end of the current iteration. A process "
"[code]exit_code[/code] can optionally be passed as an argument. If this "
@@ -61114,9 +62180,11 @@ msgid ""
"iOS Human Interface Guidelines, the user is expected to close apps via the "
"Home button."
msgstr ""
-"退出应用程åºã€‚进程 [code]exit_code[/code] å¯ä»¥é€‰æ‹©ä½œä¸ºå‚æ•°ä¼ é€’ã€‚å¦‚æžœæ­¤å‚æ•°ä¸º "
-"[code]0[/code] 或更大,它将覆盖在退出应用程åºä¹‹å‰å®šä¹‰çš„ [member OS."
-"exit_code]。"
+"在当å‰è¿­ä»£ç»“æŸæ—¶é€€å‡ºåº”用程åºã€‚进程的[code]exit_code[/code]å¯ä»¥é€‰æ‹©æ€§åœ°ä½œä¸ºå‚"
+"æ•°ä¼ é€’ã€‚å¦‚æžœè¿™ä¸ªå‚æ•°æ˜¯[code]0[/code]或更大,它将覆盖在退出应用程åºä¹‹å‰å®šä¹‰çš„"
+"[member OS.exit_code]。\n"
+"[b]注æ„:[/b] 在iOS上,这个方法ä¸èµ·ä½œç”¨ã€‚å‚考iOSç•Œé¢æŒ‡å—建议,用户应该通过主"
+"页按钮æ¥å…³é—­åº”用程åºã€‚"
#: doc/classes/SceneTree.xml:173
msgid ""
@@ -61158,28 +62226,28 @@ msgstr ""
"code],尊é‡ç»™å®šçš„ [enum GroupCallFlags]。"
#: doc/classes/SceneTree.xml:207
-#, fuzzy
msgid "Marks the most recent [InputEvent] as handled."
-msgstr "å°†å¿«æ·æ–¹å¼çš„ [InputEvent] 作为 [String] 返回。"
+msgstr "将最新的[InputEvent]标记为已处ç†ã€‚"
#: doc/classes/SceneTree.xml:214
-#, fuzzy
msgid ""
"If [code]true[/code], the application quits automatically on going back (e."
"g. on Android). Enabled by default.\n"
"To handle 'Go Back' button when this option is disabled, use [constant "
"MainLoop.NOTIFICATION_WM_GO_BACK_REQUEST]."
msgstr ""
-"如果 [code]true[/code],应用程åºä¼šåœ¨è¿”回时自动退出(例如在 Android 上)。默认"
-"å¯ç”¨ã€‚\n"
-"è¦åœ¨ç¦ç”¨æ­¤é€‰é¡¹æ—¶å¤„ç†â€œè¿”å›žâ€æŒ‰é’®ï¼Œè¯·ä½¿ç”¨ [constant DisplayServer."
-"WINDOW_EVENT_GO_BACK_REQUEST]。"
+"如果[code]true[/code],应用程åºåœ¨è¿”回时自动退出,例如在Android上。默认情况是"
+"å¯ç”¨çš„。\n"
+"è¦åœ¨è¿™ä¸ªé€‰é¡¹è¢«ç¦ç”¨æ—¶å¤„ç†'Go Back'按钮,请使用 [constant MainLoop."
+"NOTIFICATION_WM_GO_BACK_REQUEST] 。"
#: doc/classes/SceneTree.xml:225
msgid ""
"Configures screen stretching to the given [enum StretchMode], [enum "
"StretchAspect], minimum size and [code]scale[/code]."
msgstr ""
+"å°†å±å¹•拉伸é…置为给定的 [enum StretchMode]ã€[enum StretchAspect]ã€æœ€å°å°ºå¯¸å’Œ "
+"[code]scale[/code]。"
#: doc/classes/SceneTree.xml:231
msgid "The current scene."
@@ -61241,7 +62309,6 @@ msgstr ""
"过连接到 [SceneTree] çš„ä¿¡å·æ¥å®Œæˆçš„。"
#: doc/classes/SceneTree.xml:253
-#, fuzzy
msgid ""
"If [code]true[/code], the [SceneTree] is paused. Doing so will have the "
"following behavior:\n"
@@ -61250,10 +62317,10 @@ msgid ""
"- [method Node._process], [method Node._physics_process] and [method Node."
"_input] will not be called anymore in nodes."
msgstr ""
-"如果 [code]true[/code]ï¼Œåˆ™æš‚åœ [SceneTree]。这样åšå°†æœ‰ä»¥ä¸‹è¡Œä¸ºï¼š\n"
-"- 2D å’Œ 3D 物ç†å°†åœæ­¢ã€‚\n"
-"- [method Node._process]ã€[method Node._physics_process] å’Œ[method Node."
-"_input] å°†ä¸å†åœ¨èŠ‚ç‚¹ä¸­è°ƒç”¨ã€‚"
+"如果[code]true[/code],[SceneTree]会暂åœã€‚这样åšä¼šæœ‰ä»¥ä¸‹è¡Œä¸º:\n"
+"- 2Då’Œ3D物ç†å°†åœæ­¢ã€‚这包括信å·å’Œç¢°æ’žæ£€æµ‹ã€‚\n"
+"- 节点ä¸å†è°ƒç”¨[method Node._process]ã€[method Node._physics_process]å’Œ"
+"[method Node._input]。"
#: doc/classes/SceneTree.xml:258
msgid ""
@@ -61264,14 +62331,12 @@ msgstr ""
"连接。"
#: doc/classes/SceneTree.xml:261
-#, fuzzy
msgid "The [SceneTree]'s root [Viewport]."
-msgstr "[SceneTree] 的根 [Window]。"
+msgstr "[SceneTree] 的根 [Viewport]。"
#: doc/classes/SceneTree.xml:264
-#, fuzzy
msgid "If [code]true[/code], font oversampling is used."
-msgstr "如果[code]true[/code],则å¯ç”¨æ³•线映射。"
+msgstr "如果 [code]true[/code],则使用字体超采样。"
#: doc/classes/SceneTree.xml:270
msgid ""
@@ -61299,9 +62364,8 @@ msgstr ""
"和拖动文件的å±å¹•标识符。"
#: doc/classes/SceneTree.xml:289
-#, fuzzy
msgid "Emitted whenever global menu item is clicked."
-msgstr "当项目被选中时触å‘。"
+msgstr "æ¯å½“å•击全局èœå•项时触å‘。"
#: doc/classes/SceneTree.xml:294
msgid ""
@@ -61359,7 +62423,7 @@ msgstr ""
msgid ""
"Emitted when the screen resolution (fullscreen) or window size (windowed) "
"changes."
-msgstr ""
+msgstr "当å±å¹•分辨率(全å±ï¼‰æˆ–窗å£å¤§å°ï¼ˆçª—å£åŒ–ï¼‰æ”¹å˜æ—¶å‘出。"
#: doc/classes/SceneTree.xml:345
msgid ""
@@ -61403,37 +62467,37 @@ msgstr "以更高的分辨率渲染拉伸(æ’值)。"
msgid ""
"Keep the specified display resolution. No interpolation. Content may appear "
"pixelated."
-msgstr ""
+msgstr "ä¿æŒæŒ‡å®šçš„æ˜¾ç¤ºåˆ†è¾¨çŽ‡ã€‚æ²¡æœ‰æ’值。内容å¯èƒ½ä¼šå‡ºçްåƒç´ åŒ–。"
#: doc/classes/SceneTree.xml:377
msgid ""
"Fill the window with the content stretched to cover excessive space. Content "
"may appear stretched."
-msgstr ""
+msgstr "用拉伸的内容填充窗å£ä»¥è¦†ç›–过多的空间。内容å¯èƒ½ä¼šè¢«æ‹‰ä¼¸ã€‚"
#: doc/classes/SceneTree.xml:380
msgid ""
"Retain the same aspect ratio by padding with black bars on either axis. This "
"prevents distortion."
-msgstr ""
+msgstr "在任æ„轴上用黑æ¡å¡«å……æ¥ä¿æŒç›¸åŒçš„长宽比。这å¯ä»¥é˜²æ­¢å¤±çœŸã€‚"
#: doc/classes/SceneTree.xml:383
msgid ""
"Expand vertically. Left/right black bars may appear if the window is too "
"wide."
-msgstr ""
+msgstr "垂直展开。如果窗å£å¤ªå®½ï¼Œå¯èƒ½ä¼šå‡ºçް左/å³é»‘æ¡ã€‚"
#: doc/classes/SceneTree.xml:386
msgid ""
"Expand horizontally. Top/bottom black bars may appear if the window is too "
"tall."
-msgstr ""
+msgstr "水平展开。如果窗å£å¤ªé«˜ï¼Œå¯èƒ½ä¼šå‡ºçŽ°é¡¶éƒ¨/底部黑æ¡ã€‚"
#: doc/classes/SceneTree.xml:389
msgid ""
"Expand in both directions, retaining the same aspect ratio. This prevents "
"distortion while avoiding black bars."
-msgstr ""
+msgstr "在两个方å‘ä¸Šæ‰©å±•ï¼Œä¿æŒç›¸åŒçš„纵横比。这å¯ä»¥é˜²æ­¢å¤±çœŸï¼ŒåŒæ—¶é¿å…黑æ¡ã€‚"
#: doc/classes/SceneTreeTimer.xml:4
msgid "One-shot timer."
@@ -61492,8 +62556,8 @@ msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/scripting."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/step_by_step/scripting."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/getting_started/step_by_step/"
+"scripting.html"
#: doc/classes/Script.xml:17
msgid "Returns [code]true[/code] if the script can be instanced."
@@ -61568,7 +62632,6 @@ msgid "The Editor's popup dialog for creating new [Script] files."
msgstr "用于创建新 [Script] æ–‡ä»¶çš„ç¼–è¾‘å™¨å¼¹å‡ºå¯¹è¯æ¡†ã€‚"
#: doc/classes/ScriptCreateDialog.xml:7
-#, fuzzy
msgid ""
"The [ScriptCreateDialog] creates script files according to a given template "
"for a given scripting language. The standard use is to configure its fields "
@@ -61581,14 +62644,14 @@ msgid ""
" dialog.popup_centered()\n"
"[/codeblock]"
msgstr ""
-"[ScriptCreateDialog] æ ¹æ®ç»™å®šè„šæœ¬è¯­è¨€çš„ç»™å®šæ¨¡æ¿åˆ›å»ºè„šæœ¬æ–‡ä»¶ã€‚æ ‡å‡†ç”¨æ³•æ˜¯åœ¨è°ƒ"
-"用 [method Window.popup] 方法之一之å‰é…置其字段。\n"
+"[ScriptCreateDialog] æ ¹æ®æŒ‡å®šè„šæœ¬è¯­è¨€çš„ç‰¹å®šæ¨¡æ¿åˆ›å»ºè„šæœ¬æ–‡ä»¶ã€‚æ ‡å‡†ç”¨æ³•æ˜¯åœ¨ç±»ä¼¼"
+"调用 [method Popup.popup] 方法之å‰é…置其字段。\n"
"[codeblock]\n"
"func _ready():\n"
-" dialog.config(\"Node\", \"res://new_node.gd\") # 用于引擎内类型\n"
+" dialog.config(\"Node\", \"res://new_node.gd\") # For in-engine types\n"
" dialog.config(\"\\\"res://base_node.gd\\\"\", \"res://derived_node.gd\") "
-"# 用于脚本类型\n"
-" dialog.popup_center()\n"
+"# For script types\n"
+" dialog.popup_centered()\n"
"[/codeblock]"
#: doc/classes/ScriptCreateDialog.xml:25
@@ -61631,6 +62694,8 @@ msgid ""
"code]. The file extension can be omitted from [code]base_path[/code]. It "
"will be added based on the selected scripting language."
msgstr ""
+"æ‰“å¼€åˆ›å»ºè„šæœ¬çš„å¯¹è¯æ¡†ã€‚脚本将扩展[code]base_name[/code]。文件扩展åå¯ä»¥ä»Ž"
+"[code]base_path[/code]中çœç•¥ã€‚å®ƒå°†æ ¹æ®æ‰€é€‰æ‹©çš„脚本语言添加。"
#: doc/classes/ScriptEditor.xml:67
msgid ""
@@ -61673,7 +62738,6 @@ msgid "A helper node for displaying scrollable elements such as lists."
msgstr "ç”¨äºŽæ˜¾ç¤ºå¯æ»šåŠ¨å…ƒç´ ï¼ˆä¾‹å¦‚åˆ—è¡¨ï¼‰çš„è¾…åŠ©èŠ‚ç‚¹ã€‚"
#: doc/classes/ScrollContainer.xml:7
-#, fuzzy
msgid ""
"A ScrollContainer node meant to contain a [Control] child. ScrollContainers "
"will automatically create a scrollbar child ([HScrollBar], [VScrollBar], or "
@@ -61687,21 +62751,21 @@ msgid ""
"they will upscale to the ScrollContainer's size if it's larger (scroll is "
"invisible for the chosen dimension)."
msgstr ""
-"ScrollContainer 节点用于容纳一个 [Control] å­èŠ‚ç‚¹ã€‚\n"
-"ScrollContainers å°†åœ¨éœ€è¦æ—¶è‡ªåŠ¨åˆ›å»ºä¸€ä¸ªæ»šåŠ¨æ¡å­é¡¹ï¼ˆ[HScrollBar]ã€"
-"[VScrollBar] ),并且åªä¼šåœ¨ ScrollContainer 区域内绘制控件。滚动æ¡å°†è‡ªåŠ¨ç»˜åˆ¶"
-"在å³ä¾§ï¼ˆåž‚直)或底部(水平),并å…许拖动以在 ScrollContainer 内移动å¯è§†æŽ§ä»¶"
-"(åŠå…¶å­é¡¹ï¼‰ã€‚滚动æ¡è¿˜å°†æ ¹æ®æŽ§ä»¶ç›¸å¯¹äºŽ ScrollContainer çš„ [member Control."
-"rect_min_size] 自动调整抓å–器的大å°ã€‚\n"
-"与 [Panel] 控件é…åˆä½¿ç”¨æ•ˆæžœå¾ˆå¥½ã€‚您å¯ä»¥åœ¨å­é¡¹çš„大尿 ‡å¿—上设置 [code]EXPAND[/"
-"code],因此如果 ScrollContainer çš„å¤§å°æ›´å¤§ï¼ˆæ»šåŠ¨å¯¹äºŽæ‰€é€‰ç»´åº¦ä¸å¯è§ï¼‰ï¼Œå®ƒä»¬å°†"
-"放大到 ScrollContainer 的大å°ã€‚"
+"æ»šåŠ¨å®¹å™¨èŠ‚ç‚¹ï¼Œç”¨äºŽåŒ…å« [Control] å­èŠ‚ç‚¹ã€‚ æ»šåŠ¨å®¹å™¨å°†åœ¨éœ€è¦æ—¶è‡ªåŠ¨åˆ›å»ºæ»šåŠ¨æ¡å­"
+"项([HScrollBar]ã€[VScrollBar] 或两者),且仅在滚动容器区域内绘制控件。滚动æ¡"
+"将自动绘制在å³ä¾§æˆ–底部,å³åž‚直或水平,并å…许拖动以在滚动容器内移动å¯è§†æŽ§ä»¶åŠ"
+"å…¶å­é¡¹ã€‚滚动æ¡è¿˜å°†æ ¹æ®æŽ§ä»¶ç›¸å¯¹äºŽæ»šåŠ¨å®¹å™¨çš„ [member Control.rect_min_size] 自"
+"动调整抓å–器的大å°ã€‚与 [Panel] 控件é…åˆä½¿ç”¨æ•ˆæžœå¾ˆå¥½ã€‚您å¯ä»¥å°†å­é¡¹çš„大尿 ‡å¿—设"
+"置为 [code]EXPAND[/code]ï¼Œå½“æ»šåŠ¨å®¹å™¨çš„å¤§å°æ›´å¤§ï¼ˆæ»šåŠ¨å¯¹äºŽæ‰€é€‰ç»´åº¦ä¸å¯è§ï¼‰ï¼Œå®ƒ"
+"们将放大到滚动容器的大å°ã€‚"
#: doc/classes/ScrollContainer.xml:16
msgid ""
"Ensures the given [code]control[/code] is visible (must be a direct or "
"indirect child of the ScrollContainer). Used by [member follow_focus]."
msgstr ""
+"ç¡®ä¿ç»™å®šçš„ [code]control[/code] 是å¯è§çš„,必须是滚动容器的直接或间接å­çº§ã€‚ç”± "
+"[member follow_focus] 使用。"
#: doc/classes/ScrollContainer.xml:22
msgid ""
@@ -61711,6 +62775,10 @@ msgid ""
"[member scroll_horizontal_enabled]. If you want to only hide it instead, use "
"its [member CanvasItem.visible] property."
msgstr ""
+"返回此[ScrollContainer]的水平滚动æ¡[HScrollBar]。\n"
+"[b]警告:[/b] 这是一个必须的内部节点,移除和释放它å¯èƒ½ä¼šå¯¼è‡´å´©æºƒã€‚如果你想ç¦"
+"用水平滚动æ¡ï¼Œè¯·ä½¿ç”¨[member scroll_horizontal_enabled]ã€‚å¦‚æžœä½ åªæƒ³éšè—它,则"
+"使用其[member CanvasItem.visible]属性。"
#: doc/classes/ScrollContainer.xml:29
msgid ""
@@ -61720,6 +62788,10 @@ msgid ""
"[member scroll_vertical_enabled]. If you want to only hide it instead, use "
"its [member CanvasItem.visible] property."
msgstr ""
+"返回此[ScrollContainer]的垂直滚动æ¡[VScrollBar]。\n"
+"[b]警告:[/b] 这是一个必需的内部节点,移除和释放它å¯èƒ½ä¼šå¯¼è‡´å´©æºƒã€‚如果你想ç¦"
+"用垂直滚动æ¡ï¼Œè¯·ä½¿ç”¨[member scroll_vertical_enabled]ã€‚å¦‚æžœä½ åªæƒ³éšè—它,则使"
+"用其[member CanvasItem.visible]属性。"
#: doc/classes/ScrollContainer.xml:36
msgid ""
@@ -61790,20 +62862,20 @@ msgstr ""
"进制版本,请å‚阅 [Mutex]。"
#: doc/classes/Semaphore.xml:16
-#, fuzzy
msgid ""
"Lowers the [Semaphore], allowing one more thread in. Returns [constant OK] "
"on success, [constant ERR_BUSY] otherwise."
msgstr ""
-"试图é”定这个[Mutex],但并ä¸é˜»å¡žã€‚æˆåŠŸæ—¶è¿”å›ž[常é‡OK],å¦åˆ™è¿”回[常é‡ERR_BUSY]。"
+"试图é”定这个[Mutex],但并ä¸é˜»å¡žã€‚æˆåŠŸæ—¶è¿”å›ž[constant OK],å¦åˆ™è¿”回[constant "
+"ERR_BUSY]。"
#: doc/classes/Semaphore.xml:22
-#, fuzzy
msgid ""
"Tries to wait for the [Semaphore], if its value is zero, blocks until non-"
"zero. Returns [constant OK] on success, [constant ERR_BUSY] otherwise."
msgstr ""
-"试图é”定这个[Mutex],但并ä¸é˜»å¡žã€‚æˆåŠŸæ—¶è¿”å›ž[常é‡OK],å¦åˆ™è¿”回[常é‡ERR_BUSY]。"
+"试图é”定这个[Mutex],但并ä¸é˜»å¡žã€‚æˆåŠŸæ—¶è¿”å›ž[constant OK],å¦åˆ™è¿”回[constant "
+"ERR_BUSY]。"
#: doc/classes/Separator.xml:4
msgid "Base class for separators."
@@ -61835,15 +62907,15 @@ msgstr ""
#: doc/classes/Shader.xml:10 doc/classes/ShaderMaterial.xml:11
msgid "https://docs.godotengine.org/en/3.4/tutorials/shading/index.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/shading/index.html"
+msgstr "https://docs.godotengine.org/zh_CN/stable/tutorials/shading/index.html"
#: doc/classes/Shader.xml:11
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/shading/your_first_shader/"
"what_are_shaders.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/shading/your_first_shader/"
-"what_are_shaders.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/shading/"
+"your_first_shader/what_are_shaders.html"
#: doc/classes/Shader.xml:18
msgid ""
@@ -61897,6 +62969,9 @@ msgid ""
"[b]Note:[/b] Custom defines are not validated by the Godot shader parser, so "
"care should be taken when using them."
msgstr ""
+"返回该ç€è‰²å™¨çš„自定义。自定义å¯ä»¥åœ¨Godot中用于添加ç€è‰²å™¨é€»è¾‘所需的GLSLé¢„å¤„ç†æŒ‡"
+"令(例如:扩展)。\n"
+"[b]注æ„:[/b] 自定义没有ç»è¿‡Godotç€è‰²å™¨è§£æžå™¨çš„验è¯ï¼Œæ‰€ä»¥ä½¿ç”¨æ—¶è¦æ³¨æ„。"
#: doc/classes/Shader.xml:57
msgid "Mode used to draw all 3D objects."
@@ -61917,7 +62992,6 @@ msgid "A material that uses a custom [Shader] program."
msgstr "使用自定义 [Shader] 程åºçš„æè´¨ã€‚"
#: doc/classes/ShaderMaterial.xml:7
-#, fuzzy
msgid ""
"A material that uses a custom [Shader] program to render either items to "
"screen or process particles. You can create multiple materials for the same "
@@ -61927,8 +63001,10 @@ msgid ""
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-"使用自定义[Shader]ç¨‹åºæ¥æ¸²æŸ“å±å¹•ä¸Šçš„ç‰©å“æˆ–ç²’å­çš„æè´¨ã€‚ä½ å¯ä»¥ä¸ºåŒä¸€ä¸ªç€è‰²å™¨åˆ›"
-"建多个æè´¨ï¼Œä½†è¦ä¸ºç€è‰²å™¨ä¸­å®šä¹‰çš„uniformé…ç½®ä¸åŒçš„值。"
+"使用自定义 [Shader] ç¨‹åºæ¸²æŸ“项目以筛选或处ç†ç²’å­çš„æè´¨ã€‚您å¯ä»¥ä¸ºåŒä¸€ä¸ªç€è‰²å™¨"
+"åˆ›å»ºå¤šç§æè´¨ï¼Œä½†å¯ä»¥ä¸ºç€è‰²å™¨ä¸­å®šä¹‰çš„uniformsé…ç½®ä¸åŒçš„值。\n"
+"[b]注æ„:[/b] 由于渲染器é™åˆ¶ï¼Œåœ¨ [GIProbe] 中使用时,自å‘å…‰ [ShaderMaterial] "
+"无法å‘å…‰ã€‚åªæœ‰è‡ªå‘光的 [SpatialMaterial] å¯ä»¥åœ¨ [GIProbe] 中å‘光。"
#: doc/classes/ShaderMaterial.xml:18
msgid ""
@@ -61966,18 +63042,16 @@ msgid "Base class for all 3D shape resources."
msgstr "所有 3D 形状资æºçš„基类。"
#: doc/classes/Shape.xml:7
-#, fuzzy
msgid ""
"Base class for all 3D shape resources. Nodes that inherit from this can be "
"used as shapes for a [PhysicsBody] or [Area] objects."
msgstr ""
-"所有 3D 形状资æºçš„基类。继承自此的节点å¯ç”¨ä½œ [PhysicsBody3D] 或 [Area3D] 对象"
-"的形状。"
+"所有3D形状资æºçš„基类。继承于此的节点å¯ä»¥ä½œä¸º[PhysicsBody]或[Area]对象的形状。"
#: doc/classes/Shape.xml:16
msgid ""
"Returns the [ArrayMesh] used to draw the debug collision for this [Shape]."
-msgstr ""
+msgstr "返回用于绘制此[Shape]的调试碰撞的[ArrayMesh]。"
#: doc/classes/Shape.xml:22
msgid ""
@@ -61988,6 +63062,10 @@ msgid ""
"better for performance, at the cost of accuracy around edges as it makes "
"them less sharp."
msgstr ""
+"形状的碰撞边è·ã€‚åªåœ¨Bullet物ç†è¿ç®—中使用。\n"
+"碰撞边è·å…许通过在形状周围添加é¢å¤–的外壳æ¥ä½¿ç¢°æ’žæ£€æµ‹æ›´æœ‰æ•ˆã€‚当物体é‡å çš„部分"
+"è¶…è¿‡å…¶è¾¹è·æ—¶ï¼Œç¢°æ’žç®—æ³•çš„æˆæœ¬ä¼šæ›´é«˜ï¼Œæ‰€ä»¥è¾¹è·çš„æ•°å€¼è¶Šé«˜å¯¹æ€§èƒ½è¶Šå¥½ï¼Œä½†ä»£ä»·æ˜¯è¾¹"
+"缘的精度会é™ä½Žã€‚"
#: doc/classes/Shape2D.xml:4
msgid "Base class for all 2D shapes."
@@ -62060,14 +63138,13 @@ msgstr ""
"试的è¿åЍ ([code]shape_motion[/code])。"
#: doc/classes/Shape2D.xml:62
-#, fuzzy
msgid ""
"Draws a solid shape onto a [CanvasItem] with the [VisualServer] API filled "
"with the specified [code]color[/code]. The exact drawing method is specific "
"for each shape and cannot be configured."
msgstr ""
-"使用填充了指定 [code] color [/code] 的 [RenderingServer] API 在 [CanvasItem] "
-"上绘制实体形状。确切的绘制方法是针对æ¯ä¸ªå½¢çŠ¶çš„ï¼Œæ— æ³•é…置。"
+"用[VisualServer]API在[CanvasItem]上绘制实体形状,并填充指定的[code]color[/"
+"code]。确切的绘制方法是æ¯ä¸ªå½¢çŠ¶ç‰¹æœ‰çš„ï¼Œæ— æ³•é…置。"
#: doc/classes/Shape2D.xml:68
msgid "The shape's custom solver bias."
@@ -62116,7 +63193,6 @@ msgid "Skeleton for characters and animated objects."
msgstr "角色和动画对象的骨架。"
#: doc/classes/Skeleton.xml:7
-#, fuzzy
msgid ""
"Skeleton provides a hierarchical interface for managing bones, including "
"pose, rest and animation (see [Animation]). It can also use ragdoll "
@@ -62127,11 +63203,12 @@ msgid ""
"with respect to skeleton, so it not the actual global/world transform of the "
"bone."
msgstr ""
-"Skeleton3D æä¾›äº†ç”¨äºŽç®¡ç†éª¨éª¼çš„分层界é¢ï¼ŒåŒ…括姿势ã€ä¼‘æ¯å’ŒåŠ¨ç”»ï¼ˆå‚阅 "
-"[Animation])。它还å¯ä»¥ä½¿ç”¨å¸ƒå¨ƒå¨ƒç‰©ç†(ragdoll physics)。\n"
-"éª¨éª¼ç›¸å¯¹äºŽéª¨æž¶çš„æ•´ä½“å˜æ¢ç”±ä»¥ä¸‹å±‚次顺åºç¡®å®šï¼šé™æ­¢å§¿åŠ¿ã€è‡ªå®šä¹‰å§¿åŠ¿å’Œå§¿åŠ¿ã€‚\n"
-"请注æ„,下é¢çš„â€œå…¨å±€å§¿åŠ¿â€æ˜¯æŒ‡éª¨éª¼ç›¸å¯¹äºŽéª¨éª¼çš„æ•´ä½“å˜æ¢ï¼Œå› æ­¤å®ƒä¸æ˜¯éª¨éª¼çš„实际全"
-"å±€/ä¸–ç•Œå˜æ¢ã€‚"
+"骨架为管ç†éª¨éª¼æä¾›äº†åˆ†å±‚的界é¢ï¼ŒåŒ…括姿势ã€ä¼‘止和动画(å‚阅[Animation])。它还"
+"å¯ä»¥ä½¿ç”¨å¸ƒå¨ƒå¨ƒç‰©ç†ã€‚\n"
+"éª¨éª¼ç›¸å¯¹äºŽéª¨æž¶çš„æ•´ä½“å˜æ¢æ˜¯ç”±ä»¥ä¸‹å±‚次顺åºå†³å®šçš„:休止姿势ã€è‡ªå®šä¹‰å§¿åŠ¿å’Œå§¿"
+"势。\n"
+"注æ„,下é¢çš„ \"global pose\"å…¨å±€å§¿åŠ¿æ˜¯æŒ‡éª¨éª¼ç›¸å¯¹äºŽéª¨æž¶çš„æ•´ä½“å˜æ¢ï¼Œæ‰€ä»¥å®ƒä¸æ˜¯"
+"éª¨éª¼çš„å®žé™…å…¨å±€æˆ–ä¸–ç•Œå˜æ¢ã€‚"
#: doc/classes/Skeleton.xml:20
msgid ""
@@ -62174,14 +63251,13 @@ msgstr ""
"\"全局 \"å˜æ¢ã€‚"
#: doc/classes/Skeleton.xml:73
-#, fuzzy
msgid ""
"Returns the overall transform of the specified bone, with respect to the "
"skeleton, but without any global pose overrides. Being relative to the "
"skeleton frame, this is not the actual \"global\" transform of the bone."
msgstr ""
-"è¿”å›žç›¸å¯¹äºŽéª¨æž¶çš„æŒ‡å®šéª¨éª¼çš„æ•´ä½“å˜æ¢ã€‚ç”±äºŽæ˜¯ç›¸å¯¹äºŽéª¨æž¶çš„ï¼Œè¿™ä¸æ˜¯è¯¥éª¨éª¼çš„实际 "
-"\"全局 \"å˜æ¢ã€‚"
+"è¿”å›žæŒ‡å®šéª¨éª¼çš„æ•´ä½“å˜æ¢ï¼Œç›¸å¯¹äºŽéª¨æž¶ï¼Œä½†æ²¡æœ‰ä»»ä½•全局姿势覆盖。相对于骨架帧,这"
+"䏿˜¯éª¨éª¼çš„实际 \"global\" å˜æ¢ã€‚"
#: doc/classes/Skeleton.xml:80
msgid "Returns the name of the bone at index [code]index[/code]."
@@ -62221,9 +63297,8 @@ msgstr ""
"[b]注æ„:[/b] [code]parent_idx[/code] å¿…é¡»å°äºŽ [code]bone_idx[/code]。"
#: doc/classes/Skeleton.xml:196
-#, fuzzy
msgid "Sets the pose transform for bone [code]bone_idx[/code]."
-msgstr "为骨骼[code]bone_idx[/code]设置休æ¯å˜æ¢ã€‚"
+msgstr "设置骨骼 [code]bone_idx[/code] çš„å§¿åŠ¿å˜æ¢ã€‚"
#: doc/classes/Skeleton.xml:204
msgid "Sets the rest transform for bone [code]bone_idx[/code]."
@@ -62246,7 +63321,8 @@ msgstr ""
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/animation/2d_skeletons.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/animation/2d_skeletons.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/animation/2d_skeletons."
+"html"
#: doc/classes/Skeleton2D.xml:17
msgid ""
@@ -62274,6 +63350,8 @@ msgid ""
"SkeletonIK is used to place the end bone of a [Skeleton] bone chain at a "
"certain point in 3D by rotating all bones in the chain accordingly."
msgstr ""
+"SkeletonIK用于将[Skeleton]骨链的末端骨骼置于3D中的æŸä¸€ç‚¹ï¼Œå¹¶ç›¸åº”地旋转骨链中"
+"的所有骨骼。"
#: doc/classes/SkeletonIK.xml:7
msgid ""
@@ -62308,6 +63386,32 @@ msgid ""
"skeleton_ik_node.set_interpolation(0.0)\n"
"[/codeblock]"
msgstr ""
+"SkeletonIK用于将[Skeleton]骨链的末端骨骼放置在3DæŸä¸€ç‚¹ä¸Šï¼Œå¹¶ç›¸åº”地旋转骨链中"
+"的所有骨骼。游æˆä¸­IK的典型场景是将角色的脚放在地é¢ä¸Šï¼Œæˆ–者将角色的手放在当å‰"
+"æŒæœ‰çš„物体上。SkeletonIK在内部使用FabrikInverseKinematicæ¥è§£å†³éª¨éª¼é“¾ï¼Œå¹¶å°†ç»“"
+"果应用于[Skeleton] [code]bones_global_pose_override[/code]属性中所有å—å½±å“çš„"
+"骨骼链。如果完全应用,这将覆盖任何æ¥è‡ª[Animation]çš„éª¨éª¼å˜æ¢æˆ–用户设置的骨骼自"
+"定义姿势。应用é‡å¯ä»¥ç”¨[code]interpolation[/code]å±žæ€§æ¥æŽ§åˆ¶ã€‚\n"
+"[codeblock]\n"
+"# 在æ¯ä¸€ä¸ªæ–°çš„帧上自动应用IKæ•ˆæžœï¼ˆä¸æ˜¯å½“å‰çš„)。\n"
+"skeleton_ik_node.start()\n"
+"\n"
+"# åªåœ¨å½“å‰å¸§ä¸Šåº”用IK效果\n"
+"skeleton_ik_node.start(true)\n"
+"\n"
+"# åœæ­¢IK效果并é‡ç½®éª¨éª¼ä¸Šçš„bones_global_pose_override\n"
+"skeleton_ik_node.stop()\n"
+"\n"
+"# 应用完整的IK效果\n"
+"skeleton_ik_node.set_interpolation(1.0)\n"
+"\n"
+"# 应用一åŠçš„IK效果\n"
+"skeleton_ik_node.set_interpolation(0.5)\n"
+"\n"
+"# 应用零IK效果(数值为0.01或低于0.01也会移除骨骼上的"
+"bones_global_pose_override)。\n"
+"skeleton_ik_node.set_interpolation(0.0)\n"
+"[/codeblock]"
#: doc/classes/SkeletonIK.xml:35
msgid ""
@@ -62315,6 +63419,8 @@ msgid ""
"the [SceneTree]. Returns null if the parent node was not a [Skeleton] Node "
"when SkeletonIK entered the [SceneTree]."
msgstr ""
+"返回SkeletonIK进入[SceneTree]时存在的父[Skeleton]节点。如果父节点在SkeletonIK"
+"进入[SceneTree]æ—¶ä¸æ˜¯[Skeleton]节点,则返回null。"
#: doc/classes/SkeletonIK.xml:41
msgid ""
@@ -62323,6 +63429,10 @@ msgid ""
"stopped or [method start] was used with the [code]one_time[/code] parameter "
"set to [code]true[/code]."
msgstr ""
+"如果 SkeletonIK 将 IK 效果应用到 [Skeleton] 骨骼的连续帧上,则返回 "
+"[code]true[/code]。如果 SkeletonIK åœæ­¢æˆ–使用 [method start] 且 "
+"[code]one_time[/code] 傿•°è®¾ç½®ä¸º [code]true[/code],则返回 [code]false[/"
+"code]。"
#: doc/classes/SkeletonIK.xml:48
msgid ""
@@ -62331,6 +63441,8 @@ msgid ""
"[code]true[/code], this will take effect immediately but also reset on the "
"next frame."
msgstr ""
+"开始将 IK 效果应用到æ¯ä¸€å¸§çš„ [Skeleton] 骨骼,但åªä¼šåœ¨ä¸‹ä¸€å¸§å¼€å§‹ç”Ÿæ•ˆã€‚如果 "
+"[code]one_time[/code] 为 [code]true[/code],这将立å³ç”Ÿæ•ˆï¼Œä½†ä¼šåœ¨ä¸‹ä¸€å¸§é‡ç½®ã€‚"
#: doc/classes/SkeletonIK.xml:54
msgid ""
@@ -62338,6 +63450,8 @@ msgid ""
"calls [method Skeleton.clear_bones_global_pose_override] to remove existing "
"overrides on all bones."
msgstr ""
+"åœæ­¢å°† IK 效果应用到æ¯å¸§çš„ [Skeleton] 骨骼,并调用 [method Skeleton."
+"clear_bones_global_pose_override] 以移除所有骨骼上的现有覆盖。"
#: doc/classes/SkeletonIK.xml:60
msgid ""
@@ -62347,6 +63461,10 @@ msgid ""
"disable the SkeletonIK. A value at or below [code]0.01[/code] also calls "
"[method Skeleton.clear_bones_global_pose_override]."
msgstr ""
+"IK 效果应用于当å‰éª¨æž¶éª¨éª¼é“¾çš„æ’å€¼ã€‚ [code]1.0[/code] 的值将完全覆盖所有骨架骨"
+"éª¼å˜æ¢ï¼Œè€Œ [code]0.0[/code] 的值将在视觉上ç¦ç”¨ SkeletonIK。等于或低于 "
+"[code]0.01[/code] 的值也调用 [method Skeleton."
+"clear_bones_global_pose_override]。"
#: doc/classes/SkeletonIK.xml:63
msgid ""
@@ -62356,28 +63474,35 @@ msgid ""
"bones. The middle chain bone position will be linearly interpolated with the "
"magnet position."
msgstr ""
+"IK 链的次è¦ç›®æ ‡ä½ç½®ï¼ˆé¦–先是 [member target] 属性或 [member target_node])。使"
+"用ç£é“ä½ç½®ï¼ˆæžç‚¹ç›®æ ‡ï¼‰æ¥æŽ§åˆ¶ IK 链的弯曲。仅当骨骼链具有 2 ä¸ªä»¥ä¸Šçš„éª¨éª¼æ—¶æ‰æœ‰"
+"效。中间链骨ä½ç½®å°†ä¸Žç£é“ä½ç½®è¿›è¡Œçº¿æ€§æ’值。"
#: doc/classes/SkeletonIK.xml:66
msgid ""
"Number of iteration loops used by the IK solver to produce more accurate "
"(and elegant) bone chain results."
-msgstr ""
+msgstr "IK解算器使用的迭代循环的数é‡ï¼Œä»¥äº§ç”Ÿæ›´å‡†ç¡®ï¼ˆå’Œä¼˜é›…)的骨链效果。"
#: doc/classes/SkeletonIK.xml:69
msgid ""
"The minimum distance between bone and goal target. If the distance is below "
"this value, the IK solver stops further iterations."
msgstr ""
+"骨骼与目标对象之间的最å°è·ç¦»ã€‚如果è·ç¦»ä½ŽäºŽè¿™ä¸ªå€¼ï¼ŒIKè§£ç®—å™¨å°†åœæ­¢è¿›ä¸€æ­¥çš„è¿­"
+"代。"
#: doc/classes/SkeletonIK.xml:72
msgid ""
"If [code]true[/code] overwrites the rotation of the tip bone with the "
"rotation of the [member target] (or [member target_node] if defined)."
msgstr ""
+"如果[code]true[/code],则用 [member target] (或者如果定义了[member "
+"target_node]])的旋转覆盖尖端骨骼的旋转。"
#: doc/classes/SkeletonIK.xml:75
msgid "The name of the current root bone, the first bone in the IK chain."
-msgstr ""
+msgstr "当剿 ¹éª¨çš„å称,å³IK链中的第一个骨。"
#: doc/classes/SkeletonIK.xml:78
msgid ""
@@ -62386,18 +63511,25 @@ msgid ""
"[member target_node] path is available the nodes transform is used instead "
"and this property is ignored."
msgstr ""
+"放置尖端骨骼的 IK 链的第一个目标,如果 [member override_tip_basis] 是 "
+"[code]true[/code],尖端骨骼的旋转方å¼ã€‚如果 [member target_node] 路径å¯ç”¨ï¼Œåˆ™"
+"ä½¿ç”¨èŠ‚ç‚¹å˜æ¢ï¼Œå¹¶å¿½ç•¥æ­¤å±žæ€§ã€‚"
#: doc/classes/SkeletonIK.xml:81
msgid ""
"Target node [NodePath] for the IK chain. If available, the node's current "
"[Transform] is used instead of the [member target] property."
msgstr ""
+"IK链的目标节点[NodePath]。如果有的è¯ï¼Œå°†ä½¿ç”¨èŠ‚ç‚¹å½“å‰çš„[Transform]ï¼Œè€Œä¸æ˜¯"
+"[member target]属性。"
#: doc/classes/SkeletonIK.xml:84
msgid ""
"The name of the current tip bone, the last bone in the IK chain placed at "
"the [member target] transform (or [member target_node] if defined)."
msgstr ""
+"当å‰å°–端骨骼的å称,IK 链中放置在 [member target] å˜æ¢å¤„的最åŽä¸€ä¸ªéª¨éª¼ï¼ˆæˆ–者"
+"已定义 [member target_node])。"
#: doc/classes/SkeletonIK.xml:87
msgid ""
@@ -62405,13 +63537,14 @@ msgid ""
"magnet target (pole target) when calculating the bone chain. Use the magnet "
"position (pole target) to control the bending of the IK chain."
msgstr ""
+"如果[code]true[/code],指示IK求解器在解算器链时考虑次è¦ç£é“目标(æžç‚¹ç›®æ ‡ï¼‰ã€‚"
+"使用ç£é“ä½ç½®ï¼ˆç£æžç›®æ ‡ï¼‰æ¥æŽ§åˆ¶IK链的弯曲。"
#: doc/classes/Sky.xml:4 doc/classes/Sky.xml:7
msgid "The base class for [PanoramaSky] and [ProceduralSky]."
-msgstr ""
+msgstr "[PanoramaSky] 和 [ProceduralSky] 的基类。"
#: doc/classes/Sky.xml:15
-#, fuzzy
msgid ""
"The [Sky]'s radiance map size. The higher the radiance map size, the more "
"detailed the lighting from the [Sky] will be.\n"
@@ -62423,10 +63556,12 @@ msgid ""
"and performance. Be careful when using high radiance size values as these "
"can cause crashes on low-end GPUs."
msgstr ""
-"[Sky]çš„è¾ç…§åº¦è´´å›¾å¤§å°ã€‚è¾ç…§åº¦è´´å›¾å°ºå¯¸è¶Šå¤§ï¼Œ[Sky]的照明就越细致。\n"
-"有关值,请å‚阅 [enum RadianceSize] 常é‡ã€‚\n"
-"[b]注æ„:[/b] æŸäº›ç¡¬ä»¶åœ¨æ›´é«˜çš„è¾ç…§åº¦å°ºå¯¸ä¸‹ä¼šå‡ºçŽ°é—®é¢˜ï¼Œå°¤å…¶æ˜¯ [constant "
-"RADIANCE_SIZE_512] åŠä»¥ä¸Šã€‚仅在高端硬件上使用如此高的值。"
+"[Sky]çš„è¾å°„贴图大å°ã€‚è¾å°„贴图尺寸越大,[Sky]的照明就越详细。\n"
+"有关值,å‚阅 [enum RadianceSize] 常é‡ã€‚\n"
+"[b]注æ„:[/b] 如果您的项目中有éžå¸¸æ¸…æ™°çš„å射表é¢ï¼Œå¹¶ä¸”ä¸ä½¿ç”¨ "
+"[ReflectionProbe] 或 [GIProbe],您æ‰ä¼šå—益于高è¾å°„尺寸。对于大多数项目,将 "
+"[member radiance_size] ä¿æŒä¸ºé»˜è®¤å€¼æ˜¯è§†è§‰æ•ˆæžœå’Œæ€§èƒ½ä¹‹é—´çš„æœ€ä½³æŠ˜è¡·ã€‚使用高è¾å°„"
+"大å°å€¼æ—¶è¦å°å¿ƒï¼Œå› ä¸ºè¿™å¯èƒ½ä¼šå¯¼è‡´ä½Žç«¯ GPU 崩溃。"
#: doc/classes/Sky.xml:22
msgid "Radiance texture size is 32×32 pixels."
@@ -62454,6 +63589,9 @@ msgid ""
"[b]Note:[/b] [constant RADIANCE_SIZE_1024] is not exposed in the inspector "
"as it is known to cause GPU hangs on certain systems."
msgstr ""
+"è¾å°„纹ç†å°ºå¯¸ä¸º1024×1024åƒç´ ã€‚\n"
+"[b]注æ„:[/b] [constant RADIANCE_SIZE_1024]在检查器中没有公开,因为它在æŸäº›ç³»"
+"统上会导致GPU挂起。"
#: doc/classes/Sky.xml:41
msgid ""
@@ -62461,6 +63599,9 @@ msgid ""
"[b]Note:[/b] [constant RADIANCE_SIZE_2048] is not exposed in the inspector "
"as it is known to cause GPU hangs on certain systems."
msgstr ""
+"è¾å°„纹ç†å°ºå¯¸ä¸º2048×2048åƒç´ ã€‚\n"
+"[b]注æ„:[/b] [constant RADIANCE_SIZE_2048]没有在检查器中公开,因为它在æŸäº›ç³»"
+"统上会导致GPU挂起。"
#: doc/classes/Sky.xml:45
msgid "Represents the size of the [enum RadianceSize] enum."
@@ -62476,6 +63617,9 @@ msgid ""
"[b]Note:[/b] The [signal Range.changed] and [signal Range.value_changed] "
"signals are part of the [Range] class which this class inherits from."
msgstr ""
+"GUI滑å—的基类。\n"
+"[b]注æ„:[/b] [signal Range.changed]å’Œ[signal Range.value_changed]ä¿¡å·æ˜¯è¯¥ç±»"
+"继承的[Range]类的一部分。"
#: doc/classes/Slider.xml:16
msgid ""
@@ -62502,15 +63646,13 @@ msgid ""
msgstr "如果 [code]true[/code],滑å—将显示最å°å€¼å’Œæœ€å¤§å€¼çš„刻度。"
#: doc/classes/SliderJoint.xml:4
-#, fuzzy
msgid "Slider between two PhysicsBodies in 3D."
-msgstr "3D ä¸­ä¸¤ä¸ªç‰©ä½“ä¹‹é—´çš„æ´»å¡žå¼æ»‘å—。"
+msgstr "在3D中两个物ç†ä½“之间的滑å—。"
#: doc/classes/SliderJoint.xml:7
-#, fuzzy
msgid ""
"Slides across the X axis of the pivot object. See also [Generic6DOFJoint]."
-msgstr "在中心对象的 X 轴上滑动。"
+msgstr "在枢轴对象的X轴上滑动。å‚阅[Generic6DOFJoint]。"
#: doc/classes/SliderJoint.xml:28
msgid ""
@@ -62574,7 +63716,8 @@ msgstr ""
#: doc/classes/SoftBody.xml:10
msgid "https://docs.godotengine.org/en/3.4/tutorials/physics/soft_body.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/physics/soft_body.html"
+msgstr ""
+"https://docs.godotengine.org/zh_CN/stable/tutorials/physics/soft_body.html"
#: doc/classes/SoftBody.xml:44
msgid "Returns local translation of a vertex in the surface array."
@@ -62612,7 +63755,7 @@ msgstr ""
"并䏿˜¯å¯è§†åŒ–的。一个å¯ç¢°æ’žç‰©ä½“å¯ä»¥ä½¿ç”¨è¿™äº›å±‚æ¥é€‰æ‹©å®ƒå¯ä»¥ä¸Žå“ªäº›ç‰©ä½“碰撞,使用"
"collision_mask属性。\n"
"如果对象A在对象B所扫æçš„任何层中,或者对象B在对象A所扫æçš„任何层中,就会检测"
-"到接触。更多信æ¯è¯·å‚阅文档中的[url=https://docs.godotengine.org/en/3.4/"
+"到接触。更多信æ¯è¯·å‚阅文档中的[url=https://docs.godotengine.org/zh_CN/stable/"
"tutorials/physics/physics_introduction.html#collision-layers-and-masks]碰撞层"
"和掩ç [/url]。"
@@ -62623,25 +63766,25 @@ msgid ""
"layers-and-masks]Collision layers and masks[/url] in the documentation for "
"more information."
msgstr ""
+"此软体扫æç¢°æ’žçš„物ç†å±‚。更多信æ¯è¯·å‚阅文档中的[url=https://docs.godotengine."
+"org/zh_CN/stable/tutorials/physics/physics_introduction.html#collision-"
+"layers-and-masks]碰撞层和掩ç [/url]。"
#: doc/classes/SoftBody.xml:105
-#, fuzzy
msgid "[NodePath] to a [CollisionObject] this SoftBody should avoid clipping."
-msgstr "[NodePath] 到 [CollisionObject3D] æ­¤ SoftBody3D 应é¿å…剪è£ã€‚"
+msgstr "[NodePath]到[CollisionObject],这个软体应该é¿å…剪è£ã€‚"
#: doc/classes/SoftBody.xml:108
-#, fuzzy
msgid ""
"If [code]true[/code], the [SoftBody] is simulated in physics. Can be set to "
"[code]false[/code] to pause the physics simulation."
msgstr ""
-"如果[code]true[/code],触摸的状æ€ä¸ºæŒ‰ä¸‹ã€‚如果[code]false[/code],触摸的状æ€è¢«"
-"释放。"
+"如果[code]true[/code],[SoftBody]ä¼šç‰©ç†æ¨¡æ‹Ÿã€‚å¯ä»¥è®¾ç½®ä¸º[code]false[/code]æ¥æš‚"
+"åœç‰©ç†æ¨¡æ‹Ÿã€‚"
#: doc/classes/SoftBody.xml:115
-#, fuzzy
msgid "If [code]true[/code], the [SoftBody] will respond to [RayCast]s."
-msgstr "如果 [code]true[/code],则 [SoftBody3D] å°†å“应 [RayCast3D]。"
+msgstr "如果[code]true[/code],则 [SoftBody] å°†å“应 [RayCast]。"
#: doc/classes/SoftBody.xml:118
msgid ""
@@ -62658,7 +63801,6 @@ msgid "Most basic 3D game object, parent of all 3D-related nodes."
msgstr "最基本的3D游æˆå¯¹è±¡ï¼Œæ‰€æœ‰ä¸Ž3D节点相关的父节点。"
#: doc/classes/Spatial.xml:7
-#, fuzzy
msgid ""
"Most basic 3D game object, with a 3D [Transform] and visibility settings. "
"All other 3D game objects inherit from Spatial. Use [Spatial] as a parent "
@@ -62674,20 +63816,21 @@ msgid ""
"to radians, use [method @GDScript.deg2rad]."
msgstr ""
"最基本的3D游æˆå¯¹è±¡ï¼Œå…·æœ‰3D[Transform]å’Œå¯è§æ€§è®¾ç½®ã€‚所有其他的3D游æˆå¯¹è±¡éƒ½ç»§æ‰¿"
-"自Node3D。使用[Node3D]作为父节点,在3D项目中移动ã€ç¼©æ”¾ã€æ—‹è½¬å’Œæ˜¾ç¤º/éšè—å­èŠ‚"
+"自空间。使用[Spatial]作为父节点,在3D项目中移动ã€ç¼©æ”¾ã€æ—‹è½¬å’Œæ˜¾ç¤º/éšè—å­èŠ‚"
"点。\n"
-"除éž[Node3D]对象被设置为顶层,å¦åˆ™å¹³å·®æ“作(旋转ã€ç¼©æ”¾ã€å¹³ç§»ï¼‰ä¼šåœ¨çˆ¶èŠ‚ç‚¹çš„æœ¬"
-"åœ°åæ ‡ç³»ä¸­è¿›è¡Œã€‚åœ¨è¿™ä¸ªåæ ‡ç³»ä¸­çš„仿射æ“作对应于对[Node3D]çš„å˜æ¢çš„直接仿射æ“"
-"作。下é¢çš„æœ¬åœ°ä¸€è¯æŒ‡çš„æ˜¯è¿™ä¸ªå标系。附加到[Node3D]å¯¹è±¡æœ¬èº«çš„åæ ‡ç³»è¢«ç§°ä¸ºå¯¹è±¡-"
-"æœ¬åœ°åæ ‡ç³»ã€‚\n"
+"除éž[Spatial]对象被设置为顶层,å¦åˆ™ä»¿å°„æ“作(旋转ã€ç¼©æ”¾ã€å¹³ç§»ï¼‰ä¼šåœ¨çˆ¶èŠ‚ç‚¹çš„æœ¬"
+"åœ°åæ ‡ç³»ä¸­è¿›è¡Œã€‚åœ¨è¿™ä¸ªåæ ‡ç³»ä¸­çš„仿射æ“作对应于对[Spatial]å˜æ¢çš„直接仿射è¿ç®—。"
+"下é¢çš„æœ¬åœ°ä¸€è¯æŒ‡çš„æ˜¯å±€éƒ¨å标系。附加到[Spatial]å¯¹è±¡æœ¬èº«çš„åæ ‡ç³»è¢«ç§°ä¸ºå¯¹è±¡-本"
+"åœ°åæ ‡ç³»ã€‚\n"
"[b]注æ„:[/b]除éžå¦æœ‰è§„å®šï¼Œæ‰€æœ‰æœ‰è§’åº¦å‚æ•°çš„æ–¹æ³•必须将角度指定为[i]弧度[/i]。"
-"è¦å°†åº¦æ•°è½¬æ¢ä¸ºå¼§åº¦ï¼Œè¯·ä½¿ç”¨[method @GDScript.deg2rad]。"
+"使用[method @GDScript.deg2rad]将度数转æ¢ä¸ºå¼§åº¦ã€‚"
#: doc/classes/Spatial.xml:12
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/3d/introduction_to_3d.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/3d/introduction_to_3d.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/introduction_to_3d."
+"html"
#: doc/classes/Spatial.xml:13 doc/classes/Vector3.xml:16
msgid "https://github.com/godotengine/godot-demo-projects/tree/master/3d"
@@ -62733,11 +63876,11 @@ msgid ""
msgstr "ç¦ç”¨è¯¥èŠ‚ç‚¹çš„æ¸²æŸ“ã€‚å®ƒå°†[member visible]改为[code]false[/code]。"
#: doc/classes/Spatial.xml:65
-#, fuzzy
msgid ""
"Returns whether node notifies about its local transformation changes. "
"[Spatial] will not propagate this by default."
-msgstr "返回节点是å¦é€šçŸ¥å…¶å±€éƒ¨å˜æ¢çš„å˜åŒ–。[Node3D]默认情况下ä¸ä¼šå¯¹å…¶è¿›è¡Œé€šçŸ¥ã€‚"
+msgstr ""
+"返回节点是å¦é€šçŸ¥å…¶å±€éƒ¨å˜æ¢çš„å˜åŒ–。[Spatial]默认情况下ä¸ä¼šå¯¹æ­¤è¿›è¡Œä¼ æ’­ã€‚"
#: doc/classes/Spatial.xml:71
msgid ""
@@ -62752,12 +63895,12 @@ msgid ""
msgstr "返回该节点是å¦è¢«è®¾ç½®ä¸ºToplevel,也就是是å¦å¿½ç•¥å…¶çˆ¶èŠ‚ç‚¹çš„å˜æ¢ã€‚"
#: doc/classes/Spatial.xml:83
-#, fuzzy
msgid ""
"Returns whether the node notifies about its global and local transformation "
"changes. [Spatial] will not propagate this by default."
msgstr ""
-"返回节点是å¦é€šçŸ¥å…¶å…¨å±€å’Œå±€éƒ¨çš„å˜æ¢å˜åŒ–。[Node3D]默认情况下ä¸ä¼šä¼ æ’­è¿™ä¸ªã€‚"
+"返回节点是å¦é€šçŸ¥å…¶å…¨å±€å’Œå±€éƒ¨çš„å˜æ¢å˜åŒ–。默认情况下,[Spatial]ä¸ä¼šå¯¹æ­¤è¿›è¡Œä¼ "
+"播。"
#: doc/classes/Spatial.xml:97
msgid ""
@@ -62851,20 +63994,20 @@ msgid ""
msgstr "设置节点是å¦å¿½ç•¥å…¶è½¬æ¢ï¼ˆå…¨å±€æˆ–局部)改å˜çš„通知。"
#: doc/classes/Spatial.xml:192
-#, fuzzy
msgid ""
"Sets whether the node notifies about its local transformation changes. "
"[Spatial] will not propagate this by default."
-msgstr "设置节点是å¦é€šçŸ¥å…¶æœ¬åœ°è½¬æ¢æ›´æ”¹ã€‚[ Node3D ]默认情况下ä¸ä¼šä¼ æ’­æ­¤æ›´æ”¹ã€‚"
+msgstr ""
+"设置节点是å¦é€šçŸ¥å®ƒçš„å±€éƒ¨å˜æ¢å˜åŒ–。默认情况下,[Spatial]ä¸ä¼šä¼ æ’­è¿™ä¸€ç‚¹ã€‚"
#: doc/classes/Spatial.xml:199
-#, fuzzy
msgid ""
"Sets whether the node notifies about its global and local transformation "
"changes. [Spatial] will not propagate this by default, unless it is in the "
"editor context and it has a valid gizmo."
msgstr ""
-"设置节点是å¦é€šçŸ¥å…¶å…¨å±€å’Œæœ¬åœ°è½¬æ¢æ›´æ”¹ã€‚[ Node3D ]默认情况下ä¸ä¼šä¼ æ’­æ­¤æ›´æ”¹ã€‚"
+"设置节点是å¦é€šçŸ¥å…¶å…¨å±€å’Œå±€éƒ¨å˜æ¢çš„å˜åŒ–。[Spatial]默认情况下ä¸ä¼šä¼ æ’­ï¼Œé™¤éžæ˜¯åœ¨"
+"编辑器上下文中,并且它有一个有效的gizmo。"
#: doc/classes/Spatial.xml:205
msgid ""
@@ -62903,23 +64046,20 @@ msgid ""
msgstr "通过给定的åç§»é‡[Vector3]改å˜èŠ‚ç‚¹åœ¨å±€éƒ¨ç©ºé—´ä¸­çš„ä½ç½®ã€‚"
#: doc/classes/Spatial.xml:240
-#, fuzzy
msgid "Updates the [SpatialGizmo] of this node."
-msgstr "更新该节点的[Node3DGizmo]。"
+msgstr "更新该节点的[SpatialGizmo]。"
#: doc/classes/Spatial.xml:246
-#, fuzzy
msgid ""
"The [SpatialGizmo] for this node. Used for example in [EditorSpatialGizmo] "
"as custom visualization and editing handles in Editor."
msgstr ""
-"这个节点的[Node3DGizmo]。例如在[EditorNode3DGizmo]中作为自定义å¯è§†åŒ–和编辑å¥"
-"柄使用。"
+"此节点的 [SpatialGizmo]。例如在 [EditorSpatialGizmo] 中用作编辑器中的自定义å¯"
+"视化和编辑手柄。"
#: doc/classes/Spatial.xml:249
-#, fuzzy
msgid "World space (global) [Transform] of this node."
-msgstr "这个节点的World3D空间(全局)[Transform]。"
+msgstr "此节点的世界空间(全局)[Transform]。"
#: doc/classes/Spatial.xml:252
msgid ""
@@ -62971,20 +64111,19 @@ msgstr ""
msgid ""
"Emitted by portal system gameplay monitor when a node enters the gameplay "
"area."
-msgstr ""
+msgstr "当节点进入游æˆåŒºåŸŸæ—¶ç”±å…¥å£ç³»ç»Ÿæ¸¸æˆç›‘视器触å‘。"
#: doc/classes/Spatial.xml:279
msgid ""
"Emitted by portal system gameplay monitor when a node exits the gameplay "
"area."
-msgstr ""
+msgstr "当节点退出游æˆåŒºåŸŸæ—¶ï¼Œç”±ç•Œé¢ç³»ç»Ÿçš„æ¸¸æˆç›‘视器触å‘。"
#: doc/classes/Spatial.xml:284
msgid "Emitted when node visibility changes."
msgstr "当节点å¯è§æ€§æ›´æ”¹æ—¶è§¦å‘。"
#: doc/classes/Spatial.xml:290
-#, fuzzy
msgid ""
"Spatial nodes receives this notification when their global transform "
"changes. This means that either the current or a parent node changed its "
@@ -62993,41 +64132,39 @@ msgid ""
"need to ask for it, with [method set_notify_transform]. The notification is "
"also sent if the node is in the editor context and it has a valid gizmo."
msgstr ""
-"当Node3DèŠ‚ç‚¹çš„å…¨å±€å˜æ¢å‘生å˜åŒ–时,会收到这个通知。这æ„味ç€å½“å‰èŠ‚ç‚¹æˆ–çˆ¶èŠ‚ç‚¹æ”¹"
-"å˜äº†å®ƒçš„å˜æ¢ã€‚\n"
-"为了使[constant NOTIFICATION_TRANSFORM_CHANGED]呿Œ¥ä½œç”¨ï¼Œç”¨æˆ·é¦–先需è¦é€šè¿‡"
-"[method set_notify_transform]æ¥è¦æ±‚它。"
+"å½“ç©ºé—´èŠ‚ç‚¹çš„å…¨å±€å˜æ¢å‘生å˜åŒ–时,空间节点会收到这个通知。这æ„味ç€å½“å‰èŠ‚ç‚¹æˆ–çˆ¶"
+"节点改å˜äº†å®ƒçš„å˜æ¢ã€‚\n"
+"为了使[constant NOTIFICATION_TRANSFORM_CHANGED]生效,用户首先需è¦ç”¨[method "
+"set_notify_transform]å‘é€è¯·æ±‚。如果节点是在编辑器的上下文中,并且它有一个有效"
+"çš„gizmo,那么该通知也会被å‘é€ã€‚"
#: doc/classes/Spatial.xml:294
-#, fuzzy
msgid ""
"Spatial nodes receives this notification when they are registered to new "
"[World] resource."
-msgstr "当Node3D节点被注册到新的[World3D]èµ„æºæ—¶ï¼Œå®ƒä»¬ä¼šæ”¶åˆ°è¿™ä¸ªé€šçŸ¥ã€‚"
+msgstr "空间节点在注册到新的 [World] èµ„æºæ—¶ä¼šæ”¶åˆ°æ­¤é€šçŸ¥ã€‚"
#: doc/classes/Spatial.xml:297
-#, fuzzy
msgid ""
"Spatial nodes receives this notification when they are unregistered from "
"current [World] resource."
-msgstr "当Node3D节点从当å‰[World3D]资æºä¸­å–消注册时,它们会收到这个通知。"
+msgstr "当空间节点从当å‰çš„ [World] 资æºä¸­å–消注册时,它们会收到此通知。"
#: doc/classes/Spatial.xml:300
-#, fuzzy
msgid "Spatial nodes receives this notification when their visibility changes."
-msgstr "当Node3D节点的å¯è§æ€§å‘生å˜åŒ–时,会收到这个通知。"
+msgstr "空间节点在其å¯è§æ€§å‘生å˜åŒ–时会收到此通知。"
#: doc/classes/Spatial.xml:303
msgid ""
"Spatial nodes receives this notification if the portal system gameplay "
"monitor detects they have entered the gameplay area."
-msgstr ""
+msgstr "如果门户系统游æˆç›‘视器检测到它们已进入游æˆåŒºåŸŸï¼Œç©ºé—´èŠ‚ç‚¹ä¼šæ”¶åˆ°æ­¤é€šçŸ¥ã€‚"
#: doc/classes/Spatial.xml:306
msgid ""
"Spatial nodes receives this notification if the portal system gameplay "
"monitor detects they have exited the gameplay area."
-msgstr ""
+msgstr "如果门户系统游æˆç›‘视器检测到它们已退出游æˆåŒºåŸŸï¼Œç©ºé—´èŠ‚ç‚¹ä¼šæ”¶åˆ°æ­¤é€šçŸ¥ã€‚"
#: doc/classes/SpatialMaterial.xml:4
msgid "Default 3D rendering material."
@@ -63044,7 +64181,8 @@ msgstr ""
#: doc/classes/SpatialMaterial.xml:10
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/spatial_material.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/3d/spatial_material.html"
+msgstr ""
+"https://docs.godotengine.org/zh_CN/stable/tutorials/3d/spatial_material.html"
#: doc/classes/SpatialMaterial.xml:17
msgid "Returns [code]true[/code], if the specified [enum Feature] is enabled."
@@ -63064,19 +64202,17 @@ msgid ""
msgstr "返回与指定的 [enum TextureParam] å…³è”çš„ [Texture]。"
#: doc/classes/SpatialMaterial.xml:39
-#, fuzzy
msgid ""
"If [code]true[/code], enables the specified [enum Feature]. Many features "
"that are available in [SpatialMaterial]s need to be enabled before use. This "
"way the cost for using the feature is only incurred when specified. Features "
"can also be enabled by setting the corresponding member to [code]true[/code]."
msgstr ""
-"如果为 [code]true[/code],å¯ç”¨æŒ‡å®šçš„ [enum Feature]。很多在 [BaseMaterial3D] "
-"中å¯ä»¥ä½¿ç”¨çš„特性都需è¦åœ¨ä½¿ç”¨å‰å¯ç”¨ã€‚è¿™æ ·è¯¥ç‰¹æ€§çš„æˆæœ¬åªæœ‰åœ¨æŒ‡å®šæ—¶æ‰ä¼šäº§ç”Ÿã€‚也"
-"å¯ä»¥é€šè¿‡å°†ç›¸åº”çš„æˆå‘˜è®¾ç½®ä¸º [code]true[/code] æ¥å¯ç”¨ç‰¹å¾ã€‚"
+"如果 [code]true[/code],则å¯ç”¨æŒ‡å®šçš„ [enum Feature]。 [SpatialMaterial]s 中å¯"
+"用的许多功能需è¦åœ¨ä½¿ç”¨å‰å¯ç”¨ã€‚è¿™æ ·ï¼Œåªæœ‰åœ¨æŒ‡å®šæ—¶æ‰ä¼šäº§ç”Ÿä½¿ç”¨è¯¥åŠŸèƒ½çš„æˆæœ¬ã€‚也"
+"å¯ä»¥é€šè¿‡å°†ç›¸åº”çš„æˆå‘˜è®¾ç½®ä¸º [code]true[/code] æ¥å¯ç”¨åŠŸèƒ½ã€‚"
#: doc/classes/SpatialMaterial.xml:47
-#, fuzzy
msgid ""
"If [code]true[/code], enables the specified flag. Flags are optional "
"behaviour that can be turned on and off. Only one flag can be enabled at a "
@@ -63085,16 +64221,18 @@ msgid ""
"setting the corresponding member to [code]true[/code]. See [enum Flags] "
"enumerator for options."
msgstr ""
-"如果 [code]true[/code],å¯ç”¨æŒ‡å®šçš„æ ‡å¿—。标志是å¯é€‰çš„行为,å¯ä»¥æ‰“开和关闭。使"
+"如果 [code]true[/code],则å¯ç”¨æŒ‡å®šçš„æ ‡å¿—。标志是å¯ä»¥æ‰“开和关闭的å¯é€‰è¡Œä¸ºã€‚使"
"用该函数一次åªèƒ½å¯ç”¨ä¸€ä¸ªæ ‡å¿—,ä¸èƒ½å°†æ ‡å¿—æžšä¸¾å™¨è¿›è¡Œä½æŽ©ç ï¼Œä»¥ä¸€æ¬¡å¯ç”¨æˆ–ç¦ç”¨å¤š"
-"个标志。也å¯ä»¥é€šè¿‡å°†ç›¸åº”çš„æˆå‘˜è®¾ç½®ä¸º[code]true[/code]æ¥å¯ç”¨æ ‡å¿—。选项å‚阅 "
-"[enum Flags] 枚举器。"
+"个标志。也å¯ä»¥é€šè¿‡å°†ç›¸åº”æˆå‘˜è®¾ç½®ä¸º [code]true[/code] æ¥å¯ç”¨æ ‡å¿—。有关选项,请"
+"å‚阅 [enum Flags] 枚举器。"
#: doc/classes/SpatialMaterial.xml:55
msgid ""
"Sets the [Texture] to be used by the specified [enum TextureParam]. This "
"function is called when setting members ending in [code]*_texture[/code]."
msgstr ""
+"设置指定的 [enum TextureParam] 所使用的 [Texture]。该函数在设置以 "
+"[code]*_texture[/code] 结尾的æˆå‘˜æ—¶è°ƒç”¨ã€‚"
#: doc/classes/SpatialMaterial.xml:61
msgid "The material's base color."
@@ -63178,7 +64316,6 @@ msgid ""
msgstr "设置清漆效果的强度。设置为 [code]0[/code] 与ç¦ç”¨æ¸…漆效果相åŒã€‚"
#: doc/classes/SpatialMaterial.xml:94
-#, fuzzy
msgid ""
"If [code]true[/code], clearcoat rendering is enabled. Adds a secondary "
"transparent pass to the lighting calculation resulting in an added specular "
@@ -63187,9 +64324,11 @@ msgid ""
"[b]Note:[/b] Clearcoat rendering is not visible if the material has [member "
"flags_unshaded] set to [code]true[/code]."
msgstr ""
-"如果[code]true[/code],则å¯ç”¨é€æ˜Žæ¶‚å±‚æ¸²æŸ“ã€‚åœ¨å…‰ç…§è®¡ç®—ä¸­æ·»åŠ ä¸€ä¸ªäºŒçº§é€æ˜Žé€šé“,"
-"从而产生一个é¢å¤–çš„é•œé¢æ–‘点。这使得æè´¨çœ‹èµ·æ¥å¥½åƒæœ‰ä¸€ä¸ªé€æ˜Žå±‚,å¯ä»¥æ˜¯å…‰æ»‘或粗"
-"糙的。"
+"如果 [code]true[/code],则å¯ç”¨æ¸…æ¼†æ¸²æŸ“ã€‚åœ¨ç…§æ˜Žè®¡ç®—ä¸­æ·»åŠ äºŒçº§é€æ˜Žé€šè·¯ï¼Œä»Žè€Œå¯¼"
+"致添加镜é¢åå°„æ–‘ç‚¹ã€‚è¿™ä½¿å¾—ææ–™çœ‹èµ·æ¥å¥½åƒæœ‰ä¸€å±‚逿˜Žå±‚,å¯ä»¥æ˜¯æœ‰å…‰æ³½çš„也å¯ä»¥æ˜¯"
+"粗糙的。\n"
+"[b]注æ„:[/b]如果æè´¨å°† [member flags_unshaded] 设置为 [code]true[/code],则"
+"逿˜Žæ¶‚层渲染ä¸å¯è§ã€‚"
#: doc/classes/SpatialMaterial.xml:98
msgid ""
@@ -63214,6 +64353,8 @@ msgid ""
"along the view ray to determine occlusion and parrallax. This can be very "
"performance demanding, but results in more realistic looking depth mapping."
msgstr ""
+"如果 [code]true[/code],ç€è‰²å™¨å°†åœ¨æ²¿è§†å›¾å°„çº¿çš„å¤šä¸ªç‚¹ä¸Šè¯»å–æ·±åº¦çº¹ç†ä»¥ç¡®å®šé®æŒ¡"
+"和视差。这å¯èƒ½å¯¹æ€§èƒ½è¦æ±‚很高,但会产生更逼真的深度映射。"
#: doc/classes/SpatialMaterial.xml:107
msgid ""
@@ -63223,6 +64364,10 @@ msgid ""
"the same material. The value of [member depth_enabled] will be ignored if "
"[member uv1_triplanar] is enabled."
msgstr ""
+"如果 [code]true[/code],则å¯ç”¨æ·±åº¦æ˜ å°„ï¼ˆä¹Ÿç§°ä¸ºâ€œè§†å·®æ˜ å°„â€æˆ–“高度映射â€ï¼‰ã€‚å¦è§ "
+"[member normal_enabled]。\n"
+"[b]注æ„:[/b]如果在åŒä¸€æè´¨ä¸Šä½¿ç”¨ä¸‰å¹³é¢è´´å›¾ï¼Œåˆ™ä¸æ”¯æŒæ·±åº¦è´´å›¾ã€‚如果å¯ç”¨ "
+"[member uv1_triplanar],则 [member depth_enabled] 的值将被忽略。"
#: doc/classes/SpatialMaterial.xml:111
msgid ""
@@ -63230,6 +64375,8 @@ msgid ""
"the depth effect. This may be necessary if you have encoded your binormals "
"in a way that is conflicting with the depth effect."
msgstr ""
+"如果 [code]true[/code],则在深度效果中使用之å‰ä¼šç¿»è½¬å‰¯æ³•线的方å‘。如果你对你"
+"çš„å‰¯æ³•çº¿çš„ç¼–ç æ–¹å¼ä¸Žæ·±åº¦æ•ˆæžœæœ‰å†²çªï¼Œè¿™å¯èƒ½æ˜¯å¿…è¦çš„。"
#: doc/classes/SpatialMaterial.xml:114
msgid ""
@@ -63237,6 +64384,8 @@ msgid ""
"the depth effect. This may be necessary if you have encoded your tangents in "
"a way that is conflicting with the depth effect."
msgstr ""
+"如果 [code]true[/code],切线方å‘在深度效果中使用å‰ä¼šç¿»è½¬ã€‚如果你对切线的编ç "
+"æ–¹å¼ä¸Žæ·±åº¦æ•ˆæžœæœ‰å†²çªï¼Œè¿™å¯èƒ½æ˜¯å¿…è¦çš„。"
#: doc/classes/SpatialMaterial.xml:117
msgid ""
@@ -63245,6 +64394,8 @@ msgid ""
"will be more performance demanding while a lower number may not look as "
"crisp."
msgstr ""
+"使用 [member depth_deep_parallax] 且视图方å‘åž‚ç›´äºŽå¯¹è±¡è¡¨é¢æ—¶ä½¿ç”¨çš„层数。较高"
+"çš„æ•°å­—å¯¹æ€§èƒ½çš„è¦æ±‚更高,而较低的数字å¯èƒ½çœ‹èµ·æ¥ä¸é‚£ä¹ˆæ¸…晰。"
#: doc/classes/SpatialMaterial.xml:120
msgid ""
@@ -63252,17 +64403,19 @@ msgid ""
"direction is parallel to the surface of the object. A higher number will be "
"more performance demanding while a lower number may not look as crisp."
msgstr ""
+"使用 [member depth_deep_parallax] 且视图方å‘å¹³è¡ŒäºŽå¯¹è±¡è¡¨é¢æ—¶ä½¿ç”¨çš„层数。较高"
+"çš„æ•°å­—å¯¹æ€§èƒ½çš„è¦æ±‚更高,而较低的数字å¯èƒ½çœ‹èµ·æ¥ä¸é‚£ä¹ˆæ¸…晰。"
#: doc/classes/SpatialMaterial.xml:123
msgid ""
"Scales the depth offset effect. A higher number will create a larger depth."
-msgstr ""
+msgstr "缩放深度å移效果。更高的数字将创建更大的深度。"
#: doc/classes/SpatialMaterial.xml:126
msgid ""
"Texture used to determine depth at a given pixel. Depth is always stored in "
"the red channel."
-msgstr ""
+msgstr "用æ¥ç¡®å®šæŸä¸ªåƒç´ æ·±åº¦çš„纹ç†ã€‚深度总是存储在红色通é“中。"
#: doc/classes/SpatialMaterial.xml:129
msgid "Texture that specifies the color of the detail overlay."
@@ -63324,6 +64477,11 @@ msgid ""
"and will fully disappear once it reaches [code]distance_fade_min_distance[/"
"code]."
msgstr ""
+"物体看起æ¥å®Œå…¨ä¸é€æ˜Žçš„è·ç¦»ã€‚\n"
+"[b]注æ„:[/b]如果 [code]distance_fade_max_distance[/code] å°äºŽ "
+"[code]distance_fade_min_distance[/code],则行为相å。物体将在 "
+"[code]distance_fade_max_distance[/code] 处开始逿¸æ¶ˆå¤±ï¼Œå¹¶åœ¨åˆ°è¾¾ "
+"[code]distance_fade_min_distance[/code] 时完全消失。"
#: doc/classes/SpatialMaterial.xml:152
msgid ""
@@ -63335,6 +64493,11 @@ msgid ""
"and will fully disappear once it reaches [code]distance_fade_min_distance[/"
"code]."
msgstr ""
+"物体开始å˜å¾—å¯è§çš„è·ç¦»ã€‚如果物体的è·ç¦»å°äºŽè¿™ä¸ªè·ç¦»ï¼Œå®ƒå°†æ˜¯ä¸å¯è§çš„。\n"
+"[b]注æ„:[/b]如果 [code]distance_fade_min_distance[/code] 大于 "
+"[code]distance_fade_max_distance[/code],则行为将相å。物体将在 "
+"[code]distance_fade_max_distance[/code] 处开始逿¸æ¶ˆå¤±ï¼Œå¹¶åœ¨åˆ°è¾¾ "
+"[code]distance_fade_min_distance[/code] 时完全消失。"
#: doc/classes/SpatialMaterial.xml:156
msgid ""
@@ -63347,15 +64510,15 @@ msgid "The emitted light's color. See [member emission_enabled]."
msgstr "å‘出的光的颜色。å‚阅[member emission_enabled]。"
#: doc/classes/SpatialMaterial.xml:162
-#, fuzzy
msgid ""
"If [code]true[/code], the body emits light. Emitting light makes the object "
"appear brighter. The object can also cast light on other objects if a "
"[GIProbe] or [BakedLightmap] is used and this object is used in baked "
"lighting."
msgstr ""
-"如果[code]true[/code],则物体会å‘出光。å‘光会使物体显得更亮。如果使用了"
-"[GIProbe],并且该物体在烘焙照明中使用,那么该物体也å¯ä»¥å‘其他物体投光。"
+"如果 [code]true[/code],物体会å‘光。å‘å…‰ä½¿ç‰©ä½“çœ‹èµ·æ¥æ›´äº®ã€‚如果使用 [GIProbe] "
+"或 [BakedLightmap] 并且此对象用于烘焙照明,则该对象还å¯ä»¥å°†å…‰æŠ•射到其他对象"
+"上。"
#: doc/classes/SpatialMaterial.xml:165
msgid "The emitted light's strength. See [member emission_enabled]."
@@ -63399,6 +64562,8 @@ msgid ""
"the normal stays correct when using a non-uniform scale. Only enable if "
"using non-uniform scaling."
msgstr ""
+"如果 [code]true[/code],ç€è‰²å™¨å°†è®¡ç®—é¢å¤–çš„æ“作,以确ä¿åœ¨ä½¿ç”¨éžå‡åŒ€æ¯”例时法线"
+"ä¿æŒæ­£ç¡®ã€‚仅在使用éžå‡åŒ€ç¼©æ”¾æ—¶å¯ç”¨ã€‚"
#: doc/classes/SpatialMaterial.xml:189
msgid ""
@@ -63419,9 +64584,8 @@ msgid ""
msgstr "如果[code]true[/code],则å¯ç”¨ç‰©ä½“çš„é€æ˜Žåº¦ã€‚å‚阅[member blend_mode]。"
#: doc/classes/SpatialMaterial.xml:198
-#, fuzzy
msgid "If [code]true[/code], the object is unaffected by lighting."
-msgstr "如果[code]true[/code]ï¼Œåˆ™å¯¹è±¡ä¸æŽ¥æ”¶çŽ¯å¢ƒå…‰ã€‚"
+msgstr "如果 [code]true[/code],则物体ä¸å—光照影å“。"
#: doc/classes/SpatialMaterial.xml:201
msgid ""
@@ -63449,15 +64613,16 @@ msgid ""
"If [code]true[/code], lighting is calculated per vertex rather than per "
"pixel. This may increase performance on low-end devices."
msgstr ""
+"如果 [code]true[/code]ï¼Œåˆ™æŒ‰é¡¶ç‚¹è€Œä¸æ˜¯æŒ‰åƒç´ è®¡ç®—光照。这å¯èƒ½ä¼šæé«˜ä½Žç«¯è®¾å¤‡çš„"
+"性能。"
#: doc/classes/SpatialMaterial.xml:211
-#, fuzzy
msgid ""
"If [code]true[/code], triplanar mapping is calculated in world space rather "
"than object local space. See also [member uv1_triplanar]."
msgstr ""
-"如果 [code]true[/code],[code]UV[/code]的三平é¢è´´å›¾æ˜¯åœ¨ä¸–ç•Œç©ºé—´è€Œä¸æ˜¯å¯¹è±¡å±€éƒ¨"
-"空间计算的。å¦è¯·å‚阅 [member uv1_triplanar]。"
+"如果 [code]true[/code]ï¼Œåˆ™åœ¨ä¸–ç•Œç©ºé—´è€Œä¸æ˜¯ç‰©ä½“å±€éƒ¨ç©ºé—´ä¸­è®¡ç®—ä¸‰å¹³é¢æ˜ å°„。å¦è§ "
+"[member uv1_triplanar]。"
#: doc/classes/SpatialMaterial.xml:214
msgid ""
@@ -63516,7 +64681,6 @@ msgid "The strength of the normal map's effect."
msgstr "法线贴图的效果强度。"
#: doc/classes/SpatialMaterial.xml:233
-#, fuzzy
msgid ""
"Texture used to specify the normal at a given pixel. The "
"[code]normal_texture[/code] only uses the red and green channels; the blue "
@@ -63533,27 +64697,30 @@ msgid ""
"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for "
"a comparison of normal map coordinates expected by popular engines."
msgstr ""
-"纹ç†ç”¨äºŽæŒ‡å®šç»™å®šåƒç´ çš„æ³•线。[code]normal_texture[/code] åªä½¿ç”¨çº¢è‰²å’Œç»¿è‰²é€š"
-"é“。从[code]normal_texture[/code]读å–的法线是围绕[Mesh]æä¾›çš„è¡¨é¢æ³•线的。\n"
-"[b]注æ„:[/b] Godot希望法线图使用X+ã€Y-å’ŒZ+åæ ‡ã€‚å‚阅[url=http://wiki."
-"polycount.com/wiki/"
-"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url],以了"
-"è§£æµè¡Œå¼•æ“Žæ‰€æœŸæœ›çš„æ³•çº¿å›¾åæ ‡çš„æ¯”较。"
+"ç”¨æ¥æŒ‡å®šåƒç´ ç‚¹çš„æ³•线的纹ç†ã€‚[code]normal_texture[/code]åªä½¿ç”¨çº¢è‰²å’Œç»¿è‰²é€šé“,"
+"忽略è“色和alpha通é“。从 [code]normal_texture[/code] 读å–的法线围绕 [Mesh] æ"
+"ä¾›çš„è¡¨é¢æ³•线定å‘。\n"
+"[b]注æ„:[/b] Mesh必须在其顶点数æ®ä¸­åŒæ—¶å®šä¹‰æ³•线和切线。å¦åˆ™ï¼Œæ³•线贴图将无法"
+"正确渲染,会出现整个表é¢å˜æš—的情况。如果用[SurfaceTool]创建几何体,å¯ä»¥ä½¿ç”¨"
+"[method SurfaceTool.generate_normals]和[method SurfaceTool.generate_tangents]"
+"æ¥åˆ†åˆ«è‡ªåŠ¨ç”Ÿæˆæ³•线和切线。\n"
+"[b]注æ„:[/b] Godot希望法线贴图使用X+ã€Y-å’ŒZ+åæ ‡ã€‚请å‚阅[url=http://wiki."
+"polycount.com/wiki/Normal_Map_Technical_Details#Common_Swizzle_Coordinates]该"
+"页[/url],了解æµè¡Œå¼•æ“Žæ‰€æœŸæœ›çš„æ³•çº¿è´´å›¾åæ ‡çš„æ¯”较。"
#: doc/classes/SpatialMaterial.xml:238
msgid "Threshold at which the alpha scissor will discard values."
msgstr "alpha scissor 会丢弃数值的阈值。"
#: doc/classes/SpatialMaterial.xml:241
-#, fuzzy
msgid ""
"If [code]true[/code], the shader will keep the scale set for the mesh. "
"Otherwise the scale is lost when billboarding. Only applies when [member "
"params_billboard_mode] is [constant BILLBOARD_ENABLED]."
msgstr ""
-"如果 [code]true[/code],ç€è‰²å™¨å°†ä¿æŒä¸ºç½‘格设置的比例。å¦åˆ™ï¼Œåœ¨åšå¹¿å‘Šç‰Œæ—¶ï¼Œæ¯”"
-"ä¾‹å°ºä¼šä¸¢å¤±ã€‚åªæœ‰å½“ [member billboard_mode] 为 [constant BILLBOARD_ENABLED] æ—¶"
-"æ‰é€‚用。"
+"如果 [code]true[/code],ç€è‰²å™¨å°†ä¿æŒä¸ºç½‘格缩放设置。å¦åˆ™ï¼Œå½“åšå¹¿å‘Šç‰Œæ—¶ï¼Œç¼©æ”¾"
+"会丢失。仅在 [member params_billboard_mode] 为 [constant BILLBOARD_ENABLED] "
+"时适用。"
#: doc/classes/SpatialMaterial.xml:244
msgid ""
@@ -63563,6 +64730,10 @@ msgid ""
"head instead of on the table. See [url=https://github.com/godotengine/godot/"
"issues/41567]GitHub issue #41567[/url] for details."
msgstr ""
+"控制对象如何é¢å‘æ‘„åƒæœºã€‚å‚阅[enum BillboardMode]。\n"
+"[b]注æ„:[/b] 广告牌模å¼ä¸é€‚åˆVR,因为当å±å¹•è´´åœ¨ä½ çš„å¤´éƒ¨è€Œä¸æ˜¯åœ¨æ¡Œå­ä¸Šæ—¶ï¼Œæ‘„"
+"åƒæœºçš„å·¦å³å‘é‡ä¸æ˜¯æ°´å¹³çš„。å‚阅[url=https://github.com/godotengine/godot/"
+"issues/41567]GitHub issue #41567[/url]。"
#: doc/classes/SpatialMaterial.xml:248
msgid ""
@@ -63581,39 +64752,36 @@ msgid ""
msgstr "æ¸²æŸ“èƒŒé¢æ—¶ï¼Œä¸ç»˜åˆ¶å¯¹è±¡çš„哪一é¢ã€‚å‚阅 [enum CullMode]。"
#: doc/classes/SpatialMaterial.xml:255
-#, fuzzy
msgid ""
"Determines when depth rendering takes place. See [enum DepthDrawMode]. See "
"also [member flags_transparent]."
msgstr ""
-"确定何时进行深度渲染。å‚阅 [enum DepthDrawMode]。也请å‚阅 [member "
-"transparency]。"
+"确定深度渲染å‘生的时间。请å‚é˜…æ·±åº¦ç»˜åˆ¶æ¨¡å¼ [enum DepthDrawMode] 。å¦è§"
+"[member flags_transparent]。"
#: doc/classes/SpatialMaterial.xml:258
msgid ""
"The algorithm used for diffuse light scattering. See [enum DiffuseMode]."
-msgstr "用于漫射光散射的算法。å‚阅[enum DiffuseMode]。"
+msgstr "用于漫å射光散射的算法。å‚è§ [enum DiffuseMode]。"
#: doc/classes/SpatialMaterial.xml:261
-#, fuzzy
msgid ""
"If [code]true[/code], enables the vertex grow setting. See [member "
"params_grow_amount]."
-msgstr "如果[code]true[/code],å¯ç”¨é¡¶ç‚¹ç”Ÿé•¿è®¾ç½®ã€‚å‚阅[member grow_amount]。"
+msgstr ""
+"如果[code]true[/code],å¯ç”¨é¡¶ç‚¹ç”Ÿé•¿è®¾ç½®ã€‚å‚è§[member params_grow_amount]。"
#: doc/classes/SpatialMaterial.xml:264
msgid "Grows object vertices in the direction of their normals."
msgstr "æ²¿ç€æ³•线的方å‘生长对象顶点。"
#: doc/classes/SpatialMaterial.xml:267
-#, fuzzy
msgid "Currently unimplemented in Godot."
-msgstr "ç›®å‰åœ¨ Godot 3.x 中未实现。"
+msgstr "ç›®å‰åœ¨ Godot 中未实现。"
#: doc/classes/SpatialMaterial.xml:270
-#, fuzzy
msgid "The point size in pixels. See [member flags_use_point_size]."
-msgstr "点的大å°ï¼Œå•ä½ä¸ºåƒç´ ã€‚å‚阅[member use_point_size]。"
+msgstr "点的大å°ï¼Œä»¥åƒç´ ä¸ºå•ä½ã€‚å‚è§[member flags_use_point_size]。"
#: doc/classes/SpatialMaterial.xml:273
msgid "The method for rendering the specular blob. See [enum SpecularMode]."
@@ -63624,35 +64792,34 @@ msgid ""
"If [code]true[/code], the shader will discard all pixels that have an alpha "
"value less than [member params_alpha_scissor_threshold]."
msgstr ""
+"如果[code]true[/code],ç€è‰²å™¨å°†ä¸¢å¼ƒæ‰€æœ‰alpha值å°äºŽ[member "
+"params_alpha_scissor_threshold]çš„åƒç´ ã€‚"
#: doc/classes/SpatialMaterial.xml:279
-#, fuzzy
msgid ""
"The number of horizontal frames in the particle sprite sheet. Only enabled "
"when using [constant BILLBOARD_PARTICLES]. See [member "
"params_billboard_mode]."
msgstr ""
-"ç²’å­ç²¾çµè¡¨çš„æ°´å¹³å¸§æ•°ã€‚仅当使用[constant BILLBOARD_PARTICLES]æ—¶å¯ç”¨ã€‚å‚阅"
-"[member billboard_mode]。"
+"ç²’å­ç²¾çµè¡¨ä¸­çš„æ°´å¹³å¸§æ•°ã€‚仅在使用 [constant BILLBOARD_PARTICLES] æ—¶å¯ç”¨ã€‚å‚阅"
+"[member params_billboard_mode]。"
#: doc/classes/SpatialMaterial.xml:282
-#, fuzzy
msgid ""
"If [code]true[/code], particle animations are looped. Only enabled when "
"using [constant BILLBOARD_PARTICLES]. See [member params_billboard_mode]."
msgstr ""
-"如果[code]true[/code],则循环播放粒å­åŠ¨ç”»ã€‚ä»…å½“ä½¿ç”¨[constant "
-"BILLBOARD_PARTICLES]æ—¶å¯ç”¨ã€‚å‚阅[member billboard_mode]。"
+"如果 [code]true[/code],循环粒å­åŠ¨ç”»ã€‚ä»…åœ¨ä½¿ç”¨ [constant "
+"BILLBOARD_PARTICLES] æ—¶å¯ç”¨ã€‚å‚阅[member params_billboard_mode]。"
#: doc/classes/SpatialMaterial.xml:285
-#, fuzzy
msgid ""
"The number of vertical frames in the particle sprite sheet. Only enabled "
"when using [constant BILLBOARD_PARTICLES]. See [member "
"params_billboard_mode]."
msgstr ""
-"ç²’å­ç²¾çµè¡¨çš„垂直帧数。仅当使用[constant BILLBOARD_PARTICLES]æ—¶å¯ç”¨ã€‚å‚阅"
-"[member billboard_mode]。"
+"ç²’å­ç²¾çµè¡¨ä¸­çš„垂直帧数。仅在使用 [constant BILLBOARD_PARTICLES] æ—¶å¯ç”¨ã€‚å‚阅"
+"[member params_billboard_mode]。"
#: doc/classes/SpatialMaterial.xml:288
msgid ""
@@ -63675,12 +64842,15 @@ msgid ""
"backend, the material's roughness value will affect the blurriness of the "
"refraction. Higher roughness values will make the refraction look blurrier."
msgstr ""
+"如果[code]true[/code],则å¯ç”¨æŠ˜å°„æ•ˆæžœã€‚æŠ˜å°„æ˜¯æ ¹æ®æ¥è‡ªç‰©ä½“åŽé¢çš„å…‰çº¿æ¥æ‰­æ›²é€æ˜Ž"
+"度的。当使用GLES3åŽç«¯æ—¶ï¼Œæè´¨çš„ç²—ç³™åº¦å€¼ä¼šå½±å“æŠ˜å°„çš„æ¨¡ç³Šåº¦ã€‚è¾ƒé«˜çš„ç²—ç³™åº¦å€¼ä¼šä½¿"
+"æŠ˜å°„çœ‹èµ·æ¥æ›´æ¨¡ç³Šã€‚"
#: doc/classes/SpatialMaterial.xml:297
msgid ""
"The strength of the refraction effect. Higher values result in a more "
"distorted appearance for the refraction."
-msgstr ""
+msgstr "折射效果的强度。较高的值会使折射的表现更加扭曲。"
#: doc/classes/SpatialMaterial.xml:300
msgid ""
@@ -63689,7 +64859,6 @@ msgid ""
msgstr "控制æ¯ä¸ªåƒç´ æŠ˜å°„强度的纹ç†ã€‚乘以[member refraction_scale]。"
#: doc/classes/SpatialMaterial.xml:303
-#, fuzzy
msgid ""
"Specifies the channel of the [member refraction_texture] in which the "
"refraction information is stored. This is useful when you store the "
@@ -63697,23 +64866,25 @@ msgid ""
"stored metallic in the red channel, roughness in the blue, and ambient "
"occlusion in the green you could reduce the number of textures you use."
msgstr ""
-"指定存储金属信æ¯çš„ [member metallic_texture] 的通é“。当您在一个纹ç†ä¸­å­˜å‚¨å¤šä¸ª"
-"æ•ˆæžœçš„ä¿¡æ¯æ—¶ï¼Œè¿™å¾ˆæœ‰ç”¨ã€‚例如,如果您将金属效果存储在红色通é“中,将粗糙度存储"
-"在è“色通é“ä¸­ï¼Œå°†çŽ¯å¢ƒé®æŒ¡å­˜å‚¨åœ¨ç»¿è‰²é€šé“中,就å¯ä»¥å‡å°‘æ‚¨ä½¿ç”¨çš„çº¹ç†æ•°é‡ã€‚"
+"指定存储折射信æ¯çš„[member refraction_texture]的通é“。当你在纹ç†ä¸­å­˜å‚¨å¤šç§æ•ˆæžœ"
+"çš„ä¿¡æ¯æ—¶ï¼Œè¿™å¾ˆæœ‰ç”¨ã€‚例如,如果你在红色通é“中存储金属效果,在è“色通é“中存储粗"
+"糙度,在绿色通é“ä¸­å­˜å‚¨çŽ¯å¢ƒé®æŒ¡ï¼Œå°±å¯ä»¥å‡å°‘使用纹ç†çš„æ•°é‡ã€‚"
#: doc/classes/SpatialMaterial.xml:306
msgid "Sets the strength of the rim lighting effect."
msgstr "设置边缘照明效果的强度。"
#: doc/classes/SpatialMaterial.xml:309
-#, fuzzy
msgid ""
"If [code]true[/code], rim effect is enabled. Rim lighting increases the "
"brightness at glancing angles on an object.\n"
"[b]Note:[/b] Rim lighting is not visible if the material has [member "
"flags_unshaded] set to [code]true[/code]."
msgstr ""
-"如果[code]true[/code],则å¯ç”¨è¾¹ç¼˜æ•ˆæžœã€‚边框照明会增加物体上的斜角亮度。"
+"如果 [code]true[/code],则å¯ç”¨è¾¹ç¼˜æ•ˆæžœã€‚边缘照明增加了物体上掠过角度的亮"
+"度。\n"
+"[b]注æ„:[/b] 如果æè´¨å°† [member flags_unshaded] 设置为 [code]true[/code],则"
+"边缘光照ä¸å¯è§ã€‚"
#: doc/classes/SpatialMaterial.xml:313
msgid ""
@@ -63766,23 +64937,20 @@ msgstr ""
"subsurf_scatter_strength]。"
#: doc/classes/SpatialMaterial.xml:337
-#, fuzzy
msgid ""
"The color used by the transmission effect. Represents the light passing "
"through an object."
-msgstr "背光效果使用的颜色。表示穿过物体的光线。"
+msgstr "传输效果使用的颜色。表示穿过物体的光。"
#: doc/classes/SpatialMaterial.xml:340
-#, fuzzy
msgid "If [code]true[/code], the transmission effect is enabled."
-msgstr "如果为[code]true[/code],则å¯ç”¨glow效果。"
+msgstr "如果 [code]true[/code],则å¯ç”¨ä¼ è¾“效果。"
#: doc/classes/SpatialMaterial.xml:343
-#, fuzzy
msgid ""
"Texture used to control the transmission effect per-pixel. Added to [member "
"transmission]."
-msgstr "用于控制æ¯ä¸ªåƒç´ çš„背光效果的纹ç†ã€‚添加到 [member backlight]。"
+msgstr "纹ç†ç”¨äºŽæŽ§åˆ¶æ¯ä¸ªåƒç´ çš„传输效果。添加到[member transmission]。"
#: doc/classes/SpatialMaterial.xml:346
msgid ""
@@ -63910,18 +65078,16 @@ msgid "Texture specifying per-pixel ambient occlusion value."
msgstr "指定æ¯ä¸ªåƒç´ çŽ¯å¢ƒé®æŒ¡å€¼çš„纹ç†ã€‚"
#: doc/classes/SpatialMaterial.xml:405
-#, fuzzy
msgid "Texture specifying per-pixel depth."
-msgstr "指定æ¯ä¸ªåƒç´ é«˜åº¦çš„纹ç†ã€‚"
+msgstr "指定æ¯ä¸ªåƒç´ æ·±åº¦çš„纹ç†ã€‚"
#: doc/classes/SpatialMaterial.xml:408
msgid "Texture specifying per-pixel subsurface scattering."
msgstr "指定æ¯ä¸ªåƒç´ çš„äºšè¡¨é¢æ•£å°„的纹ç†ã€‚"
#: doc/classes/SpatialMaterial.xml:411
-#, fuzzy
msgid "Texture specifying per-pixel transmission color."
-msgstr "指定æ¯ä¸ªåƒç´ å‘射颜色的纹ç†ã€‚"
+msgstr "指定æ¯ä¸ªåƒç´ ä¼ è¾“颜色的纹ç†ã€‚"
#: doc/classes/SpatialMaterial.xml:414
msgid "Texture specifying per-pixel refraction strength."
@@ -63952,9 +65118,8 @@ msgid "Use [code]UV2[/code] with the detail texture."
msgstr "使用[code]UV2[/code]与细节纹ç†ã€‚"
#: doc/classes/SpatialMaterial.xml:435
-#, fuzzy
msgid "Constant for setting [member flags_transparent]."
-msgstr "用于设置[member ao_enabled]的常é‡ã€‚"
+msgstr "用于设置 [member flags_transparent] 的常é‡ã€‚"
#: doc/classes/SpatialMaterial.xml:438
msgid "Constant for setting [member emission_enabled]."
@@ -63981,18 +65146,16 @@ msgid "Constant for setting [member ao_enabled]."
msgstr "用于设置[member ao_enabled]的常é‡ã€‚"
#: doc/classes/SpatialMaterial.xml:456
-#, fuzzy
msgid "Constant for setting [member depth_enabled]."
-msgstr "常é‡ï¼Œç”¨äºŽè®¾ç½®[member detail_enabled]。"
+msgstr "用于设置 [member depth_enabled] 的常é‡ã€‚"
#: doc/classes/SpatialMaterial.xml:459
msgid "Constant for setting [member subsurf_scatter_enabled]."
msgstr "用于设置[member subsurf_scatter_enabled]的常é‡ã€‚"
#: doc/classes/SpatialMaterial.xml:462
-#, fuzzy
msgid "Constant for setting [member transmission_enabled]."
-msgstr "常é‡ï¼Œç”¨äºŽè®¾ç½®[member emission_enabled]。"
+msgstr "用于设置 [member transmission_enabled] 的常é‡ã€‚"
#: doc/classes/SpatialMaterial.xml:465
msgid "Constant for setting [member refraction_enabled]."
@@ -64036,7 +65199,7 @@ msgstr "没有深度的绘制。"
msgid ""
"For transparent objects, an opaque pass is made first with the opaque parts, "
"then transparency is drawn."
-msgstr ""
+msgstr "å¯¹äºŽé€æ˜Žå¯¹è±¡ï¼Œé¦–先对ä¸é€æ˜Žéƒ¨åˆ†è¿›è¡Œä¸é€æ˜Žä¼ é€’,然åŽç»˜åˆ¶é€æ˜Žåº¦ã€‚"
#: doc/classes/SpatialMaterial.xml:498
msgid "Default cull mode. The back of the object is culled when not visible."
@@ -64054,13 +65217,15 @@ msgstr "ä¸è¿›è¡Œå‰”除。"
msgid ""
"No lighting is used on the object. Color comes directly from [code]ALBEDO[/"
"code]."
-msgstr ""
+msgstr "物体上ä¸ä½¿ç”¨ç…§æ˜Žã€‚颜色直接æ¥è‡ª [code]ALBEDO[/code]。"
#: doc/classes/SpatialMaterial.xml:510
msgid ""
"Lighting is calculated per-vertex rather than per-pixel. This can be used to "
"increase the speed of the shader at the cost of quality."
msgstr ""
+"å…‰ç…§æ˜¯æŒ‰é¡¶ç‚¹è®¡ç®—çš„ï¼Œè€Œä¸æ˜¯æŒ‰åƒç´ è®¡ç®—。这å¯ç”¨äºŽä»¥ç‰ºç‰²è´¨é‡ä¸ºä»£ä»·æé«˜ç€è‰²å™¨çš„速"
+"度。"
#: doc/classes/SpatialMaterial.xml:513
msgid ""
@@ -64075,11 +65240,10 @@ msgid "Set [code]ALBEDO[/code] to the per-vertex color specified in the mesh."
msgstr "å°† [code]ALBEDO[/code] 设置为网格中指定的æ¯é¡¶ç‚¹é¢œè‰²ã€‚"
#: doc/classes/SpatialMaterial.xml:519
-#, fuzzy
msgid ""
"Vertex color is in sRGB space and needs to be converted to linear. Only "
"applies in the GLES3 renderer."
-msgstr "顶点颜色在sRGB空间,需è¦è½¬æ¢ä¸ºçº¿æ€§é¢œè‰²ã€‚仅适用于Vulkan渲染器。"
+msgstr "顶点颜色在sRGB空间,需è¦è½¬æˆçº¿æ€§ã€‚仅适用于 GLES3 渲染器。"
#: doc/classes/SpatialMaterial.xml:522
msgid ""
@@ -64096,14 +65260,13 @@ msgid ""
msgstr "按深度缩放对象,使其在å±å¹•上显示的大å°å§‹ç»ˆç›¸åŒã€‚"
#: doc/classes/SpatialMaterial.xml:528
-#, fuzzy
msgid ""
"Shader will keep the scale set for the mesh. Otherwise the scale is lost "
"when billboarding. Only applies when [member params_billboard_mode] is "
"[constant BILLBOARD_ENABLED]."
msgstr ""
-"Shaderä¼šä¿æŒç½‘格的比例设置。å¦åˆ™ï¼Œåœ¨åšå¹¿å‘Šç‰Œæ—¶ï¼Œæ¯”ä¾‹å°ºä¼šä¸¢å¤±ã€‚åªæœ‰å½“[member "
-"billboard_mode]为[constant BILLBOARD_ENABLED]时,æ‰é€‚用。"
+"ç€è‰²å™¨å°†ä¿æŒä¸ºç½‘格的缩放设置。å¦åˆ™ï¼Œå½“åšå¹¿å‘Šç‰Œæ—¶ï¼Œç¼©æ”¾ä¼šä¸¢å¤±ã€‚仅在 [member "
+"params_billboard_mode] 为 [constant BILLBOARD_ENABLED] 时适用。"
#: doc/classes/SpatialMaterial.xml:531
msgid ""
@@ -64130,13 +65293,13 @@ msgstr "使用[code]UV2[/code]åæ ‡ï¼Œä»Ž[member emission_texture]中查找。"
#: doc/classes/SpatialMaterial.xml:543
msgid "Use alpha scissor. Set by [member params_use_alpha_scissor]."
-msgstr ""
+msgstr "使用alpha剪刀。由 [member params_use_alpha_scissor] 设置。"
#: doc/classes/SpatialMaterial.xml:546
msgid ""
"Use world coordinates in the triplanar texture lookup instead of local "
"coordinates."
-msgstr ""
+msgstr "在三平é¢çº¹ç†æŸ¥æ‰¾ä¸­ä½¿ç”¨ä¸–ç•Œåæ ‡è€Œä¸æ˜¯å±€éƒ¨å标。"
#: doc/classes/SpatialMaterial.xml:549
msgid "Forces the shader to convert albedo from sRGB space to linear space."
@@ -64152,7 +65315,7 @@ msgstr "ç¦ç”¨æŽ¥æ”¶çŽ¯å¢ƒå…‰ã€‚"
#: doc/classes/SpatialMaterial.xml:558
msgid "Ensures that normals appear correct, even with non-uniform scaling."
-msgstr ""
+msgstr "ç¡®ä¿æ³•线显示正确,å³ä½¿ç¼©æ”¾æ¯”例ä¸å‡åŒ€ã€‚"
#: doc/classes/SpatialMaterial.xml:561
msgid "Enables the shadow to opacity feature."
@@ -64207,17 +65370,16 @@ msgid "The object's X axis will always face the camera."
msgstr "对象的X轴将始终é¢å‘相机。"
#: doc/classes/SpatialMaterial.xml:606
-#, fuzzy
msgid ""
"Used for particle systems when assigned to [Particles] and [CPUParticles] "
"nodes. Enables [code]particles_anim_*[/code] properties.\n"
"The [member ParticlesMaterial.anim_speed] or [member CPUParticles."
"anim_speed] should also be set to a positive value for the animation to play."
msgstr ""
-"分é…ç»™ [GPUParticles3D] å’Œ [CPUParticles3D] 节点时,用于粒å­ç³»ç»Ÿã€‚å¯ç”¨"
+"当分é…ç»™[Particles]å’Œ[CPUParticles]节点时用于粒å­ç³»ç»Ÿã€‚å¯ç”¨"
"[code]particles_anim_*[/code]属性。\n"
-"[member ParticlesMaterial.anim_speed]或[member CPUParticles3D.anim_speed]也应"
-"设置为正值æ‰èƒ½æ’­æ”¾åŠ¨ç”»ã€‚"
+"为了播放动画,[member ParticlesMaterial.anim_speed]或[member CPUParticles."
+"anim_speed]也应该被设置为正值。"
#: doc/classes/SpatialMaterial.xml:610
msgid "Used to read from the red channel of a texture."
@@ -64309,13 +65471,12 @@ msgid "Sphere shape for 3D collisions."
msgstr "用于 3D 碰撞的çƒå½¢ã€‚"
#: doc/classes/SphereShape.xml:7
-#, fuzzy
msgid ""
"Sphere shape for 3D collisions, which can be set into a [PhysicsBody] or "
"[Area]. This shape is useful for modeling sphere-like 3D objects."
msgstr ""
-"用于3D碰撞的çƒä½“形状,å¯ä»¥è®¾ç½®æˆ[PhysicsBody3D]或[Area3D]。这ç§å½¢çŠ¶å¯¹äºŽå»ºæ¨¡ç±»"
-"ä¼¼çƒä½“的三维物体很有用。"
+"3D 碰撞的çƒä½“形状,å¯ä»¥è®¾ç½®ä¸º [PhysicsBody] 或 [Area]。此形状对于模拟çƒçж 3D "
+"对象很有用。"
#: doc/classes/SphereShape.xml:16
msgid "The sphere's radius. The shape's diameter is double the radius."
@@ -64326,7 +65487,6 @@ msgid "Numerical input text field."
msgstr "数值输入文本字段。"
#: doc/classes/SpinBox.xml:7
-#, fuzzy
msgid ""
"SpinBox is a numerical input text field. It allows entering integers and "
"floats.\n"
@@ -64345,7 +65505,7 @@ msgid ""
"[SpinBox]'s background, add theme items for [LineEdit] and customize them."
msgstr ""
"SpinBox是一个数字输入文本字段。它å…许输入整数和浮点数。\n"
-"[b]例如:[/b]\n"
+"[b]例å­ï¼š[/b]\n"
"[codeblock]\n"
"var spin_box = SpinBox.new()\n"
"add_child(spin_box)\n"
@@ -64355,7 +65515,9 @@ msgstr ""
"[/codeblock]\n"
"上é¢çš„代ç å°†åˆ›å»ºä¸€ä¸ª[SpinBox],ç¦ç”¨å…¶ä¸Šçš„上下文èœå•ï¼Œå¹¶å°†æ–‡æœ¬å¯¹é½æ–¹å¼è®¾ç½®ä¸ºå³"
"对é½ã€‚\n"
-"关于[SpinBox]的更多选项,请å‚阅[Range]类。"
+"å‚阅[Range]类,以获得更多关于[SpinBox]的选项。\n"
+"[b]注æ„:[/b] [SpinBox] ä¾èµ–于底层的[LineEdit]节点。è¦ä¸º[SpinBox]的背景设置主"
+"题,请为[LineEdit]添加主题项,并对其进行定制。"
#: doc/classes/SpinBox.xml:26
msgid "Applies the current value of this [SpinBox]."
@@ -64369,6 +65531,10 @@ msgid ""
"may cause a crash. If you wish to hide it or any of its children, use their "
"[member CanvasItem.visible] property."
msgstr ""
+"返回这个[SpinBox]中的[LineEdit]实例。你å¯ä»¥ç”¨å®ƒæ¥è®¿é—®[LineEdit]的属性和方"
+"法。\n"
+"[b]警告:[/b] 这是一个必è¦çš„内部节点,移除和释放它å¯èƒ½ä¼šå¯¼è‡´å´©æºƒã€‚如果你想éš"
+"è—它或它的任何å­èŠ‚ç‚¹ï¼Œè¯·ä½¿ç”¨å…¶ [member CanvasItem.visible] 属性。"
#: doc/classes/SpinBox.xml:39
msgid "Sets the text alignment of the [SpinBox]."
@@ -64394,9 +65560,8 @@ msgid ""
msgstr "在 [SpinBox] çš„æ•°å€¼åŽæ·»åŠ æŒ‡å®šçš„ [code] suffix [/code] 字符串。"
#: doc/classes/SpinBox.xml:55
-#, fuzzy
msgid "Sets a custom [Texture] for up and down arrows of the [SpinBox]."
-msgstr "为 [SpinBox] 的上下箭头设置自定义 [Texture2D]。"
+msgstr "为 [SpinBox] 的上下箭头设置自定义 [Texture]。"
#: doc/classes/SplitContainer.xml:4
msgid "Container for splitting and adjusting."
@@ -64470,6 +65635,13 @@ msgid ""
"lights per mesh, you can increase [member ProjectSettings.rendering/limits/"
"rendering/max_lights_per_object] at the cost of shader compilation times."
msgstr ""
+"èšå…‰ç¯æ˜¯ä¸€ç§ [Light] 节点,它在特定方å‘上以圆锥体的形状å‘光。光线在远处衰å‡ã€‚"
+"è¿™ç§è¡°å‡å¯ä»¥é€šè¿‡æ”¹å˜[Light]的能é‡ã€åŠå¾„和衰å‡å‚æ•°æ¥é…置。\n"
+"[b]注æ„:[/b] é»˜è®¤æƒ…å†µä¸‹ï¼Œåªæœ‰ 32 个 èšå…‰ç¯å¯ä»¥åŒæ—¶å½±å“å•个网格 [i] èµ„æº [/"
+"i]ã€‚è€ƒè™‘å°†å…³å¡æ‹†åˆ†ä¸ºå¤šä¸ªç½‘格,以é™ä½Žè¶…过 32 个ç¯å…‰å½±å“åŒä¸€ç½‘格资æºçš„å¯èƒ½æ€§ã€‚"
+"æ‹†åˆ†æ°´å¹³ç½‘æ ¼ä¹Ÿå¯æé«˜è§†é”¥å‰”é™¤æ•ˆæžœï¼Œä»Žè€Œæé«˜æ€§èƒ½ã€‚如果您需è¦ä¸ºæ¯ä¸ªç½‘格使用更多"
+"ç¯å…‰ï¼Œæ‚¨å¯ä»¥å¢žåŠ  [member ProjectSettings.rendering/limits/rendering/"
+"max_lights_per_object],以ç€è‰²å™¨ç¼–译时间为代价。"
#: doc/classes/SpotLight.xml:18
msgid "The spotlight's angle in degrees."
@@ -64499,7 +65671,6 @@ msgid "A helper node, mostly used in 3rd person cameras."
msgstr "辅助节点,主è¦ç”¨äºŽç¬¬ä¸‰äººç§°ç›¸æœºã€‚"
#: doc/classes/SpringArm.xml:7
-#, fuzzy
msgid ""
"The SpringArm node is a node that casts a ray (or collision shape) along its "
"z axis and moves all its direct children to the collision point, minus a "
@@ -64511,39 +65682,35 @@ msgid ""
"If you use the SpringArm as a camera controller for your player, you might "
"need to exclude the player's collider from the SpringArm's collision check."
msgstr ""
-"SpringArm3D 节点会沿其 z 轴投射一æ¡å°„线(或碰撞形状)并将其所有直接å­èŠ‚ç‚¹ç§»åŠ¨"
-"到碰撞点,å‡åŽ»ä¸€ä¸ªè¾¹è·ã€‚\n"
-"最常è§çš„用例是制作一个对环境中的碰撞åšå‡ºå应的第三人称相机。\n"
-"SpringArm3D 将投射一æ¡å°„线,或者如果给定了一个形状,它将沿其 z è½´çš„æ–¹å‘æŠ•å°„è¯¥"
-"形状。\n"
-"如果您使用 SpringArm3D 作为播放器的相机控制器,您å¯èƒ½éœ€è¦ä»Ž SpringArm3D 的碰"
-"撞检查中排除播放器的碰撞器。"
+"SpringArm节点是沿其Z轴投射射线(或碰撞形状)的节点,并将其所有的直接å­èŠ‚ç‚¹ç§»"
+"动到碰撞点,å‡åŽ»è¾¹è·ã€‚\n"
+"最常è§çš„使用情况是制作第三人称相机,对环境中的碰撞åšå‡ºå应。\n"
+"SpringArm将投射一æ¡å°„线,或者给出形状,它将在其Z轴的方å‘上投射该形状。\n"
+"如果你使用SpringArm作为玩家的相机控制器,你å¯èƒ½éœ€è¦å°†çŽ©å®¶çš„ç¢°æ’žå™¨æŽ’é™¤åœ¨"
+"SpringArm的碰撞检查之外。"
#: doc/classes/SpringArm.xml:19
-#, fuzzy
msgid ""
"Adds the [PhysicsBody] object with the given [RID] to the list of "
"[PhysicsBody] objects excluded from the collision check."
msgstr ""
-"将具有给定[RID]的[PhysicsBody3D]对象添加到排除在碰撞检查之外的[PhysicsBody3D]"
-"对象列表中。"
+"将具有指定 [RID] 的 [PhysicsBody] 对象添加到排除在碰撞检查之外的 "
+"[PhysicsBody] 对象列表中。"
#: doc/classes/SpringArm.xml:25
-#, fuzzy
msgid ""
"Clears the list of [PhysicsBody] objects excluded from the collision check."
-msgstr "清除从碰撞检查中排除的 [PhysicsBody3D] 对象列表。"
+msgstr "清除从碰撞检查中排除的 [PhysicsBody] 对象列表。"
#: doc/classes/SpringArm.xml:31
msgid "Returns the spring arm's current length."
msgstr "返回弹簧臂的当å‰é•¿åº¦ã€‚"
#: doc/classes/SpringArm.xml:38
-#, fuzzy
msgid ""
"Removes the given [RID] from the list of [PhysicsBody] objects excluded from "
"the collision check."
-msgstr "从碰撞检查排除的 [PhysicsBody3D] 对象列表中删除给定的 [RID]。"
+msgstr "从碰撞检查排除的 [PhysicsBody] 对象列表中删除指定的 [RID]。"
#: doc/classes/SpringArm.xml:44
msgid ""
@@ -64552,9 +65719,11 @@ msgid ""
"html#collision-layers-and-masks]Collision layers and masks[/url] in the "
"documentation for more information."
msgstr ""
+"碰撞检测的目标层。更多信æ¯è¯·å‚阅文档中的[url=https://docs.godotengine.org/"
+"zh_CN/stable/tutorials/physics/physics_introduction.html#collision-layers-"
+"and-masks]碰撞层与é®ç½©[/url]。"
#: doc/classes/SpringArm.xml:47
-#, fuzzy
msgid ""
"When the collision check is made, a candidate length for the SpringArm is "
"given.\n"
@@ -64565,24 +65734,21 @@ msgid ""
"collision, while with the margin the [Camera] would be placed close to the "
"point of collision."
msgstr ""
-"进行碰撞检查时,会给出 SpringArm3D 的候选长度。\n"
-"ç„¶åŽå°†è¾¹è·å‡åŽ»æ­¤é•¿åº¦ï¼Œå¹¶å°†å¹³ç§»åº”ç”¨äºŽ SpringArm3D çš„å­å¯¹è±¡ã€‚\n"
-"当 SpringArm3D å°† [Camera3D] 作为å­èŠ‚ç‚¹æ—¶ï¼Œæ­¤è¾¹è·å¾ˆæœ‰ç”¨ï¼šæ²¡æœ‰è¾¹è·ï¼Œ"
-"[Camera3D] å°†æ”¾ç½®åœ¨ç¢°æ’žçš„ç¡®åˆ‡ç‚¹ä¸Šï¼Œè€Œæœ‰è¾¹è·æ—¶ï¼Œ[Camera3D] 将放置在é è¿‘碰撞"
-"点。"
+"进行碰撞检查时,会给出 SpringArm 的候选长度。\n"
+"ç„¶åŽå°†è¾¹è·å‡åŽ»æ­¤é•¿åº¦ï¼Œå¹¶å°†å¹³ç§»åº”ç”¨äºŽ SpringArm çš„å­å¯¹è±¡ã€‚\n"
+"当 SpringArm å°† [Camera] 作为å­èŠ‚ç‚¹æ—¶ï¼Œæ­¤è¾¹è·å¾ˆæœ‰ç”¨ï¼šæ²¡æœ‰è¾¹è·ï¼Œ[Camera] 将放"
+"ç½®åœ¨ç¢°æ’žçš„ç¡®åˆ‡ç‚¹ä¸Šï¼Œè€Œæœ‰è¾¹è·æ—¶ï¼Œ[Camera] 将放置在é è¿‘碰撞点。"
#: doc/classes/SpringArm.xml:52
-#, fuzzy
msgid ""
"The [Shape] to use for the SpringArm.\n"
"When the shape is set, the SpringArm will cast the [Shape] on its z axis "
"instead of performing a ray cast."
msgstr ""
-"用于SpringArm3D的[Shape3D]。\n"
-"当形状被设置时,SpringArm3D将在其Z轴上投射[Shape3D]ï¼Œè€Œä¸æ˜¯æ‰§è¡Œå°„线投射。"
+"用于 SpringArm 的[Shape]。\n"
+"当形状被设置时,SpringArm 将在其 Z 轴上投射 [Shape]ï¼Œè€Œä¸æ˜¯æ‰§è¡Œå°„线投射。"
#: doc/classes/SpringArm.xml:56
-#, fuzzy
msgid ""
"The maximum extent of the SpringArm. This is used as a length for both the "
"ray and the shape cast used internally to calculate the desired position of "
@@ -64590,10 +65756,10 @@ msgid ""
"To know more about how to perform a shape cast or a ray cast, please consult "
"the [PhysicsDirectSpaceState] documentation."
msgstr ""
-"SpringArm3D 的最大范围。这用作内部使用的射线和形状投射的长度,以计算 "
-"SpringArm3D å­èŠ‚ç‚¹çš„æ‰€éœ€ä½ç½®ã€‚\n"
+"SpringArm 的最大范围。这用作内部使用的射线和形状投射的长度,以计算 SpringArm "
+"å­èŠ‚ç‚¹çš„æ‰€éœ€ä½ç½®ã€‚\n"
"è¦äº†è§£æœ‰å…³å¦‚何执行形状投射或光线投射的更多信æ¯ï¼Œè¯·å‚阅 "
-"[PhysicsDirectSpaceState3D] 文档。"
+"[PhysicsDirectSpaceState] 文档。"
#: doc/classes/Sprite.xml:4
msgid "General-purpose sprite node."
@@ -64608,7 +65774,6 @@ msgstr ""
"表动画的帧。"
#: doc/classes/Sprite.xml:16
-#, fuzzy
msgid ""
"Returns a [Rect2] representing the Sprite's boundary in local coordinates. "
"Can be used to detect if the Sprite was clicked. Example:\n"
@@ -64620,8 +65785,8 @@ msgid ""
" print(\"A click!\")\n"
"[/codeblock]"
msgstr ""
-"返回一个 [Rect2]ï¼Œåœ¨å±€éƒ¨åæ ‡ä¸­è¡¨ç¤º Sprite2D 的边界。å¯ç”¨äºŽæ£€æµ‹ Sprite2D 是å¦"
-"被点击。例å­ï¼š\n"
+"返回 [Rect2] è¡¨ç¤ºå±€éƒ¨åæ ‡ä¸­ Sprite 的边界。å¯ç”¨äºŽæ£€æµ‹ Sprite 是å¦è¢«ç‚¹å‡»ã€‚例"
+"å­ï¼š\n"
"[codeblock]\n"
"func _input(event):\n"
" if event is InputEventMouseButton and event.pressed and event."
@@ -64647,29 +65812,26 @@ msgid "If [code]true[/code], texture is centered."
msgstr "如果 [code]true[/code],纹ç†å±…中。"
#: doc/classes/Sprite.xml:45 doc/classes/Sprite3D.xml:15
-#, fuzzy
msgid ""
"Current frame to display from sprite sheet. [member hframes] or [member "
"vframes] must be greater than 1."
msgstr ""
-"从精çµè¡¨æ˜¾ç¤ºçš„当å‰å¸§ã€‚ [member vframes] 或 [member hframes] 必须大于 1。"
+"当剿˜¾ç¤ºçš„ç²¾çµè¡¨ä¸­çš„帧。[member vframes] 或 [member hframes] 必须大于 1。"
#: doc/classes/Sprite.xml:48 doc/classes/Sprite3D.xml:18
-#, fuzzy
msgid ""
"Coordinates of the frame to display from sprite sheet. This is as an alias "
"for the [member frame] property. [member hframes] or [member vframes] must "
"be greater than 1."
msgstr ""
-"从精çµè¡¨æ˜¾ç¤ºçš„叧忠‡ã€‚这是 [member frame] 属性的别å。 [member vframes] 或 "
-"[member hframes] 必须大于 1。"
+"显示的帧在精çµè¡¨ä¸­çš„åæ ‡ã€‚这是 [member frame] 属性的别å。[member vframes] "
+"或 [member hframes] 必须大于 1。"
#: doc/classes/Sprite.xml:51 doc/classes/Sprite3D.xml:21
msgid "The number of columns in the sprite sheet."
msgstr "ç²¾çµè¡¨ä¸­çš„列数。"
#: doc/classes/Sprite.xml:54
-#, fuzzy
msgid ""
"The normal map gives depth to the Sprite.\n"
"[b]Note:[/b] Godot expects the normal map to use X+, Y-, and Z+ coordinates. "
@@ -64677,10 +65839,11 @@ msgid ""
"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for "
"a comparison of normal map coordinates expected by popular engines."
msgstr ""
-"为 Sprite2D æä¾›æ·±åº¦çš„æ³•线贴图。\n"
-"[b]注:[/b] Godot 期望法线贴图使用 X+ã€Y- å’Œ Z+ åæ ‡ã€‚å‚阅[url=http://wiki."
-"polycount.com/wiki/Normal_Map_Technical_Details#Common_Swizzle_Coordinates]è¿™"
-"个页é¢[/url] 比较æµè¡Œå¼•æ“Žæ‰€æœŸæœ›çš„æ³•çº¿åœ°å›¾åæ ‡ã€‚"
+"为 Sprite æä¾›æ·±åº¦çš„æ³•线贴图。\n"
+"[b]注æ„:[/b] Godot 期望法线贴图使用 X+ã€Y- å’Œ Z+ åæ ‡ç³»ã€‚å‚阅[url=http://"
+"wiki.polycount.com/wiki/"
+"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]这个页é¢[/url]比较æµ"
+"è¡Œå¼•æ“Žæ‰€æœŸæœ›çš„æ³•çº¿è´´å›¾åæ ‡ç³»ã€‚"
#: doc/classes/Sprite.xml:61
msgid ""
@@ -64702,9 +65865,8 @@ msgstr ""
"è¦æ˜¾ç¤ºçš„图集纹ç†åŒºåŸŸã€‚ [member region_enabled] 必须是 [code]true[/code]。"
#: doc/classes/Sprite.xml:70
-#, fuzzy
msgid "[Texture] object to draw."
-msgstr "[Texture2D] è¦ç»˜åˆ¶çš„对象。"
+msgstr "[Texture] è¦ç»˜åˆ¶çš„对象。"
#: doc/classes/Sprite.xml:73 doc/classes/Sprite3D.xml:33
msgid "The number of rows in the sprite sheet."
@@ -64723,14 +65885,13 @@ msgid "2D sprite node in a 3D world."
msgstr "3D 世界中的 2D ç²¾çµèŠ‚ç‚¹ã€‚"
#: doc/classes/Sprite3D.xml:7
-#, fuzzy
msgid ""
"A node that displays a 2D texture in a 3D environment. The texture displayed "
"can be a region from a larger atlas texture, or a frame from a sprite sheet "
"animation."
msgstr ""
-"显示 2D 纹ç†çš„节点。显示的纹ç†å¯ä»¥æ˜¯æ¥è‡ªè¾ƒå¤§å›¾é›†çº¹ç†çš„区域,也å¯ä»¥æ˜¯æ¥è‡ªç²¾çµ"
-"表动画的帧。"
+"在 3D 环境中显示 2D 纹ç†çš„节点。显示的纹ç†å¯ä»¥æ˜¯æ¥è‡ªè¾ƒå¤§å›¾é›†çº¹ç†çš„区域,也å¯"
+"以是æ¥è‡ªç²¾çµè¡¨åŠ¨ç”»çš„å¸§ã€‚"
#: doc/classes/Sprite3D.xml:24
msgid ""
@@ -64745,6 +65906,8 @@ msgid ""
"[Texture] object to draw. If [member GeometryInstance.material_override] is "
"used, this will be overridden."
msgstr ""
+"è¦ç»˜åˆ¶çš„ [Texture] 对象。如果 [member GeometryInstance.material_override] 被"
+"使用,这将被覆盖。"
#: doc/classes/SpriteBase3D.xml:4
msgid "2D sprite node in 3D environment."
@@ -64781,22 +65944,20 @@ msgid ""
msgstr "乘以颜色值,用于色调调制和模拟光的颜色。"
#: doc/classes/SpriteBase3D.xml:66
-#, fuzzy
msgid ""
"The objects' visibility on a scale from [code]0[/code] fully invisible to "
"[code]1[/code] fully visible."
-msgstr "物体的能è§åº¦ï¼Œä»Ž[code]0[/code]完全ä¸å¯è§åˆ°[code]1[/code]完全å¯è§ã€‚"
+msgstr "物体的å¯è§åº¦ä»Ž [code]0 [/code] 完全ä¸å¯è§åˆ° [code]1 [/code] 完全å¯è§ã€‚"
#: doc/classes/SpriteBase3D.xml:69
msgid "The size of one pixel's width on the sprite to scale it in 3D."
msgstr "ç²¾çµä¸Šä¸€ä¸ªåƒç´ å®½åº¦çš„大å°ï¼Œä»¥ 3D 缩放。"
#: doc/classes/SpriteBase3D.xml:72
-#, fuzzy
msgid ""
"If [code]true[/code], the [Light] in the [Environment] has effects on the "
"sprite."
-msgstr "如果[code]true[/code],则[Environment]中的[Light3D]å¯¹ç²¾çµæœ‰å½±å“。"
+msgstr "如果 [code]true[/code],则 [Environment] 中的 [Light] å¯¹ç²¾çµæœ‰å½±å“。"
#: doc/classes/SpriteBase3D.xml:75
msgid ""
@@ -64826,9 +65987,8 @@ msgid "Represents the size of the [enum DrawFlags] enum."
msgstr "代表[enum DrawFlags]枚举的大å°ã€‚"
#: doc/classes/SpriteFrames.xml:4
-#, fuzzy
msgid "Sprite frame library for AnimatedSprite."
-msgstr "AnimatedSprite2D 的精çµå¸§åº“。"
+msgstr "AnimatedSprite 的 Sprite 帧数库。"
#: doc/classes/SpriteFrames.xml:7
msgid ""
@@ -64839,6 +65999,11 @@ msgid ""
"having 2 [SpriteFrames] resources [code]run[/code] and [code]run_normal[/"
"code] will make it so the [code]run[/code] animation uses the normal map."
msgstr ""
+"[AnimatedSprite] 的精çµå¸§åº“。包å«å¯ç”¨äºŽæ’­æ”¾çš„帧和动画数æ®ã€‚\n"
+"[b]注æ„:[/b] ä½ å¯ä»¥é€šè¿‡åˆ›å»ºå¸¦æœ‰ [code]_normal[/code] åŽç¼€çš„ [SpriteFrames] "
+"æ¥å…³è”ä¸€ç»„æ³•çº¿è´´å›¾ã€‚ä¾‹å¦‚ï¼ŒåŒæ—¶å­˜åœ¨ä¸¤ä¸ªåˆ†åˆ«å«åš [code]run[/code] å’Œ "
+"[code]run_normal[/code] çš„ [SpriteFrames] 资æºï¼Œé‚£ä¹ˆ [code]run[/code] 中的动"
+"画就会使用法线贴图。"
#: doc/classes/SpriteFrames.xml:17
msgid "Adds a new animation to the library."
@@ -64857,13 +66022,12 @@ msgid "Removes all animations. A \"default\" animation will be created."
msgstr "删除所有动画。将创建一个“默认â€åŠ¨ç”»ã€‚"
#: doc/classes/SpriteFrames.xml:46
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the given animation is configured to loop when "
"it finishes playing. Otherwise, returns [code]false[/code]."
msgstr ""
-"如果addon准备好å“应函数调用,返回[code]true[/code],å¦åˆ™è¿”回[code]false[/"
-"code]。"
+"当指定的动画被é…ç½®ä¸ºç»“æŸæ’­æ”¾åŽå¾ªçŽ¯æ—¶ï¼Œè¿”å›ž [code]true[/code],å¦åˆ™è¿”回 "
+"[code]false[/code]。"
#: doc/classes/SpriteFrames.xml:52
msgid ""
@@ -64916,7 +66080,6 @@ msgid "Static body for 3D physics."
msgstr "用于 3D 物ç†çš„陿€ç‰©ä½“。"
#: doc/classes/StaticBody.xml:7
-#, fuzzy
msgid ""
"Static body for 3D physics. A static body is a simple body that is not "
"intended to move. In contrast to [RigidBody], they don't consume any CPU "
@@ -64925,7 +66088,7 @@ msgid ""
"static body, so even if it doesn't move, it affects other bodies as if it "
"was moving (this is useful for simulating conveyor belts or conveyor wheels)."
msgstr ""
-"用于 3D 物ç†çš„陿€ç‰©ä½“ã€‚é™æ€ç‰©ä½“是ä¸ç§»åŠ¨çš„ç®€å•物体。与 [RigidBody3D] 相比,它"
+"用于 3D 物ç†çš„陿€ç‰©ä½“ã€‚é™æ€ç‰©ä½“是ä¸åº”移动的简å•物体。与 [RigidBody] 相比,它"
"们åªè¦ä¸åЍ就ä¸ä¼šæ¶ˆè€—任何 CPU 资æºã€‚\n"
"此外,å¯ä»¥ä¸ºé™æ€ç‰©ä½“设置æ’定的线速度或角速度,因此å³ä½¿å®ƒä¸ç§»åŠ¨ï¼Œä¹Ÿä¼šåƒç§»åЍ䏀"
"æ ·å½±å“其他物体(这对于模拟传é€å¸¦æˆ–ä¼ é€è½®å¾ˆæœ‰ç”¨ï¼‰ã€‚"
@@ -64952,6 +66115,9 @@ msgid ""
"Deprecated, use [member PhysicsMaterial.friction] instead via [member "
"physics_material_override]."
msgstr ""
+"物体的摩擦,从 0(无摩擦)到 1(最大摩擦)。\n"
+"已废弃,请通过 [member physics_material_override] 使用 [member "
+"PhysicsMaterial.friction]。"
#: doc/classes/StaticBody2D.xml:4
msgid "Static body for 2D physics."
@@ -64986,28 +66152,29 @@ msgstr ""
"物体的æ’定线速度。这ä¸ä¼šç§»åŠ¨ç‰©ä½“ï¼Œä½†ä¼šå½±å“碰撞的物体,就åƒå®ƒåœ¨ç§»åŠ¨ä¸€æ ·ã€‚"
#: doc/classes/StaticBody2D.xml:26
-#, fuzzy
msgid ""
"The body's friction. Values range from [code]0[/code] (no friction) to "
"[code]1[/code] (full friction).\n"
"Deprecated, use [member PhysicsMaterial.friction] instead via [member "
"physics_material_override]."
msgstr ""
-"物体的摩擦。å–值范围从[code]0[/code](无摩擦)到[code]1[/code](最大摩擦)。"
+"物体的摩擦。å–值范围从 [code]0[/code](无摩擦)到 [code]1[/code](最大摩"
+"擦)。\n"
+"已废弃,请通过 [member physics_material_override] 使用 [member "
+"PhysicsMaterial.friction]。"
#: doc/classes/StreamPeer.xml:4
msgid "Abstraction and base class for stream-based protocols."
msgstr "基于æµçš„å议的抽象和基类。"
#: doc/classes/StreamPeer.xml:7
-#, fuzzy
msgid ""
"StreamPeer is an abstraction and base class for stream-based protocols (such "
"as TCP). It provides an API for sending and receiving data through streams "
"as raw data or strings."
msgstr ""
-"StreamPeer是基于æµå议(如TCP或UNIX套接字)的一个抽象和基类。它æä¾›äº†ä¸€ä¸ª"
-"API,用于通过æµå‘é€å’ŒæŽ¥æ”¶åŽŸå§‹æ•°æ®æˆ–字符串的数æ®ã€‚"
+"StreamPeer 是对æµå¼å议(如 TCP)的抽象和基类。它æä¾›äº†ç”¨äºŽé€šè¿‡æµå‘é€å’ŒæŽ¥æ”¶åŽŸ"
+"å§‹æ•°æ®æˆ–字符串的数æ®çš„ API。"
#: doc/classes/StreamPeer.xml:15
msgid "Gets a signed 16-bit value from the stream."
@@ -65154,7 +66321,6 @@ msgstr ""
"值,一个 [enum @GlobalScope.Error] 错误ç ä»¥åŠä¸€ä¸ªæ•´æ•°ï¼Œè¡¨ç¤ºå®žé™…å‘é€çš„æ•°æ®é‡ã€‚"
#: doc/classes/StreamPeer.xml:174
-#, fuzzy
msgid ""
"Puts a zero-terminated ASCII string into the stream prepended by a 32-bit "
"unsigned integer representing its size.\n"
@@ -65166,7 +66332,8 @@ msgid ""
msgstr ""
"呿µä¸­æ”¾å…¥ä¸€ä¸ªä»¥é›¶ç»“尾的 ASCII 字符串,å‰ç¼€ä¸€ä¸ªè¡¨ç¤ºå…¶é•¿åº¦çš„ 32 使— ç¬¦å·æ•´"
"数。\n"
-"注æ„:如果想å‘é€ä¸åŒ…å«é•¿åº¦å‰ç¼€çš„ ASCII 字符串,å¯ä»¥ä½¿ç”¨ [method put_data]:\n"
+"[b]注æ„:[/b] 如果想å‘é€ä¸åŒ…å«é•¿åº¦å‰ç¼€çš„ ASCII 字符串,å¯ä»¥ä½¿ç”¨ [method "
+"put_data]:\n"
"[codeblock]\n"
"put_data(\"Hello world\".to_ascii())\n"
"[/codeblock]"
@@ -65188,7 +66355,6 @@ msgid "Puts an unsigned byte into the stream."
msgstr "呿µä¸­æ”¾å…¥ä¸€ä¸ªæ— ç¬¦å·å­—节。"
#: doc/classes/StreamPeer.xml:213
-#, fuzzy
msgid ""
"Puts a zero-terminated UTF-8 string into the stream prepended by a 32 bits "
"unsigned integer representing its size.\n"
@@ -65200,7 +66366,8 @@ msgid ""
msgstr ""
"呿µä¸­æ”¾å…¥ä¸€ä¸ªä»¥é›¶ç»“尾的 UTF-8 字符串,å‰ç¼€ä¸€ä¸ªè¡¨ç¤ºå…¶é•¿åº¦çš„ 32 使— ç¬¦å·æ•´"
"数。\n"
-"注æ„:如果想å‘é€ä¸åŒ…å«é•¿åº¦å‰ç¼€çš„ UTF-8 字符串,å¯ä»¥ä½¿ç”¨ [method put_data]:\n"
+"[b]注æ„:[/b] 如果想å‘é€ä¸åŒ…å«é•¿åº¦å‰ç¼€çš„ UTF-8 字符串,å¯ä»¥ä½¿ç”¨ [method "
+"put_data]:\n"
"[codeblock]\n"
"put_data(\"Hello world\".to_utf8())\n"
"[/codeblock]"
@@ -65321,13 +66488,12 @@ msgid "Returns the status of the connection, see [enum Status]."
msgstr "返回连接的状æ€ï¼Œè§[enum Status]。"
#: doc/classes/StreamPeerTCP.xml:47
-#, fuzzy
msgid ""
"Returns [code]true[/code] if this peer is currently connected or is "
"connecting to a host, [code]false[/code] otherwise."
msgstr ""
-"如果这个对等体当å‰è¿žæŽ¥åˆ°ä¸€ä¸ªä¸»æœºï¼Œè¿”回[code]true[/code],å¦åˆ™è¿”回"
-"[code]false[/code]。"
+"当本对等体当å‰å·²è¿žæŽ¥åˆ°ä¸»æœºæˆ–者正在连接主机,则返回 [code]true[/code],å¦åˆ™è¿”"
+"回 [code]false[/code]。"
#: doc/classes/StreamPeerTCP.xml:54
msgid ""
@@ -65339,6 +66505,12 @@ msgid ""
"send large packets or need to transfer a lot of data, as enabling this can "
"decrease the total available bandwidth."
msgstr ""
+"如果 [code]enabled[/code] 为 [code]true[/code] 时,数æ®åŒ…会立å³å‘é€ã€‚如果 "
+"[code]enabled[/code] 为 [code]false[/code] 时(默认如此),数æ®åŒ…会延迟å‘é€ï¼Œ"
+"使用 [url=https://zh.wikipedia.org/wiki/%E7%B4%8D%E6%A0%BC%E7%AE%97%E6%B3%95]"
+"纳格算法[/url]åˆå¹¶ã€‚\n"
+"[b]注æ„:[/b] 如果你的应用所传输的数æ®åŒ…很大,或者需è¦ä¼ è¾“大釿•°æ®ï¼Œå»ºè®®å°†æœ¬"
+"å±žæ€§ä¿æŒç¦ç”¨ï¼Œå› ä¸ºå¯ç”¨åŽå¯èƒ½é™ä½Žæ€»ä½“å¯ç”¨å¸¦å®½ã€‚"
#: doc/classes/StreamPeerTCP.xml:61
msgid ""
@@ -65394,7 +66566,7 @@ msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/"
"gdscript_format_string.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/scripting/gdscript/"
+"https://docs.godotengine.org/zh_CN/stable/getting_started/scripting/gdscript/"
"gdscript_format_string.html"
#: doc/classes/String.xml:17
@@ -65555,6 +66727,18 @@ msgid ""
"To get a boolean result from a string comparison, use the [code]==[/code] "
"operator instead. See also [method nocasecmp_to]."
msgstr ""
+"与å¦ä¸€ä¸ªå­—符串进行比较,区分大å°å†™ã€‚å°äºŽæ—¶è¿”回 [code]-1[/code]ã€å¤§äºŽæ—¶è¿”回 "
+"[code]1[/code]ã€ç­‰äºŽæ—¶è¿”回 [code]0[/code]。“å°äºŽâ€å’Œâ€œå¤§äºŽâ€æ¯”较的是字符串中的 "
+"[url=https://zh.wikipedia.org/wiki/Unicode%E5%AD%97%E7%AC"
+"%A6%E5%88%97%E8%A1%A8]Unicode ç ä½[/url],大致与字æ¯è¡¨é¡ºåºä¸€è‡´ã€‚\n"
+"[b]字符串长度ä¸åŒæ—¶çš„行为:[/b] “基准â€å­—符串比 [code]to[/code] 字符串长时返"
+"回 [code]-1[/code],“基准â€å­—符串比 [code]to[/code] 字符串短时返回 [code]-1[/"
+"code]ã€‚è¯·æ³¨æ„æ­¤å¤„的长度为 Unicode ç ä½çš„长度,[i]䏿˜¯[/i]实际的å¯è§å­—符。\n"
+"[b]存在空字符串的行为:[/b] “基准â€å­—符串为空时返回 [code]-1[/code],字符串 "
+"[code]to[/code] 为空时返回 [code]1[/code],两者都为空时返回 [code]0[/"
+"code]。\n"
+"如果想在比较字符串时获得布尔型的返回值,请使用 [code]==[/code] è¿ç®—符。å‚阅 "
+"[method nocasecmp_to]。"
#: doc/classes/String.xml:229
msgid ""
@@ -65601,7 +66785,6 @@ msgstr ""
"从该字符串的 [code]position[/code] ä½ç½®å¼€å§‹ï¼Œæ“¦é™¤ [code]chars[/code] 个字符。"
#: doc/classes/String.xml:272
-#, fuzzy
msgid ""
"Finds the first occurrence of a substring. Returns the starting position of "
"the substring or [code]-1[/code] if not found. Optionally, the initial "
@@ -65614,12 +66797,12 @@ msgid ""
" pass\n"
"[/codeblock]"
msgstr ""
-"返回此实例中指定字符串的 [b]first[/b] 出现的索引(区分大å°å†™),或 [code]-1[/"
-"code]。å¯ä»¥æŒ‡å®šèµ·å§‹æœç´¢ç´¢å¼•,一直到字符串的结尾。\n"
-"[b]注:[/b] å¦‚æžœåªæƒ³çŸ¥é“字符串是å¦åŒ…å«å­å­—符串,请使用 [code]in[/code] è¿ç®—"
+"查找首次出现的å­å­—符串。返回该å­å­—符串的起始ä½ç½®ï¼Œæœªæ‰¾åˆ°æ—¶åˆ™è¿”回 [code]-1[/"
+"code]。还å¯ä»¥ä¼ å…¥æŸ¥æ‰¾çš„èµ·å§‹ä½ç½®ã€‚\n"
+"[b]注æ„:[/b] å¦‚æžœåªæƒ³çŸ¥é“字符串是å¦åŒ…å«å­å­—符串,请使用 [code]in[/code] è¿ç®—"
"符,如下所示:\n"
"[codeblock]\n"
-"# 将判断为 `false`.\n"
+"# 判断结果将为 `false`。\n"
"if \"i\" in \"team\":\n"
" pass\n"
"[/codeblock]"
@@ -65877,6 +67060,10 @@ msgid ""
"trim_prefix] method that will remove a single prefix string rather than a "
"set of characters."
msgstr ""
+"返回该字符串从左侧删除若干字符åŽçš„å‰¯æœ¬ã€‚å‚æ•° [code]chars[/code] ä¸ºåŒ…å«æ‰€éœ€åˆ "
+"除字符的字符串。\n"
+"[b]注æ„:[/b] [code]chars[/code] 䏿˜¯å‰ç¼€ã€‚å¦‚æžœä¸æƒ³åˆ é™¤ä¸€ç»„字符,而是想删除å•"
+"一的å‰ç¼€å­—符串,请å‚阅 [method trim_prefix]。"
#: doc/classes/String.xml:492
msgid ""
@@ -65928,6 +67115,22 @@ msgid ""
"To get a boolean result from a string comparison, use the [code]==[/code] "
"operator instead. See also [method nocasecmp_to] and [method casecmp_to]."
msgstr ""
+"与å¦ä¸€ä¸ªå­—符串进行[i]自然顺åº[/i]比较,ä¸åŒºåˆ†å¤§å°å†™ã€‚å°äºŽæ—¶è¿”回 [code]-1[/"
+"code]ã€å¤§äºŽæ—¶è¿”回 [code]1[/code]ã€ç­‰äºŽæ—¶è¿”回 [code]0[/code]。“å°äºŽâ€å’Œâ€œå¤§äºŽâ€æ¯”"
+"较的是字符串中的 [url=https://zh.wikipedia.org/wiki/Unicode%E5%AD%97%E7%AC"
+"%A6%E5%88%97%E8%A1%A8]Unicode ç ä½[/url],大致与字æ¯è¡¨é¡ºåºä¸€è‡´ã€‚内部实现时,"
+"会将å°å†™å­—符转æ¢ä¸ºå¤§å†™åŽè¿›è¡Œæ¯”较。\n"
+"使用自然顺åºè¿›è¡ŒæŽ’åºæ—¶ï¼Œå¯¹è¿žç»­æ•°å­—的排åºç¬¦åˆå¤§å¤šæ•°äººçš„预期。使用自然顺åºå¯¹ 1 "
+"到 10 进行排åºåŽï¼Œä¼šå¾—到 [code][1, 2, 3, ...][/code] è€Œä¸æ˜¯ [code][1, 10, 2, "
+"3, ...][/code]。\n"
+"[b]字符串长度ä¸åŒæ—¶çš„行为:[/b] “基准â€å­—符串比 [code]to[/code] 字符串长时返"
+"回 [code]-1[/code],“基准â€å­—符串比 [code]to[/code] 字符串短时返回 [code]-1[/"
+"code]ã€‚è¯·æ³¨æ„æ­¤å¤„的长度为 Unicode ç ä½çš„长度,[i]䏿˜¯[/i]实际的å¯è§å­—符。\n"
+"[b]存在空字符串的行为:[/b] “基准â€å­—符串为空时返回 [code]-1[/code],字符串 "
+"[code]to[/code] 为空时返回 [code]1[/code],两者都为空时返回 [code]0[/"
+"code]。\n"
+"如果想在比较字符串时获得布尔型的返回值,请使用 [code]==[/code] è¿ç®—符。å‚阅 "
+"[method casecmp_to]。"
#: doc/classes/String.xml:529
msgid ""
@@ -65948,6 +67151,19 @@ msgid ""
"To get a boolean result from a string comparison, use the [code]==[/code] "
"operator instead. See also [method casecmp_to]."
msgstr ""
+"与å¦ä¸€ä¸ªå­—符串进行比较,ä¸åŒºåˆ†å¤§å°å†™ã€‚å°äºŽæ—¶è¿”回 [code]-1[/code]ã€å¤§äºŽæ—¶è¿”回 "
+"[code]1[/code]ã€ç­‰äºŽæ—¶è¿”回 [code]0[/code]。“å°äºŽâ€å’Œâ€œå¤§äºŽâ€æ¯”较的是字符串中的 "
+"[url=https://zh.wikipedia.org/wiki/Unicode%E5%AD%97%E7%AC"
+"%A6%E5%88%97%E8%A1%A8]Unicode ç ä½[/url],大致与字æ¯è¡¨é¡ºåºä¸€è‡´ã€‚内部实现时,"
+"会将å°å†™å­—符转æ¢ä¸ºå¤§å†™åŽè¿›è¡Œæ¯”较。\n"
+"[b]字符串长度ä¸åŒæ—¶çš„行为:[/b] “基准â€å­—符串比 [code]to[/code] 字符串长时返"
+"回 [code]-1[/code],“基准â€å­—符串比 [code]to[/code] 字符串短时返回 [code]-1[/"
+"code]ã€‚è¯·æ³¨æ„æ­¤å¤„的长度为 Unicode ç ä½çš„长度,[i]䏿˜¯[/i]实际的å¯è§å­—符。\n"
+"[b]存在空字符串的行为:[/b] “基准â€å­—符串为空时返回 [code]-1[/code],字符串 "
+"[code]to[/code] 为空时返回 [code]1[/code],两者都为空时返回 [code]0[/"
+"code]。\n"
+"如果想在比较字符串时获得布尔型的返回值,请使用 [code]==[/code] è¿ç®—符。å‚阅 "
+"[method casecmp_to]。"
#: doc/classes/String.xml:539
msgid "Returns the character code at position [code]at[/code]."
@@ -65996,25 +67212,26 @@ msgstr "返回é‡å¤å¤šæ¬¡çš„原始字符串。é‡å¤æ¬¡æ•°ç”±å‚数给出。"
msgid ""
"Replaces occurrences of a case-sensitive substring with the given one inside "
"the string."
-msgstr "将出现的å­å­—符串替æ¢ä¸ºå­—符串中给定的å­å­—符串(区分大å°å†™)。"
+msgstr "将出现的å­å­—符串替æ¢ä¸ºå­—符串中给定的å­å­—符串,区分大å°å†™ã€‚"
#: doc/classes/String.xml:595
msgid ""
"Replaces occurrences of a case-insensitive substring with the given one "
"inside the string."
-msgstr "将出现的å­å­—符串替æ¢ä¸ºå­—符串中给定的å­å­—符串(ä¸åŒºåˆ†å¤§å°å†™)。"
+msgstr "将出现的å­å­—符串替æ¢ä¸ºå­—符串中给定的å­å­—符串,ä¸åŒºåˆ†å¤§å°å†™ã€‚"
#: doc/classes/String.xml:603
msgid ""
"Performs a case-sensitive search for a substring, but starts from the end of "
"the string instead of the beginning."
-msgstr ""
+msgstr "执行å­å­—符串æœç´¢ï¼ŒåŒºåˆ†å¤§å°å†™ã€‚ä¸è¿‡æ˜¯ä»Žå­—符串末尾开始æœç´¢ï¼Œè€Œä¸æ˜¯å¼€å¤´ã€‚"
#: doc/classes/String.xml:611
msgid ""
"Performs a case-insensitive search for a substring, but starts from the end "
"of the string instead of the beginning."
msgstr ""
+"执行å­å­—符串æœç´¢ï¼Œä¸åŒºåˆ†å¤§å°å†™ã€‚ä¸è¿‡æ˜¯ä»Žå­—符串末尾开始æœç´¢ï¼Œè€Œä¸æ˜¯å¼€å¤´ã€‚"
#: doc/classes/String.xml:618
msgid "Returns the right side of the string from a given position."
@@ -66061,6 +67278,10 @@ msgid ""
"trim_suffix] method that will remove a single suffix string rather than a "
"set of characters."
msgstr ""
+"返回该字符串从å³ä¾§åˆ é™¤è‹¥å¹²å­—符åŽçš„å‰¯æœ¬ã€‚å‚æ•° [code]chars[/code] ä¸ºåŒ…å«æ‰€éœ€åˆ "
+"除字符的字符串。\n"
+"[b]注æ„:[/b] [code]chars[/code] 䏿˜¯åŽç¼€ã€‚å¦‚æžœä¸æƒ³åˆ é™¤ä¸€ç»„字符,而是想删除å•"
+"一的å‰ç¼€å­—符串,请å‚阅 [method trim_suffix]。"
#: doc/classes/String.xml:651
msgid "Returns the SHA-1 hash of the string as an array of bytes."
@@ -66162,16 +67383,14 @@ msgstr ""
"[code]len[/code] 是å¯é€‰çš„,使用 [code]-1[/code] 将返回给定ä½ç½®çš„剩余字符。"
#: doc/classes/String.xml:738
-#, fuzzy
msgid ""
"Converts the String (which is a character array) to [PoolByteArray] (which "
"is an array of bytes). The conversion is faster compared to [method "
"to_utf8], as this method assumes that all the characters in the String are "
"ASCII characters."
msgstr ""
-"å°† String(它是一个字符数组)转æ¢ä¸º [PackedByteArray](它是一个字节数组)。"
-"与 [method to_utf8] 相比,转æ¢é€Ÿåº¦æ›´å¿«ï¼Œå› ä¸ºæ­¤æ–¹æ³•å‡å®š String 中的所有字符都"
-"是 ASCII 字符。"
+"å°† String(字符数组)转æ¢ä¸º [PoolByteArray](字节数组)。与 [method to_utf8] "
+"相比,转æ¢é€Ÿåº¦æ›´å¿«ï¼Œå› ä¸ºæ­¤æ–¹æ³•å‡å®š String 中的所有字符都是 ASCII 字符。"
#: doc/classes/String.xml:744
msgid ""
@@ -66192,14 +67411,13 @@ msgid "Returns the string converted to uppercase."
msgstr "返回转æ¢ä¸ºå¤§å†™çš„字符串。"
#: doc/classes/String.xml:768
-#, fuzzy
msgid ""
"Converts the String (which is an array of characters) to [PoolByteArray] "
"(which is an array of bytes). The conversion is a bit slower than [method "
"to_ascii], but supports all UTF-8 characters. Therefore, you should prefer "
"this function over [method to_ascii]."
msgstr ""
-"将字符串(字符数组)转æ¢ä¸º [PackedByteArray]ï¼ˆå­—èŠ‚æ•°ç»„ï¼‰ã€‚è½¬æ¢æ¯” [method "
+"将字符串(字符数组)转æ¢ä¸º [PoolByteArray]ï¼ˆå­—èŠ‚æ•°ç»„ï¼‰ã€‚è½¬æ¢æ¯” [method "
"to_ascii] æ…¢ä¸€ç‚¹ï¼Œä½†æ”¯æŒæ‰€æœ‰ UTF-8 å­—ç¬¦ã€‚å› æ­¤ï¼Œæ‚¨åº”è¯¥æ›´å–œæ¬¢è¿™ä¸ªå‡½æ•°è€Œä¸æ˜¯ "
"[method to_ascii]。"
@@ -66207,7 +67425,7 @@ msgstr ""
msgid ""
"Converts the String (which is an array of characters) to [PoolByteArray] "
"(which is an array of bytes)."
-msgstr ""
+msgstr "将字符串(字符的数组)转æ¢ä¸º [PoolByteArray](字节的数组)。"
#: doc/classes/String.xml:781
msgid ""
@@ -66222,14 +67440,13 @@ msgid ""
msgstr "å¦‚æžœä»¥ä¸€ä¸ªç»™å®šçš„å­—ç¬¦ä¸²ä¸ºç»“å°¾ï¼Œåˆ™ä»Žè¯¥å­—ç¬¦ä¸²ä¸­åˆ é™¤ï¼Œæˆ–è€…ä¸æ”¹å˜è¯¥å­—符串。"
#: doc/classes/String.xml:794
-#, fuzzy
msgid ""
"Removes any characters from the string that are prohibited in [Node] names "
"([code].[/code] [code]:[/code] [code]@[/code] [code]/[/code] [code]\"[/"
"code])."
msgstr ""
-"è¿”å›žå½“å‰æ—¥æœŸä½œä¸ºé”®çš„å­—å…¸:[code]year[/code], [code]month[/code], [code]day[/"
-"code], [code]weekday[/code], [code]dst[/code](å¤ä»¤æ—¶)。"
+"从字符串中删除所有ä¸å…许在 [Node] å称中出现的字符([code].[/code] [code]:[/"
+"code] [code]@[/code] [code]/[/code] [code]\"[/code])。"
#: doc/classes/String.xml:800
msgid ""
@@ -66248,7 +67465,6 @@ msgid "Base class for drawing stylized boxes for the UI."
msgstr "用于为 UI 绘制风格化框的基类。"
#: doc/classes/StyleBox.xml:7
-#, fuzzy
msgid ""
"StyleBox is [Resource] that provides an abstract base class for drawing "
"stylized boxes for the UI. StyleBoxes are used for drawing the styles of "
@@ -66261,10 +67477,14 @@ msgid ""
"[code]hover[/code] or [code]pressed[/code] [StyleBox]. This makes the "
"[code]focus[/code] [StyleBox] more reusable across different nodes."
msgstr ""
-"StyleBox 是 [Resource],它æä¾›äº†ä¸€ä¸ªæŠ½è±¡åŸºç±»ï¼Œç”¨äºŽä¸º UI 绘制风格化的框。 "
-"StyleBox 用于绘制按钮样å¼ã€çº¿æ¡ç¼–è¾‘èƒŒæ™¯ã€æ ‘背景等,也用于测试指针信å·çš„逿˜ŽæŽ©"
-"ç ã€‚如果在指定为控件的掩ç çš„ StyleBox ä¸Šçš„æŽ©ç æµ‹è¯•失败,点击和è¿åŠ¨ä¿¡å·å°†é€šè¿‡"
-"它传递到下é¢çš„一个。"
+"æ ·å¼ç›’ StyleBox æ˜¯ä¸€ç§ [Resource],它æä¾›äº†ä¸€ä¸ªæŠ½è±¡åŸºç±»ï¼Œç”¨äºŽä¸º UI 绘制风格化"
+"的框。 StyleBox 被用于绘制按钮的样å¼ã€è¡Œç¼–è¾‘æ¡†çš„èƒŒæ™¯ã€æ ‘的背景等,也被用作测"
+"试指针信å·çš„逿˜ŽæŽ©ç ã€‚å°† StyleBox æŒ‡å®šä¸ºæŽ§ä»¶çš„æŽ©ç æ—¶ï¼Œå¦‚æžœåœ¨æŽ©ç æµ‹è¯•失败,点"
+"击和è¿åŠ¨ä¿¡å·å°†é€è¿‡å®ƒä¼ é€’至下层控件。\n"
+"[b]注æ„:[/b] 对于有 [i]主题属性[/i] çš„ [Control] 控件,å为 [code]focus[/"
+"code] çš„ [StyleBox] 会显示在å为 [code]normal[/code]ã€[code]hover[/code]ã€"
+"[code]pressed[/code] 的 [StyleBox]之上。这样的行为有助于 [code]focus[/code] "
+"[StyleBox] 在ä¸åŒèŠ‚ç‚¹ä¸Šå¤ç”¨ã€‚"
#: doc/classes/StyleBox.xml:18
msgid ""
@@ -66302,7 +67522,7 @@ msgstr ""
#: doc/classes/StyleBox.xml:52
msgid "Returns the minimum size that this stylebox can be shrunk to."
-msgstr "返回此StyleBoxå¯ä»¥ç¼©å°åˆ°çš„æœ€å°å°ºå¯¸ã€‚"
+msgstr "返回此样å¼ç›’å¯ä»¥ç¼©å°åˆ°çš„æœ€å°å°ºå¯¸ã€‚"
#: doc/classes/StyleBox.xml:58
msgid ""
@@ -66310,7 +67530,7 @@ msgid ""
"equivalent to [code]Vector2(style.get_margin(MARGIN_LEFT), style."
"get_margin(MARGIN_TOP))[/code]."
msgstr ""
-"è¿”å›žæ ·å¼æ¡†çš„“åç§»é‡â€ã€‚这个辅助函数返回一个等价于 [code]Vector2(style."
+"返回样å¼ç›’的“åç§»é‡â€ã€‚这个辅助函数返回一个等价于 [code]Vector2(style."
"get_margin(MARGIN_LEFT), style.get_margin(MARGIN_TOP))[/code] 的值。"
#: doc/classes/StyleBox.xml:66
@@ -66318,8 +67538,8 @@ msgid ""
"Sets the default value of the specified [enum Margin] to given [code]offset[/"
"code] in pixels."
msgstr ""
-"将指定的 [enum Margin] 的默认值设置为给定的 [code]offset[/code](以åƒç´ ä¸ºå•"
-"ä½ï¼‰ã€‚"
+"将指定 [enum Margin] è¾¹è·çš„默认值设置为给定的 [code]offset[/code],å•ä½ä¸ºåƒ"
+"素。"
#: doc/classes/StyleBox.xml:74
msgid "Test a position in a rectangle, return whether it passes the mask test."
@@ -66339,13 +67559,13 @@ msgid ""
"of reading these properties directly. This is because it correctly respects "
"negative values and the fallback mentioned above."
msgstr ""
-"æ­¤æ ·å¼æ¡†å†…容的底部边è·ã€‚增加此值会å‡å°‘底部内容的å¯ç”¨ç©ºé—´ã€‚\n"
-"如果此值为负,则将其忽略并改为使用特定于å­èŠ‚ç‚¹çš„è¾¹è·ã€‚例如,对于 "
-"[StyleBoxFlat],使用边框厚度(如果有)。\n"
-"ç”±ä½¿ç”¨æ­¤æ ·å¼æ¡†çš„代ç å†³å®šè¿™äº›å†…容是什么:例如,[Button] éµä»ŽæŒ‰é’®æ–‡æœ¬å†…容的此内"
-"容边è·ã€‚\n"
-"[method get_margin] 应该用于作为使用者获å–è¿™ä¸ªå€¼ï¼Œè€Œä¸æ˜¯ç›´æŽ¥è¯»å–这些属性。这"
-"是因为它正确地éµä»Žäº†è´Ÿå€¼å’Œä¸Šè¿°å›žé€€ã€‚"
+"此样å¼ç›’内容的底边è·ã€‚增加此值会从底部å‡å°‘内容的å¯ç”¨ç©ºé—´ã€‚\n"
+"如果此值为负,则将其忽略并改为使用特定于该å­ç±»åž‹çš„è¾¹è·ã€‚例如,对于 "
+"[StyleBoxFlat],(如果有厚度的è¯ï¼‰å°†ä½¿ç”¨è¾¹æ¡†åŽšåº¦ã€‚\n"
+"å†…å®¹æ˜¯ä»€ä¹ˆç”±ä½¿ç”¨æ­¤æ ·å¼æ¡†çš„代ç å†³å®šï¼šä¾‹å¦‚ [Button] 会为其文本内容设置此内容边"
+"è·ã€‚\n"
+"使用者应该通过 [method get_margin] 获å–è¾¹è·ï¼Œè€Œä¸æ˜¯ç›´æŽ¥è¯»å–å•独方å‘上的属性。"
+"这是因为这个函数会正确处ç†è´Ÿå€¼å’Œä¸Šè¿°å¤‡ç”¨é€»è¾‘。"
#: doc/classes/StyleBox.xml:86
msgid ""
@@ -66353,8 +67573,8 @@ msgid ""
"reduces the space available to the contents from the left.\n"
"Refer to [member content_margin_bottom] for extra considerations."
msgstr ""
-"æ­¤stylebox内容的左边è·ã€‚增加此值会å‡å°‘左侧内容的å¯ç”¨ç©ºé—´ã€‚\n"
-"有关é¢å¤–注æ„事项,请å‚阅 [member content_margin_bottom]。"
+"此样å¼ç›’内容的左边è·ã€‚增加此值会从左侧å‡å°‘内容的å¯ç”¨ç©ºé—´ã€‚\n"
+"é¢å¤–的注æ„事项请å‚阅 [member content_margin_bottom]。"
#: doc/classes/StyleBox.xml:90
msgid ""
@@ -66362,8 +67582,8 @@ msgid ""
"reduces the space available to the contents from the right.\n"
"Refer to [member content_margin_bottom] for extra considerations."
msgstr ""
-"æ­¤stylebox内容的å³è¾¹è·ã€‚增加此值会å‡å°‘å³ä¾§å†…容的å¯ç”¨ç©ºé—´ã€‚\n"
-"有关é¢å¤–注æ„事项,请å‚阅 [member content_margin_bottom]。"
+"此样å¼ç›’内容的å³è¾¹è·ã€‚增加此值会从å³ä¾§å‡å°‘内容的å¯ç”¨ç©ºé—´ã€‚\n"
+"é¢å¤–的注æ„事项请å‚阅 [member content_margin_bottom]。"
#: doc/classes/StyleBox.xml:94
msgid ""
@@ -66371,24 +67591,23 @@ msgid ""
"reduces the space available to the contents from the top.\n"
"Refer to [member content_margin_bottom] for extra considerations."
msgstr ""
-"è¿™ä¸ªæ ·å¼æ¡†çš„内容的上边è·ã€‚增加这个值å¯ä»¥å‡å°‘内容从顶部的å¯ç”¨ç©ºé—´ã€‚\n"
-"请å‚考[member content_margin_bottom]以获得é¢å¤–的考虑。"
+"此样å¼ç›’内容的顶边è·ã€‚增加此值会从顶部å‡å°‘内容的å¯ç”¨ç©ºé—´ã€‚\n"
+"é¢å¤–的注æ„事项请å‚阅 [member content_margin_bottom]。"
#: doc/classes/StyleBoxEmpty.xml:4
msgid "Empty stylebox (does not display anything)."
-msgstr "空的StyleBoxï¼ˆä¸æ˜¾ç¤ºä»»ä½•东西)。"
+msgstr "空的样å¼ç›’ï¼ˆä¸æ˜¾ç¤ºä»»ä½•东西)。"
#: doc/classes/StyleBoxEmpty.xml:7
msgid "Empty stylebox (really does not display anything)."
-msgstr "空的StyleBoxï¼ˆçœŸçš„ä¸æ˜¾ç¤ºä»»ä½•东西)。"
+msgstr "空的样å¼ç›’ï¼ˆçœŸçš„ä¸æ˜¾ç¤ºä»»ä½•东西)。"
#: doc/classes/StyleBoxFlat.xml:4
msgid ""
"Customizable [StyleBox] with a given set of parameters (no texture required)."
-msgstr "å¯è‡ªå®šä¹‰ [StyleBox] ä¸Žç»™å®šå‚æ•°é›† (无需纹ç†ï¼‰ 。"
+msgstr "å¯é€šè¿‡ä¸€ç³»åˆ—傿•°è‡ªå®šä¹‰çš„ [StyleBox](无需纹ç†ï¼‰ 。"
#: doc/classes/StyleBoxFlat.xml:7
-#, fuzzy
msgid ""
"This [StyleBox] can be used to achieve all kinds of looks without the need "
"of a texture. The following properties are customizable:\n"
@@ -66411,19 +67630,19 @@ msgid ""
"corner_radius_bottom_left: 20\n"
"[/codeblock]"
msgstr ""
-"这个 [StyleBox] å¯ä»¥ç”¨æ¥å®žçްå„ç§å¤–观,无需纹ç†ã€‚这些属性是å¯å®šåˆ¶çš„:\n"
+"这个 [StyleBox] å¯ä»¥ç”¨æ¥å®žçްå„ç§å¤–观,无需纹ç†ã€‚以下属性是å¯å®šåˆ¶çš„:\n"
"- 颜色\n"
"- 边框宽度(æ¯ä¸ªè¾¹æ¡†çš„å•独宽度)\n"
"- 圆角(æ¯ä¸ªè§’çš„å•独åŠå¾„)\n"
"- 阴影(带有模糊和å移)\n"
-"å…许将æ‹è§’åŠå¾„设置为高值。一旦角é‡å ï¼Œæ ·å¼æ¡†å°†åˆ‡æ¢åˆ°ç›¸å…³ç³»ç»Ÿã€‚例å­ï¼š\n"
+"å…许将圆角åŠå¾„设置为很高的值。两角é‡å æ—¶ï¼Œæ ·å¼ç›’将切æ¢åˆ°ç›¸å¯¹ç³»ç»Ÿã€‚例å­ï¼š\n"
"[codeblock]\n"
"height = 30\n"
"corner_radius_top_left = 50\n"
"corner_radius_bottom_left = 100\n"
"[/codeblock]\n"
-"相关系统现在将采用两个左角的 1:2 比率æ¥è®¡ç®—实际角宽度。添加的两个角将 [b] æ°¸"
-"远 [/b] ä¸ä¼šè¶…过高度。结果:\n"
+"相对系统现在将采用两个左角的 1:2 比率æ¥è®¡ç®—实际角宽度。添加的两个角[b]永远[/"
+"b]ä¸ä¼šè¶…过高度。结果:\n"
"[codeblock]\n"
"corner_radius_top_left: 10\n"
"corner_radius_bottom_left: 20\n"
@@ -66511,7 +67730,6 @@ msgstr ""
"[code]size_right[/code] å’Œ [code]size_bottom[/code] åƒç´ ã€‚"
#: doc/classes/StyleBoxFlat.xml:122
-#, fuzzy
msgid ""
"Antialiasing draws a small ring around the edges, which fades to "
"transparency. As a result, edges look much smoother. This is only noticeable "
@@ -66521,8 +67739,11 @@ msgid ""
"[code]false[/code] to ensure crisp visuals and avoid possible visual "
"glitches."
msgstr ""
-"抗锯齿在边缘周围绘制一个å°çŽ¯ï¼Œå®ƒé€æ¸å˜é€æ˜Žã€‚最åŽè¾¹ç¼˜çœ‹èµ·æ¥ä¼šæ›´åŠ å¹³æ»‘ã€‚è¿™ä»…åœ¨"
-"ä½¿ç”¨åœ†è§’æ—¶æ‰æ˜Žæ˜¾ã€‚"
+"抗锯齿会在边缘周围绘制一个æ¸å˜åˆ°é€æ˜Žçš„å°çŽ¯ã€‚å› æ­¤è¾¹ç¼˜çœ‹èµ·æ¥ä¼šæ›´åŠ å¹³æ»‘ã€‚è¿™ä»…åœ¨"
+"ä½¿ç”¨åœ†è§’æ—¶æ‰æ˜Žæ˜¾ã€‚\n"
+"[b]注æ„:[/b] 使用 45 度倒角([member corner_detail] = 1)时,建议将 [member "
+"anti_aliasing] 设为 [code]false[/code],这样å¯ä»¥ä¿è¯ç”»é¢é”利ã€é¿å…一些显示问"
+"题。"
#: doc/classes/StyleBoxFlat.xml:126
msgid ""
@@ -66559,7 +67780,6 @@ msgid "Border width for the top border."
msgstr "顶部边框的宽度。"
#: doc/classes/StyleBoxFlat.xml:150
-#, fuzzy
msgid ""
"This sets the number of vertices used for each corner. Higher values result "
"in rounder corners but take more processing power to compute. When choosing "
@@ -66571,12 +67791,11 @@ msgid ""
"A corner detail of [code]1[/code] will result in chamfered corners instead "
"of rounded corners, which is useful for some artistic effects."
msgstr ""
-"这将设置用于æ¯ä¸ªè§’的顶点数é‡ã€‚æ›´é«˜çš„å€¼ä¼šå½¢æˆæ›´åœ†çš„è§’ï¼Œä½†éœ€è¦æ›´å¤šçš„处ç†èƒ½åŠ›æ¥"
-"计算。选择值时,应考虑角åŠå¾„([method set_corner_radius_all])。\n"
-"对于å°äºŽ 10 的角åŠå¾„,[code]4[/code] 或 [code]5[/code] 应该就足够了。对于å°"
-"于 30 的角åŠå¾„,[code]8[/code] å’Œ [code]12[/code] 之间的值应该足够了。\n"
-"[code]1[/code]çš„corner detail ä¼šå¯¼è‡´å€’è§’è€Œä¸æ˜¯åœ†è§’,这对于æŸäº›è‰ºæœ¯æ•ˆæžœå¾ˆæœ‰"
-"用。"
+"设置用于æ¯ä¸ªè§’çš„é¡¶ç‚¹æ•°ã€‚æ›´é«˜çš„å€¼ç”Ÿæˆæ›´åœ†çš„è§’ï¼Œä½†éœ€è¦æ›´å¤šçš„处ç†è®¡ç®—。选择值"
+"时,应考虑角åŠå¾„([method set_corner_radius_all])。\n"
+"对于å°äºŽ 10 的角åŠå¾„,[code]4[/code] 或 [code]5[/code] 应该就足够。对于å°äºŽ "
+"30 的角åŠå¾„,[code]8[/code] å’Œ [code]12[/code] 之间的值应该足够。\n"
+"[code]1[/code]çš„è§’ç»†èŠ‚ä¼šå¯¼è‡´å€’è§’è€Œä¸æ˜¯åœ†è§’,这对于æŸäº›è‰ºæœ¯æ•ˆæžœå¾ˆæœ‰ç”¨ã€‚"
#: doc/classes/StyleBoxFlat.xml:155
msgid ""
@@ -66825,7 +68044,7 @@ msgstr ""
#: doc/classes/StyleBoxTexture.xml:103
msgid "Modulates the color of the texture when this style box is drawn."
-msgstr "ç»˜åˆ¶æ­¤æ ·å¼æ¡†æ—¶è°ƒåˆ¶çº¹ç†çš„颜色。"
+msgstr "绘制此样å¼ç›’时用于调制纹ç†çš„颜色。"
#: doc/classes/StyleBoxTexture.xml:106
msgid ""
@@ -66835,10 +68054,11 @@ msgid ""
"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]this page[/url] for "
"a comparison of normal map coordinates expected by popular engines."
msgstr ""
-"绘制此StyleBox时使用的法线贴图。\n"
-"[b]注:[/b] Godot 期望法线贴图使用 X+ã€Y- å’Œ Z+ åæ ‡ã€‚å‚阅[url=http://wiki."
-"polycount.com/wiki/Normal_Map_Technical_Details#Common_Swizzle_Coordinates]è¿™"
-"个页é¢[/url] 比较æµè¡Œå¼•æ“Žæ‰€æœŸæœ›çš„æ³•çº¿åœ°å›¾åæ ‡ã€‚"
+"绘制此样å¼ç›’时使用的法线贴图。\n"
+"[b]注æ„:[/b] Godot 期望法线贴图使用 X+ã€Y- å’Œ Z+ åæ ‡ç³»ã€‚å‚阅[url=http://"
+"wiki.polycount.com/wiki/"
+"Normal_Map_Technical_Details#Common_Swizzle_Coordinates]这个页é¢[/url]比较æµ"
+"è¡Œå¼•æ“Žæ‰€æœŸæœ›çš„æ³•çº¿è´´å›¾åæ ‡ç³»ã€‚"
#: doc/classes/StyleBoxTexture.xml:110
msgid ""
@@ -66851,24 +68071,24 @@ msgstr ""
#: doc/classes/StyleBoxTexture.xml:114
msgid "The texture to use when drawing this style box."
-msgstr "绘制此Styleæ—¶è¦ä½¿ç”¨çš„纹ç†ã€‚"
+msgstr "绘制此样å¼ç›’时所使用的纹ç†ã€‚"
#: doc/classes/StyleBoxTexture.xml:120
msgid "Emitted when the stylebox's texture is changed."
-msgstr "当stylebox的纹ç†è¢«æ”¹å˜æ—¶å‘出。"
+msgstr "当样å¼ç›’的纹ç†è¢«æ”¹å˜æ—¶å‘出。"
#: doc/classes/StyleBoxTexture.xml:126
msgid ""
"Stretch the stylebox's texture. This results in visible distortion unless "
"the texture size matches the stylebox's size perfectly."
msgstr ""
-"æ‹‰ä¼¸æ ·å¼æ¡†çš„纹ç†ã€‚这会导致å¯è§çš„失真,除éžçº¹ç†å¤§å°ä¸Žæ ·å¼æ¡†çš„大å°å®Œç¾ŽåŒ¹é…。"
+"拉伸样å¼ç›’的纹ç†ã€‚这会导致å¯è§çš„失真,除éžçº¹ç†å¤§å°ä¸Žæ ·å¼ç›’的大å°å®Œç¾ŽåŒ¹é…。"
#: doc/classes/StyleBoxTexture.xml:129
msgid ""
"Repeats the stylebox's texture to match the stylebox's size according to the "
"nine-patch system."
-msgstr "æ ¹æ®ä¹å®«æ ¼ï¼Œé‡å¤æ ·å¼æ¡†çš„纹ç†ï¼Œä»¥åŒ¹é…æ ·å¼æ¡†çš„大å°ã€‚"
+msgstr "æ ¹æ®ä¹å®«æ ¼ç³»ç»Ÿï¼Œé‡å¤æ ·å¼ç›’的纹ç†ï¼Œä»¥åŒ¹é…æ ·å¼ç›’的大å°ã€‚"
#: doc/classes/StyleBoxTexture.xml:132
msgid ""
@@ -66876,15 +68096,14 @@ msgid ""
"nine-patch system. Unlike [constant AXIS_STRETCH_MODE_TILE], the texture may "
"be slightly stretched to make the nine-patch texture tile seamlessly."
msgstr ""
-"æ ¹æ®ä¹å®«æ ¼é‡å¤æ ·å¼æ¡†çš„纹ç†ä»¥åŒ¹é…æ ·å¼æ¡†çš„大å°ã€‚与 [constant "
-"AXIS_STRETCH_MODE_TILE] ä¸åŒï¼Œçº¹ç†å¯èƒ½ä¼šç¨å¾®æ‹‰ä¼¸ä»¥ä½¿ä¹å®«æ ¼çº¹ç†å¹³é“ºæ— ç¼ã€‚"
+"æ ¹æ®ä¹å®«æ ¼ç³»ç»Ÿï¼Œé‡å¤æ ·å¼ç›’的纹ç†ï¼Œä»¥åŒ¹é…æ ·å¼ç›’的大å°ã€‚与 [constant "
+"AXIS_STRETCH_MODE_TILE] ä¸åŒï¼Œå¯èƒ½ä¼šç¨å¾®æ‹‰ä¼¸çº¹ç†ä»¥ä½¿ä¹å®«æ ¼çº¹ç†å¹³é“ºæ— ç¼ã€‚"
#: doc/classes/SurfaceTool.xml:4
msgid "Helper tool to create geometry."
msgstr "创建几何图形的辅助工具。"
#: doc/classes/SurfaceTool.xml:7
-#, fuzzy
msgid ""
"The [SurfaceTool] is used to construct a [Mesh] by specifying vertex "
"attributes individually. It can be used to construct a [Mesh] from a script. "
@@ -66913,9 +68132,9 @@ msgid ""
"OpenGL/Face-culling]winding order[/url] for front faces of triangle "
"primitive modes."
msgstr ""
-"[SurfaceTool] 用于通过å•ç‹¬æŒ‡å®šé¡¶ç‚¹å±žæ€§æ¥æž„建 [Mesh]。它å¯ç”¨äºŽä»Žè„šæœ¬æž„å»º "
-"[Mesh]。在调用 [method add_vertex] 之å‰ï¼Œéœ€è¦æ·»åŠ é™¤ç´¢å¼•ä»¥å¤–çš„æ‰€æœ‰å±žæ€§ã€‚ä¾‹å¦‚ï¼Œ"
-"è¦æ·»åŠ é¡¶ç‚¹é¢œè‰²å’Œ UV:\n"
+"[SurfaceTool] 用于通过å•ç‹¬æŒ‡å®šé¡¶ç‚¹å±žæ€§æ¥æž„造[Mesh]。å¯ä»¥ç”¨æ¥ä»Žè„šæœ¬ä¸­æž„é€ "
+"[Mesh]。在调用[method add_vertex]之å‰ï¼Œéœ€è¦æ·»åŠ é™¤ç´¢å¼•ä¹‹å¤–çš„æ‰€æœ‰å±žæ€§ã€‚ä¾‹å¦‚ï¼Œæ·»"
+"加顶点颜色和UV。\n"
"[codeblock]\n"
"var st = SurfaceTool.new()\n"
"st.begin(Mesh.PRIMITIVE_TRIANGLES)\n"
@@ -66923,25 +68142,25 @@ msgstr ""
"st.add_uv(Vector2(0, 0))\n"
"st.add_vertex(Vector3(0, 0, 0))\n"
"[/codeblock]\n"
-"上é¢çš„ [SurfaceTool] 现在包å«ä¸€ä¸ªä¸‰è§’形的顶点,它具有 UV åæ ‡å’ŒæŒ‡å®šçš„ "
-"[Color]。如果在没有调用 [method add_uv] 或 [method add_color] 的情况下添加了"
-"å¦ä¸€ä¸ªé¡¶ç‚¹ï¼Œåˆ™å°†ä½¿ç”¨æœ€åŽä¸€ä¸ªå€¼ã€‚\n"
-"顶点属性必须在调用[method add_vertex][b]之å‰[/b]传递[b]。如果ä¸è¿™æ ·åšï¼Œå°†åœ¨å°†"
-"é¡¶ç‚¹ä¿¡æ¯æäº¤åˆ°ç½‘æ ¼æ—¶ä¼šå¯¼è‡´é”™è¯¯ã€‚\n"
-"此外,在添加第一个顶点之å‰ä½¿ç”¨çš„属性决定了网格的格å¼ã€‚例如,如果仅å‘第一个顶"
-"点添加 UV,则无法å‘任何åŽç»­é¡¶ç‚¹æ·»åŠ é¢œè‰²ã€‚\n"
-"å¦è¯·å‚阅 [ArrayMesh]ã€[ImmediateGeometry3D] å’Œ [MeshDataTool] 以了解程åºå‡ ä½•"
-"生æˆã€‚\n"
-"[b]注æ„:[/b]Godot使用顺时针[url=https://learnopengl.com/Advanced-OpenGL/"
-"Face-culling]缠绕顺åº[/url]用于三角形基元模å¼çš„æ­£é¢ã€‚"
+"上é¢çš„[SurfaceTool]现在包å«äº†ä¸€ä¸ªä¸‰è§’形的顶点,它有UVåæ ‡å’ŒæŒ‡å®šçš„[Color]。如"
+"果在没有调用[method add_uv]或[method add_color]的情况下添加å¦ä¸€ä¸ªé¡¶ç‚¹ï¼Œé‚£ä¹ˆå°±"
+"会使用最åŽçš„值。\n"
+"顶点属性必须在调用[method add_vertex][b]之å‰[/b]传递。如果ä¸è¿™æ ·åšï¼Œåœ¨æäº¤é¡¶"
+"点信æ¯åˆ°ç½‘格时将会导致错误。\n"
+"此外,在添加第一个顶点之å‰ä½¿ç”¨çš„属性决定了网格的格å¼ã€‚例如,如果你åªä¸ºç¬¬ä¸€ä¸ª"
+"顶点添加 UV,你就ä¸èƒ½ä¸ºä»»ä½•åŽç»­çš„顶点添加颜色。\n"
+"å‚阅[ArrayMesh]ã€[ImmediateGeometry]å’Œ[MeshDataTool]ä»¥äº†è§£ç¨‹åºæ€§å‡ ä½•体的生"
+"æˆã€‚\n"
+"[b]注æ„:[/b] Godot对三角形基本模å¼çš„æ­£é¢ä½¿ç”¨é¡ºæ—¶é’ˆ[url=https://learnopengl."
+"com/Advanced-OpenGL/Face-culling]缠绕顺åº[/url]。"
#: doc/classes/SurfaceTool.xml:29
-#, fuzzy
msgid ""
"Specifies an array of bones to use for the [i]next[/i] vertex. [code]bones[/"
"code] must contain 4 integers."
msgstr ""
-"为下一个è¦ä½¿ç”¨çš„顶点添加一组骨骼。 [code]bones[/code] å¿…é¡»åŒ…å« 4 个整数。"
+"指定[i]下一个[/i]顶点所使用的骨骼数组。 [code]bones[/code] å¿…é¡»åŒ…å« 4 个整"
+"数。"
#: doc/classes/SurfaceTool.xml:36
msgid ""
@@ -66951,6 +68170,10 @@ msgid ""
"[b]Note:[/b] The material must have [member SpatialMaterial."
"vertex_color_use_as_albedo] enabled for the vertex color to be visible."
msgstr ""
+"指定[i]下一个[/i]顶点所使用的 [Color]。如果æ¯ä¸ªé¡¶ç‚¹éƒ½éœ€è¦è®¾ç½®æ­¤ä¿¡æ¯ï¼Œè€Œæ‚¨æœªèƒ½"
+"为第一个顶点æäº¤æ­¤ä¿¡æ¯ï¼Œæ­¤ä¿¡æ¯å¯èƒ½æ ¹æœ¬å°±ä¸ä¼šè¢«ä½¿ç”¨ã€‚\n"
+"[b]注æ„:[/b]æè´¨å¿…é¡»å¯ç”¨[member SpatialMaterial.vertex_color_use_as_albedo]"
+"æ‰èƒ½ä½¿é¡¶ç‚¹é¢œè‰²å¯è§ã€‚"
#: doc/classes/SurfaceTool.xml:44
msgid ""
@@ -66964,6 +68187,8 @@ msgid ""
"to have this information set and you fail to submit it for the first vertex, "
"this information may not be used at all."
msgstr ""
+"指定[i]下一个[/i]顶点所使用的法线。如果æ¯ä¸ªé¡¶ç‚¹éƒ½éœ€è¦è®¾ç½®æ­¤ä¿¡æ¯ï¼Œè€Œä½ æ²¡æœ‰ä¸ºç¬¬"
+"一个顶点æäº¤ï¼Œåˆ™å¯èƒ½æ ¹æœ¬æ— æ³•使用此信æ¯ã€‚"
#: doc/classes/SurfaceTool.xml:58
msgid ""
@@ -66980,6 +68205,8 @@ msgid ""
"to have this information set and you fail to submit it for the first vertex, "
"this information may not be used at all."
msgstr ""
+"指定[i]下一个[/i]顶点所使用的切线。如果æ¯ä¸ªé¡¶ç‚¹éƒ½éœ€è¦è®¾ç½®æ­¤ä¿¡æ¯ï¼Œè€Œä½ æ²¡æœ‰ä¸ºç¬¬"
+"一个顶点æäº¤ï¼Œåˆ™å¯èƒ½æ ¹æœ¬æ— æ³•使用此信æ¯ã€‚"
#: doc/classes/SurfaceTool.xml:77
msgid ""
@@ -66995,6 +68222,8 @@ msgid ""
"every vertex needs to have this information set and you fail to submit it "
"for the first vertex, this information may not be used at all."
msgstr ""
+"指定[i]下一个[/i]顶点所使用的 UV åæ ‡ã€‚如果æ¯ä¸ªé¡¶ç‚¹éƒ½éœ€è¦è®¾ç½®æ­¤ä¿¡æ¯ï¼Œè€Œæ‚¨æœªèƒ½"
+"为第一个顶点æäº¤æ­¤ä¿¡æ¯ï¼Œæ­¤ä¿¡æ¯å¯èƒ½æ ¹æœ¬å°±ä¸ä¼šè¢«ä½¿ç”¨ã€‚"
#: doc/classes/SurfaceTool.xml:92
msgid ""
@@ -67002,6 +68231,8 @@ msgid ""
"i] vertex. If every vertex needs to have this information set and you fail "
"to submit it for the first vertex, this information may not be used at all."
msgstr ""
+"指定å¯é€‰çš„第二组UVåæ ‡ï¼Œç”¨äºŽ[i]next[/i]顶点。如果æ¯ä¸ªé¡¶ç‚¹éƒ½éœ€è¦è®¾ç½®è¿™ä¸ªä¿¡æ¯ï¼Œ"
+"而你没有为第一个顶点æäº¤è¿™ä¸ªä¿¡æ¯ï¼Œæ­¤ä¿¡æ¯å¯èƒ½æ ¹æœ¬å°±ä¸ä¼šè¢«ä½¿ç”¨ã€‚"
#: doc/classes/SurfaceTool.xml:99
msgid ""
@@ -67016,14 +68247,22 @@ msgid ""
"set and you fail to submit it for the first vertex, this information may not "
"be used at all."
msgstr ""
+"指定[i]下一个[/i]顶点所使用的æƒé‡å€¼ã€‚ [code]weights[/code] å¿…é¡»åŒ…å« 4 个值。"
+"如果æ¯ä¸ªé¡¶ç‚¹éƒ½éœ€è¦è®¾ç½®æ­¤ä¿¡æ¯ï¼Œè€Œæ‚¨æœªèƒ½ä¸ºç¬¬ä¸€ä¸ªé¡¶ç‚¹æäº¤æ­¤ä¿¡æ¯ï¼Œæ­¤ä¿¡æ¯å¯èƒ½æ ¹æœ¬"
+"å°±ä¸ä¼šè¢«ä½¿ç”¨ã€‚"
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
-msgstr "将给定 [Mesh] 表é¢çš„顶点附加到具有指定 [Transform] 的当å‰é¡¶ç‚¹æ•°ç»„。"
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
+msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
@@ -67031,12 +68270,11 @@ msgstr ""
"在添加任何顶点之å‰è¢«è°ƒç”¨ã€‚æŽ¥æ”¶åŽŸå§‹ç±»åž‹ä½œä¸ºå‚æ•°ï¼ˆä¾‹å¦‚:原始三角形[constant "
"Mesh.PRIMITIVE_TRIANGLES])。"
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr "清除到目å‰ä¸ºæ­¢ä¼ å…¥è¡¨é¢å·¥å…·(surface tool)的所有信æ¯ã€‚"
-#: doc/classes/SurfaceTool.xml:136
-#, fuzzy
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -67047,11 +68285,13 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
"从传入的当å‰ä¿¡æ¯è¿”回构造的 [ArrayMesh]。如果现有的 [ArrayMesh] ä½œä¸ºå‚æ•°ä¼ å…¥ï¼Œ"
-"则会å‘现有的 [ArrayMesh] 添加é¢å¤–的表é¢ã€‚\n"
-"默认标志是 [constant Mesh.ARRAY_COMPRESS_DEFAULT]。有关其他标志,请å‚阅 "
-"[enum Mesh.ArrayFormat] 中的 [code]ARRAY_COMPRESS_*[/code] 常é‡ã€‚"
+"则会å‘现有的 [ArrayMesh] 添加é¢å¤–çš„é¢ã€‚\n"
+"如果å¯ç”¨åŽ‹ç¼©ï¼Œåˆ™é»˜è®¤æ ‡å¿—ä¸º [constant Mesh.ARRAY_COMPRESS_DEFAULT]。如果ç¦ç”¨åŽ‹"
+"缩,则默认标志为 [constant Mesh.ARRAY_FLAG_USE_OCTAHEDRAL_COMPRESSION]。有关"
+"其他标志,å‚阅 [enum Mesh.ArrayFormat] 中的 [code]ARRAY_COMPRESS_*[/code] 常"
+"é‡ã€‚"
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
@@ -67060,11 +68300,11 @@ msgstr ""
"å°†æ•°æ®æäº¤ç»™[method ArrayMesh.add_surface_from_arrays]ä½¿ç”¨çš„ç›¸åŒæ ¼å¼ã€‚这样你"
"å°±å¯ä»¥ä½¿ç”¨[ArrayMesh]çš„API接å£è¿›ä¸€æ­¥å¤„ç†ç½‘格数æ®ã€‚"
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr "从现有的网格 [Mesh] 创建一个顶点数组。"
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
@@ -67072,11 +68312,11 @@ msgstr ""
"从现有 [Mesh] 的指定混åˆå½¢çŠ¶åˆ›å»ºä¸€ä¸ªé¡¶ç‚¹æ•°ç»„ã€‚è¿™å¯ç”¨äºŽä»Žæ··åˆå½¢çж䏭æå–特定姿"
"势。"
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr "通过扩展顶点数组移除索引数组。"
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -67087,38 +68327,45 @@ msgid ""
"[b]Note:[/b] [method generate_normals] only works if the primitive type to "
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
+"ä»Žé¡¶ç‚¹ç”Ÿæˆæ³•线,因此您ä¸å¿…手动执行。如果 [code]flip[/code] 为 [code]true[/"
+"code],则生æˆçš„æ³•线将被å转。 [method generate_normals] 应在生æˆå‡ ä½•体[i]之åŽ"
+"[/i] 调用,在[i]之å‰[/i]使用 [method commit] 或 [method commit_to_arrays] æ"
+"交网格。为了正确显示法线贴图表é¢ï¼Œæ‚¨è¿˜å¿…须使用 [method generate_tangents] 生"
+"æˆåˆ‡çº¿ã€‚\n"
+"[b]注æ„:[/b] [method generate_normals] 仅当基本类型设置为 [constant Mesh."
+"PRIMITIVE_TRIANGLES] æ—¶æ‰æœ‰æ•ˆã€‚"
-#: doc/classes/SurfaceTool.xml:180
-#, fuzzy
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
-msgstr "为æ¯ä¸ªé¡¶ç‚¹ç”Ÿæˆä¸€ä¸ªåˆ‡å‘é‡ã€‚è¦æ±‚æ¯ä¸ªé¡¶ç‚¹éƒ½å·²ç»è®¾ç½®äº† UV 和法线。"
+msgstr ""
+"为æ¯ä¸ªé¡¶ç‚¹ç”Ÿæˆåˆ‡å‘é‡ã€‚è¦æ±‚æ¯ä¸ªé¡¶ç‚¹å·²ç»è®¾ç½®äº† UV 和法线,å‚阅 [method "
+"generate_normals]。"
-#: doc/classes/SurfaceTool.xml:186
-#, fuzzy
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
-msgstr "通过创建索引阵列(é¿å…é‡å¤ä½¿ç”¨é¡¶ç‚¹ï¼‰æ”¶ç¼©é¡¶ç‚¹é˜µåˆ—。"
+msgstr "通过创建索引数组æ¥ç¼©å°é¡¶ç‚¹æ•°ç»„。这å¯ä»¥é¿å…顶点é‡å¤è€Œæé«˜æ€§èƒ½ã€‚"
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr "设置è¦ç”±æ‚¨æ­£åœ¨æž„建的 [Mesh] 使用的 [Material]。"
#: doc/classes/TabContainer.xml:4
msgid "Tabbed container."
-msgstr "标签容器。"
+msgstr "选项å¡å®¹å™¨ã€‚"
#: doc/classes/TabContainer.xml:7
-#, fuzzy
msgid ""
"Sets the active tab's [code]visible[/code] property to the value [code]true[/"
"code]. Sets all other children's to [code]false[/code].\n"
"Ignores non-[Control] children."
msgstr ""
-"当剿 ‡ç­¾ç´¢å¼•。设置åŽï¼Œæ­¤ç´¢å¼•çš„ [Control] 节点的 [code]visible[/code] 属性设置"
-"为 [code]true[/code],其他所有设置为 [code]false[/code]。"
+"将活动选项å¡çš„ [code]visible[/code] 属性设为 [code]true[/code],其它所有å­èŠ‚"
+"点则设为 [code]false[/code]。\n"
+"ä¼šå¿½ç•¥éž [Control] å­èŠ‚ç‚¹ã€‚"
#: doc/classes/TabContainer.xml:16
msgid "Returns the child [Control] node located at the active tab index."
@@ -67132,10 +68379,13 @@ msgid ""
"may cause a crash. If you wish to hide it or any of its children, use their "
"[member CanvasItem.visible] property."
msgstr ""
+"如果已通过 [method set_popup] 设置 [Popup] 节点实例,则返回该实例。\n"
+"[b]警告:[/b] 该节点为必è¦çš„内部节点,将其移除或释放å¯èƒ½é€ æˆå´©æºƒã€‚如果你希望"
+"将其或其å­èŠ‚ç‚¹éšè—,请使用对应节点的 [member CanvasItem.visible] 属性。"
#: doc/classes/TabContainer.xml:29 doc/classes/Tabs.xml:36
msgid "Returns the previously active tab index."
-msgstr "返回以å‰å·²æ¿€æ´»çš„选项å¡ç´¢å¼•。"
+msgstr "返回上一个活动选项å¡çš„索引。"
#: doc/classes/TabContainer.xml:36
msgid "Returns the [Control] node from the tab at index [code]tab_idx[/code]."
@@ -67153,20 +68403,18 @@ msgstr ""
"如果索引 [code]tab_idx[/code] 处的选项å¡è¢«ç¦ç”¨ï¼Œåˆ™è¿”回 [code]true[/code]。"
#: doc/classes/TabContainer.xml:56
-#, fuzzy
msgid ""
"Returns [code]true[/code] if the tab at index [code]tab_idx[/code] is hidden."
msgstr ""
-"如果索引 [code]tab_idx[/code] 处的选项å¡è¢«ç¦ç”¨ï¼Œåˆ™è¿”回 [code]true[/code]。"
+"如果索引 [code]tab_idx[/code] 处的选项å¡è¢«éšè—,则返回 [code]true[/code]。"
#: doc/classes/TabContainer.xml:63 doc/classes/Tabs.xml:62
-#, fuzzy
msgid ""
"Returns the [Texture] for the tab at index [code]tab_idx[/code] or "
"[code]null[/code] if the tab has no [Texture]."
msgstr ""
-"å¦‚æžœé€‰é¡¹å¡æ²¡æœ‰ [Texture2D],则返回索引 [code]tab_idx[/code] 或 [code]null[/"
-"code] 处的选项å¡çš„ [Texture2D]。"
+"返回索引 [code]tab_idx[/code] 处选项å¡çš„ [Texture]ï¼Œå¦‚æžœè¯¥é€‰é¡¹å¡æ²¡æœ‰ "
+"[Texture] çš„è¯åˆ™è¿”回 [code]null[/code]。"
#: doc/classes/TabContainer.xml:70
msgid ""
@@ -67174,6 +68422,8 @@ msgid ""
"Returns [code]-1[/code] if the point is outside the control boundaries or if "
"there's no tab at the queried position."
msgstr ""
+"返回ä½äºŽæœ¬åœ°å标点 [code]point[/code] 处的选项å¡çš„索引。如果该点ä½äºŽæŽ§ä»¶èŒƒå›´"
+"外或者请求ä½ç½®æ²¡æœ‰é€‰é¡¹å¡ï¼Œåˆ™è¿”回 [code]-1[/code]。"
#: doc/classes/TabContainer.xml:77
msgid ""
@@ -67197,52 +68447,49 @@ msgstr ""
"图标。å•击它会展开 [Popup] 节点。"
#: doc/classes/TabContainer.xml:98 doc/classes/Tabs.xml:118
-#, fuzzy
msgid ""
"If [code]disabled[/code] is [code]true[/code], disables the tab at index "
"[code]tab_idx[/code], making it non-interactable."
msgstr ""
-"如果索引 [code]tab_idx[/code] 处的选项å¡è¢«ç¦ç”¨ï¼Œåˆ™è¿”回 [code]true[/code]。"
+"如果 [code]disabled[/code] 是 [code]true[/code],则ç¦ç”¨ç´¢å¼• [code]tab_idx[/"
+"code] 处的选项å¡ï¼Œä½¿å…¶ä¸å¯äº¤äº’。"
#: doc/classes/TabContainer.xml:106
-#, fuzzy
msgid ""
"If [code]hidden[/code] is [code]true[/code], hides the tab at index "
"[code]tab_idx[/code], making it disappear from the tab area."
msgstr ""
-"如果索引 [code]tab_idx[/code] 处的选项å¡è¢«ç¦ç”¨ï¼Œåˆ™è¿”回 [code]true[/code]。"
+"如果 [code]hidden[/code] 为 [code]true[/code],éšè—ä½äºŽç´¢å¼• [code]tab_idx[/"
+"code] 的选项å¡ï¼Œè®©å®ƒä»Žé€‰é¡¹å¡åŒºåŸŸæ¶ˆå¤±ã€‚"
#: doc/classes/TabContainer.xml:114
msgid "Sets an icon for the tab at index [code]tab_idx[/code]."
msgstr "为索引 [code]tab_idx[/code] 处的选项å¡è®¾ç½®å›¾æ ‡ã€‚"
#: doc/classes/TabContainer.xml:122
-#, fuzzy
msgid ""
"Sets a title for the tab at index [code]tab_idx[/code]. Tab titles default "
"to the name of the indexed child node."
msgstr ""
-"为索引 [code]tab_idx[/code] 处的选项å¡è®¾ç½®æ ‡é¢˜ã€‚标签标题默认为索引å­èŠ‚ç‚¹çš„å"
-"称,但这å¯ä»¥ç”¨ [method set_tab_title] 覆盖。"
+"为索引 [code]tab_idx[/code] 处的选项å¡è®¾ç½®æ ‡é¢˜ã€‚选项塿 ‡é¢˜é»˜è®¤ä¸ºç´¢å¼•å­èŠ‚ç‚¹çš„"
+"å称。"
#: doc/classes/TabContainer.xml:129
-#, fuzzy
msgid ""
"Defines rearrange group id, choose for each [TabContainer] the same value to "
"enable tab drag between [TabContainer]. Enable drag with [member "
"drag_to_rearrange_enabled]."
msgstr ""
-"å®šä¹‰é‡æ–°æŽ’列组id,为æ¯ä¸ª[TabContainer]选择相åŒçš„值以å¯ç”¨[TabContainer]之间的"
-"标签拖动。使用 [code]set_drag_to_rearrange_enabled(true)[/code] å¯ç”¨æ‹–动。"
+"å®šä¹‰é‡æŽ’ç»„çš„ç¼–å·ã€‚为ä¸åŒ [TabContainer] 设置相åŒçš„值,å¯ä»¥å…许选项å¡åœ¨è¿™äº› "
+"[TabContainer] 之间拖放。通过 [member drag_to_rearrange_enabled] å¯ç”¨æ‹–放。"
#: doc/classes/TabContainer.xml:135
-#, fuzzy
msgid ""
"If [code]true[/code], all tabs are drawn in front of the panel. If "
"[code]false[/code], inactive tabs are drawn behind the panel."
msgstr ""
-"如果 [code]true[/code],选项å¡å¯è§ã€‚如果 [code]false[/code],选项å¡çš„内容和标"
-"题被éšè—。"
+"如果为 [code]true[/code],所有选项å¡éƒ½ä¼šè¢«ç»˜åˆ¶åœ¨é¢æ¿ä¹‹å‰ã€‚如果为 "
+"[code]false[/code],未激活的选项å¡ä¼šè¢«ç»˜åˆ¶åœ¨é¢æ¿ä¹‹åŽã€‚"
#: doc/classes/TabContainer.xml:138
msgid ""
@@ -67741,6 +68988,10 @@ msgid ""
"may cause a crash. If you wish to hide it or any of its children, use their "
"[member CanvasItem.visible] property."
msgstr ""
+"返回此[TextEdit]çš„[PopupMenu]。默认情况下,这个èœå•在å³é”®ç‚¹å‡»[TextEdit]的时候"
+"显示。\n"
+"[b]警告:[/b] 这是一个必è¦çš„内部节点,删除和释放它å¯èƒ½ä¼šå¯¼è‡´å´©æºƒã€‚如果你想éš"
+"è—它或它的任何å­èŠ‚ç‚¹ï¼Œè¯·ä½¿ç”¨å…¶çš„ [member CanvasItem.visible] 属性。"
#: doc/classes/TextEdit.xml:156
msgid "Returns the selection begin column."
@@ -68224,7 +69475,7 @@ msgid ""
msgstr ""
"纹ç†çš„作用是在视频硬件中注册一个图åƒï¼Œç„¶åŽå¯ä»¥åœ¨3D模型或2D[Sprite]或"
"GUI[Control]中使用。\n"
-"纹ç†é€šå¸¸æ˜¯é€šè¿‡ä»Žæ–‡ä»¶ä¸­åŠ è½½æ¥åˆ›å»ºçš„。å‚阅[方法 @GDScript.load]。\n"
+"纹ç†é€šå¸¸æ˜¯é€šè¿‡ä»Žæ–‡ä»¶ä¸­åŠ è½½æ¥åˆ›å»ºçš„。å‚阅[method @GDScript.load]。\n"
"[Texture]是其他资æºçš„基础。它ä¸èƒ½è¢«ç›´æŽ¥ä½¿ç”¨ã€‚\n"
"[b]注æ„:[/b] 由于图形硬件的é™åˆ¶ï¼Œæœ€å¤§çš„纹ç†å°ºå¯¸æ˜¯16384×16384åƒç´ ã€‚较大的纹ç†"
"å¯èƒ½æ— æ³•导入。"
@@ -68306,10 +69557,12 @@ msgid ""
"[b]Note:[/b] Ignored when using an [AtlasTexture] as these don't support "
"repetition."
msgstr ""
+"é‡å¤çº¹ç†ï¼ˆè€Œä¸æ˜¯é™åˆ¶åˆ°è¾¹ï¼‰ã€‚\n"
+"[b]注æ„:[/b] 使用[AtlasTexture]æ—¶å¿½ç•¥ï¼Œå› ä¸ºå®ƒä»¬ä¸æ”¯æŒé‡å¤ã€‚"
#: doc/classes/Texture.xml:99 doc/classes/VisualServer.xml:3212
msgid "Uses a magnifying filter, to enable smooth zooming in of the texture."
-msgstr ""
+msgstr "使用放大过滤器,以实现纹ç†çš„平滑放大。"
#: doc/classes/Texture.xml:102 doc/classes/TextureLayered.xml:88
#: doc/classes/VisualServer.xml:3215
@@ -68318,11 +69571,12 @@ msgid ""
"texture with different aspect ratios.\n"
"This results in better-looking textures when viewed from oblique angles."
msgstr ""
+"使用å„å‘异性的mipmap过滤。生æˆå…·æœ‰ä¸åŒé•¿å®½æ¯”çš„åŒä¸€çº¹ç†çš„较å°ç‰ˆæœ¬ã€‚\n"
+"当从斜角观看时,这会产生更好看的纹ç†ã€‚"
#: doc/classes/Texture.xml:106 doc/classes/VisualServer.xml:3219
-#, fuzzy
msgid "Converts the texture to the sRGB color space."
-msgstr "将原始数æ®ä»Ž sRGB 色彩空间转æ¢ä¸ºçº¿æ€§æ¯”例。"
+msgstr "将纹ç†è½¬æ¢ä¸º sRGB 颜色空间。"
#: doc/classes/Texture.xml:109
msgid ""
@@ -68330,21 +69584,21 @@ msgid ""
"[b]Note:[/b] Ignored when using an [AtlasTexture] as these don't support "
"repetition."
msgstr ""
+"é‡å¤çº¹ç†çš„交替部分,并对其进行镜åƒã€‚\n"
+"[b]注æ„:[/b] 在使用[AtlasTexture]æ—¶è¢«å¿½ç•¥ï¼Œå› ä¸ºå®ƒä»¬ä¸æ”¯æŒé‡å¤ã€‚"
#: doc/classes/Texture.xml:113 doc/classes/VisualServer.xml:3225
-#, fuzzy
msgid "Texture is a video surface."
-msgstr "设置给定曲é¢çš„å称。"
+msgstr "çº¹ç†æ˜¯è§†é¢‘表é¢ã€‚"
#: doc/classes/Texture3D.xml:4
-#, fuzzy
msgid "Texture with 3 dimensions."
-msgstr "返回ä½å›¾çš„尺寸。"
+msgstr "具有 3 个维度的纹ç†ã€‚"
#: doc/classes/Texture3D.xml:7
msgid ""
"Texture3D is a 3-dimensional texture that has a width, height, and depth."
-msgstr ""
+msgstr "Texture3D 是具有宽度ã€é«˜åº¦å’Œæ·±åº¦çš„ 3 维纹ç†ã€‚"
#: doc/classes/Texture3D.xml:20
msgid ""
@@ -68353,11 +69607,13 @@ msgid ""
"code] options. See [enum TextureLayered.Flags] enumerator for [code]flags[/"
"code] options."
msgstr ""
+"以指定的[code]width[/code]ã€[code]height[/code]å’Œ[code]depth[/code]创建"
+"Texture3D。å‚阅[enum Image.Format]çš„[code]format[/code]选项。å‚阅[enum "
+"TextureLayered.Flags]枚举器的[code]flags[/code]选项。"
#: doc/classes/TextureArray.xml:4
-#, fuzzy
msgid "Array of textures stored in a single primitive."
-msgstr "在å•个帧中绘制的顶点数。"
+msgstr "存储在å•ä¸ªåŸºå…ƒä¸­çš„çº¹ç†æ•°ç»„。"
#: doc/classes/TextureArray.xml:7
msgid ""
@@ -68380,6 +69636,22 @@ msgid ""
"Set the integer uniform \"index\" to show a particular part of the texture "
"as defined by the Horizontal and Vertical Slices in the importer."
msgstr ""
+"[TextureArray]在å•个[Texture]基本å•元中存储一个[Image]æ•°ç»„ã€‚çº¹ç†æ•°ç»„çš„æ¯ä¸€å±‚"
+"都有自己的mipmap链。这使得它æˆä¸ºçº¹ç†å›¾é›†å¾ˆå¥½çš„æ›¿ä»£å“。\n"
+"[TextureArray]必须使用ç€è‰²å™¨æ¥æ˜¾ç¤ºã€‚在把你的文件导入为[TextureArray]并设置适"
+"当的水平和垂直切片åŽï¼Œé€šè¿‡æŠŠå®ƒè®¾ç½®ä¸ºç€è‰²å™¨uniformæ¥æ˜¾ç¤ºå®ƒï¼Œä¾‹å¦‚。\n"
+"[codeblock]\n"
+"shader_type canvas_item;\n"
+"\n"
+"uniform sampler2DArray tex;\n"
+"uniform int index;\n"
+"\n"
+"void fragment() {\n"
+" COLOR = texture(tex, vec3(UV.x, UV.y, float(index)));\n"
+"}\n"
+"[/codeblock]\n"
+"设置整数uniform \"index\",以显示由importer中的Horizontal和Vertical Slices定"
+"义的纹ç†çš„特定部分。"
#: doc/classes/TextureArray.xml:32
msgid ""
@@ -68388,6 +69660,9 @@ msgid ""
"code] options. See [enum TextureLayered.Flags] enumerator for [code]flags[/"
"code] options."
msgstr ""
+"以指定的[code]width[/code]ã€[code]height[/code]å’Œ[code]depth[/code]创建"
+"TextureArray。å‚阅[enum Image.Format]çš„[code]format[/code]选项。å‚阅[enum "
+"TextureLayered.Flags]枚举器的[code]flags[/code]选项。"
#: doc/classes/TextureButton.xml:4
msgid ""
@@ -68510,7 +69785,6 @@ msgid "Base class for 3D texture types."
msgstr "3D纹ç†ç±»åž‹çš„基类。"
#: doc/classes/TextureLayered.xml:7
-#, fuzzy
msgid ""
"Base class for [Texture3D] and [TextureArray]. Cannot be used directly, but "
"contains all the functions necessary for accessing and using [Texture3D] and "
@@ -68518,16 +69792,16 @@ msgid ""
"layer specifies the depth or Z-index, they can be treated as a bunch of 2D "
"slices. Similarly, for [TextureArray]s, the layer specifies the array layer."
msgstr ""
-"[Texture2DArray]ã€[Cubemap]å’Œ[CubemapArray]的基类。ä¸èƒ½ç›´æŽ¥ä½¿ç”¨ï¼Œä½†åŒ…å«äº†æ‰€æœ‰"
-"访问派生资æºç±»åž‹çš„å¿…è¦åŠŸèƒ½ã€‚æ•°æ®æŒ‰å±‚设置。对于多层[Texture2DArray]指定数组"
-"层。"
+"是[Texture3D]å’Œ[TextureArray]的基类。ä¸èƒ½ç›´æŽ¥ä½¿ç”¨ï¼Œä½†åŒ…å«è®¿é—®å’Œä½¿ç”¨"
+"[Texture3D]å’Œ[TextureArray]的所有必è¦åŠŸèƒ½ã€‚æ•°æ®æ˜¯ä»¥æ¯å±‚为å•ä½è®¾ç½®çš„。对于"
+"[Texture3D],层指定了深度或Z-index,它们å¯ä»¥è¢«è§†ä¸ºä¸€å †äºŒç»´åˆ‡ç‰‡ã€‚åŒæ ·åœ°ï¼Œå¯¹äºŽ"
+"[TextureArray],层指定了数组层。"
#: doc/classes/TextureLayered.xml:15
-#, fuzzy
msgid ""
"Returns the depth of the texture. Depth is the 3rd dimension (typically Z-"
"axis)."
-msgstr "返回纹ç†çš„宽度。宽度通常由X轴表示。"
+msgstr "返回纹ç†çš„æ·±åº¦ã€‚深度是第三个维度(通常是 Z 轴)。"
#: doc/classes/TextureLayered.xml:21
msgid ""
@@ -68559,13 +69833,15 @@ msgid ""
"and [code]y_offset[/code] determine where the [Image] is \"stamped\" over "
"the texture. The [code]image[/code] must fit within the texture."
msgstr ""
+"通过使用指定的[code]image[/code]的数æ®è¦†ç›–æ¥éƒ¨åˆ†è®¾ç½®æŒ‡å®šçš„[code]layer[/code]"
+"的数æ®ã€‚ [code]x_offset[/code] å’Œ [code]y_offset[/code] 确定 [Image] 在纹ç†ä¸Š"
+"\"stamped\" 标记的ä½ç½®ã€‚ [code]image[/code] 必须适åˆçº¹ç†ã€‚"
#: doc/classes/TextureLayered.xml:59
-#, fuzzy
msgid ""
"Sets the data for the specified layer. Data takes the form of a 2-"
"dimensional [Image] resource."
-msgstr "返回[Mesh]èµ„æºæŒ‡å®šè¡¨é¢çš„覆盖åŽçš„[Material]。"
+msgstr "设置指定图层的数æ®ã€‚æ•°æ®çš„形弿˜¯äºŒç»´çš„[Image]资æºã€‚"
#: doc/classes/TextureLayered.xml:65
msgid "Returns a dictionary with all the data used by this texture."
@@ -68876,7 +70152,8 @@ msgstr ""
#: doc/classes/Theme.xml:11
msgid "https://docs.godotengine.org/en/3.4/tutorials/gui/gui_skinning.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/gui/gui_skinning.html"
+msgstr ""
+"https://docs.godotengine.org/zh_CN/stable/tutorials/gui/gui_skinning.html"
#: doc/classes/Theme.xml:17
msgid "Clears all values on the theme."
@@ -69359,7 +70636,8 @@ msgstr ""
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/threads/thread_safe_apis.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/threads/thread_safe_apis.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/threads/thread_safe_apis."
+"html"
#: doc/classes/Thread.xml:19
msgid ""
@@ -69376,6 +70654,9 @@ msgid ""
"wait_to_finish]. For checking if a [Thread] is still executing its task, use "
"[method is_alive]."
msgstr ""
+"如果此 [Thread] å·²å¯åŠ¨ï¼Œåˆ™è¿”å›ž [code]true[/code]。一旦开始,这将返回 "
+"[code]true[/code] ,直到它使用 [method wait_to_finish] åŠ å…¥ã€‚è¦æ£€æŸ¥ [Thread] "
+"是å¦ä»åœ¨æ‰§è¡Œå…¶ä»»åŠ¡ï¼Œè¯·ä½¿ç”¨ [method is_alive]。"
#: doc/classes/Thread.xml:31
msgid ""
@@ -69384,6 +70665,9 @@ msgid ""
"blocking the calling thread.\n"
"To check if a [Thread] is joinable, use [method is_active]."
msgstr ""
+"当本 [Thread] 线程正在等待时,返回 [code]true[/code]。在需è¦ç¡®å®šè°ƒç”¨ [method "
+"wait_to_finish] 是å¦ä¼šé˜»å¡žè°ƒç”¨çº¿ç¨‹æ—¶éžå¸¸æœ‰ç”¨ã€‚\n"
+"è¦æ£€æŸ¥ [Thread] 线程是å¦å¯åˆå¹¶ï¼Œè¯·ä½¿ç”¨ [method is_active]。"
#: doc/classes/Thread.xml:42
msgid ""
@@ -69401,7 +70685,6 @@ msgstr ""
"æˆåŠŸæ—¶è¿”å›ž[constant OK],失败时返回[constant ERR_CANT_CREATE] 。"
#: doc/classes/Thread.xml:49
-#, fuzzy
msgid ""
"Joins the [Thread] and waits for it to finish. Returns the output of the "
"method passed to [method start].\n"
@@ -69413,11 +70696,13 @@ msgid ""
"[b]Note:[/b] After the [Thread] finishes joining it will be disposed. If you "
"want to use it again you will have to create a new instance of it."
msgstr ""
-"加入 [Thread] 并等待它完æˆã€‚返回方法调用返回的内容。\n"
-"åº”è¯¥åœ¨æ‚¨æƒ³è¦æ£€ç´¢ä»Ž [Thread] è°ƒç”¨çš„æ–¹æ³•è¿”å›žçš„å€¼æ—¶ä½¿ç”¨ï¼Œæˆ–è€…åœ¨é‡Šæ”¾åŒ…å« "
-"[Thread] 的实例之å‰ä½¿ç”¨ã€‚\n"
-"[b]注:[/b][Thread]连接完æˆåŽå°†è¢«é”€æ¯ã€‚如果è¦å†æ¬¡ä½¿ç”¨å®ƒï¼Œåˆ™å¿…须创建它的新实"
-"例。"
+"åˆå¹¶ [Thread] 并等待它完æˆã€‚返回传递给 [method start] 的方法的输出。\n"
+"åº”åœ¨ä¸¤ç§æƒ…况下使用:想è¦èŽ·å– [Thread] è°ƒç”¨çš„æ–¹æ³•æ‰€è¿”å›žçš„å€¼ï¼Œæˆ–è€…åœ¨é‡Šæ”¾åŒ…å« "
+"[Thread] 的实例之å‰ã€‚\n"
+"如果想确定调用本方法是å¦ä¼šé˜»å¡žè°ƒç”¨çº¿ç¨‹ï¼Œè¯·æ£€æŸ¥ [method is_alive] 是å¦ä¸º "
+"[code]false[/code]。\n"
+"[b]注æ„:[/b] [Thread] 在完æˆåˆå¹¶åŽå°†è¢«é”€æ¯ã€‚如果è¦å†æ¬¡ä½¿ç”¨å®ƒï¼Œåˆ™å¿…须创建它的"
+"新实例。"
#: doc/classes/Thread.xml:58
msgid "A thread running with lower priority than normally."
@@ -69453,7 +70738,8 @@ msgstr ""
#: doc/classes/TileMap.xml:11 doc/classes/TileSet.xml:11
msgid "https://docs.godotengine.org/en/3.4/tutorials/2d/using_tilemaps.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/2d/using_tilemaps.html"
+msgstr ""
+"https://docs.godotengine.org/zh_CN/stable/tutorials/2d/using_tilemaps.html"
#: doc/classes/TileMap.xml:14 doc/classes/TileSet.xml:14
msgid "https://godotengine.org/asset-library/asset/111"
@@ -69721,8 +71007,8 @@ msgid ""
"documentation for more information."
msgstr ""
"图å—地图中所有碰撞器的碰撞层。更多信æ¯è¯·å‚阅文档中的[url=https://docs."
-"godotengine.org/en/3.4/tutorials/physics/physics_introduction.html#collision-"
-"layers-and-masks]碰撞层和掩ç [/url]。"
+"godotengine.org/zh_CN/stable/tutorials/physics/physics_introduction."
+"html#collision-layers-and-masks]碰撞层和掩ç [/url]。"
#: doc/classes/TileMap.xml:252
msgid ""
@@ -69732,8 +71018,8 @@ msgid ""
"documentation for more information."
msgstr ""
"图å—地图中所有碰撞器的碰撞掩ç ã€‚更多信æ¯è¯·å‚阅文档中的[url=https://docs."
-"godotengine.org/en/3.4/tutorials/physics/physics_introduction.html#collision-"
-"layers-and-masks]碰撞层和掩ç [/url]。"
+"godotengine.org/zh_CN/stable/tutorials/physics/physics_introduction."
+"html#collision-layers-and-masks]碰撞层和掩ç [/url]。"
#: doc/classes/TileMap.xml:255
msgid ""
@@ -70310,6 +71596,12 @@ msgid ""
"rendered framerate. For very low wait times, it is recommended to use a "
"process loop in a script instead of using a Timer node."
msgstr ""
+"等待的秒数。\n"
+"[b]注æ„:[/b] 计时器在一个渲染帧中最多åªèƒ½è§¦å‘一次(如果 [member "
+"process_mode] 为 [constant TIMER_PROCESS_PHYSICS],则是在一个物ç†å¸§ä¸­æœ€å¤šä¸€"
+"次)。也就是说,éžå¸¸ä½Žçš„等待时间(å°äºŽ 0.05 ç§’ï¼‰ä¼šæ ¹æ®æ¸²æŸ“帧率的ä¸åŒè€Œäº§ç”Ÿä¸"
+"åŒçš„行为。如果等待时间éžå¸¸å°ï¼Œå»ºè®®åœ¨è„šæœ¬ä¸­ä½¿ç”¨ process 循环,ä¸è¦ç”¨ Timer 节"
+"点。"
#: doc/classes/Timer.xml:67
msgid ""
@@ -70372,6 +71664,8 @@ msgid ""
"text color of the button. Disabled, hovered, and pressed states take "
"precedence over this color."
msgstr ""
+"èšç„¦ [ToolButton] 时所使用的文本 [Color] é¢œè‰²ã€‚ä»…æ›¿æ¢æ­£å¸¸æ–‡å­—颜色。ç¦ç”¨ã€æ‚¬"
+"åœã€ä»¥åŠæŒ‰ä¸‹çжæ€çš„优先级比该颜色高。"
#: doc/classes/ToolButton.xml:42
msgid "Text [Color] used when the [ToolButton] is being hovered."
@@ -70805,12 +72099,12 @@ msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/i18n/internationalizing_games."
"html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/i18n/internationalizing_games."
-"html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/i18n/"
+"internationalizing_games.html"
#: doc/classes/Translation.xml:11 doc/classes/TranslationServer.xml:11
msgid "https://docs.godotengine.org/en/3.4/tutorials/i18n/locales.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/i18n/locales.html"
+msgstr "https://docs.godotengine.org/zh_CN/stable/tutorials/i18n/locales.html"
#: doc/classes/Translation.xml:18
msgid "Virtual method to override [method get_message]."
@@ -73317,7 +74611,8 @@ msgstr ""
#: doc/classes/Variant.xml:53
msgid "https://docs.godotengine.org/en/3.4/development/cpp/variant_class.html"
-msgstr "https://docs.godotengine.org/en/3.4/development/cpp/variant_class.html"
+msgstr ""
+"https://docs.godotengine.org/zh_CN/stable/development/cpp/variant_class.html"
#: doc/classes/VBoxContainer.xml:4
msgid "Vertical box container."
@@ -74413,7 +75708,8 @@ msgstr ""
#: doc/classes/Viewport.xml:16
msgid "https://docs.godotengine.org/en/3.4/tutorials/viewports/index.html"
-msgstr "https://docs.godotengine.org/en/3.4/tutorials/viewports/index.html"
+msgstr ""
+"https://docs.godotengine.org/zh_CN/stable/tutorials/viewports/index.html"
#: doc/classes/Viewport.xml:18 doc/classes/ViewportTexture.xml:12
msgid "https://godotengine.org/asset-library/asset/128"
@@ -75400,8 +76696,8 @@ msgid ""
"https://docs.godotengine.org/en/3.4/getting_started/scripting/visual_script/"
"index.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/getting_started/scripting/visual_script/"
-"index.html"
+"https://docs.godotengine.org/zh_CN/stable/getting_started/scripting/"
+"visual_script/index.html"
#: modules/visual_script/doc_classes/VisualScript.xml:19
msgid "Add a custom signal with the specified name to the VisualScript."
@@ -77412,7 +78708,8 @@ msgstr ""
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/optimization/using_servers.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/optimization/using_servers.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/optimization/"
+"using_servers.html"
#: doc/classes/VisualServer.xml:28
msgid "Sets images to be rendered in the window margin."
@@ -80933,7 +82230,8 @@ msgstr ""
msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/shading/visual_shaders.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/shading/visual_shaders.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/shading/visual_shaders."
+"html"
#: doc/classes/VisualShaderNode.xml:16
msgid ""
@@ -81505,7 +82803,7 @@ msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/"
"visual_shader_plugins.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/plugins/editor/"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/plugins/editor/"
"visual_shader_plugins.html"
#: doc/classes/VisualShaderNodeCustom.xml:22
@@ -81935,8 +83233,8 @@ msgid ""
"https://docs.godotengine.org/en/3.4/tutorials/shading/shading_reference/"
"index.html"
msgstr ""
-"https://docs.godotengine.org/en/3.4/tutorials/shading/shading_reference/"
-"index.html"
+"https://docs.godotengine.org/zh_CN/stable/tutorials/shading/"
+"shading_reference/index.html"
#: doc/classes/VisualShaderNodeInput.xml:20
msgid ""
@@ -83596,14 +84894,13 @@ msgid "A class representing a specific WebSocket connection."
msgstr "表示特定WebSocket连接的类。"
#: modules/websocket/doc_classes/WebSocketPeer.xml:7
-#, fuzzy
msgid ""
"This class represents a specific WebSocket connection, allowing you to do "
"lower level operations with it.\n"
"You can choose to write to the socket in binary or text mode, and you can "
"recognize the mode used for writing by the other peer."
msgstr ""
-"该类表示特定的WebSocket连接,你å¯ä»¥ç”¨å®ƒåšä½Žçº§åˆ«çš„æ“ä½œã€‚\n"
+"该类表示特定的 WebSocket 连接,你å¯ä»¥ç”¨å®ƒæ‰§è¡Œåº•层æ“作。\n"
"å¯ä»¥é€‰æ‹©ä»¥äºŒè¿›åˆ¶æˆ–文本模å¼å†™å…¥å¥—接字,也å¯ä»¥è¯†åˆ«å¦ä¸€ä¸ªå¯¹ç­‰ä½“用于写入的模å¼ã€‚"
#: modules/websocket/doc_classes/WebSocketPeer.xml:18
@@ -84394,6 +85691,9 @@ msgid ""
"may cause a crash. If you wish to hide it or any of its children, use their "
"[member CanvasItem.visible] property."
msgstr ""
+"返回关闭的 [TextureButton]。\n"
+"[b]警告:[/b] 这是一个必需的内部节点,删除和释放它å¯èƒ½ä¼šå¯¼è‡´å´©æºƒã€‚如果您希望"
+"éšè—它或其任何å­é¡¹ï¼Œè¯·ä½¿ç”¨å®ƒä»¬çš„ [member CanvasItem.visible] 属性。"
#: doc/classes/WindowDialog.xml:22
msgid "If [code]true[/code], the user can resize the window."
@@ -84749,6 +86049,39 @@ msgid ""
"If [code]true[/code], child nodes are sorted, otherwise sorting is disabled."
msgstr "如果为[code]true[/code],则对å­èŠ‚ç‚¹è¿›è¡ŒæŽ’åºï¼Œå¦åˆ™ç¦ç”¨æŽ’åºã€‚"
+#~ msgid "Returns this [AABB] expanded to include a given point."
+#~ msgstr "è¿”å›žè¢«æ‰©å±•è‡³åŒ…å«æŒ‡å®šç‚¹çš„该 [AABB]。"
+
+#~ msgid ""
+#~ "Applies morphological dilation to the bitmap. The first argument is the "
+#~ "dilation amount, Rect2 is the area where the dilation will be applied."
+#~ msgstr "在ä½å›¾ä¸Šåº”ç”¨å½¢æ€æ‰©å±•ã€‚ç¬¬ä¸€ä¸ªå‚æ•°æ˜¯æ‰©å±•é‡ï¼ŒRect2是è¦åº”用扩展的区域。"
+
+#~ msgid "Returns the [Physics2DDirectBodyState] of the body."
+#~ msgstr "返回物体的[Physics2DDirectBodyState]。"
+
+#~ msgid "Returns the [PhysicsDirectBodyState] of the body."
+#~ msgstr "返回物体的[PhysicsDirectBodyState]。"
+
+#~ msgid ""
+#~ "Output latency in milliseconds for audio. Lower values will result in "
+#~ "lower audio latency at the cost of increased CPU usage. Low values may "
+#~ "result in audible cracking on slower hardware."
+#~ msgstr ""
+#~ "音频的输出延迟(毫秒)。较低的值将导致较低的音频延迟,但代价是CPU使用率增"
+#~ "加。较低的值å¯èƒ½ä¼šå¯¼è‡´è¾ƒæ…¢ç¡¬ä»¶ä¸Šçš„声音破裂。"
+
+#~ msgid "Returns this [Rect2] expanded to include a given point."
+#~ msgstr "返回包å«ç»™å®šç‚¹çš„æ­¤ [Rect2] 的扩展。"
+
+#~ msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#~ msgstr "如果 [Rect2] 包å«ç‚¹ï¼Œåˆ™è¿”回 [code]true[/code]。"
+
+#~ msgid ""
+#~ "Append vertices from a given [Mesh] surface onto the current vertex array "
+#~ "with specified [Transform]."
+#~ msgstr "将给定 [Mesh] 表é¢çš„顶点附加到具有指定 [Transform] 的当å‰é¡¶ç‚¹æ•°ç»„。"
+
#~ msgid ""
#~ "Returns a list of intersecting [Area]s. For performance reasons "
#~ "(collisions are all processed at the same time) this list is modified "
diff --git a/doc/translations/zh_TW.po b/doc/translations/zh_TW.po
index 1621b1915b..34ebd06914 100644
--- a/doc/translations/zh_TW.po
+++ b/doc/translations/zh_TW.po
@@ -3696,112 +3696,121 @@ msgid ""
msgstr ""
#: doc/classes/AABB.xml:42
-msgid "Returns this [AABB] expanded to include a given point."
+msgid ""
+"Returns a copy of this [AABB] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2, 0), size (1, 1, 1)\n"
+"var box = AABB(Vector3(-3, 2, 0), Vector3(1, 1, 1))\n"
+"# position (-3, -1, 0), size (3, 4, 2), so we fit both the original AABB and "
+"Vector3(0, -1, 2)\n"
+"var box2 = box.expand(Vector3(0, -1, 2))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/AABB.xml:48
+#: doc/classes/AABB.xml:55
msgid "Returns the volume of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:55
+#: doc/classes/AABB.xml:62
msgid "Gets the position of the 8 endpoints of the [AABB] in space."
msgstr ""
-#: doc/classes/AABB.xml:61
+#: doc/classes/AABB.xml:68
msgid "Returns the normalized longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:67
+#: doc/classes/AABB.xml:74
msgid ""
"Returns the index of the longest axis of the [AABB] (according to "
"[Vector3]'s [code]AXIS_*[/code] constants)."
msgstr ""
-#: doc/classes/AABB.xml:73
+#: doc/classes/AABB.xml:80
msgid "Returns the scalar length of the longest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:79
+#: doc/classes/AABB.xml:86
msgid "Returns the normalized shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:85
+#: doc/classes/AABB.xml:92
msgid ""
"Returns the index of the shortest axis of the [AABB] (according to "
"[Vector3]::AXIS* enum)."
msgstr ""
-#: doc/classes/AABB.xml:91
+#: doc/classes/AABB.xml:98
msgid "Returns the scalar length of the shortest axis of the [AABB]."
msgstr ""
-#: doc/classes/AABB.xml:98
+#: doc/classes/AABB.xml:105
msgid ""
"Returns the support point in a given direction. This is useful for collision "
"detection algorithms."
msgstr ""
-#: doc/classes/AABB.xml:105
+#: doc/classes/AABB.xml:112
msgid ""
"Returns a copy of the [AABB] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/AABB.xml:111
+#: doc/classes/AABB.xml:118
msgid "Returns [code]true[/code] if the [AABB] is flat or empty."
msgstr ""
-#: doc/classes/AABB.xml:117
+#: doc/classes/AABB.xml:124
msgid "Returns [code]true[/code] if the [AABB] is empty."
msgstr ""
-#: doc/classes/AABB.xml:124
+#: doc/classes/AABB.xml:131
msgid "Returns [code]true[/code] if the [AABB] contains a point."
msgstr ""
-#: doc/classes/AABB.xml:131
+#: doc/classes/AABB.xml:138
msgid ""
"Returns the intersection between two [AABB]. An empty AABB (size 0,0,0) is "
"returned on failure."
msgstr ""
-#: doc/classes/AABB.xml:138
+#: doc/classes/AABB.xml:145
msgid "Returns [code]true[/code] if the [AABB] overlaps with another."
msgstr ""
-#: doc/classes/AABB.xml:145
+#: doc/classes/AABB.xml:152
msgid "Returns [code]true[/code] if the [AABB] is on both sides of a plane."
msgstr ""
-#: doc/classes/AABB.xml:153
+#: doc/classes/AABB.xml:160
msgid ""
"Returns [code]true[/code] if the [AABB] intersects the line segment between "
"[code]from[/code] and [code]to[/code]."
msgstr ""
-#: doc/classes/AABB.xml:160
+#: doc/classes/AABB.xml:167
msgid ""
"Returns [code]true[/code] if this [AABB] and [code]aabb[/code] are "
"approximately equal, by calling [method @GDScript.is_equal_approx] on each "
"component."
msgstr ""
-#: doc/classes/AABB.xml:167
+#: doc/classes/AABB.xml:174
msgid ""
"Returns a larger [AABB] that contains both this [AABB] and [code]with[/code]."
msgstr ""
-#: doc/classes/AABB.xml:173 doc/classes/Rect2.xml:132
+#: doc/classes/AABB.xml:180 doc/classes/Rect2.xml:140
msgid ""
"Ending corner. This is calculated as [code]position + size[/code]. Setting "
"this value will change the size."
msgstr ""
-#: doc/classes/AABB.xml:176 doc/classes/Rect2.xml:135
+#: doc/classes/AABB.xml:183 doc/classes/Rect2.xml:143
msgid "Beginning corner. Typically has values lower than [member end]."
msgstr ""
-#: doc/classes/AABB.xml:179 doc/classes/Rect2.xml:138
+#: doc/classes/AABB.xml:186 doc/classes/Rect2.xml:146
msgid ""
"Size from [member position] to [member end]. Typically, all components are "
"positive.\n"
@@ -4880,7 +4889,7 @@ msgstr ""
#: doc/classes/AnimationPlayer.xml:14 doc/classes/AnimationTree.xml:12
#: doc/classes/AudioEffectReverb.xml:11 doc/classes/Camera.xml:10
#: doc/classes/CollisionShape.xml:13 doc/classes/CylinderShape.xml:10
-#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:14
+#: doc/classes/Environment.xml:19 doc/classes/GIProbe.xml:16
#: doc/classes/GIProbeData.xml:8 doc/classes/KinematicBody.xml:16
#: doc/classes/Light.xml:11 doc/classes/Material.xml:11 doc/classes/Mesh.xml:13
#: doc/classes/MeshInstance.xml:13 doc/classes/Particles.xml:14
@@ -10283,17 +10292,21 @@ msgid ""
"lighting to a scene. Unlike the [GIProbe] approach, baked lightmaps work "
"fine on low-end PCs and mobile devices as they consume almost no resources "
"in run-time.\n"
+"[b]Procedural generation:[/b] Lightmap baking functionality is only "
+"available in the editor. This means [BakedLightmap] is not suited to "
+"procedurally generated or user-built levels. For procedurally generated or "
+"user-built levels, use [GIProbe] instead.\n"
"[b]Note:[/b] Due to how lightmaps work, most properties only have a visible "
"effect once lightmaps are baked again."
msgstr ""
-#: doc/classes/BakedLightmap.xml:11
+#: doc/classes/BakedLightmap.xml:12
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/baked_lightmaps.html"
msgstr ""
"https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html"
-#: doc/classes/BakedLightmap.xml:19
+#: doc/classes/BakedLightmap.xml:20
msgid ""
"Bakes the lightmap, scanning from the given [code]from_node[/code] root and "
"saves the resulting [BakedLightmapData] in [code]data_save_path[/code]. If "
@@ -10302,24 +10315,24 @@ msgid ""
"[member light_data]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:25
+#: doc/classes/BakedLightmap.xml:26
msgid ""
"When enabled, the lightmapper will merge the textures for all meshes into a "
"single large layered texture. Not supported in GLES2."
msgstr ""
-#: doc/classes/BakedLightmap.xml:28
+#: doc/classes/BakedLightmap.xml:29
msgid ""
"Maximum size of each lightmap layer, only used when [member atlas_generate] "
"is enabled."
msgstr ""
-#: doc/classes/BakedLightmap.xml:31
+#: doc/classes/BakedLightmap.xml:32
msgid ""
"Raycasting bias used during baking to avoid floating point precision issues."
msgstr ""
-#: doc/classes/BakedLightmap.xml:34
+#: doc/classes/BakedLightmap.xml:35
msgid ""
"The energy multiplier for each bounce. Higher values will make indirect "
"lighting brighter. A value of [code]1.0[/code] represents physically "
@@ -10333,62 +10346,62 @@ msgid ""
"bounces] is set to a value greater than or equal to [code]1[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:38
+#: doc/classes/BakedLightmap.xml:39
msgid ""
"Number of light bounces that are taken into account during baking. See also "
"[member bounce_indirect_energy]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:41
+#: doc/classes/BakedLightmap.xml:42
msgid "Grid size used for real-time capture information on dynamic objects."
msgstr ""
-#: doc/classes/BakedLightmap.xml:44
+#: doc/classes/BakedLightmap.xml:45
msgid ""
"When enabled, an octree containing the scene's lighting information will be "
"computed. This octree will then be used to light dynamic objects in the "
"scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:47
+#: doc/classes/BakedLightmap.xml:48
msgid ""
"Bias value to reduce the amount of light proagation in the captured octree."
msgstr ""
-#: doc/classes/BakedLightmap.xml:50
+#: doc/classes/BakedLightmap.xml:51
msgid "Bake quality of the capture data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:53
+#: doc/classes/BakedLightmap.xml:54
msgid ""
"If a baked mesh doesn't have a UV2 size hint, this value will be used to "
"roughly compute a suitable lightmap size."
msgstr ""
-#: doc/classes/BakedLightmap.xml:56
+#: doc/classes/BakedLightmap.xml:57
msgid ""
"The environment color when [member environment_mode] is set to [constant "
"ENVIRONMENT_MODE_CUSTOM_COLOR]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:59
+#: doc/classes/BakedLightmap.xml:60
msgid ""
"The energy scaling factor when when [member environment_mode] is set to "
"[constant ENVIRONMENT_MODE_CUSTOM_COLOR] or [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:62
+#: doc/classes/BakedLightmap.xml:63
msgid ""
"The [Sky] resource to use when [member environment_mode] is set o [constant "
"ENVIRONMENT_MODE_CUSTOM_SKY]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:65
+#: doc/classes/BakedLightmap.xml:66
msgid "The rotation of the baked custom sky."
msgstr ""
-#: doc/classes/BakedLightmap.xml:68
+#: doc/classes/BakedLightmap.xml:69
msgid ""
"Minimum ambient light for all the lightmap texels. This doesn't take into "
"account any occlusion from the scene's geometry, it simply ensures a minimum "
@@ -10396,35 +10409,35 @@ msgid ""
"on shadow color."
msgstr ""
-#: doc/classes/BakedLightmap.xml:71
+#: doc/classes/BakedLightmap.xml:72
msgid "Decides which environment to use during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:74
+#: doc/classes/BakedLightmap.xml:75
msgid ""
"Size of the baked lightmap. Only meshes inside this region will be included "
"in the baked lightmap, also used as the bounds of the captured region for "
"dynamic lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:77
+#: doc/classes/BakedLightmap.xml:78
msgid ""
"Deprecated, in previous versions it determined the location where lightmaps "
"were be saved."
msgstr ""
-#: doc/classes/BakedLightmap.xml:80
+#: doc/classes/BakedLightmap.xml:81
msgid "The calculated light data."
msgstr ""
-#: doc/classes/BakedLightmap.xml:83
+#: doc/classes/BakedLightmap.xml:84
msgid ""
"Determines the amount of samples per texel used in indrect light baking. The "
"amount of samples for each quality level can be configured in the project "
"settings."
msgstr ""
-#: doc/classes/BakedLightmap.xml:86
+#: doc/classes/BakedLightmap.xml:87
msgid ""
"Store full color values in the lightmap textures. When disabled, lightmap "
"textures will store a single brightness channel. Can be disabled to reduce "
@@ -10432,13 +10445,13 @@ msgid ""
"color information in indirect lighting."
msgstr ""
-#: doc/classes/BakedLightmap.xml:89
+#: doc/classes/BakedLightmap.xml:90
msgid ""
"When enabled, a lightmap denoiser will be used to reduce the noise inherent "
"to Monte Carlo based global illumination."
msgstr ""
-#: doc/classes/BakedLightmap.xml:92
+#: doc/classes/BakedLightmap.xml:93
msgid ""
"If [code]true[/code], stores the lightmap textures in a high dynamic range "
"format (EXR). If [code]false[/code], stores the lightmap texture in a low "
@@ -10450,78 +10463,78 @@ msgid ""
"ProjectSettings.rendering/quality/depth/hdr] is [code]false[/code]."
msgstr ""
-#: doc/classes/BakedLightmap.xml:98
+#: doc/classes/BakedLightmap.xml:99
msgid "The lowest bake quality mode. Fastest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:101
+#: doc/classes/BakedLightmap.xml:102
msgid "The default bake quality mode."
msgstr ""
-#: doc/classes/BakedLightmap.xml:104
+#: doc/classes/BakedLightmap.xml:105
msgid "A higher bake quality mode. Takes longer to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:107
+#: doc/classes/BakedLightmap.xml:108
msgid "The highest bake quality mode. Takes the longest to calculate."
msgstr ""
-#: doc/classes/BakedLightmap.xml:110
+#: doc/classes/BakedLightmap.xml:111
msgid "Baking was successful."
msgstr ""
-#: doc/classes/BakedLightmap.xml:113
+#: doc/classes/BakedLightmap.xml:114
msgid ""
"Returns if no viable save path is found. This can happen where an [member "
"image_path] is not specified or when the save location is invalid."
msgstr ""
-#: doc/classes/BakedLightmap.xml:116 doc/classes/SpatialMaterial.xml:622
+#: doc/classes/BakedLightmap.xml:117 doc/classes/SpatialMaterial.xml:622
msgid "Currently unused."
msgstr ""
-#: doc/classes/BakedLightmap.xml:119
+#: doc/classes/BakedLightmap.xml:120
#, fuzzy
msgid "Returns when the baker cannot save per-mesh textures to file."
msgstr "å›žå‚³åƒæ•¸çš„åæ­£åˆ‡å€¼ã€‚"
-#: doc/classes/BakedLightmap.xml:122
+#: doc/classes/BakedLightmap.xml:123
msgid "The size of the generated lightmaps is too large."
msgstr ""
-#: doc/classes/BakedLightmap.xml:125
+#: doc/classes/BakedLightmap.xml:126
msgid "Some mesh contains UV2 values outside the [code][0,1][/code] range."
msgstr ""
-#: doc/classes/BakedLightmap.xml:128
+#: doc/classes/BakedLightmap.xml:129
msgid "Returns if user cancels baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:131
+#: doc/classes/BakedLightmap.xml:132
msgid ""
"Returns if lightmapper can't be created. Unless you are using a custom "
"lightmapper, please report this as bug."
msgstr ""
-#: doc/classes/BakedLightmap.xml:134
+#: doc/classes/BakedLightmap.xml:135
msgid ""
"There is no root node to start baking from. Either provide [code]from_node[/"
"code] argument or attach this node to a parent that should be used as root."
msgstr ""
-#: doc/classes/BakedLightmap.xml:137
+#: doc/classes/BakedLightmap.xml:138
msgid "No environment is used during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:140
+#: doc/classes/BakedLightmap.xml:141
msgid "The baked environment is automatically picked from the current scene."
msgstr ""
-#: doc/classes/BakedLightmap.xml:143
+#: doc/classes/BakedLightmap.xml:144
msgid "A custom sky is used as environment during baking."
msgstr ""
-#: doc/classes/BakedLightmap.xml:146
+#: doc/classes/BakedLightmap.xml:147
msgid "A custom solid color is used as environment during baking."
msgstr ""
@@ -10977,8 +10990,11 @@ msgstr ""
#: doc/classes/BitMap.xml:51
msgid ""
-"Applies morphological dilation to the bitmap. The first argument is the "
-"dilation amount, Rect2 is the area where the dilation will be applied."
+"Applies morphological dilation or erosion to the bitmap. If [code]pixels[/"
+"code] is positive, dilation is applied to the bitmap. If [code]pixels[/code] "
+"is negative, erosion is applied to the bitmap. [code]rect[/code] defines the "
+"area where the morphological operation is applied. Pixels located outside "
+"the [code]rect[/code] are unaffected by [method grow_mask]."
msgstr ""
#: doc/classes/BitMap.xml:66
@@ -25000,21 +25016,32 @@ msgid ""
"be turned down in exchange for better performance in the [ProjectSettings] "
"using [member ProjectSettings.rendering/quality/voxel_cone_tracing/"
"high_quality].\n"
+"[b]Procedural generation:[/b] [GIProbe] can be baked in an exported project, "
+"which makes it suitable for procedurally generated or user-built levels as "
+"long as all the geometry is generated in advance.\n"
+"[b]Performance:[/b] [GIProbe] is relatively demanding on the GPU and is not "
+"suited to low-end hardware such as integrated graphics (consider "
+"[BakedLightmap] instead). To provide a fallback for low-end hardware, "
+"consider adding an option to disable [GIProbe] in your project's options "
+"menus. A [GIProbe] node can be disabled by hiding it.\n"
"[b]Note:[/b] Meshes should have sufficiently thick walls to avoid light "
"leaks (avoid one-sided walls). For interior levels, enclose your level "
-"geometry in a sufficiently large box and bridge the loops to close the "
-"mesh.\n"
+"geometry in a sufficiently large box and bridge the loops to close the mesh. "
+"To further prevent light leaks, you can also strategically place temporary "
+"[MeshInstance] nodes with [member GeometryInstance.use_in_baked_light] "
+"enabled. These temporary nodes can then be hidden after baking the [GIProbe] "
+"node.\n"
"[b]Note:[/b] Due to a renderer limitation, emissive [ShaderMaterial]s cannot "
"emit light when used in a [GIProbe]. Only emissive [SpatialMaterial]s can "
"emit light in a [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:13
+#: doc/classes/GIProbe.xml:15
#, fuzzy
msgid "https://docs.godotengine.org/en/3.4/tutorials/3d/gi_probes.html"
msgstr "https://docs.godotengine.org/en/latest/tutorials/3d/gi_probes.html"
-#: doc/classes/GIProbe.xml:22
+#: doc/classes/GIProbe.xml:24
msgid ""
"Bakes the effect from all [GeometryInstance]s marked with [member "
"GeometryInstance.use_in_baked_light] and [Light]s marked with either "
@@ -25023,14 +25050,18 @@ msgid ""
"light, this will generate a [MultiMesh] that has a cube representing each "
"solid cell with each cube colored to the cell's albedo color. This can be "
"used to visualize the [GIProbe]'s data and debug any issues that may be "
-"occurring."
+"occurring.\n"
+"[b]Note:[/b] [method bake] works from the editor and in exported projects. "
+"This makes it suitable for procedurally generated or user-built levels. "
+"Baking a [GIProbe] generally takes from 5 to 20 seconds in most scenes. "
+"Reducing [member subdiv] can speed up baking."
msgstr ""
-#: doc/classes/GIProbe.xml:28
+#: doc/classes/GIProbe.xml:31
msgid "Calls [method bake] with [code]create_visual_debug[/code] enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:34
+#: doc/classes/GIProbe.xml:37
msgid ""
"Offsets the lookup of the light contribution from the [GIProbe]. This can be "
"used to avoid self-shadowing, but may introduce light leaking at higher "
@@ -25040,80 +25071,80 @@ msgid ""
"size of the voxels."
msgstr ""
-#: doc/classes/GIProbe.xml:38
+#: doc/classes/GIProbe.xml:41
msgid ""
"[i]Deprecated.[/i] This property has been deprecated due to known bugs and "
"no longer has any effect when enabled."
msgstr ""
-#: doc/classes/GIProbe.xml:41
+#: doc/classes/GIProbe.xml:44
msgid "The [GIProbeData] resource that holds the data for this [GIProbe]."
msgstr ""
-#: doc/classes/GIProbe.xml:44
+#: doc/classes/GIProbe.xml:47
msgid ""
"The maximum brightness that the [GIProbe] will recognize. Brightness will be "
"scaled within this range."
msgstr ""
-#: doc/classes/GIProbe.xml:47
+#: doc/classes/GIProbe.xml:50
msgid ""
"Energy multiplier. Makes the lighting contribution from the [GIProbe] "
"brighter."
msgstr ""
-#: doc/classes/GIProbe.xml:50
+#: doc/classes/GIProbe.xml:53
msgid ""
"The size of the area covered by the [GIProbe]. If you make the extents "
"larger without increasing the subdivisions with [member subdiv], the size of "
"each cell will increase and result in lower detailed lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:53
+#: doc/classes/GIProbe.xml:56
msgid ""
"If [code]true[/code], ignores the sky contribution when calculating lighting."
msgstr ""
-#: doc/classes/GIProbe.xml:56
+#: doc/classes/GIProbe.xml:59
msgid ""
"Offsets the lookup into the [GIProbe] based on the object's normal "
"direction. Can be used to reduce some self-shadowing artifacts."
msgstr ""
-#: doc/classes/GIProbe.xml:59
+#: doc/classes/GIProbe.xml:62
msgid ""
"How much light propagates through the probe internally. A higher value "
"allows light to spread further."
msgstr ""
-#: doc/classes/GIProbe.xml:62
+#: doc/classes/GIProbe.xml:65
msgid ""
"Number of times to subdivide the grid that the [GIProbe] operates on. A "
"higher number results in finer detail and thus higher visual quality, while "
"lower numbers result in better performance."
msgstr ""
-#: doc/classes/GIProbe.xml:67
+#: doc/classes/GIProbe.xml:70
msgid ""
"Use 64 subdivisions. This is the lowest quality setting, but the fastest. "
"Use it if you can, but especially use it on lower-end hardware."
msgstr ""
-#: doc/classes/GIProbe.xml:70
+#: doc/classes/GIProbe.xml:73
msgid "Use 128 subdivisions. This is the default quality setting."
msgstr ""
-#: doc/classes/GIProbe.xml:73
+#: doc/classes/GIProbe.xml:76
msgid "Use 256 subdivisions."
msgstr ""
-#: doc/classes/GIProbe.xml:76
+#: doc/classes/GIProbe.xml:79
msgid ""
"Use 512 subdivisions. This is the highest quality setting, but the slowest. "
-"On lower-end hardware this could cause the GPU to stall."
+"On lower-end hardware, this could cause the GPU to stall."
msgstr ""
-#: doc/classes/GIProbe.xml:79
+#: doc/classes/GIProbe.xml:82
msgid "Represents the size of the [enum Subdiv] enum."
msgstr ""
@@ -29338,7 +29369,9 @@ msgid "The drag position."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:22
-msgid "The drag position relative to its start position."
+msgid ""
+"The drag position relative to the previous position (position at the last "
+"frame)."
msgstr ""
#: doc/classes/InputEventScreenDrag.xml:25
@@ -30651,7 +30684,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30716,22 +30750,24 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform], then tries to "
"move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:148
+#: doc/classes/KinematicBody.xml:149
msgid "Lock the body's X axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:151
+#: doc/classes/KinematicBody.xml:152
msgid "Lock the body's Y axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:154
+#: doc/classes/KinematicBody.xml:155
msgid "Lock the body's Z axis movement."
msgstr ""
-#: doc/classes/KinematicBody.xml:157 doc/classes/KinematicBody2D.xml:138
+#: doc/classes/KinematicBody.xml:158 doc/classes/KinematicBody2D.xml:139
msgid ""
"Extra margin used for collision recovery in motion functions (see [method "
"move_and_collide], [method move_and_slide], [method "
@@ -30746,7 +30782,7 @@ msgid ""
"bodies."
msgstr ""
-#: doc/classes/KinematicBody.xml:163 doc/classes/KinematicBody2D.xml:144
+#: doc/classes/KinematicBody.xml:164 doc/classes/KinematicBody2D.xml:145
msgid ""
"If [code]true[/code], the body's movement will be synchronized to the "
"physics frame. This is useful when animating movement via [AnimationPlayer], "
@@ -30754,19 +30790,19 @@ msgid ""
"move_and_slide] or [method move_and_collide] functions."
msgstr ""
-#: doc/classes/KinematicBody.xml:166
+#: doc/classes/KinematicBody.xml:167
msgid ""
"Lock the body's X axis movement. Deprecated alias for [member "
"axis_lock_motion_x]."
msgstr ""
-#: doc/classes/KinematicBody.xml:169
+#: doc/classes/KinematicBody.xml:170
msgid ""
"Lock the body's Y axis movement. Deprecated alias for [member "
"axis_lock_motion_y]."
msgstr ""
-#: doc/classes/KinematicBody.xml:172
+#: doc/classes/KinematicBody.xml:173
msgid ""
"Lock the body's Z axis movement. Deprecated alias for [member "
"axis_lock_motion_z]."
@@ -30837,7 +30873,8 @@ msgstr ""
msgid ""
"Moves the body along the vector [code]rel_vec[/code]. The body will stop if "
"it collides. Returns a [KinematicCollision2D], which contains information "
-"about the collision.\n"
+"about the collision when stopped, or when touching another body along the "
+"motion.\n"
"If [code]test_only[/code] is [code]true[/code], the body does not move but "
"the would-be collision information is given."
msgstr ""
@@ -30895,7 +30932,9 @@ msgid ""
"Checks for collisions without moving the body. Virtually sets the node's "
"position, scale and rotation to that of the given [Transform2D], then tries "
"to move the body along the vector [code]rel_vec[/code]. Returns [code]true[/"
-"code] if a collision would occur."
+"code] if a collision would stop the body from moving along the whole path.\n"
+"Use [method move_and_collide] instead for detecting collision with touching "
+"bodies."
msgstr ""
#: doc/classes/KinematicCollision.xml:4
@@ -34449,7 +34488,7 @@ msgid ""
"var vertices = PoolVector2Array([Vector2(0, 0), Vector2(0, 50), Vector2(50, "
"50), Vector2(50, 0)])\n"
"polygon.set_vertices(vertices)\n"
-"var indices = PoolIntArray(0, 3, 1)\n"
+"var indices = PoolIntArray([0, 1, 2, 3])\n"
"polygon.add_polygon(indices)\n"
"$NavigationPolygonInstance.navpoly = polygon\n"
"[/codeblock]"
@@ -37765,7 +37804,7 @@ msgstr ""
#: doc/classes/OS.xml:353
msgid ""
"Returns the dots per inch density of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS, returned value is inaccurate if fractional display "
"scaling mode is used.\n"
@@ -37795,14 +37834,14 @@ msgstr ""
#: doc/classes/OS.xml:379
msgid ""
"Returns the position of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
#: doc/classes/OS.xml:386
msgid ""
"Return the scale factor of the specified screen by index. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used.\n"
"[b]Note:[/b] On macOS returned value is [code]2.0[/code] for hiDPI (Retina) "
"screen, and [code]1.0[/code] for all other cases.\n"
@@ -37812,7 +37851,7 @@ msgstr ""
#: doc/classes/OS.xml:395
msgid ""
"Returns the dimensions in pixels of the specified screen. If [code]screen[/"
-"code] is [/code]-1[/code] (the default value), the current screen will be "
+"code] is [code]-1[/code] (the default value), the current screen will be "
"used."
msgstr ""
@@ -40313,17 +40352,43 @@ msgid ""
"Physics2DServer.shape_set_data].\n"
"[code]rid[/code]: The intersecting object's [RID].\n"
"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively.\n"
"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
"not be detected."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:86
+#: doc/classes/Physics2DDirectSpaceState.xml:76
+msgid ""
+"Checks whether a point is inside any solid shape, in a specific canvas layer "
+"given by [code]canvas_instance_id[/code]. The shapes the point is inside of "
+"are returned in an array containing dictionaries with the following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]metadata[/code]: The intersecting shape's metadata. This metadata is "
+"different from [method Object.get_meta], and is set with [method "
+"Physics2DServer.shape_set_data].\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
+"respectively.\n"
+"[b]Note:[/b] [ConcavePolygonShape2D]s and [CollisionPolygon2D]s in "
+"[code]Segments[/code] build mode are not solid shapes. Therefore, they will "
+"not be detected."
+msgstr ""
+
+#: doc/classes/Physics2DDirectSpaceState.xml:96
msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
@@ -40341,11 +40406,11 @@ msgid ""
"Additionally, the method can take an [code]exclude[/code] array of objects "
"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
"code] bitmask representing the physics layers to check in, or booleans to "
-"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"determine if the ray should collide with [PhysicsBody2D]s or [Area2D]s, "
"respectively."
msgstr ""
-#: doc/classes/Physics2DDirectSpaceState.xml:103
+#: doc/classes/Physics2DDirectSpaceState.xml:113
msgid ""
"Checks the intersections of a shape, given through a "
"[Physics2DShapeQueryParameters] object, against the space.\n"
@@ -40540,7 +40605,9 @@ msgid "Returns the continuous collision detection mode."
msgstr ""
#: doc/classes/Physics2DServer.xml:351
-msgid "Returns the [Physics2DDirectBodyState] of the body."
+msgid ""
+"Returns the [Physics2DDirectBodyState] of the body. Returns [code]null[/"
+"code] if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/Physics2DServer.xml:358 doc/classes/PhysicsServer.xml:348
@@ -41343,6 +41410,24 @@ msgstr ""
#: doc/classes/PhysicsDirectSpaceState.xml:55
msgid ""
+"Checks whether a point is inside any solid shape. The shapes the point is "
+"inside of are returned in an array containing dictionaries with the "
+"following fields:\n"
+"[code]collider[/code]: The colliding object.\n"
+"[code]collider_id[/code]: The colliding object's ID.\n"
+"[code]rid[/code]: The intersecting object's [RID].\n"
+"[code]shape[/code]: The shape index of the colliding shape.\n"
+"The number of intersections can be limited with the [code]max_results[/code] "
+"parameter, to reduce the processing time.\n"
+"Additionally, the method can take an [code]exclude[/code] array of objects "
+"or [RID]s that are to be excluded from collisions, a [code]collision_mask[/"
+"code] bitmask representing the physics layers to check in, or booleans to "
+"determine if the ray should collide with [PhysicsBody]s or [Area]s, "
+"respectively."
+msgstr ""
+
+#: doc/classes/PhysicsDirectSpaceState.xml:73
+msgid ""
"Intersects a ray in a given space. The returned object is a dictionary with "
"the following fields:\n"
"[code]collider[/code]: The colliding object.\n"
@@ -41360,7 +41445,7 @@ msgid ""
"respectively."
msgstr ""
-#: doc/classes/PhysicsDirectSpaceState.xml:71
+#: doc/classes/PhysicsDirectSpaceState.xml:89
msgid ""
"Checks the intersections of a shape, given through a "
"[PhysicsShapeQueryParameters] object, against the space. The intersected "
@@ -41474,7 +41559,9 @@ msgid ""
msgstr ""
#: doc/classes/PhysicsServer.xml:335
-msgid "Returns the [PhysicsDirectBodyState] of the body."
+msgid ""
+"Returns the [PhysicsDirectBodyState] of the body. Returns [code]null[/code] "
+"if the body is destroyed or removed from the physics space."
msgstr ""
#: doc/classes/PhysicsServer.xml:370
@@ -44019,24 +44106,30 @@ msgstr ""
#: doc/classes/ProjectSettings.xml:279
msgid ""
-"Output latency in milliseconds for audio. Lower values will result in lower "
-"audio latency at the cost of increased CPU usage. Low values may result in "
-"audible cracking on slower hardware."
+"Specifies the preferred output latency in milliseconds for audio. Lower "
+"values will result in lower audio latency at the cost of increased CPU "
+"usage. Low values may result in audible cracking on slower hardware.\n"
+"Audio output latency may be constrained by the host operating system and "
+"audio hardware drivers. If the host can not provide the specified audio "
+"output latency then Godot will attempt to use the nearest latency allowed by "
+"the host. As such you should always use [method AudioServer."
+"get_output_latency] to determine the actual audio output latency.\n"
+"[b]Note:[/b] This setting is ignored on Windows."
msgstr ""
-#: doc/classes/ProjectSettings.xml:282
+#: doc/classes/ProjectSettings.xml:284
msgid ""
"Safer override for [member audio/output_latency] in the Web platform, to "
"avoid audio issues especially on mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:285
+#: doc/classes/ProjectSettings.xml:287
msgid ""
"Setting to hardcode audio delay when playing video. Best to leave this "
"untouched unless you know what you are doing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:288
+#: doc/classes/ProjectSettings.xml:290
msgid ""
"The default compression level for gzip. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44046,7 +44139,7 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:291
+#: doc/classes/ProjectSettings.xml:293
msgid ""
"The default compression level for Zlib. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
@@ -44056,27 +44149,27 @@ msgid ""
"updates."
msgstr ""
-#: doc/classes/ProjectSettings.xml:294
+#: doc/classes/ProjectSettings.xml:296
msgid ""
"The default compression level for Zstandard. Affects compressed scenes and "
"resources. Higher levels result in smaller files at the cost of compression "
"speed. Decompression speed is mostly unaffected by the compression level."
msgstr ""
-#: doc/classes/ProjectSettings.xml:297
+#: doc/classes/ProjectSettings.xml:299
msgid ""
"Enables [url=https://github.com/facebook/zstd/releases/tag/v1.3.2]long-"
"distance matching[/url] in Zstandard."
msgstr ""
-#: doc/classes/ProjectSettings.xml:300
+#: doc/classes/ProjectSettings.xml:302
msgid ""
"Largest size limit (in power of 2) allowed when compressing using long-"
"distance matching with Zstandard. Higher values can result in better "
"compression, but will require more memory when compressing and decompressing."
msgstr ""
-#: doc/classes/ProjectSettings.xml:303
+#: doc/classes/ProjectSettings.xml:305
msgid ""
"If [code]true[/code], displays getters and setters in autocompletion results "
"in the script editor. This setting is meant to be used when porting old "
@@ -44084,81 +44177,81 @@ msgid ""
"Godot 3 onwards."
msgstr ""
-#: doc/classes/ProjectSettings.xml:306
+#: doc/classes/ProjectSettings.xml:308
msgid ""
"If [code]true[/code], enables warnings when a constant is used as a function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:309
+#: doc/classes/ProjectSettings.xml:311
msgid ""
"If [code]true[/code], enables warnings when deprecated keywords such as "
"[code]slave[/code] are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:312
+#: doc/classes/ProjectSettings.xml:314
msgid ""
"If [code]true[/code], enables specific GDScript warnings (see [code]debug/"
"gdscript/warnings/*[/code] settings). If [code]false[/code], disables all "
"GDScript warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:315
+#: doc/classes/ProjectSettings.xml:317
msgid ""
"If [code]true[/code], scripts in the [code]res://addons[/code] folder will "
"not generate warnings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:318
+#: doc/classes/ProjectSettings.xml:320
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a constant."
msgstr ""
-#: doc/classes/ProjectSettings.xml:321
+#: doc/classes/ProjectSettings.xml:323
msgid ""
"If [code]true[/code], enables warnings when a function is declared with the "
"same name as a variable. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:324
+#: doc/classes/ProjectSettings.xml:326
msgid ""
"If [code]true[/code], enables warnings when a function assigned to a "
"variable may yield and return a function state instead of a value."
msgstr ""
-#: doc/classes/ProjectSettings.xml:327
+#: doc/classes/ProjectSettings.xml:329
msgid ""
"If [code]true[/code], enables warnings when using a function as if it was a "
"property."
msgstr ""
-#: doc/classes/ProjectSettings.xml:330
+#: doc/classes/ProjectSettings.xml:332
msgid ""
"If [code]true[/code], enables warnings when a ternary operator may emit "
"values with incompatible types."
msgstr ""
-#: doc/classes/ProjectSettings.xml:333
+#: doc/classes/ProjectSettings.xml:335
msgid ""
"If [code]true[/code], enables warnings when dividing an integer by another "
"integer (the decimal part will be discarded)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:336
+#: doc/classes/ProjectSettings.xml:338
msgid ""
"If [code]true[/code], enables warnings when passing a floating-point value "
"to a function that expects an integer (it will be converted and lose "
"precision)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:339
+#: doc/classes/ProjectSettings.xml:341
msgid ""
"If [code]true[/code], enables warnings when using a property as if it was a "
"function."
msgstr ""
-#: doc/classes/ProjectSettings.xml:342
+#: doc/classes/ProjectSettings.xml:344
msgid ""
"If [code]true[/code], enables warnings when calling a function without using "
"its return value (by assigning it to a variable or using it as a function "
@@ -44166,109 +44259,109 @@ msgid ""
"using the [enum Error] enum."
msgstr ""
-#: doc/classes/ProjectSettings.xml:345
+#: doc/classes/ProjectSettings.xml:347
msgid ""
"If [code]true[/code], enables warnings when defining a local or subclass "
"member variable that would shadow a variable at an upper level (such as a "
"member variable)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:348
+#: doc/classes/ProjectSettings.xml:350
msgid ""
"If [code]true[/code], enables warnings when calling an expression that has "
"no effect on the surrounding code, such as writing [code]2 + 2[/code] as a "
"statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:351
+#: doc/classes/ProjectSettings.xml:353
msgid ""
"If [code]true[/code], enables warnings when calling a ternary expression "
"that has no effect on the surrounding code, such as writing [code]42 if "
"active else 0[/code] as a statement."
msgstr ""
-#: doc/classes/ProjectSettings.xml:354
+#: doc/classes/ProjectSettings.xml:356
msgid ""
"If [code]true[/code], all warnings will be reported as if they were errors."
msgstr ""
-#: doc/classes/ProjectSettings.xml:357
+#: doc/classes/ProjectSettings.xml:359
msgid ""
"If [code]true[/code], enables warnings when using a variable that wasn't "
"previously assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:360
+#: doc/classes/ProjectSettings.xml:362
msgid ""
"If [code]true[/code], enables warnings when assigning a variable using an "
"assignment operator like [code]+=[/code] if the variable wasn't previously "
"assigned."
msgstr ""
-#: doc/classes/ProjectSettings.xml:363
+#: doc/classes/ProjectSettings.xml:365
msgid ""
"If [code]true[/code], enables warnings when unreachable code is detected "
"(such as after a [code]return[/code] statement that will always be executed)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:366
+#: doc/classes/ProjectSettings.xml:368
msgid ""
"If [code]true[/code], enables warnings when using an expression whose type "
"may not be compatible with the function parameter expected."
msgstr ""
-#: doc/classes/ProjectSettings.xml:369
+#: doc/classes/ProjectSettings.xml:371
msgid "If [code]true[/code], enables warnings when performing an unsafe cast."
msgstr ""
-#: doc/classes/ProjectSettings.xml:372
+#: doc/classes/ProjectSettings.xml:374
msgid ""
"If [code]true[/code], enables warnings when calling a method whose presence "
"is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:375
+#: doc/classes/ProjectSettings.xml:377
msgid ""
"If [code]true[/code], enables warnings when accessing a property whose "
"presence is not guaranteed at compile-time in the class."
msgstr ""
-#: doc/classes/ProjectSettings.xml:378
+#: doc/classes/ProjectSettings.xml:380
msgid ""
"If [code]true[/code], enables warnings when a function parameter is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:381
+#: doc/classes/ProjectSettings.xml:383
msgid ""
"If [code]true[/code], enables warnings when a member variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:384
+#: doc/classes/ProjectSettings.xml:386
msgid "If [code]true[/code], enables warnings when a signal is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:387
+#: doc/classes/ProjectSettings.xml:389
msgid "If [code]true[/code], enables warnings when a local variable is unused."
msgstr ""
-#: doc/classes/ProjectSettings.xml:390
+#: doc/classes/ProjectSettings.xml:392
msgid ""
"If [code]true[/code], enables warnings when a variable is declared with the "
"same name as a function. This will turn into an error in a future version "
"when first-class functions become supported in GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:393
+#: doc/classes/ProjectSettings.xml:395
msgid ""
"If [code]true[/code], enables warnings when assigning the result of a "
"function that returns [code]void[/code] to a variable."
msgstr ""
-#: doc/classes/ProjectSettings.xml:396
+#: doc/classes/ProjectSettings.xml:398
msgid "Message to be displayed before the backtrace when the engine crashes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:399
+#: doc/classes/ProjectSettings.xml:401
msgid ""
"Maximum number of frames per second allowed. The actual number of frames per "
"second may still be below this value if the game is lagging.\n"
@@ -44279,91 +44372,91 @@ msgid ""
"project under lag conditions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:404
+#: doc/classes/ProjectSettings.xml:406
msgid "Maximum call stack allowed for debugging GDScript."
msgstr ""
-#: doc/classes/ProjectSettings.xml:407
+#: doc/classes/ProjectSettings.xml:409
msgid "Maximum amount of functions per frame allowed when profiling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:410
+#: doc/classes/ProjectSettings.xml:412
msgid "Print frames per second to standard output every second."
msgstr ""
-#: doc/classes/ProjectSettings.xml:413
+#: doc/classes/ProjectSettings.xml:415
msgid ""
"Print more information to standard output when running. It displays "
"information such as memory leaks, which scenes and resources are being "
"loaded, etc."
msgstr ""
-#: doc/classes/ProjectSettings.xml:416
+#: doc/classes/ProjectSettings.xml:418
msgid "Maximum call stack in visual scripting, to avoid infinite recursion."
msgstr ""
-#: doc/classes/ProjectSettings.xml:419
+#: doc/classes/ProjectSettings.xml:421
msgid ""
"Color of the contact points between collision shapes, visible when \"Visible "
"Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:422
+#: doc/classes/ProjectSettings.xml:424
msgid ""
"Sets whether 2D physics will display collision outlines in game when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:425
+#: doc/classes/ProjectSettings.xml:427
msgid ""
"Maximum number of contact points between collision shapes to display when "
"\"Visible Collision Shapes\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:428
+#: doc/classes/ProjectSettings.xml:430
msgid ""
"Color of the collision shapes, visible when \"Visible Collision Shapes\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:431
+#: doc/classes/ProjectSettings.xml:433
msgid ""
"Color of the disabled navigation geometry, visible when \"Visible Navigation"
"\" is enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:434
+#: doc/classes/ProjectSettings.xml:436
msgid ""
"Color of the navigation geometry, visible when \"Visible Navigation\" is "
"enabled in the Debug menu."
msgstr ""
-#: doc/classes/ProjectSettings.xml:437
+#: doc/classes/ProjectSettings.xml:439
msgid "Custom image for the mouse cursor (limited to 256×256)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:440
+#: doc/classes/ProjectSettings.xml:442
msgid "Hotspot for the custom mouse cursor image."
msgstr ""
-#: doc/classes/ProjectSettings.xml:443
+#: doc/classes/ProjectSettings.xml:445
msgid "Position offset for tooltips, relative to the mouse cursor's hotspot."
msgstr ""
-#: doc/classes/ProjectSettings.xml:446
+#: doc/classes/ProjectSettings.xml:448
msgid ""
"If [code]true[/code], allows HiDPI display on Windows, macOS, and the HTML5 "
"platform. This setting has no effect on desktop Linux, as DPI-awareness "
"fallbacks are not supported there."
msgstr ""
-#: doc/classes/ProjectSettings.xml:449
+#: doc/classes/ProjectSettings.xml:451
msgid ""
"If [code]true[/code], keeps the screen on (even in case of inactivity), so "
"the screensaver does not take over. Works on desktop and mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:452
+#: doc/classes/ProjectSettings.xml:454
msgid ""
"The default screen orientation to use on mobile devices.\n"
"[b]Note:[/b] When set to a portrait orientation, this project setting does "
@@ -44372,13 +44465,13 @@ msgid ""
"window/size/height] accordingly."
msgstr ""
-#: doc/classes/ProjectSettings.xml:456
+#: doc/classes/ProjectSettings.xml:458
msgid ""
"If [code]true[/code], the home indicator is hidden automatically. This only "
"affects iOS devices without a physical home button."
msgstr ""
-#: doc/classes/ProjectSettings.xml:459
+#: doc/classes/ProjectSettings.xml:461
msgid ""
"If [code]true[/code], allows per-pixel transparency for the window "
"background. This affects performance, so leave it on [code]false[/code] "
@@ -44388,7 +44481,7 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:464
+#: doc/classes/ProjectSettings.xml:466
msgid ""
"Sets the window background to transparent when it starts.\n"
"See [member OS.window_per_pixel_transparency_enabled] for more details.\n"
@@ -44396,19 +44489,19 @@ msgid ""
"and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:469
+#: doc/classes/ProjectSettings.xml:471
msgid ""
"Forces the main window to be always on top.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:473
+#: doc/classes/ProjectSettings.xml:475
msgid ""
"Forces the main window to be borderless.\n"
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:477
+#: doc/classes/ProjectSettings.xml:479
msgid ""
"Sets the main window to full screen when the project starts. Note that this "
"is not [i]exclusive[/i] fullscreen. On Windows and Linux, a borderless "
@@ -44422,45 +44515,45 @@ msgid ""
"[b]Note:[/b] This setting is ignored on iOS, Android, and HTML5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:482
+#: doc/classes/ProjectSettings.xml:484
msgid ""
"Sets the game's main viewport height. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:485
+#: doc/classes/ProjectSettings.xml:487
msgid ""
"Allows the window to be resizable by default.\n"
"[b]Note:[/b] This setting is ignored on iOS and Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:489
+#: doc/classes/ProjectSettings.xml:491
msgid ""
"If greater than zero, overrides the window height when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:492
+#: doc/classes/ProjectSettings.xml:494
msgid ""
"If greater than zero, overrides the window width when running the game. "
"Useful for testing stretch modes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:495
+#: doc/classes/ProjectSettings.xml:497
msgid ""
"Sets the game's main viewport width. On desktop platforms, this is the "
"default window size. Stretch mode settings also use this as a reference when "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:498
+#: doc/classes/ProjectSettings.xml:500
msgid ""
"Specifies the tablet driver to use. If left empty, the default driver will "
"be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:501
+#: doc/classes/ProjectSettings.xml:503
msgid ""
"If [code]true[/code], enables vertical synchronization. This eliminates "
"tearing that may appear in moving scenes, at the cost of higher input "
@@ -44469,7 +44562,7 @@ msgid ""
"regardless (such as mobile platforms and HTML5)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:504
+#: doc/classes/ProjectSettings.xml:506
msgid ""
"If [code]Use Vsync[/code] is enabled and this setting is [code]true[/code], "
"enables vertical synchronization via the operating system's window "
@@ -44480,7 +44573,7 @@ msgid ""
"framerate halving (e.g. from 60 FPS to 30 FPS) when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:508
+#: doc/classes/ProjectSettings.xml:510
msgid ""
"The command-line arguments to append to Godot's own command line when "
"running the project. This doesn't affect the editor itself.\n"
@@ -44496,14 +44589,14 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:516
+#: doc/classes/ProjectSettings.xml:518
msgid ""
"Search path for project-specific script templates. Godot will search for "
"script templates both in the editor-specific path and in this project-"
"specific path."
msgstr ""
-#: doc/classes/ProjectSettings.xml:519
+#: doc/classes/ProjectSettings.xml:521
msgid ""
"Text-based file extensions to include in the script editor's \"Find in Files"
"\" feature. You can add e.g. [code]tscn[/code] if you wish to also parse "
@@ -44511,49 +44604,49 @@ msgid ""
"serialized in the scene files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:522
+#: doc/classes/ProjectSettings.xml:524
msgid ""
"Default value for [member ScrollContainer.scroll_deadzone], which will be "
"used for all [ScrollContainer]s unless overridden."
msgstr ""
-#: doc/classes/ProjectSettings.xml:525
+#: doc/classes/ProjectSettings.xml:527
msgid ""
"If [code]true[/code], swaps OK and Cancel buttons in dialogs on Windows and "
"UWP to follow interface conventions."
msgstr ""
-#: doc/classes/ProjectSettings.xml:530
+#: doc/classes/ProjectSettings.xml:532
msgid ""
"Path to a custom [Theme] resource file to use for the project ([code]theme[/"
"code] or generic [code]tres[/code]/[code]res[/code] extension)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:533
+#: doc/classes/ProjectSettings.xml:535
msgid ""
"Path to a custom [Font] resource to use as default for all GUI elements of "
"the project."
msgstr ""
-#: doc/classes/ProjectSettings.xml:536
+#: doc/classes/ProjectSettings.xml:538
msgid "If [code]true[/code], makes sure the theme used works with HiDPI."
msgstr ""
-#: doc/classes/ProjectSettings.xml:539
+#: doc/classes/ProjectSettings.xml:541
msgid ""
"Timer setting for incremental search in [Tree], [ItemList], etc. controls "
"(in milliseconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:542
+#: doc/classes/ProjectSettings.xml:544
msgid "Timer for detecting idle in [TextEdit] (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:545
+#: doc/classes/ProjectSettings.xml:547
msgid "Default delay for tooltips (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:548
+#: doc/classes/ProjectSettings.xml:550
msgid ""
"Default [InputEventAction] to confirm a focused button, menu or list item, "
"or validate input.\n"
@@ -44562,7 +44655,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:552
+#: doc/classes/ProjectSettings.xml:554
msgid ""
"Default [InputEventAction] to discard a modal or pending input.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44570,7 +44663,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:556
+#: doc/classes/ProjectSettings.xml:558
msgid ""
"Default [InputEventAction] to move down in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44578,7 +44671,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:560
+#: doc/classes/ProjectSettings.xml:562
msgid ""
"Default [InputEventAction] to go to the end position of a [Control] (e.g. "
"last item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44588,7 +44681,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:564
+#: doc/classes/ProjectSettings.xml:566
msgid ""
"Default [InputEventAction] to focus the next [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_next].\n"
@@ -44597,7 +44690,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:568
+#: doc/classes/ProjectSettings.xml:570
msgid ""
"Default [InputEventAction] to focus the previous [Control] in the scene. The "
"focus behavior can be configured via [member Control.focus_previous].\n"
@@ -44606,7 +44699,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:572
+#: doc/classes/ProjectSettings.xml:574
msgid ""
"Default [InputEventAction] to go to the start position of a [Control] (e.g. "
"first item in an [ItemList] or a [Tree]), matching the behavior of [constant "
@@ -44616,7 +44709,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:576
+#: doc/classes/ProjectSettings.xml:578
msgid ""
"Default [InputEventAction] to move left in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44624,7 +44717,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:580
+#: doc/classes/ProjectSettings.xml:582
msgid ""
"Default [InputEventAction] to go down a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEDOWN] on "
@@ -44634,7 +44727,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:584
+#: doc/classes/ProjectSettings.xml:586
msgid ""
"Default [InputEventAction] to go up a page in a [Control] (e.g. in an "
"[ItemList] or a [Tree]), matching the behavior of [constant KEY_PAGEUP] on "
@@ -44644,7 +44737,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:588
+#: doc/classes/ProjectSettings.xml:590
msgid ""
"Default [InputEventAction] to move right in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44652,7 +44745,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:592
+#: doc/classes/ProjectSettings.xml:594
msgid ""
"Default [InputEventAction] to select an item in a [Control] (e.g. in an "
"[ItemList] or a [Tree]).\n"
@@ -44661,7 +44754,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:596
+#: doc/classes/ProjectSettings.xml:598
msgid ""
"Default [InputEventAction] to move up in the UI.\n"
"[b]Note:[/b] Default [code]ui_*[/code] actions cannot be removed as they are "
@@ -44669,7 +44762,7 @@ msgid ""
"to the action can however be modified."
msgstr ""
-#: doc/classes/ProjectSettings.xml:600
+#: doc/classes/ProjectSettings.xml:602
msgid ""
"If [code]true[/code], key/touch/joystick events will be flushed just before "
"every idle and physics frame.\n"
@@ -44681,477 +44774,477 @@ msgid ""
"[b]Note:[/b] Currently implemented only in Android."
msgstr ""
-#: doc/classes/ProjectSettings.xml:606
+#: doc/classes/ProjectSettings.xml:608
msgid ""
"If [code]true[/code], sends mouse input events when tapping or swiping on "
"the touchscreen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:609
+#: doc/classes/ProjectSettings.xml:611
msgid ""
"If [code]true[/code], sends touch input events when clicking or dragging the "
"mouse."
msgstr ""
-#: doc/classes/ProjectSettings.xml:612
+#: doc/classes/ProjectSettings.xml:614
msgid "Default delay for touch events. This only affects iOS devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:615
+#: doc/classes/ProjectSettings.xml:617
msgid "Optional name for the 2D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:618
+#: doc/classes/ProjectSettings.xml:620
msgid "Optional name for the 2D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:621
+#: doc/classes/ProjectSettings.xml:623
msgid "Optional name for the 2D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:624
+#: doc/classes/ProjectSettings.xml:626
msgid "Optional name for the 2D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:627
+#: doc/classes/ProjectSettings.xml:629
msgid "Optional name for the 2D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:630
+#: doc/classes/ProjectSettings.xml:632
msgid "Optional name for the 2D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:633
+#: doc/classes/ProjectSettings.xml:635
msgid "Optional name for the 2D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:636
+#: doc/classes/ProjectSettings.xml:638
msgid "Optional name for the 2D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:639
+#: doc/classes/ProjectSettings.xml:641
msgid "Optional name for the 2D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:642
+#: doc/classes/ProjectSettings.xml:644
msgid "Optional name for the 2D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:645
+#: doc/classes/ProjectSettings.xml:647
msgid "Optional name for the 2D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:648
+#: doc/classes/ProjectSettings.xml:650
msgid "Optional name for the 2D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:651
+#: doc/classes/ProjectSettings.xml:653
msgid "Optional name for the 2D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:654
+#: doc/classes/ProjectSettings.xml:656
msgid "Optional name for the 2D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:657
+#: doc/classes/ProjectSettings.xml:659
msgid "Optional name for the 2D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:660
+#: doc/classes/ProjectSettings.xml:662
msgid "Optional name for the 2D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:663
+#: doc/classes/ProjectSettings.xml:665
msgid "Optional name for the 2D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:666
+#: doc/classes/ProjectSettings.xml:668
msgid "Optional name for the 2D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:669
+#: doc/classes/ProjectSettings.xml:671
msgid "Optional name for the 2D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:672
+#: doc/classes/ProjectSettings.xml:674
msgid "Optional name for the 2D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:675
+#: doc/classes/ProjectSettings.xml:677
msgid "Optional name for the 2D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:678
+#: doc/classes/ProjectSettings.xml:680
msgid "Optional name for the 2D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:681
+#: doc/classes/ProjectSettings.xml:683
msgid "Optional name for the 2D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:684
+#: doc/classes/ProjectSettings.xml:686
msgid "Optional name for the 2D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:687
+#: doc/classes/ProjectSettings.xml:689
msgid "Optional name for the 2D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:690
+#: doc/classes/ProjectSettings.xml:692
msgid "Optional name for the 2D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:693
+#: doc/classes/ProjectSettings.xml:695
msgid "Optional name for the 2D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:696
+#: doc/classes/ProjectSettings.xml:698
msgid "Optional name for the 2D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:699
+#: doc/classes/ProjectSettings.xml:701
msgid "Optional name for the 2D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:702
+#: doc/classes/ProjectSettings.xml:704
msgid "Optional name for the 2D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:705
+#: doc/classes/ProjectSettings.xml:707
msgid "Optional name for the 2D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:708
+#: doc/classes/ProjectSettings.xml:710
msgid "Optional name for the 2D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:711
+#: doc/classes/ProjectSettings.xml:713
msgid "Optional name for the 2D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:714
+#: doc/classes/ProjectSettings.xml:716
msgid "Optional name for the 2D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:717
+#: doc/classes/ProjectSettings.xml:719
msgid "Optional name for the 2D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:720
+#: doc/classes/ProjectSettings.xml:722
msgid "Optional name for the 2D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:723
+#: doc/classes/ProjectSettings.xml:725
msgid "Optional name for the 2D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:726
+#: doc/classes/ProjectSettings.xml:728
msgid "Optional name for the 2D render layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:729
+#: doc/classes/ProjectSettings.xml:731
msgid "Optional name for the 2D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:732
+#: doc/classes/ProjectSettings.xml:734
msgid "Optional name for the 2D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:735
+#: doc/classes/ProjectSettings.xml:737
msgid "Optional name for the 2D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:738
+#: doc/classes/ProjectSettings.xml:740
msgid "Optional name for the 2D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:741
+#: doc/classes/ProjectSettings.xml:743
msgid "Optional name for the 2D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:744
+#: doc/classes/ProjectSettings.xml:746
msgid "Optional name for the 2D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:747
+#: doc/classes/ProjectSettings.xml:749
msgid "Optional name for the 2D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:750
+#: doc/classes/ProjectSettings.xml:752
msgid "Optional name for the 2D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:753
+#: doc/classes/ProjectSettings.xml:755
msgid "Optional name for the 2D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:756
+#: doc/classes/ProjectSettings.xml:758
msgid "Optional name for the 2D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:759
+#: doc/classes/ProjectSettings.xml:761
msgid "Optional name for the 2D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:762
+#: doc/classes/ProjectSettings.xml:764
msgid "Optional name for the 2D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:765
+#: doc/classes/ProjectSettings.xml:767
msgid "Optional name for the 2D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:768
+#: doc/classes/ProjectSettings.xml:770
msgid "Optional name for the 2D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:771
+#: doc/classes/ProjectSettings.xml:773
msgid "Optional name for the 3D physics layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:774
+#: doc/classes/ProjectSettings.xml:776
msgid "Optional name for the 3D physics layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:777
+#: doc/classes/ProjectSettings.xml:779
msgid "Optional name for the 3D physics layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:780
+#: doc/classes/ProjectSettings.xml:782
msgid "Optional name for the 3D physics layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:783
+#: doc/classes/ProjectSettings.xml:785
msgid "Optional name for the 3D physics layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:786
+#: doc/classes/ProjectSettings.xml:788
msgid "Optional name for the 3D physics layer 14."
msgstr ""
-#: doc/classes/ProjectSettings.xml:789
+#: doc/classes/ProjectSettings.xml:791
msgid "Optional name for the 3D physics layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:792
+#: doc/classes/ProjectSettings.xml:794
msgid "Optional name for the 3D physics layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:795
+#: doc/classes/ProjectSettings.xml:797
msgid "Optional name for the 3D physics layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:798
+#: doc/classes/ProjectSettings.xml:800
msgid "Optional name for the 3D physics layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:801
+#: doc/classes/ProjectSettings.xml:803
msgid "Optional name for the 3D physics layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:804
+#: doc/classes/ProjectSettings.xml:806
msgid "Optional name for the 3D physics layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:807
+#: doc/classes/ProjectSettings.xml:809
msgid "Optional name for the 3D physics layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:810
+#: doc/classes/ProjectSettings.xml:812
msgid "Optional name for the 3D physics layer 21."
msgstr ""
-#: doc/classes/ProjectSettings.xml:813
+#: doc/classes/ProjectSettings.xml:815
msgid "Optional name for the 3D physics layer 22."
msgstr ""
-#: doc/classes/ProjectSettings.xml:816
+#: doc/classes/ProjectSettings.xml:818
msgid "Optional name for the 3D physics layer 23."
msgstr ""
-#: doc/classes/ProjectSettings.xml:819
+#: doc/classes/ProjectSettings.xml:821
msgid "Optional name for the 3D physics layer 24."
msgstr ""
-#: doc/classes/ProjectSettings.xml:822
+#: doc/classes/ProjectSettings.xml:824
msgid "Optional name for the 3D physics layer 25."
msgstr ""
-#: doc/classes/ProjectSettings.xml:825
+#: doc/classes/ProjectSettings.xml:827
msgid "Optional name for the 3D physics layer 26."
msgstr ""
-#: doc/classes/ProjectSettings.xml:828
+#: doc/classes/ProjectSettings.xml:830
msgid "Optional name for the 3D physics layer 27."
msgstr ""
-#: doc/classes/ProjectSettings.xml:831
+#: doc/classes/ProjectSettings.xml:833
msgid "Optional name for the 3D physics layer 28."
msgstr ""
-#: doc/classes/ProjectSettings.xml:834
+#: doc/classes/ProjectSettings.xml:836
msgid "Optional name for the 3D physics layer 29."
msgstr ""
-#: doc/classes/ProjectSettings.xml:837
+#: doc/classes/ProjectSettings.xml:839
msgid "Optional name for the 3D physics layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:840
+#: doc/classes/ProjectSettings.xml:842
msgid "Optional name for the 3D physics layer 30."
msgstr ""
-#: doc/classes/ProjectSettings.xml:843
+#: doc/classes/ProjectSettings.xml:845
msgid "Optional name for the 3D physics layer 31."
msgstr ""
-#: doc/classes/ProjectSettings.xml:846
+#: doc/classes/ProjectSettings.xml:848
msgid "Optional name for the 3D physics layer 32."
msgstr ""
-#: doc/classes/ProjectSettings.xml:849
+#: doc/classes/ProjectSettings.xml:851
msgid "Optional name for the 3D physics layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:852
+#: doc/classes/ProjectSettings.xml:854
msgid "Optional name for the 3D physics layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:855
+#: doc/classes/ProjectSettings.xml:857
msgid "Optional name for the 3D physics layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:858
+#: doc/classes/ProjectSettings.xml:860
msgid "Optional name for the 3D physics layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:861
+#: doc/classes/ProjectSettings.xml:863
msgid "Optional name for the 3D physics layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:864
+#: doc/classes/ProjectSettings.xml:866
msgid "Optional name for the 3D physics layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:867
+#: doc/classes/ProjectSettings.xml:869
msgid "Optional name for the 3D render layer 1."
msgstr ""
-#: doc/classes/ProjectSettings.xml:870
+#: doc/classes/ProjectSettings.xml:872
msgid "Optional name for the 3D render layer 10."
msgstr ""
-#: doc/classes/ProjectSettings.xml:873
+#: doc/classes/ProjectSettings.xml:875
msgid "Optional name for the 3D render layer 11."
msgstr ""
-#: doc/classes/ProjectSettings.xml:876
+#: doc/classes/ProjectSettings.xml:878
msgid "Optional name for the 3D render layer 12."
msgstr ""
-#: doc/classes/ProjectSettings.xml:879
+#: doc/classes/ProjectSettings.xml:881
msgid "Optional name for the 3D render layer 13."
msgstr ""
-#: doc/classes/ProjectSettings.xml:882
+#: doc/classes/ProjectSettings.xml:884
msgid "Optional name for the 3D render layer 14"
msgstr ""
-#: doc/classes/ProjectSettings.xml:885
+#: doc/classes/ProjectSettings.xml:887
msgid "Optional name for the 3D render layer 15."
msgstr ""
-#: doc/classes/ProjectSettings.xml:888
+#: doc/classes/ProjectSettings.xml:890
msgid "Optional name for the 3D render layer 16."
msgstr ""
-#: doc/classes/ProjectSettings.xml:891
+#: doc/classes/ProjectSettings.xml:893
msgid "Optional name for the 3D render layer 17."
msgstr ""
-#: doc/classes/ProjectSettings.xml:894
+#: doc/classes/ProjectSettings.xml:896
msgid "Optional name for the 3D render layer 18."
msgstr ""
-#: doc/classes/ProjectSettings.xml:897
+#: doc/classes/ProjectSettings.xml:899
msgid "Optional name for the 3D render layer 19."
msgstr ""
-#: doc/classes/ProjectSettings.xml:900
+#: doc/classes/ProjectSettings.xml:902
msgid "Optional name for the 3D render layer 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:903
+#: doc/classes/ProjectSettings.xml:905
msgid "Optional name for the 3D render layer 20."
msgstr ""
-#: doc/classes/ProjectSettings.xml:906
+#: doc/classes/ProjectSettings.xml:908
msgid "Optional name for the 3D render layer 3."
msgstr ""
-#: doc/classes/ProjectSettings.xml:909
+#: doc/classes/ProjectSettings.xml:911
msgid "Optional name for the 3D render layer 4."
msgstr ""
-#: doc/classes/ProjectSettings.xml:912
+#: doc/classes/ProjectSettings.xml:914
msgid "Optional name for the 3D render layer 5."
msgstr ""
-#: doc/classes/ProjectSettings.xml:915
+#: doc/classes/ProjectSettings.xml:917
msgid "Optional name for the 3D render layer 6."
msgstr ""
-#: doc/classes/ProjectSettings.xml:918
+#: doc/classes/ProjectSettings.xml:920
msgid "Optional name for the 3D render layer 7."
msgstr ""
-#: doc/classes/ProjectSettings.xml:921
+#: doc/classes/ProjectSettings.xml:923
msgid "Optional name for the 3D render layer 8."
msgstr ""
-#: doc/classes/ProjectSettings.xml:924
+#: doc/classes/ProjectSettings.xml:926
msgid "Optional name for the 3D render layer 9."
msgstr ""
-#: doc/classes/ProjectSettings.xml:927
+#: doc/classes/ProjectSettings.xml:929
msgid ""
"The locale to fall back to if a translation isn't available in a given "
"language. If left empty, [code]en[/code] (English) will be used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:930
+#: doc/classes/ProjectSettings.xml:932
msgid ""
"If non-empty, this locale will be used when running the project from the "
"editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:933
+#: doc/classes/ProjectSettings.xml:935
msgid "If [code]true[/code], logs all output to files."
msgstr ""
-#: doc/classes/ProjectSettings.xml:936
+#: doc/classes/ProjectSettings.xml:938
msgid ""
"Desktop override for [member logging/file_logging/enable_file_logging], as "
"log files are not readily accessible on mobile/Web platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:939
+#: doc/classes/ProjectSettings.xml:941
msgid ""
"Path to logs within the project. Using an [code]user://[/code] path is "
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:942
+#: doc/classes/ProjectSettings.xml:944
msgid "Specifies the maximum amount of log files allowed (used for rotation)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:947
+#: doc/classes/ProjectSettings.xml:949
msgid ""
"Godot uses a message queue to defer some function calls. If you run out of "
"space on it (you will see an error), you can increase the size here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:950
+#: doc/classes/ProjectSettings.xml:952
msgid ""
"This is used by servers when used in multi-threading mode (servers and "
"visual). RIDs are preallocated to avoid stalling the server requesting them "
@@ -45159,92 +45252,92 @@ msgid ""
"thread, increase this number."
msgstr ""
-#: doc/classes/ProjectSettings.xml:953
+#: doc/classes/ProjectSettings.xml:955
msgid ""
"Maximum amount of characters allowed to send as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:956
+#: doc/classes/ProjectSettings.xml:958
msgid ""
"Maximum number of errors allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:959
+#: doc/classes/ProjectSettings.xml:961
msgid ""
"Maximum amount of messages allowed to send as output from the debugger. Over "
"this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:962
+#: doc/classes/ProjectSettings.xml:964
msgid ""
"Maximum number of warnings allowed to be sent as output from the debugger. "
"Over this value, content is dropped. This helps not to stall the debugger "
"connection."
msgstr ""
-#: doc/classes/ProjectSettings.xml:965
+#: doc/classes/ProjectSettings.xml:967
msgid ""
"Default size of packet peer stream for deserializing Godot data (in bytes, "
"specified as a power of two). The default value [code]16[/code] is equal to "
"65,536 bytes. Over this size, data is dropped."
msgstr ""
-#: doc/classes/ProjectSettings.xml:968
+#: doc/classes/ProjectSettings.xml:970
msgid "Timeout (in seconds) for connection attempts using TCP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:971
+#: doc/classes/ProjectSettings.xml:973
msgid "Maximum size (in kiB) for the [WebRTCDataChannel] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:974
+#: doc/classes/ProjectSettings.xml:976
msgid "Maximum size (in kiB) for the [WebSocketClient] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:977
+#: doc/classes/ProjectSettings.xml:979
msgid "Maximum number of concurrent input packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:980
+#: doc/classes/ProjectSettings.xml:982
msgid "Maximum size (in kiB) for the [WebSocketClient] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:983
+#: doc/classes/ProjectSettings.xml:985
msgid "Maximum number of concurrent output packets for [WebSocketClient]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:986
+#: doc/classes/ProjectSettings.xml:988
msgid "Maximum size (in kiB) for the [WebSocketServer] input buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:989
+#: doc/classes/ProjectSettings.xml:991
msgid "Maximum number of concurrent input packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:992
+#: doc/classes/ProjectSettings.xml:994
msgid "Maximum size (in kiB) for the [WebSocketServer] output buffer."
msgstr ""
-#: doc/classes/ProjectSettings.xml:995
+#: doc/classes/ProjectSettings.xml:997
msgid "Maximum number of concurrent output packets for [WebSocketServer]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:998
+#: doc/classes/ProjectSettings.xml:1000
msgid ""
"Amount of read ahead used by remote filesystem. Higher values decrease the "
"effects of latency at the cost of higher bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1001
+#: doc/classes/ProjectSettings.xml:1003
msgid "Page size used by remote filesystem (in bytes)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1004
+#: doc/classes/ProjectSettings.xml:1006
msgid ""
"The CA certificates bundle to use for SSL connections. If this is set to a "
"non-empty value, this will [i]override[/i] Godot's default [url=https://"
@@ -45254,33 +45347,33 @@ msgid ""
"If in doubt, leave this setting empty."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1008
+#: doc/classes/ProjectSettings.xml:1010
msgid ""
"When creating node names automatically, set the type of casing in this "
"project. This is mostly an editor setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1011
+#: doc/classes/ProjectSettings.xml:1013
msgid ""
"What to use to separate node name from number. This is mostly an editor "
"setting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1014
+#: doc/classes/ProjectSettings.xml:1016
msgid ""
"Size of the hash table used for the broad-phase 2D hash grid algorithm.\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1018
+#: doc/classes/ProjectSettings.xml:1020
msgid ""
"Cell size used for the broad-phase 2D hash grid algorithm (in pixels).\n"
"[b]Note:[/b] Not used if [member ProjectSettings.physics/2d/use_bvh] is "
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1022
+#: doc/classes/ProjectSettings.xml:1024
msgid ""
"The default angular damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45293,7 +45386,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1026
+#: doc/classes/ProjectSettings.xml:1028
msgid ""
"The default gravity strength in 2D (in pixels per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45305,7 +45398,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1034
+#: doc/classes/ProjectSettings.xml:1036
msgid ""
"The default gravity direction in 2D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45317,7 +45410,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1042
+#: doc/classes/ProjectSettings.xml:1044
msgid ""
"The default linear damp in 2D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45330,7 +45423,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1046
+#: doc/classes/ProjectSettings.xml:1048
msgid ""
"Threshold defining the surface size that constitutes a large object with "
"regard to cells in the broad-phase 2D hash grid algorithm.\n"
@@ -45338,28 +45431,28 @@ msgid ""
"enabled."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1050
+#: doc/classes/ProjectSettings.xml:1052
msgid ""
"Sets which physics engine to use for 2D physics.\n"
"\"DEFAULT\" and \"GodotPhysics\" are the same, as there is currently no "
"alternative 2D physics server implemented."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1054
+#: doc/classes/ProjectSettings.xml:1056
msgid ""
"Threshold angular velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_ANGULAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1057
+#: doc/classes/ProjectSettings.xml:1059
msgid ""
"Threshold linear velocity under which a 2D physics body will be considered "
"inactive. See [constant Physics2DServer."
"SPACE_PARAM_BODY_LINEAR_VELOCITY_SLEEP_THRESHOLD]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1060
+#: doc/classes/ProjectSettings.xml:1062
msgid ""
"Sets whether physics is run on the main thread or a separate one. Running "
"the server on a thread increases performance, but restricts API access to "
@@ -45369,25 +45462,25 @@ msgid ""
"give you extra performance and no regressions when using it."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1064
+#: doc/classes/ProjectSettings.xml:1066
msgid ""
"Time (in seconds) of inactivity before which a 2D physics body will put to "
"sleep. See [constant Physics2DServer.SPACE_PARAM_BODY_TIME_TO_SLEEP]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1067
+#: doc/classes/ProjectSettings.xml:1069
msgid ""
"Enables the use of bounding volume hierarchy instead of hash grid for 2D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1070
+#: doc/classes/ProjectSettings.xml:1072
msgid ""
"Sets whether the 3D physics world will be created with support for "
"[SoftBody] physics. Only applies to the Bullet physics engine."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1073
+#: doc/classes/ProjectSettings.xml:1075
msgid ""
"The default angular damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45400,7 +45493,7 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1077
+#: doc/classes/ProjectSettings.xml:1079
msgid ""
"The default gravity strength in 3D (in meters per second squared).\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45412,7 +45505,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1085
+#: doc/classes/ProjectSettings.xml:1087
msgid ""
"The default gravity direction in 3D.\n"
"[b]Note:[/b] This property is only read when the project starts. To change "
@@ -45424,7 +45517,7 @@ msgid ""
"[/codeblock]"
msgstr ""
-#: doc/classes/ProjectSettings.xml:1093
+#: doc/classes/ProjectSettings.xml:1095
msgid ""
"The default linear damp in 3D.\n"
"[b]Note:[/b] Good values are in the range [code]0[/code] to [code]1[/code]. "
@@ -45437,13 +45530,13 @@ msgid ""
"stop in one iteration."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1097
+#: doc/classes/ProjectSettings.xml:1099
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for 3D "
"physics spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1100
+#: doc/classes/ProjectSettings.xml:1102
msgid ""
"Sets which physics engine to use for 3D physics.\n"
"\"DEFAULT\" is currently the [url=https://bulletphysics.org]Bullet[/url] "
@@ -45451,11 +45544,11 @@ msgid ""
"alternative."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1104
+#: doc/classes/ProjectSettings.xml:1106
msgid "Enables [member Viewport.physics_object_picking] on the root viewport."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1107
+#: doc/classes/ProjectSettings.xml:1109
msgid ""
"If enabled, 2D and 3D physics picking behaves this way in relation to "
"pause:\n"
@@ -45469,7 +45562,7 @@ msgid ""
"that queue on resume, against the state of the 2D/3D world at that point."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1113
+#: doc/classes/ProjectSettings.xml:1115
msgid ""
"The number of fixed iterations per second. This controls how often physics "
"simulation and [method Node._physics_process] methods are run.\n"
@@ -45478,7 +45571,7 @@ msgid ""
"instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1117
+#: doc/classes/ProjectSettings.xml:1119
msgid ""
"Controls how much physics ticks are synchronized with real time. For 0 or "
"less, the ticks are synchronized. Such values are recommended for network "
@@ -45494,7 +45587,7 @@ msgid ""
"the physics FPS at runtime, set [member Engine.physics_jitter_fix] instead."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1122
+#: doc/classes/ProjectSettings.xml:1124
msgid ""
"[b]Experimental.[/b] Calls [code]glBufferData[/code] with NULL data prior to "
"uploading batching data. This may not be necessary but can be used for "
@@ -45504,7 +45597,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1126
+#: doc/classes/ProjectSettings.xml:1128
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for batching buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45514,7 +45607,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1130
+#: doc/classes/ProjectSettings.xml:1132
msgid ""
"[b]Experimental.[/b] If set to on, this applies buffer orphaning - "
"[code]glBufferData[/code] is called with NULL data and the full buffer size "
@@ -45525,7 +45618,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1134
+#: doc/classes/ProjectSettings.xml:1136
msgid ""
"[b]Experimental.[/b] If set to on, uses the [code]GL_STREAM_DRAW[/code] flag "
"for legacy buffer uploads. If off, uses the [code]GL_DYNAMIC_DRAW[/code] "
@@ -45535,7 +45628,7 @@ msgid ""
"adversely affect performance for end users."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1138
+#: doc/classes/ProjectSettings.xml:1140
msgid ""
"Choose between fixed mode where corner scalings are preserved matching the "
"artwork, and scaling mode.\n"
@@ -45543,7 +45636,7 @@ msgid ""
"is off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1142
+#: doc/classes/ProjectSettings.xml:1144
msgid ""
"Some NVIDIA GPU drivers have a bug which produces flickering issues for the "
"[code]draw_rect[/code] method, especially as used in [TileMap]. Refer to "
@@ -45554,7 +45647,7 @@ msgid ""
"rendering, but only on desktop platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1146
+#: doc/classes/ProjectSettings.xml:1148
msgid ""
"If [code]true[/code], performs 2D skinning on the CPU rather than the GPU. "
"This provides greater compatibility with a wide range of hardware, and also "
@@ -45569,7 +45662,7 @@ msgid ""
"skinning."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1152
+#: doc/classes/ProjectSettings.xml:1154
msgid ""
"If [code]true[/code], forces snapping of vertices to pixels in 2D rendering. "
"May help in some pixel art styles.\n"
@@ -45578,13 +45671,13 @@ msgid ""
"uv_contract] to prevent artifacts."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1157
+#: doc/classes/ProjectSettings.xml:1159
msgid ""
"When batching is on, this regularly prints a frame diagnosis log. Note that "
"this will degrade performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1160
+#: doc/classes/ProjectSettings.xml:1162
msgid ""
"[b]Experimental.[/b] For regression testing against the old renderer. If "
"this is switched on, and [code]use_batching[/code] is set, the renderer will "
@@ -45593,7 +45686,7 @@ msgid ""
"Performance will be degraded."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1163
+#: doc/classes/ProjectSettings.xml:1165
msgid ""
"Lights have the potential to prevent joining items, and break many of the "
"performance benefits of batching. This setting enables some complex logic to "
@@ -45603,7 +45696,7 @@ msgid ""
"returns."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1166
+#: doc/classes/ProjectSettings.xml:1168
msgid ""
"Sets the proportion of the total screen area (in pixels) that must be saved "
"by a scissor operation in order to activate light scissoring. This can "
@@ -45615,7 +45708,7 @@ msgid ""
"a lot of lighting."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1169
+#: doc/classes/ProjectSettings.xml:1171
msgid ""
"Enabling this setting uses the legacy method to draw batches containing only "
"one rect. The legacy method is faster (approx twice as fast), but can cause "
@@ -45625,24 +45718,24 @@ msgid ""
"this method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1172
+#: doc/classes/ProjectSettings.xml:1174
msgid ""
"Turns 2D batching on and off. Batching increases performance by reducing the "
"amount of graphics API drawcalls."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1175
+#: doc/classes/ProjectSettings.xml:1177
msgid "Switches on 2D batching within the editor."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1178
+#: doc/classes/ProjectSettings.xml:1180
msgid ""
"Size of buffer reserved for batched vertices. Larger size enables larger "
"batches, but there are diminishing returns for the memory used. This should "
"only have a minor effect on performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1181
+#: doc/classes/ProjectSettings.xml:1183
msgid ""
"Including color in the vertex format has a cost, however, not including "
"color prevents batching across color changes. This threshold determines the "
@@ -45651,7 +45744,7 @@ msgid ""
"0 will always use colored vertices, 1 will never use colored vertices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1184
+#: doc/classes/ProjectSettings.xml:1186
msgid ""
"In certain circumstances, the batcher can reorder items in order to better "
"join them. This may result in better performance. An overlap test is needed "
@@ -45659,7 +45752,7 @@ msgid ""
"returns. If you are getting no benefit, setting this to 0 will switch it off."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1187
+#: doc/classes/ProjectSettings.xml:1189
msgid ""
"Sets the number of commands to lookahead to determine whether to batch "
"render items. A value of 1 can join items consisting of single commands, 0 "
@@ -45668,7 +45761,7 @@ msgid ""
"recommended."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1190
+#: doc/classes/ProjectSettings.xml:1192
msgid ""
"On some platforms (especially mobile), precision issues in shaders can lead "
"to reading 1 texel outside of bounds, particularly where rects are scaled. "
@@ -45678,7 +45771,7 @@ msgid ""
"texels."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1194
+#: doc/classes/ProjectSettings.xml:1196
msgid ""
"The amount of UV contraction. This figure is divided by 1000000, and is a "
"proportion of the total texture dimensions, where the width and height are "
@@ -45686,31 +45779,31 @@ msgid ""
"Use the default unless correcting for a problem on particular hardware."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1198
+#: doc/classes/ProjectSettings.xml:1200
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_HIGH]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1201
+#: doc/classes/ProjectSettings.xml:1203
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_LOW]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1204
+#: doc/classes/ProjectSettings.xml:1206
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_MEDIUM]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1207
+#: doc/classes/ProjectSettings.xml:1209
msgid ""
"Amount of light samples taken when using [constant BakedLightmap."
"BAKE_QUALITY_ULTRA]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1210
+#: doc/classes/ProjectSettings.xml:1212
msgid ""
"Default background clear color. Overridable per [Viewport] using its "
"[Environment]. See [member Environment.background_mode] and [member "
@@ -45718,7 +45811,7 @@ msgid ""
"programmatically, use [method VisualServer.set_default_clear_color]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1213
+#: doc/classes/ProjectSettings.xml:1215
msgid ""
"[Environment] that will be used as a fallback environment in case a scene "
"does not specify its own environment. The default environment is loaded in "
@@ -45728,21 +45821,21 @@ msgid ""
"here."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1216
+#: doc/classes/ProjectSettings.xml:1218
msgid ""
"The use of half-float vertex compression may be producing rendering errors "
"on some platforms (especially iOS). These have been seen particularly in "
"particles. Disabling half-float may resolve these problems."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1219
+#: doc/classes/ProjectSettings.xml:1221
msgid ""
"iOS specific override for [member rendering/gles2/compatibility/"
"disable_half_float], due to poor support for half-float vertex compression "
"on many devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1222
+#: doc/classes/ProjectSettings.xml:1224
msgid ""
"If [code]true[/code] and available on the target Android device, enables "
"high floating point precision for all shader computations in GLES2.\n"
@@ -45750,31 +45843,31 @@ msgid ""
"devices and is often not available at all. Use with caution."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1226
+#: doc/classes/ProjectSettings.xml:1228
msgid ""
"Max buffer size for blend shapes. Any blend shape bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1229
+#: doc/classes/ProjectSettings.xml:1231
msgid ""
"Max buffer size for drawing polygons. Any polygon bigger than this will not "
"work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1232
+#: doc/classes/ProjectSettings.xml:1234
msgid ""
"Max index buffer size for drawing polygons. Any polygon bigger than this "
"will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1235
+#: doc/classes/ProjectSettings.xml:1237
msgid ""
"Max buffer size for drawing immediate objects (ImmediateGeometry nodes). "
"Nodes using more than this size will not work."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1238
+#: doc/classes/ProjectSettings.xml:1240
msgid ""
"Max number of lights renderable per object. This is further limited by "
"hardware support. Most devices only support 409 lights, while many devices "
@@ -45782,7 +45875,7 @@ msgid ""
"memory usage and may decrease shader compile times."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1241
+#: doc/classes/ProjectSettings.xml:1243
msgid ""
"Max amount of elements renderable in a frame. If more elements than this are "
"visible per frame, they will not be drawn. Keep in mind elements refer to "
@@ -45792,7 +45885,7 @@ msgid ""
"much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1244
+#: doc/classes/ProjectSettings.xml:1246
msgid ""
"Max number of lights renderable in a frame. If more lights than this number "
"are used, they will be ignored. Setting this low will slightly reduce memory "
@@ -45801,7 +45894,7 @@ msgid ""
"possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1247
+#: doc/classes/ProjectSettings.xml:1249
msgid ""
"Max number of reflection probes renderable in a frame. If more reflection "
"probes than this number are used, they will be ignored. Setting this low "
@@ -45810,20 +45903,20 @@ msgid ""
"consider lowering as much as possible on web export."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1250
+#: doc/classes/ProjectSettings.xml:1252
msgid ""
"Shaders have a time variable that constantly increases. At some point, it "
"needs to be rolled back to zero to avoid precision errors on shader "
"animations. This setting specifies when (in seconds)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1253
+#: doc/classes/ProjectSettings.xml:1255
msgid ""
"If [code]true[/code], the texture importer will import lossless textures "
"using the PNG format. Otherwise, it will default to using WebP."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1256
+#: doc/classes/ProjectSettings.xml:1258
msgid ""
"The default compression level for lossless WebP. Higher levels result in "
"smaller files at the cost of compression speed. Decompression speed is "
@@ -45832,7 +45925,7 @@ msgid ""
"savings."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1259
+#: doc/classes/ProjectSettings.xml:1261
msgid ""
"On import, mesh vertex data will be split into two streams within a single "
"vertex buffer, one for position data and the other for interleaved "
@@ -45840,7 +45933,7 @@ msgid ""
"Requires manual reimport of meshes after toggling."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1262
+#: doc/classes/ProjectSettings.xml:1264
msgid ""
"Determines the maximum number of sphere occluders that will be used at any "
"one time.\n"
@@ -45849,7 +45942,7 @@ msgid ""
"to give the best overall performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1266
+#: doc/classes/ProjectSettings.xml:1268
msgid ""
"The default convention is for portal normals to point outward (face outward) "
"from the source room.\n"
@@ -45859,20 +45952,20 @@ msgid ""
"convertion to [Portal] nodes."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1271
+#: doc/classes/ProjectSettings.xml:1273
msgid ""
"Show conversion logs.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1275
+#: doc/classes/ProjectSettings.xml:1277
msgid ""
"If [code]true[/code], gameplay callbacks will be sent as [code]signals[/"
"code]. If [code]false[/code], they will be sent as [code]notifications[/"
"code]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1278
+#: doc/classes/ProjectSettings.xml:1280
msgid ""
"If enabled, while merging meshes, the system will also attempt to remove "
"[Spatial] nodes that no longer have any children.\n"
@@ -45881,13 +45974,13 @@ msgid ""
"for markers or some other purpose."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1282
+#: doc/classes/ProjectSettings.xml:1284
msgid ""
"Show logs during PVS generation.\n"
"[b]Note:[/b] This will automatically be disabled in exports."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1286
+#: doc/classes/ProjectSettings.xml:1288
msgid ""
"Uses a simplified method of generating PVS (potentially visible set) data. "
"The results may not be accurate where more than one portal join adjacent "
@@ -45897,46 +45990,46 @@ msgid ""
"default method."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1290
+#: doc/classes/ProjectSettings.xml:1292
msgid ""
"If [code]true[/code], allocates the main framebuffer with high dynamic "
"range. High dynamic range allows the use of [Color] values greater than 1.\n"
"[b]Note:[/b] Only available on the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1294
+#: doc/classes/ProjectSettings.xml:1296
msgid ""
"Lower-end override for [member rendering/quality/depth/hdr] on mobile "
"devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1297
+#: doc/classes/ProjectSettings.xml:1299
msgid ""
"Disables depth pre-pass for some GPU vendors (usually mobile), as their "
"architecture already does this."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1300
+#: doc/classes/ProjectSettings.xml:1302
msgid ""
"If [code]true[/code], performs a previous depth pass before rendering "
"materials. This increases performance in scenes with high overdraw, when "
"complex materials and lighting are used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1303
+#: doc/classes/ProjectSettings.xml:1305
msgid ""
"The directional shadow's size in pixels. Higher values will result in "
"sharper shadows, at the cost of performance. The value will be rounded up to "
"the nearest power of 2."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1306
+#: doc/classes/ProjectSettings.xml:1308
msgid ""
"Lower-end override for [member rendering/quality/directional_shadow/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1309
+#: doc/classes/ProjectSettings.xml:1311
msgid ""
"The video driver to use (\"GLES2\" or \"GLES3\").\n"
"[b]Note:[/b] The backend in use can be overridden at runtime via the [code]--"
@@ -45946,7 +46039,7 @@ msgid ""
"updated, so use [method OS.get_current_video_driver] to query it at run-time."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1313
+#: doc/classes/ProjectSettings.xml:1315
msgid ""
"If [code]true[/code], allows falling back to the GLES2 driver if the GLES3 "
"driver is not supported.\n"
@@ -45958,7 +46051,7 @@ msgid ""
"data pack's size."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1317
+#: doc/classes/ProjectSettings.xml:1319
msgid ""
"Maximum anisotropic filter level used for textures with anisotropy enabled. "
"Higher values will result in sharper textures when viewed from oblique "
@@ -45966,7 +46059,7 @@ msgid ""
"4, 8, 16)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1320
+#: doc/classes/ProjectSettings.xml:1322
msgid ""
"Sets the number of MSAA samples to use. MSAA is used to reduce aliasing "
"around the edges of polygons. A higher MSAA value results in smoother edges "
@@ -45974,7 +46067,7 @@ msgid ""
"[b]Note:[/b] MSAA is not available on HTML5 export using the GLES2 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1324
+#: doc/classes/ProjectSettings.xml:1326
msgid ""
"If set to a value greater than [code]0.0[/code], contrast-adaptive "
"sharpening will be applied to the 3D viewport. This has a low performance "
@@ -45983,7 +46076,7 @@ msgid ""
"[member rendering/quality/filters/use_fxaa]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1327
+#: doc/classes/ProjectSettings.xml:1329
msgid ""
"If [code]true[/code], uses a fast post-processing filter to make banding "
"significantly less visible. In some cases, debanding may introduce a "
@@ -45997,7 +46090,7 @@ msgid ""
"disabled when targeting mobile platforms."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1332
+#: doc/classes/ProjectSettings.xml:1334
msgid ""
"Enables FXAA in the root Viewport. FXAA is a popular screen-space "
"antialiasing method, which is fast but will make the image look blurry, "
@@ -46007,7 +46100,7 @@ msgid ""
"quality/filters/sharpen_intensity])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1335
+#: doc/classes/ProjectSettings.xml:1337
msgid ""
"If [code]true[/code], uses nearest-neighbor mipmap filtering when using "
"mipmaps (also called \"bilinear filtering\"), which will result in visible "
@@ -46016,7 +46109,7 @@ msgid ""
"mipmap filtering (also called \"trilinear filtering\") is used."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1338
+#: doc/classes/ProjectSettings.xml:1340
msgid ""
"Strategy used for framebuffer allocation. The simpler it is, the less "
"resources it uses (but the less features it supports). If set to \"2D "
@@ -46026,54 +46119,54 @@ msgid ""
"be available in the [Environment]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1341
+#: doc/classes/ProjectSettings.xml:1343
msgid ""
"Lower-end override for [member rendering/quality/intended_usage/"
"framebuffer_allocation] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1344
+#: doc/classes/ProjectSettings.xml:1346
msgid ""
"Enable usage of bicubic sampling in baked lightmaps. This results in "
"smoother looking lighting at the expense of more bandwidth usage. On GLES2, "
"changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1347
+#: doc/classes/ProjectSettings.xml:1349
msgid ""
"Lower-end override for [member rendering/quality/lightmapping/"
"use_bicubic_sampling] on mobile devices, in order to reduce bandwidth usage."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1350
+#: doc/classes/ProjectSettings.xml:1352
msgid ""
"Size of the atlas used by reflection probes. A larger size can result in "
"higher visual quality, while a smaller size will be faster and take up less "
"memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1353
+#: doc/classes/ProjectSettings.xml:1355
msgid ""
"Number of subdivisions to use for the reflection atlas. A higher number "
"lowers the quality of each atlas, but allows you to use more."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1356
+#: doc/classes/ProjectSettings.xml:1358
msgid ""
"If [code]true[/code], uses a high amount of samples to create blurred "
"variants of reflection probes and panorama backgrounds (sky). Those blurred "
"variants are used by rough materials."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1359
+#: doc/classes/ProjectSettings.xml:1361
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"high_quality_ggx] on mobile devices, due to performance concerns or driver "
"support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1362
+#: doc/classes/ProjectSettings.xml:1364
msgid ""
"Limits the size of the irradiance map which is normally determined by "
"[member Sky.radiance_size]. A higher size results in a higher quality "
@@ -46084,61 +46177,61 @@ msgid ""
"maps well and may crash if this is set too high."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1366
+#: doc/classes/ProjectSettings.xml:1368
msgid ""
"If [code]true[/code], uses texture arrays instead of mipmaps for reflection "
"probes and panorama backgrounds (sky). This reduces jitter noise on "
"reflections, but costs more performance and memory."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1369
+#: doc/classes/ProjectSettings.xml:1371
msgid ""
"Lower-end override for [member rendering/quality/reflections/"
"texture_array_reflections] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1372
+#: doc/classes/ProjectSettings.xml:1374
msgid ""
"If [code]true[/code], uses faster but lower-quality Blinn model to generate "
"blurred reflections instead of the GGX model."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1375
+#: doc/classes/ProjectSettings.xml:1377
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_blinn_over_ggx] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1378
+#: doc/classes/ProjectSettings.xml:1380
msgid ""
"If [code]true[/code], uses faster but lower-quality Lambert material "
"lighting model instead of Burley."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1381
+#: doc/classes/ProjectSettings.xml:1383
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_lambert_over_burley] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1384
+#: doc/classes/ProjectSettings.xml:1386
msgid ""
"If [code]true[/code], forces vertex shading for all rendering. This can "
"increase performance a lot, but also reduces quality immensely. Can be used "
"to optimize performance on low-end mobile devices."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1387
+#: doc/classes/ProjectSettings.xml:1389
msgid ""
"Lower-end override for [member rendering/quality/shading/"
"force_vertex_shading] on mobile devices, due to performance concerns or "
"driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1390
+#: doc/classes/ProjectSettings.xml:1392
msgid ""
"If [code]true[/code], enables new physical light attenuation for "
"[OmniLight]s and [SpotLight]s. This results in more realistic lighting "
@@ -46149,7 +46242,7 @@ msgid ""
"Changes to this setting will only be applied upon restarting the application."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1394
+#: doc/classes/ProjectSettings.xml:1396
msgid ""
"Size for cubemap into which the shadow is rendered before being copied into "
"the shadow atlas. A higher number can result in higher resolution shadows "
@@ -46158,26 +46251,26 @@ msgid ""
"size] will not result in a perceptible increase in visual quality."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1397 doc/classes/ProjectSettings.xml:1400
-#: doc/classes/ProjectSettings.xml:1403 doc/classes/ProjectSettings.xml:1406
+#: doc/classes/ProjectSettings.xml:1399 doc/classes/ProjectSettings.xml:1402
+#: doc/classes/ProjectSettings.xml:1405 doc/classes/ProjectSettings.xml:1408
msgid ""
"Subdivision quadrant size for shadow mapping. See shadow mapping "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1409
+#: doc/classes/ProjectSettings.xml:1411
msgid ""
"Size for shadow atlas (used for OmniLights and SpotLights). See "
"documentation."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1412
+#: doc/classes/ProjectSettings.xml:1414
msgid ""
"Lower-end override for [member rendering/quality/shadow_atlas/size] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1415
+#: doc/classes/ProjectSettings.xml:1417
msgid ""
"Shadow filter mode. Higher-quality settings result in smoother shadows that "
"flicker less when moving. \"Disabled\" is the fastest option, but also has "
@@ -46188,20 +46281,20 @@ msgid ""
"shadow appearance similar to the one produced by the GLES3 backend."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1419
+#: doc/classes/ProjectSettings.xml:1421
msgid ""
"Lower-end override for [member rendering/quality/shadows/filter_mode] on "
"mobile devices, due to performance concerns or driver support."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1422
+#: doc/classes/ProjectSettings.xml:1424
msgid ""
"Forces [MeshInstance] to always perform skinning on the CPU (applies to both "
"GLES2 and GLES3).\n"
"See also [member rendering/quality/skinning/software_skinning_fallback]."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1426
+#: doc/classes/ProjectSettings.xml:1428
msgid ""
"Allows [MeshInstance] to perform skinning on the CPU when the hardware "
"doesn't support the default GPU skinning process with GLES2.\n"
@@ -46213,52 +46306,52 @@ msgid ""
"already applied to the modelview matrix."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1432
+#: doc/classes/ProjectSettings.xml:1434
msgid ""
"The rendering octree balance can be changed to favor smaller ([code]0[/"
"code]), or larger ([code]1[/code]) branches.\n"
"Larger branches can increase performance significantly in some projects."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1436
+#: doc/classes/ProjectSettings.xml:1438
msgid ""
"Enables the use of bounding volume hierarchy instead of octree for rendering "
"spatial partitioning. This may give better performance."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1439
+#: doc/classes/ProjectSettings.xml:1441
msgid ""
"Improves quality of subsurface scattering, but cost significantly increases."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1442
+#: doc/classes/ProjectSettings.xml:1444
msgid "Quality setting for subsurface scattering (samples taken)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1445
+#: doc/classes/ProjectSettings.xml:1447
msgid "Max radius used for subsurface scattering samples."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1448
+#: doc/classes/ProjectSettings.xml:1450
msgid ""
"Weight subsurface scattering samples. Helps to avoid reading samples from "
"unrelated parts of the screen."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1451
+#: doc/classes/ProjectSettings.xml:1453
msgid ""
"Use high-quality voxel cone tracing. This results in better-looking "
"reflections, but is much more expensive on the GPU."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1454
+#: doc/classes/ProjectSettings.xml:1456
msgid ""
"Thread model for rendering. Rendering on a thread can vastly improve "
"performance, but synchronizing to the main thread can cause a bit more "
"jitter."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1457
+#: doc/classes/ProjectSettings.xml:1459
msgid ""
"If [code]true[/code], a thread safe version of BVH (bounding volume "
"hierarchy) will be used in rendering and Godot physics.\n"
@@ -46266,7 +46359,7 @@ msgid ""
"incorrect object visibility)."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1461
+#: doc/classes/ProjectSettings.xml:1463
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the BPTC algorithm. This texture compression algorithm is "
@@ -46279,7 +46372,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1465
+#: doc/classes/ProjectSettings.xml:1467
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression algorithm. This algorithm "
@@ -46291,7 +46384,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1469
+#: doc/classes/ProjectSettings.xml:1471
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the Ericsson Texture Compression 2 algorithm. This texture "
@@ -46303,7 +46396,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1473
+#: doc/classes/ProjectSettings.xml:1475
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the PowerVR Texture Compression algorithm. This texture "
@@ -46315,7 +46408,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1477
+#: doc/classes/ProjectSettings.xml:1479
msgid ""
"If [code]true[/code], the texture importer will import VRAM-compressed "
"textures using the S3 Texture Compression algorithm. This algorithm is only "
@@ -46327,7 +46420,7 @@ msgid ""
"application/config/use_hidden_project_data_directory])."
msgstr ""
-#: doc/classes/ProjectSettings.xml:1481
+#: doc/classes/ProjectSettings.xml:1483
msgid ""
"Cell size used for the 2D hash grid that [VisibilityNotifier2D] uses (in "
"pixels)."
@@ -46991,40 +47084,54 @@ msgid ""
msgstr ""
#: doc/classes/Rect2.xml:59
-msgid "Returns this [Rect2] expanded to include a given point."
+msgid ""
+"Returns a copy of this [Rect2] expanded to include a given point.\n"
+"[b]Example:[/b]\n"
+"[codeblock]\n"
+"# position (-3, 2), size (1, 1)\n"
+"var rect = Rect2(Vector2(-3, 2), Vector2(1, 1))\n"
+"# position (-3, -1), size (3, 4), so we fit both rect and Vector2(0, -1)\n"
+"var rect2 = rect.expand(Vector2(0, -1))\n"
+"[/codeblock]"
msgstr ""
-#: doc/classes/Rect2.xml:65
+#: doc/classes/Rect2.xml:72
msgid "Returns the area of the [Rect2]."
msgstr ""
-#: doc/classes/Rect2.xml:72
+#: doc/classes/Rect2.xml:79
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards all the "
"sides."
msgstr ""
-#: doc/classes/Rect2.xml:82
+#: doc/classes/Rect2.xml:89
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards each "
"direction individually."
msgstr ""
-#: doc/classes/Rect2.xml:90
+#: doc/classes/Rect2.xml:97
msgid ""
"Returns a copy of the [Rect2] grown a given amount of units towards the "
"[enum Margin] direction."
msgstr ""
-#: doc/classes/Rect2.xml:96
+#: doc/classes/Rect2.xml:103
msgid "Returns [code]true[/code] if the [Rect2] is flat or empty."
msgstr ""
-#: doc/classes/Rect2.xml:103
-msgid "Returns [code]true[/code] if the [Rect2] contains a point."
+#: doc/classes/Rect2.xml:110
+msgid ""
+"Returns [code]true[/code] if the [Rect2] contains a point. By convention, "
+"the right and bottom edges of the [Rect2] are considered exclusive, so "
+"points on these edges are [b]not[/b] included.\n"
+"[b]Note:[/b] This method is not reliable for [Rect2] with a [i]negative "
+"size[/i]. Use [method abs] to get a positive sized equivalent rectangle to "
+"check for contained points."
msgstr ""
-#: doc/classes/Rect2.xml:111
+#: doc/classes/Rect2.xml:119
msgid ""
"Returns [code]true[/code] if the [Rect2] overlaps with [code]b[/code] (i.e. "
"they have at least one point in common).\n"
@@ -47032,14 +47139,14 @@ msgid ""
"considered overlapping if their borders touch, even without intersection."
msgstr ""
-#: doc/classes/Rect2.xml:119
+#: doc/classes/Rect2.xml:127
msgid ""
"Returns [code]true[/code] if this [Rect2] and [code]rect[/code] are "
"approximately equal, by calling [code]is_equal_approx[/code] on each "
"component."
msgstr ""
-#: doc/classes/Rect2.xml:126
+#: doc/classes/Rect2.xml:134
msgid "Returns a larger [Rect2] that contains this [Rect2] and [code]b[/code]."
msgstr ""
@@ -49374,6 +49481,22 @@ msgstr ""
#: doc/classes/RoomManager.xml:79
msgid ""
+"In order to reduce processing for roaming objects, an expansion is applied "
+"to their AABB as they move. This expanded volume is used to calculate which "
+"rooms the roaming object is within. If the object's exact AABB is still "
+"within this expanded volume on the next move, there is no need to reprocess "
+"the object, which can save considerable CPU.\n"
+"The downside is that if the expansion is too much, the object may end up "
+"unexpectedly sprawling into neighbouring rooms and showing up where it might "
+"otherwise be culled.\n"
+"In order to balance roaming performance against culling accuracy, this "
+"expansion margin can be customized by the user. It will typically depend on "
+"your room and object sizes, and movement speeds. The default value should "
+"work reasonably in most circumstances."
+msgstr ""
+
+#: doc/classes/RoomManager.xml:84
+msgid ""
"During the conversion process, the geometry of objects within [Room]s, or a "
"custom specified manual bound, are used to generate a [b]convex hull bound[/"
"b].\n"
@@ -49391,7 +49514,7 @@ msgid ""
"The room convex hulls are shown as a wireframe in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:86
+#: doc/classes/RoomManager.xml:91
msgid ""
"For the [Room] conversion process to succeed, you must point the "
"[RoomManager] to the parent [Node] of your [Room]s and [RoomGroup]s, which "
@@ -49399,11 +49522,11 @@ msgid ""
"type, it is normally just a [Spatial])."
msgstr ""
-#: doc/classes/RoomManager.xml:89
+#: doc/classes/RoomManager.xml:94
msgid "Shows the [Portal] margins when the portal gizmo is used in the editor."
msgstr ""
-#: doc/classes/RoomManager.xml:92
+#: doc/classes/RoomManager.xml:97
msgid ""
"When receiving gameplay callbacks when objects enter and exit gameplay, the "
"[b]gameplay area[/b] can be defined by either the primary PVS (potentially "
@@ -49413,19 +49536,19 @@ msgid ""
"preferable."
msgstr ""
-#: doc/classes/RoomManager.xml:98
+#: doc/classes/RoomManager.xml:103
msgid ""
"Use only [Portal]s at runtime to determine visibility. PVS will not be "
"generated at [Room]s conversion, and gameplay notifications cannot be used."
msgstr ""
-#: doc/classes/RoomManager.xml:101
+#: doc/classes/RoomManager.xml:106
msgid ""
"Use a combination of PVS and [Portal]s to determine visibility (this is "
"usually fastest and most accurate)."
msgstr ""
-#: doc/classes/RoomManager.xml:104
+#: doc/classes/RoomManager.xml:109
msgid ""
"Use only the PVS (potentially visible set) of [Room]s to determine "
"visibility."
@@ -54842,20 +54965,25 @@ msgstr ""
#: doc/classes/SurfaceTool.xml:115
msgid ""
"Append vertices from a given [Mesh] surface onto the current vertex array "
-"with specified [Transform]."
+"with specified [Transform].\n"
+"[b]Note:[/b] Using [method append_from] on a [Thread] is much slower as the "
+"GPU must communicate data back to the CPU, while also causing the main "
+"thread to stall (as OpenGL is not thread-safe). Consider requesting a copy "
+"of the mesh, converting it to an [ArrayMesh] and adding vertices manually "
+"instead."
msgstr ""
-#: doc/classes/SurfaceTool.xml:122
+#: doc/classes/SurfaceTool.xml:123
msgid ""
"Called before adding any vertices. Takes the primitive type as an argument "
"(e.g. [constant Mesh.PRIMITIVE_TRIANGLES])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:128
+#: doc/classes/SurfaceTool.xml:129
msgid "Clear all information passed into the surface tool so far."
msgstr ""
-#: doc/classes/SurfaceTool.xml:136
+#: doc/classes/SurfaceTool.xml:137
msgid ""
"Returns a constructed [ArrayMesh] from current information passed in. If an "
"existing [ArrayMesh] is passed in as an argument, will add an extra surface "
@@ -54866,28 +54994,28 @@ msgid ""
"constants in [enum Mesh.ArrayFormat] for other flags."
msgstr ""
-#: doc/classes/SurfaceTool.xml:143
+#: doc/classes/SurfaceTool.xml:144
msgid ""
"Commits the data to the same format used by [method ArrayMesh."
"add_surface_from_arrays]. This way you can further process the mesh data "
"using the [ArrayMesh] API."
msgstr ""
-#: doc/classes/SurfaceTool.xml:151
+#: doc/classes/SurfaceTool.xml:152
msgid "Creates a vertex array from an existing [Mesh]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:160
+#: doc/classes/SurfaceTool.xml:161
msgid ""
"Creates a vertex array from the specified blend shape of an existing [Mesh]. "
"This can be used to extract a specific pose from a blend shape."
msgstr ""
-#: doc/classes/SurfaceTool.xml:166
+#: doc/classes/SurfaceTool.xml:167
msgid "Removes the index array by expanding the vertex array."
msgstr ""
-#: doc/classes/SurfaceTool.xml:173
+#: doc/classes/SurfaceTool.xml:174
msgid ""
"Generates normals from vertices so you do not have to do it manually. If "
"[code]flip[/code] is [code]true[/code], the resulting normals will be "
@@ -54899,19 +55027,19 @@ msgid ""
"be set to [constant Mesh.PRIMITIVE_TRIANGLES]."
msgstr ""
-#: doc/classes/SurfaceTool.xml:180
+#: doc/classes/SurfaceTool.xml:181
msgid ""
"Generates a tangent vector for each vertex. Requires that each vertex have "
"UVs and normals set already (see [method generate_normals])."
msgstr ""
-#: doc/classes/SurfaceTool.xml:186
+#: doc/classes/SurfaceTool.xml:187
msgid ""
"Shrinks the vertex array by creating an index array. This can improve "
"performance by avoiding vertex reuse."
msgstr ""
-#: doc/classes/SurfaceTool.xml:193
+#: doc/classes/SurfaceTool.xml:194
msgid "Sets [Material] to be used by the [Mesh] you are constructing."
msgstr ""
diff --git a/drivers/SCsub b/drivers/SCsub
index 714d4110de..dd81fc645c 100644
--- a/drivers/SCsub
+++ b/drivers/SCsub
@@ -25,10 +25,9 @@ SConscript("winmidi/SCsub")
# Graphics drivers
if env["vulkan"]:
SConscript("vulkan/SCsub")
- SConscript("gles3/SCsub")
+if env["opengl3"]:
SConscript("gl_context/SCsub")
-else:
- SConscript("dummy/SCsub")
+ SConscript("gles3/SCsub")
# Core dependencies
SConscript("png/SCsub")
diff --git a/drivers/gles3/rasterizer_gles3.cpp b/drivers/gles3/rasterizer_gles3.cpp
index 10093d42a3..92c9dfb9ae 100644
--- a/drivers/gles3/rasterizer_gles3.cpp
+++ b/drivers/gles3/rasterizer_gles3.cpp
@@ -68,7 +68,7 @@
#endif
#endif
-#ifndef IPHONE_ENABLED
+#if !defined(IPHONE_ENABLED) && !defined(JAVASCRIPT_ENABLED)
// We include EGL below to get debug callback on GLES2 platforms,
// but EGL is not available on iOS.
#define CAN_DEBUG
diff --git a/drivers/gles3/shader_compiler_gles3.cpp b/drivers/gles3/shader_compiler_gles3.cpp
index fa607472d3..f9443e11db 100644
--- a/drivers/gles3/shader_compiler_gles3.cpp
+++ b/drivers/gles3/shader_compiler_gles3.cpp
@@ -65,6 +65,13 @@ static String _prestr(SL::DataPrecision p_pres) {
return "";
}
+static String _constr(bool p_is_const) {
+ if (p_is_const) {
+ return "const ";
+ }
+ return "";
+}
+
static String _qualstr(SL::ArgumentQualifier p_qual) {
switch (p_qual) {
case SL::ARGUMENT_QUALIFIER_IN:
@@ -246,9 +253,10 @@ void ShaderCompilerGLES3::_dump_function_deps(SL::ShaderNode *p_node, const Stri
header += "(";
for (int i = 0; i < fnode->arguments.size(); i++) {
- if (i > 0)
+ if (i > 0) {
header += ", ";
-
+ }
+ header += _constr(fnode->arguments[i].is_const);
header += _qualstr(fnode->arguments[i].qualifier);
header += _prestr(fnode->arguments[i].precision);
header += _typestr(fnode->arguments[i].type);
@@ -365,7 +373,7 @@ String ShaderCompilerGLES3::_dump_node_code(SL::Node *p_node, int p_level, Gener
for (int i = 0; i < snode->vconstants.size(); i++) {
String gcode;
- gcode += "const ";
+ gcode += _constr(true);
gcode += _prestr(snode->vconstants[i].precision);
gcode += _typestr(snode->vconstants[i].type);
gcode += " " + _mkid(String(snode->vconstants[i].name));
@@ -446,9 +454,7 @@ String ShaderCompilerGLES3::_dump_node_code(SL::Node *p_node, int p_level, Gener
SL::VariableDeclarationNode *var_dec_node = (SL::VariableDeclarationNode *)p_node;
StringBuffer<> declaration;
- if (var_dec_node->is_const) {
- declaration += "const ";
- }
+ declaration += _constr(var_dec_node->is_const);
declaration += _prestr(var_dec_node->precision);
declaration += _typestr(var_dec_node->datatype);
diff --git a/drivers/unix/os_unix.cpp b/drivers/unix/os_unix.cpp
index 1bc88a86f7..1ebc8cca5e 100644
--- a/drivers/unix/os_unix.cpp
+++ b/drivers/unix/os_unix.cpp
@@ -473,7 +473,7 @@ String OS_Unix::get_user_data_dir() const {
}
}
- return ProjectSettings::get_singleton()->get_resource_path();
+ return get_data_path().plus_file(get_godot_dir_name()).plus_file("app_userdata").plus_file("[unnamed project]");
}
String OS_Unix::get_executable_path() const {
diff --git a/drivers/wasapi/audio_driver_wasapi.cpp b/drivers/wasapi/audio_driver_wasapi.cpp
index 520d4808fb..403feb149e 100644
--- a/drivers/wasapi/audio_driver_wasapi.cpp
+++ b/drivers/wasapi/audio_driver_wasapi.cpp
@@ -387,14 +387,17 @@ Error AudioDriverWASAPI::audio_device_init(AudioDeviceWASAPI *p_device, bool p_c
ERR_FAIL_COND_V(hr != S_OK, ERR_CANT_OPEN);
// Due to WASAPI Shared Mode we have no control of the buffer size
- buffer_frames = max_frames;
-
- int64_t latency = 0;
- audio_output.audio_client->GetStreamLatency(&latency);
- // WASAPI REFERENCE_TIME units are 100 nanoseconds per unit
- // https://docs.microsoft.com/en-us/windows/win32/directshow/reference-time
- // Convert REFTIME to seconds as godot uses for latency
- real_latency = (float)latency / (float)REFTIMES_PER_SEC;
+ if (!p_capture) {
+ buffer_frames = max_frames;
+
+ int64_t latency = 0;
+ audio_output.audio_client->GetStreamLatency(&latency);
+ // WASAPI REFERENCE_TIME units are 100 nanoseconds per unit
+ // https://docs.microsoft.com/en-us/windows/win32/directshow/reference-time
+ // Convert REFTIME to seconds as godot uses for latency
+ real_latency = (float)latency / (float)REFTIMES_PER_SEC;
+ }
+
} else {
IAudioClient3 *device_audio_client_3 = (IAudioClient3 *)p_device->audio_client;
diff --git a/editor/action_map_editor.cpp b/editor/action_map_editor.cpp
index 9581c3cd45..3ca3576de6 100644
--- a/editor/action_map_editor.cpp
+++ b/editor/action_map_editor.cpp
@@ -260,7 +260,7 @@ void InputEventConfigurationDialog::_listen_window_input(const Ref<InputEvent> &
return;
} else {
// Always make the value 1 or -1 for display consistency
- joym->set_axis_value(SGN(axis_value));
+ joym->set_axis_value(SIGN(axis_value));
}
}
diff --git a/editor/animation_bezier_editor.cpp b/editor/animation_bezier_editor.cpp
index e9cf22af85..f7f88ad0d5 100644
--- a/editor/animation_bezier_editor.cpp
+++ b/editor/animation_bezier_editor.cpp
@@ -187,7 +187,7 @@ void AnimationBezierTrackEdit::_draw_line_clipped(const Vector2 &p_from, const V
Vector2 from = p_from;
Vector2 to = p_to;
- if (from.x == to.x) {
+ if (from.x == to.x && from.y == to.y) {
return;
}
if (to.x < from.x) {
@@ -222,11 +222,6 @@ void AnimationBezierTrackEdit::_notification(int p_what) {
bezier_icon = get_theme_icon(SNAME("KeyBezierPoint"), SNAME("EditorIcons"));
bezier_handle_icon = get_theme_icon(SNAME("KeyBezierHandle"), SNAME("EditorIcons"));
selected_icon = get_theme_icon(SNAME("KeyBezierSelected"), SNAME("EditorIcons"));
- if (handle_mode_option->get_item_count() == 0) {
- handle_mode_option->add_icon_item(get_theme_icon(SNAME("BezierHandlesFree"), SNAME("EditorIcons")), TTR("Free"), HANDLE_MODE_FREE);
- handle_mode_option->add_icon_item(get_theme_icon(SNAME("BezierHandlesBalanced"), SNAME("EditorIcons")), TTR("Balanced"), HANDLE_MODE_BALANCED);
- handle_mode_option->add_icon_item(get_theme_icon(SNAME("BezierHandlesMirror"), SNAME("EditorIcons")), TTR("Mirror"), HANDLE_MODE_MIRROR);
- }
}
if (p_what == NOTIFICATION_RESIZED) {
int right_limit = get_size().width - timeline->get_buttons_width();
@@ -420,9 +415,9 @@ void AnimationBezierTrackEdit::_notification(int p_what) {
//draw editor handles
{
- float scale = timeline->get_zoom_scale();
edit_points.clear();
+ float scale = timeline->get_zoom_scale();
for (int i = 0; i < animation->track_get_key_count(track); i++) {
float offset = animation->track_get_key_time(track, i);
float value = animation->bezier_track_get_key_value(track, i);
@@ -438,7 +433,7 @@ void AnimationBezierTrackEdit::_notification(int p_what) {
if (moving_handle != 0 && moving_handle_key == i) {
in_vec = moving_handle_left;
}
- Vector2 pos_in = Vector2(((offset + in_vec.x) - timeline->get_value()) * scale + limit, _bezier_h_to_pixel(value + in_vec.y));
+ Vector2 pos_in(((offset + in_vec.x) - timeline->get_value()) * scale + limit, _bezier_h_to_pixel(value + in_vec.y));
Vector2 out_vec = animation->bezier_track_get_key_out_handle(track, i);
@@ -446,7 +441,7 @@ void AnimationBezierTrackEdit::_notification(int p_what) {
out_vec = moving_handle_right;
}
- Vector2 pos_out = Vector2(((offset + out_vec.x) - timeline->get_value()) * scale + limit, _bezier_h_to_pixel(value + out_vec.y));
+ Vector2 pos_out(((offset + out_vec.x) - timeline->get_value()) * scale + limit, _bezier_h_to_pixel(value + out_vec.y));
_draw_line_clipped(pos, pos_in, accent, limit, right_limit);
_draw_line_clipped(pos, pos_out, accent, limit, right_limit);
@@ -581,11 +576,21 @@ void AnimationBezierTrackEdit::_clear_selection() {
update();
}
+void AnimationBezierTrackEdit::_change_selected_keys_handle_mode(Animation::HandleMode p_mode) {
+ undo_redo->create_action(TTR("Update Selected Key Handles"));
+ double ratio = timeline->get_zoom_scale() * v_zoom;
+ for (Set<int>::Element *E = selection.back(); E; E = E->prev()) {
+ const int key_index = E->get();
+ undo_redo->add_undo_method(animation.ptr(), "bezier_track_set_key_handle_mode", track, key_index, animation->bezier_track_get_key_handle_mode(track, key_index), ratio);
+ undo_redo->add_do_method(animation.ptr(), "bezier_track_set_key_handle_mode", track, key_index, p_mode, ratio);
+ }
+ undo_redo->commit_action();
+}
+
void AnimationBezierTrackEdit::_clear_selection_for_anim(const Ref<Animation> &p_anim) {
if (!(animation == p_anim)) {
return;
}
- //selection.clear();
_clear_selection();
}
@@ -667,6 +672,9 @@ void AnimationBezierTrackEdit::gui_input(const Ref<InputEvent> &p_event) {
menu->add_icon_item(get_theme_icon(SNAME("Duplicate"), SNAME("EditorIcons")), TTR("Duplicate Selected Key(s)"), MENU_KEY_DUPLICATE);
menu->add_separator();
menu->add_icon_item(get_theme_icon(SNAME("Remove"), SNAME("EditorIcons")), TTR("Delete Selected Key(s)"), MENU_KEY_DELETE);
+ menu->add_separator();
+ menu->add_icon_item(get_theme_icon(SNAME("BezierHandlesFree"), SNAME("EditorIcons")), TTR("Make Handles Free"), MENU_KEY_SET_HANDLE_FREE);
+ menu->add_icon_item(get_theme_icon(SNAME("BezierHandlesBalanced"), SNAME("EditorIcons")), TTR("Make Handles Balanced"), MENU_KEY_SET_HANDLE_BALANCED);
}
menu->set_as_minsize();
@@ -676,10 +684,6 @@ void AnimationBezierTrackEdit::gui_input(const Ref<InputEvent> &p_event) {
}
if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT) {
- if (close_icon_rect.has_point(mb->get_position())) {
- emit_signal(SNAME("close_request"));
- return;
- }
for (const KeyValue<int, Rect2> &E : subtracks) {
if (E.value.has_point(mb->get_position())) {
set_animation_and_track(animation, E.key);
@@ -746,7 +750,7 @@ void AnimationBezierTrackEdit::gui_input(const Ref<InputEvent> &p_event) {
//insert new point
if (mb->is_command_pressed() && mb->get_position().x >= timeline->get_name_limit() && mb->get_position().x < get_size().width - timeline->get_buttons_width()) {
Array new_point;
- new_point.resize(5);
+ new_point.resize(6);
float h = (get_size().height / 2 - mb->get_position().y) * v_zoom + v_scroll;
@@ -755,6 +759,7 @@ void AnimationBezierTrackEdit::gui_input(const Ref<InputEvent> &p_event) {
new_point[2] = 0;
new_point[3] = 0.25;
new_point[4] = 0;
+ new_point[5] = 0;
float time = ((mb->get_position().x - timeline->get_name_limit()) / timeline->get_zoom_scale()) + timeline->get_value();
while (animation->track_find_key(track, time, true) != -1) {
@@ -986,33 +991,49 @@ void AnimationBezierTrackEdit::gui_input(const Ref<InputEvent> &p_event) {
if (moving_handle == -1) {
moving_handle_left = moving_handle_value;
- if (moving_handle_left.x > 0) {
- moving_handle_left.x = 0;
- }
- if (handle_mode_option->get_selected() == HANDLE_MODE_BALANCED) {
- Vector2 scale = Vector2(timeline->get_zoom_scale(), v_zoom);
- moving_handle_right = (-(moving_handle_left * scale).normalized() * (moving_handle_right * scale).length()) / scale;
+ if (animation->bezier_track_get_key_handle_mode(track, moving_handle_key) == Animation::HANDLE_MODE_BALANCED) {
+ double ratio = timeline->get_zoom_scale() * v_zoom;
+ Transform2D xform;
+ xform.set_scale(Vector2(1.0, 1.0 / ratio));
- } else if (handle_mode_option->get_selected() == HANDLE_MODE_MIRROR) {
- moving_handle_right = -moving_handle_left;
- }
- }
+ Vector2 vec_out = xform.xform(moving_handle_right);
+ Vector2 vec_in = xform.xform(moving_handle_left);
- if (moving_handle == 1) {
- moving_handle_right = moving_handle_value;
- if (moving_handle_right.x < 0) {
- moving_handle_right.x = 0;
+ moving_handle_right = xform.affine_inverse().xform(-vec_in.normalized() * vec_out.length());
}
+ } else if (moving_handle == 1) {
+ moving_handle_right = moving_handle_value;
+
+ if (animation->bezier_track_get_key_handle_mode(track, moving_handle_key) == Animation::HANDLE_MODE_BALANCED) {
+ double ratio = timeline->get_zoom_scale() * v_zoom;
+ Transform2D xform;
+ xform.set_scale(Vector2(1.0, 1.0 / ratio));
- if (handle_mode_option->get_selected() == HANDLE_MODE_BALANCED) {
- Vector2 scale = Vector2(timeline->get_zoom_scale(), v_zoom);
- moving_handle_left = (-(moving_handle_right * scale).normalized() * (moving_handle_left * scale).length()) / scale;
- } else if (handle_mode_option->get_selected() == HANDLE_MODE_MIRROR) {
- moving_handle_left = -moving_handle_right;
+ Vector2 vec_in = xform.xform(moving_handle_left);
+ Vector2 vec_out = xform.xform(moving_handle_right);
+
+ moving_handle_left = xform.affine_inverse().xform(-vec_out.normalized() * vec_in.length());
}
}
+ update();
+ }
+
+ bool is_finishing_key_handle_drag = moving_handle != 0 && mb.is_valid() && !mb->is_pressed() && mb->get_button_index() == MouseButton::LEFT;
+ if (is_finishing_key_handle_drag) {
+ undo_redo->create_action(TTR("Move Bezier Points"));
+ if (moving_handle == -1) {
+ double ratio = timeline->get_zoom_scale() * v_zoom;
+ undo_redo->add_do_method(animation.ptr(), "bezier_track_set_key_in_handle", track, moving_handle_key, moving_handle_left, ratio);
+ undo_redo->add_undo_method(animation.ptr(), "bezier_track_set_key_in_handle", track, moving_handle_key, animation->bezier_track_get_key_in_handle(track, moving_handle_key), ratio);
+ } else if (moving_handle == 1) {
+ double ratio = timeline->get_zoom_scale() * v_zoom;
+ undo_redo->add_do_method(animation.ptr(), "bezier_track_set_key_out_handle", track, moving_handle_key, moving_handle_right, ratio);
+ undo_redo->add_undo_method(animation.ptr(), "bezier_track_set_key_out_handle", track, moving_handle_key, animation->bezier_track_get_key_out_handle(track, moving_handle_key), ratio);
+ }
+ undo_redo->commit_action();
+ moving_handle = 0;
update();
}
}
@@ -1021,7 +1042,7 @@ void AnimationBezierTrackEdit::_menu_selected(int p_index) {
switch (p_index) {
case MENU_KEY_INSERT: {
Array new_point;
- new_point.resize(5);
+ new_point.resize(6);
float h = (get_size().height / 2 - menu_insert_key.y) * v_zoom + v_scroll;
@@ -1030,6 +1051,7 @@ void AnimationBezierTrackEdit::_menu_selected(int p_index) {
new_point[2] = 0;
new_point[3] = 0.25;
new_point[4] = 0;
+ new_point[5] = Animation::HANDLE_MODE_BALANCED;
float time = ((menu_insert_key.x - timeline->get_name_limit()) / timeline->get_zoom_scale()) + timeline->get_value();
while (animation->track_find_key(track, time, true) != -1) {
@@ -1048,6 +1070,12 @@ void AnimationBezierTrackEdit::_menu_selected(int p_index) {
case MENU_KEY_DELETE: {
delete_selection();
} break;
+ case MENU_KEY_SET_HANDLE_FREE: {
+ _change_selected_keys_handle_mode(Animation::HANDLE_MODE_FREE);
+ } break;
+ case MENU_KEY_SET_HANDLE_BALANCED: {
+ _change_selected_keys_handle_mode(Animation::HANDLE_MODE_BALANCED);
+ } break;
}
}
@@ -1118,6 +1146,7 @@ void AnimationBezierTrackEdit::delete_selection() {
undo_redo->add_do_method(this, "_clear_selection_for_anim", animation);
undo_redo->add_undo_method(this, "_clear_selection_for_anim", animation);
undo_redo->commit_action();
+
//selection.clear();
}
}
@@ -1150,8 +1179,6 @@ AnimationBezierTrackEdit::AnimationBezierTrackEdit() {
set_focus_mode(FOCUS_CLICK);
set_clip_contents(true);
- handle_mode = HANDLE_MODE_FREE;
- handle_mode_option = memnew(OptionButton);
close_button = memnew(Button);
close_button->connect("pressed", Callable(this, SNAME("emit_signal")), varray(SNAME("close_request")));
@@ -1160,7 +1187,6 @@ AnimationBezierTrackEdit::AnimationBezierTrackEdit() {
right_column = memnew(VBoxContainer);
right_column->add_child(close_button);
right_column->add_spacer();
- right_column->add_child(handle_mode_option);
add_child(right_column);
menu = memnew(PopupMenu);
diff --git a/editor/animation_bezier_editor.h b/editor/animation_bezier_editor.h
index 578c6f9337..4b46777cfe 100644
--- a/editor/animation_bezier_editor.h
+++ b/editor/animation_bezier_editor.h
@@ -36,21 +36,14 @@
class AnimationBezierTrackEdit : public Control {
GDCLASS(AnimationBezierTrackEdit, Control);
- enum HandleMode {
- HANDLE_MODE_FREE,
- HANDLE_MODE_BALANCED,
- HANDLE_MODE_MIRROR
- };
-
enum {
MENU_KEY_INSERT,
MENU_KEY_DUPLICATE,
- MENU_KEY_DELETE
+ MENU_KEY_DELETE,
+ MENU_KEY_SET_HANDLE_FREE,
+ MENU_KEY_SET_HANDLE_BALANCED,
};
- HandleMode handle_mode;
- OptionButton *handle_mode_option;
-
VBoxContainer *right_column;
Button *close_button;
@@ -69,8 +62,6 @@ class AnimationBezierTrackEdit : public Control {
Ref<Texture2D> bezier_handle_icon;
Ref<Texture2D> selected_icon;
- Rect2 close_icon_rect;
-
Map<int, Rect2> subtracks;
float v_scroll = 0;
@@ -104,10 +95,12 @@ class AnimationBezierTrackEdit : public Control {
int moving_handle_key = 0;
Vector2 moving_handle_left;
Vector2 moving_handle_right;
+ int moving_handle_mode; // value from Animation::HandleMode
void _clear_selection();
void _clear_selection_for_anim(const Ref<Animation> &p_anim);
void _select_at_anim(const Ref<Animation> &p_anim, int p_track, float p_pos);
+ void _change_selected_keys_handle_mode(Animation::HandleMode p_mode);
Vector2 menu_insert_key;
diff --git a/editor/animation_track_editor.cpp b/editor/animation_track_editor.cpp
index b45fd7f443..6fce55f8e3 100644
--- a/editor/animation_track_editor.cpp
+++ b/editor/animation_track_editor.cpp
@@ -334,6 +334,22 @@ public:
setting = false;
return true;
}
+
+ if (name == "handle_mode") {
+ const Variant &value = p_value;
+
+ setting = true;
+ undo_redo->create_action(TTR("Anim Change Keyframe Value"), UndoRedo::MERGE_ENDS);
+ int prev = animation->bezier_track_get_key_handle_mode(track, key);
+ undo_redo->add_do_method(animation.ptr(), "bezier_track_set_key_handle_mode", track, key, value);
+ undo_redo->add_undo_method(animation.ptr(), "bezier_track_set_key_handle_mode", track, key, prev);
+ undo_redo->add_do_method(this, "_update_obj", animation);
+ undo_redo->add_undo_method(this, "_update_obj", animation);
+ undo_redo->commit_action();
+
+ setting = false;
+ return true;
+ }
} break;
case Animation::TYPE_AUDIO: {
if (name == "stream") {
@@ -498,6 +514,11 @@ public:
return true;
}
+ if (name == "handle_mode") {
+ r_ret = animation->bezier_track_get_key_handle_mode(track, key);
+ return true;
+ }
+
} break;
case Animation::TYPE_AUDIO: {
if (name == "stream") {
@@ -610,6 +631,7 @@ public:
p_list->push_back(PropertyInfo(Variant::FLOAT, "value"));
p_list->push_back(PropertyInfo(Variant::VECTOR2, "in_handle"));
p_list->push_back(PropertyInfo(Variant::VECTOR2, "out_handle"));
+ p_list->push_back(PropertyInfo(Variant::INT, "handle_mode", PROPERTY_HINT_ENUM, "Free,Balanced"));
} break;
case Animation::TYPE_AUDIO: {
@@ -949,6 +971,17 @@ public:
undo_redo->add_do_method(animation.ptr(), "bezier_track_set_key_out_handle", track, key, value);
undo_redo->add_undo_method(animation.ptr(), "bezier_track_set_key_out_handle", track, key, prev);
update_obj = true;
+ } else if (name == "handle_mode") {
+ const Variant &value = p_value;
+
+ if (!setting) {
+ setting = true;
+ undo_redo->create_action(TTR("Anim Multi Change Keyframe Value"), UndoRedo::MERGE_ENDS);
+ }
+ int prev = animation->bezier_track_get_key_handle_mode(track, key);
+ undo_redo->add_do_method(animation.ptr(), "bezier_track_set_key_handle_mode", track, key, value);
+ undo_redo->add_undo_method(animation.ptr(), "bezier_track_set_key_handle_mode", track, key, prev);
+ update_obj = true;
}
} break;
case Animation::TYPE_AUDIO: {
@@ -1120,6 +1153,11 @@ public:
return true;
}
+ if (name == "handle_mode") {
+ r_ret = animation->bezier_track_get_key_handle_mode(track, key);
+ return true;
+ }
+
} break;
case Animation::TYPE_AUDIO: {
if (name == "stream") {
@@ -1273,6 +1311,7 @@ public:
p_list->push_back(PropertyInfo(Variant::FLOAT, "value"));
p_list->push_back(PropertyInfo(Variant::VECTOR2, "in_handle"));
p_list->push_back(PropertyInfo(Variant::VECTOR2, "out_handle"));
+ p_list->push_back(PropertyInfo(Variant::INT, "handle_mode", PROPERTY_HINT_ENUM, "Free,Balanced"));
} break;
case Animation::TYPE_AUDIO: {
p_list->push_back(PropertyInfo(Variant::OBJECT, "stream", PROPERTY_HINT_RESOURCE_TYPE, "AudioStream"));
@@ -2257,6 +2296,11 @@ void AnimationTrackEdit::draw_key(int p_index, float p_pixels_sec, int p_x, bool
Ref<Texture2D> icon_to_draw = p_selected ? selected_icon : type_icon;
+ if (animation->track_get_type(track) == Animation::TYPE_VALUE && !Math::is_equal_approx(animation->track_get_key_transition(track, p_index), real_t(1.0))) {
+ // Use a different icon for keys with non-linear easing.
+ icon_to_draw = get_theme_icon(p_selected ? SNAME("KeyEasedSelected") : SNAME("KeyValueEased"), SNAME("EditorIcons"));
+ }
+
// Override type icon for invalid value keys, unless selected.
if (!p_selected && animation->track_get_type(track) == Animation::TYPE_VALUE) {
const Variant &v = animation->track_get_key_value(track, p_index);
@@ -2602,6 +2646,17 @@ String AnimationTrackEdit::get_tooltip(const Point2 &p_pos) const {
text += "In-Handle: " + ih + "\n";
Vector2 oh = animation->bezier_track_get_key_out_handle(track, key_idx);
text += "Out-Handle: " + oh + "\n";
+ int hm = animation->bezier_track_get_key_handle_mode(track, key_idx);
+ text += "Handle mode: ";
+ switch (hm) {
+ case Animation::HANDLE_MODE_FREE: {
+ text += "Free";
+ } break;
+ case Animation::HANDLE_MODE_BALANCED: {
+ text += "Balanced";
+ } break;
+ }
+ text += "\n";
} break;
case Animation::TYPE_AUDIO: {
String stream_name = "null";
@@ -4791,12 +4846,13 @@ void AnimationTrackEditor::_insert_key_from_track(float p_ofs, int p_track) {
Variant value;
_find_hint_for_track(p_track, bp, &value);
Array arr;
- arr.resize(5);
+ arr.resize(6);
arr[0] = value;
arr[1] = -0.25;
arr[2] = 0;
arr[3] = 0.25;
arr[4] = 0;
+ arr[5] = 0;
undo_redo->create_action(TTR("Add Track Key"));
undo_redo->add_do_method(animation.ptr(), "track_insert_key", p_track, p_ofs, arr);
diff --git a/editor/connections_dialog.cpp b/editor/connections_dialog.cpp
index c773f51342..b954c87476 100644
--- a/editor/connections_dialog.cpp
+++ b/editor/connections_dialog.cpp
@@ -378,7 +378,7 @@ void ConnectDialog::_advanced_pressed() {
error_label->hide();
} else {
set_min_size(Size2(600, 500) * EDSCALE);
- set_size(Size2());
+ reset_size();
connect_to_label->set_text(TTR("Connect to Script:"));
tree->set_connect_to_script_mode(true);
diff --git a/editor/debugger/script_editor_debugger.cpp b/editor/debugger/script_editor_debugger.cpp
index a312c161a8..b18c225f23 100644
--- a/editor/debugger/script_editor_debugger.cpp
+++ b/editor/debugger/script_editor_debugger.cpp
@@ -578,6 +578,12 @@ void ScriptEditorDebugger::_parse_message(const String &p_msg, const Array &p_da
error->set_tooltip(0, tooltip);
error->set_tooltip(1, tooltip);
+ if (warning_count == 0 && error_count == 0) {
+ expand_all_button->set_disabled(false);
+ collapse_all_button->set_disabled(false);
+ clear_button->set_disabled(false);
+ }
+
if (oe.warning) {
warning_count++;
} else {
@@ -1404,12 +1410,17 @@ void ScriptEditorDebugger::_clear_errors_list() {
error_tree->clear();
error_count = 0;
warning_count = 0;
+ update_tabs();
+
+ expand_all_button->set_disabled(true);
+ collapse_all_button->set_disabled(true);
+ clear_button->set_disabled(true);
}
// Right click on specific file(s) or folder(s).
void ScriptEditorDebugger::_error_tree_item_rmb_selected(const Vector2 &p_pos) {
item_menu->clear();
- item_menu->set_size(Size2(1, 1));
+ item_menu->reset_size();
if (error_tree->is_anything_selected()) {
item_menu->add_icon_item(get_theme_icon(SNAME("ActionCopy"), SNAME("EditorIcons")), TTR("Copy Error"), ACTION_COPY_ERROR);
@@ -1662,28 +1673,31 @@ ScriptEditorDebugger::ScriptEditorDebugger(EditorNode *p_editor) {
errors_tab = memnew(VBoxContainer);
errors_tab->set_name(TTR("Errors"));
- HBoxContainer *errhb = memnew(HBoxContainer);
- errors_tab->add_child(errhb);
+ HBoxContainer *error_hbox = memnew(HBoxContainer);
+ errors_tab->add_child(error_hbox);
- Button *expand_all = memnew(Button);
- expand_all->set_text(TTR("Expand All"));
- expand_all->connect("pressed", callable_mp(this, &ScriptEditorDebugger::_expand_errors_list));
- errhb->add_child(expand_all);
+ expand_all_button = memnew(Button);
+ expand_all_button->set_text(TTR("Expand All"));
+ expand_all_button->set_disabled(true);
+ expand_all_button->connect("pressed", callable_mp(this, &ScriptEditorDebugger::_expand_errors_list));
+ error_hbox->add_child(expand_all_button);
- Button *collapse_all = memnew(Button);
- collapse_all->set_text(TTR("Collapse All"));
- collapse_all->connect("pressed", callable_mp(this, &ScriptEditorDebugger::_collapse_errors_list));
- errhb->add_child(collapse_all);
+ collapse_all_button = memnew(Button);
+ collapse_all_button->set_text(TTR("Collapse All"));
+ collapse_all_button->set_disabled(true);
+ collapse_all_button->connect("pressed", callable_mp(this, &ScriptEditorDebugger::_collapse_errors_list));
+ error_hbox->add_child(collapse_all_button);
Control *space = memnew(Control);
space->set_h_size_flags(SIZE_EXPAND_FILL);
- errhb->add_child(space);
-
- clearbutton = memnew(Button);
- clearbutton->set_text(TTR("Clear"));
- clearbutton->set_h_size_flags(0);
- clearbutton->connect("pressed", callable_mp(this, &ScriptEditorDebugger::_clear_errors_list));
- errhb->add_child(clearbutton);
+ error_hbox->add_child(space);
+
+ clear_button = memnew(Button);
+ clear_button->set_text(TTR("Clear"));
+ clear_button->set_h_size_flags(0);
+ clear_button->set_disabled(true);
+ clear_button->connect("pressed", callable_mp(this, &ScriptEditorDebugger::_clear_errors_list));
+ error_hbox->add_child(clear_button);
error_tree = memnew(Tree);
error_tree->set_columns(2);
diff --git a/editor/debugger/script_editor_debugger.h b/editor/debugger/script_editor_debugger.h
index 1c1c0fd3e5..76209aef46 100644
--- a/editor/debugger/script_editor_debugger.h
+++ b/editor/debugger/script_editor_debugger.h
@@ -94,7 +94,9 @@ private:
VBoxContainer *errors_tab;
Tree *error_tree;
- Button *clearbutton;
+ Button *expand_all_button;
+ Button *collapse_all_button;
+ Button *clear_button;
PopupMenu *item_menu;
EditorFileDialog *file_dialog;
diff --git a/editor/dependency_editor.cpp b/editor/dependency_editor.cpp
index d07d77c112..f18284638f 100644
--- a/editor/dependency_editor.cpp
+++ b/editor/dependency_editor.cpp
@@ -270,7 +270,7 @@ DependencyEditor::DependencyEditor() {
/////////////////////////////////////
void DependencyEditorOwners::_list_rmb_select(int p_item, const Vector2 &p_pos) {
file_options->clear();
- file_options->set_size(Size2(1, 1));
+ file_options->reset_size();
if (p_item >= 0) {
file_options->add_item(TTR("Open"), FILE_OPEN);
}
@@ -464,7 +464,7 @@ void DependencyRemoveDialog::show(const Vector<String> &p_folders, const Vector<
if (removed_deps.is_empty()) {
owners->hide();
text->set_text(TTR("Remove the selected files from the project? (Cannot be undone.)\nDepending on your filesystem configuration, the files will either be moved to the system trash or deleted permanently."));
- set_size(Size2());
+ reset_size();
popup_centered();
} else {
_build_removed_dependency_tree(removed_deps);
diff --git a/editor/editor_autoload_settings.cpp b/editor/editor_autoload_settings.cpp
index 0840c3b6a8..25e76c2262 100644
--- a/editor/editor_autoload_settings.cpp
+++ b/editor/editor_autoload_settings.cpp
@@ -117,7 +117,7 @@ bool EditorAutoloadSettings::_autoload_name_is_valid(const String &p_name, Strin
for (const String &E : keywords) {
if (E == p_name) {
if (r_error) {
- *r_error = TTR("Invalid name.") + " " + TTR("Keyword cannot be used as an autoload name.");
+ *r_error = TTR("Invalid name.") + " " + TTR("Keyword cannot be used as an AutoLoad name.");
}
return false;
@@ -373,13 +373,13 @@ Node *EditorAutoloadSettings::_create_autoload(const String &p_path) {
Object *obj = ClassDB::instantiate(ibt);
- ERR_FAIL_COND_V_MSG(obj == nullptr, nullptr, "Cannot instance script for autoload, expected 'Node' inheritance, got: " + String(ibt) + ".");
+ ERR_FAIL_COND_V_MSG(obj == nullptr, nullptr, "Cannot instance script for AutoLoad, expected 'Node' inheritance, got: " + String(ibt) + ".");
n = Object::cast_to<Node>(obj);
n->set_script(s);
}
- ERR_FAIL_COND_V_MSG(!n, nullptr, "Path in autoload not a node or script: " + p_path + ".");
+ ERR_FAIL_COND_V_MSG(!n, nullptr, "Path in AutoLoad not a node or script: " + p_path + ".");
return n;
}
@@ -692,18 +692,18 @@ bool EditorAutoloadSettings::autoload_add(const String &p_name, const String &p_
String error;
if (!_autoload_name_is_valid(name, &error)) {
- EditorNode::get_singleton()->show_warning(TTR("Can't add autoload:") + "\n" + error);
+ EditorNode::get_singleton()->show_warning(TTR("Can't add AutoLoad:") + "\n" + error);
return false;
}
const String &path = p_path;
if (!FileAccess::exists(path)) {
- EditorNode::get_singleton()->show_warning(TTR("Can't add autoload:") + "\n" + vformat(TTR("%s is an invalid path. File does not exist."), path));
+ EditorNode::get_singleton()->show_warning(TTR("Can't add AutoLoad:") + "\n" + vformat(TTR("%s is an invalid path. File does not exist."), path));
return false;
}
if (!path.begins_with("res://")) {
- EditorNode::get_singleton()->show_warning(TTR("Can't add autoload:") + "\n" + vformat(TTR("%s is an invalid path. Not in resource path (res://)."), path));
+ EditorNode::get_singleton()->show_warning(TTR("Can't add AutoLoad:") + "\n" + vformat(TTR("%s is an invalid path. Not in resource path (res://)."), path));
return false;
}
diff --git a/editor/editor_export.cpp b/editor/editor_export.cpp
index d1dfc61c19..e78ca7cd64 100644
--- a/editor/editor_export.cpp
+++ b/editor/editor_export.cpp
@@ -82,7 +82,7 @@ bool EditorExportPreset::_get(const StringName &p_name, Variant &r_ret) const {
void EditorExportPreset::_get_property_list(List<PropertyInfo> *p_list) const {
for (const PropertyInfo &E : properties) {
- if (platform->get_option_visibility(E.name, values)) {
+ if (platform->get_export_option_visibility(E.name, values)) {
p_list->push_back(E);
}
}
diff --git a/editor/editor_export.h b/editor/editor_export.h
index b681f52330..1a5b8e6026 100644
--- a/editor/editor_export.h
+++ b/editor/editor_export.h
@@ -240,7 +240,7 @@ public:
virtual void get_export_options(List<ExportOption> *r_options) = 0;
virtual bool should_update_export_options() { return false; }
- virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const { return true; }
+ virtual bool get_export_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const { return true; }
virtual String get_os_name() const = 0;
virtual String get_name() const = 0;
diff --git a/editor/editor_file_dialog.cpp b/editor/editor_file_dialog.cpp
index 021ab8b93b..2d7c31b64c 100644
--- a/editor/editor_file_dialog.cpp
+++ b/editor/editor_file_dialog.cpp
@@ -576,7 +576,7 @@ void EditorFileDialog::_item_dc_selected(int p_item) {
void EditorFileDialog::_item_list_item_rmb_selected(int p_item, const Vector2 &p_pos) {
// Right click on specific file(s) or folder(s).
item_menu->clear();
- item_menu->set_size(Size2(1, 1));
+ item_menu->reset_size();
// Allow specific actions only on one item.
bool single_item_selected = item_list->get_selected_items().size() == 1;
@@ -620,7 +620,7 @@ void EditorFileDialog::_item_list_rmb_clicked(const Vector2 &p_pos) {
}
item_menu->clear();
- item_menu->set_size(Size2(1, 1));
+ item_menu->reset_size();
if (can_create_dir) {
item_menu->add_icon_item(item_list->get_theme_icon(SNAME("folder"), SNAME("FileDialog")), TTR("New Folder..."), ITEM_MENU_NEW_FOLDER, KeyModifierMask::CMD | Key::N);
@@ -1117,7 +1117,7 @@ void EditorFileDialog::_delete_items() {
}
}
if (folders.size() + files.size() > 0) {
- remove_dialog->set_size(Size2(1, 1));
+ remove_dialog->reset_size();
remove_dialog->show(folders, files);
}
}
diff --git a/editor/editor_file_system.cpp b/editor/editor_file_system.cpp
index 3d6b523733..d141447044 100644
--- a/editor/editor_file_system.cpp
+++ b/editor/editor_file_system.cpp
@@ -1633,7 +1633,7 @@ Error EditorFileSystem::_reimport_group(const String &p_group_file, const Vector
Ref<ResourceImporter> importer = ResourceFormatImporter::get_singleton()->get_importer_by_name(importer_name);
ERR_FAIL_COND_V(!importer.is_valid(), ERR_FILE_CORRUPT);
List<ResourceImporter::ImportOption> options;
- importer->get_import_options(&options);
+ importer->get_import_options(p_files[i], &options);
//set default values
for (const ResourceImporter::ImportOption &E : options) {
source_file_options[p_files[i]][E.option.name] = E.default_value;
@@ -1714,7 +1714,7 @@ Error EditorFileSystem::_reimport_group(const String &p_group_file, const Vector
//store options in provided order, to avoid file changing. Order is also important because first match is accepted first.
List<ResourceImporter::ImportOption> options;
- importer->get_import_options(&options);
+ importer->get_import_options(file, &options);
//set default values
for (const ResourceImporter::ImportOption &F : options) {
String base = F.option.name;
@@ -1851,7 +1851,7 @@ void EditorFileSystem::_reimport_file(const String &p_file, const Map<StringName
//mix with default params, in case a parameter is missing
List<ResourceImporter::ImportOption> opts;
- importer->get_import_options(&opts);
+ importer->get_import_options(p_file, &opts);
for (const ResourceImporter::ImportOption &E : opts) {
if (!params.has(E.option.name)) { //this one is not present
params[E.option.name] = E.default_value;
diff --git a/editor/editor_help.cpp b/editor/editor_help.cpp
index 192f7fc598..f520877256 100644
--- a/editor/editor_help.cpp
+++ b/editor/editor_help.cpp
@@ -33,13 +33,14 @@
#include "core/core_constants.h"
#include "core/input/input.h"
#include "core/os/keyboard.h"
+#include "core/version_generated.gen.h"
#include "doc_data_compressed.gen.h"
#include "editor/plugins/script_editor_plugin.h"
#include "editor_node.h"
#include "editor_scale.h"
#include "editor_settings.h"
-#define CONTRIBUTE_URL "https://docs.godotengine.org/en/latest/community/contributing/updating_the_class_reference.html"
+#define CONTRIBUTE_URL vformat("%s/community/contributing/updating_the_class_reference.html", VERSION_DOCS_URL)
DocTools *EditorHelp::doc = nullptr;
@@ -108,6 +109,9 @@ void EditorHelp::_class_desc_select(const String &p_select) {
} else if (tag == "constant") {
topic = "class_constant";
table = &this->constant_line;
+ } else if (tag == "theme_item") {
+ topic = "theme_item";
+ table = &this->theme_property_line;
} else {
return;
}
@@ -1537,7 +1541,7 @@ static void _add_text_to_rt(const String &p_bbcode, RichTextLabel *p_rt) {
p_rt->add_text("[");
pos = brk_pos + 1;
- } else if (tag.begins_with("method ") || tag.begins_with("member ") || tag.begins_with("signal ") || tag.begins_with("enum ") || tag.begins_with("constant ")) {
+ } else if (tag.begins_with("method ") || tag.begins_with("member ") || tag.begins_with("signal ") || tag.begins_with("enum ") || tag.begins_with("constant ") || tag.begins_with("theme_item ")) {
int tag_end = tag.find(" ");
String link_tag = tag.substr(0, tag_end);
diff --git a/editor/editor_inspector.cpp b/editor/editor_inspector.cpp
index 07e505adb4..2729b1eb3b 100644
--- a/editor/editor_inspector.cpp
+++ b/editor/editor_inspector.cpp
@@ -650,7 +650,7 @@ void EditorProperty::gui_input(const Ref<InputEvent> &p_event) {
} else if (mb.is_valid() && mb->is_pressed() && mb->get_button_index() == MouseButton::RIGHT) {
_update_popup();
menu->set_position(get_screen_position() + get_local_mouse_position());
- menu->set_size(Vector2(1, 1));
+ menu->reset_size();
menu->popup();
select();
return;
@@ -1556,7 +1556,7 @@ void EditorInspectorArray::_panel_gui_input(Ref<InputEvent> p_event, int p_index
rmb_popup->set_item_disabled(OPTION_MOVE_UP, popup_array_index_pressed == 0);
rmb_popup->set_item_disabled(OPTION_MOVE_DOWN, popup_array_index_pressed == count - 1);
rmb_popup->set_position(mb->get_global_position());
- rmb_popup->set_size(Vector2());
+ rmb_popup->reset_size();
rmb_popup->popup();
}
}
diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp
index 5dd75034e2..6a9d47bcc5 100644
--- a/editor/editor_node.cpp
+++ b/editor/editor_node.cpp
@@ -621,6 +621,19 @@ void EditorNode::_notification(int p_what) {
} break;
case NOTIFICATION_READY: {
+ {
+ _initializing_addons = true;
+ Vector<String> addons;
+ if (ProjectSettings::get_singleton()->has_setting("editor_plugins/enabled")) {
+ addons = ProjectSettings::get_singleton()->get("editor_plugins/enabled");
+ }
+
+ for (int i = 0; i < addons.size(); i++) {
+ set_addon_plugin_enabled(addons[i], true);
+ }
+ _initializing_addons = false;
+ }
+
RenderingServer::get_singleton()->viewport_set_disable_2d(get_scene_root()->get_viewport_rid(), true);
RenderingServer::get_singleton()->viewport_set_disable_environment(get_viewport()->get_viewport_rid(), true);
@@ -994,18 +1007,6 @@ void EditorNode::_sources_changed(bool p_exist) {
load_scene(defer_load_scene);
defer_load_scene = "";
}
-
- // Only enable addons once resources have been imported
- _initializing_addons = true;
- Vector<String> addons;
- if (ProjectSettings::get_singleton()->has_setting("editor_plugins/enabled")) {
- addons = ProjectSettings::get_singleton()->get("editor_plugins/enabled");
- }
-
- for (int i = 0; i < addons.size(); i++) {
- set_addon_plugin_enabled(addons[i], true);
- }
- _initializing_addons = false;
}
}
@@ -4902,7 +4903,7 @@ void EditorNode::_update_layouts_menu() {
editor_layouts->clear();
overridden_default_layout = -1;
- editor_layouts->set_size(Vector2());
+ editor_layouts->reset_size();
editor_layouts->add_shortcut(ED_SHORTCUT("layout/save", TTR("Save Layout")), SETTINGS_LAYOUT_SAVE);
editor_layouts->add_shortcut(ED_SHORTCUT("layout/delete", TTR("Delete Layout")), SETTINGS_LAYOUT_DELETE);
editor_layouts->add_separator();
@@ -5029,7 +5030,7 @@ void EditorNode::_scene_tab_input(const Ref<InputEvent> &p_input) {
if (mb->get_button_index() == MouseButton::RIGHT && mb->is_pressed()) {
// context menu
scene_tabs_context_menu->clear();
- scene_tabs_context_menu->set_size(Size2(1, 1));
+ scene_tabs_context_menu->reset_size();
scene_tabs_context_menu->add_shortcut(ED_GET_SHORTCUT("editor/new_scene"), FILE_NEW_SCENE);
if (scene_tabs->get_hovered_tab() >= 0) {
@@ -6843,7 +6844,7 @@ EditorNode::EditorNode() {
gui_base->add_child(custom_build_manage_templates);
file_android_build_source = memnew(EditorFileDialog);
- file_android_build_source->set_title(TTR("Select android sources file"));
+ file_android_build_source->set_title(TTR("Select Android sources file"));
file_android_build_source->set_access(EditorFileDialog::ACCESS_FILESYSTEM);
file_android_build_source->set_file_mode(EditorFileDialog::FILE_MODE_OPEN_FILE);
file_android_build_source->add_filter("*.zip");
@@ -6881,10 +6882,12 @@ EditorNode::EditorNode() {
file_export_lib->connect("file_selected", callable_mp(this, &EditorNode::_dialog_action));
file_export_lib_merge = memnew(CheckBox);
file_export_lib_merge->set_text(TTR("Merge With Existing"));
+ file_export_lib_merge->set_h_size_flags(Control::SIZE_SHRINK_CENTER);
file_export_lib_merge->set_pressed(true);
file_export_lib->get_vbox()->add_child(file_export_lib_merge);
file_export_lib_apply_xforms = memnew(CheckBox);
file_export_lib_apply_xforms->set_text(TTR("Apply MeshInstance Transforms"));
+ file_export_lib_apply_xforms->set_h_size_flags(Control::SIZE_SHRINK_CENTER);
file_export_lib_apply_xforms->set_pressed(false);
file_export_lib->get_vbox()->add_child(file_export_lib_apply_xforms);
gui_base->add_child(file_export_lib);
diff --git a/editor/editor_spin_slider.cpp b/editor/editor_spin_slider.cpp
index 2942ece409..f07a5ab523 100644
--- a/editor/editor_spin_slider.cpp
+++ b/editor/editor_spin_slider.cpp
@@ -409,7 +409,7 @@ void EditorSpinSlider::_draw_spin_slider() {
Vector2 scale = get_global_transform_with_canvas().get_scale();
grabber->set_scale(scale);
- grabber->set_size(Size2(0, 0));
+ grabber->reset_size();
grabber->set_position(get_global_position() + (grabber_rect.get_center() - grabber->get_size() * 0.5) * scale);
if (mousewheel_over_grabber) {
diff --git a/editor/filesystem_dock.cpp b/editor/filesystem_dock.cpp
index 1dde157527..7ae3dcd44f 100644
--- a/editor/filesystem_dock.cpp
+++ b/editor/filesystem_dock.cpp
@@ -2507,7 +2507,7 @@ void FileSystemDock::_tree_rmb_select(const Vector2 &p_pos) {
// Popup.
if (!paths.is_empty()) {
- tree_popup->set_size(Size2(1, 1));
+ tree_popup->reset_size();
_file_and_folders_fill_popup(tree_popup, paths);
tree_popup->set_position(tree->get_screen_position() + p_pos);
tree_popup->popup();
@@ -2518,7 +2518,7 @@ void FileSystemDock::_tree_rmb_empty(const Vector2 &p_pos) {
// Right click is pressed in the empty space of the tree.
path = "res://";
tree_popup->clear();
- tree_popup->set_size(Size2(1, 1));
+ tree_popup->reset_size();
tree_popup->add_icon_item(get_theme_icon(SNAME("Folder"), SNAME("EditorIcons")), TTR("New Folder..."), FILE_NEW_FOLDER);
tree_popup->add_icon_item(get_theme_icon(SNAME("PackedScene"), SNAME("EditorIcons")), TTR("New Scene..."), FILE_NEW_SCENE);
tree_popup->add_icon_item(get_theme_icon(SNAME("Script"), SNAME("EditorIcons")), TTR("New Script..."), FILE_NEW_SCRIPT);
@@ -2549,7 +2549,7 @@ void FileSystemDock::_file_list_rmb_select(int p_item, const Vector2 &p_pos) {
// Popup.
if (!paths.is_empty()) {
file_list_popup->clear();
- file_list_popup->set_size(Size2(1, 1));
+ file_list_popup->reset_size();
_file_and_folders_fill_popup(file_list_popup, paths, searched_string.length() == 0);
file_list_popup->set_position(files->get_global_position() + p_pos);
file_list_popup->popup();
@@ -2563,7 +2563,7 @@ void FileSystemDock::_file_list_rmb_pressed(const Vector2 &p_pos) {
}
file_list_popup->clear();
- file_list_popup->set_size(Size2(1, 1));
+ file_list_popup->reset_size();
file_list_popup->add_icon_item(get_theme_icon(SNAME("Folder"), SNAME("EditorIcons")), TTR("New Folder..."), FILE_NEW_FOLDER);
file_list_popup->add_icon_item(get_theme_icon(SNAME("PackedScene"), SNAME("EditorIcons")), TTR("New Scene..."), FILE_NEW_SCENE);
diff --git a/editor/icons/KeyEasedSelected.svg b/editor/icons/KeyEasedSelected.svg
new file mode 100644
index 0000000000..c06d94c553
--- /dev/null
+++ b/editor/icons/KeyEasedSelected.svg
@@ -0,0 +1 @@
+<svg height="10" viewBox="0 0 10 10" width="10" xmlns="http://www.w3.org/2000/svg"><rect fill="#5fb2ff" height="9.999999" rx=".948002" stroke-width="1.2427" width="9.999999" x=".000001" y=".000035"/><rect fill="#003e7a" height="5.628136" rx=".533549" stroke-width=".699406" transform="matrix(.99989481 .01450427 .01450427 .99989481 0 0)" width="5.628136" x="2.115027" y="2.114924"/></svg>
diff --git a/editor/icons/KeyValueEased.svg b/editor/icons/KeyValueEased.svg
new file mode 100644
index 0000000000..4e4a33c006
--- /dev/null
+++ b/editor/icons/KeyValueEased.svg
@@ -0,0 +1 @@
+<svg height="10" viewBox="0 0 10 10" width="10" xmlns="http://www.w3.org/2000/svg"><rect fill="#e0e0e0" height="8.000001" rx="1.000032" ry="1.00003" stroke-width="1.3109" transform="rotate(-90)" width="8.000016" x="-9.000016" y=".999999"/></svg>
diff --git a/editor/import/dynamicfont_import_settings.cpp b/editor/import/dynamicfont_import_settings.cpp
index 474c9d5296..45937e20bc 100644
--- a/editor/import/dynamicfont_import_settings.cpp
+++ b/editor/import/dynamicfont_import_settings.cpp
@@ -1160,7 +1160,7 @@ void DynamicFontImportSettings::_range_update(int32_t p_start, int32_t p_end) {
void DynamicFontImportSettings::_lang_add() {
menu_langs->set_position(lang_list->get_screen_transform().xform(lang_list->get_local_mouse_position()));
- menu_langs->set_size(Vector2(1, 1));
+ menu_langs->reset_size();
menu_langs->popup();
}
@@ -1187,7 +1187,7 @@ void DynamicFontImportSettings::_lang_remove(Object *p_item, int p_column, int p
void DynamicFontImportSettings::_script_add() {
menu_scripts->set_position(script_list->get_screen_transform().xform(script_list->get_local_mouse_position()));
- menu_scripts->set_size(Vector2(1, 1));
+ menu_scripts->reset_size();
menu_scripts->popup();
}
diff --git a/editor/import/editor_import_plugin.cpp b/editor/import/editor_import_plugin.cpp
index 2c1d2149c6..1a002569c5 100644
--- a/editor/import/editor_import_plugin.cpp
+++ b/editor/import/editor_import_plugin.cpp
@@ -110,12 +110,12 @@ int EditorImportPlugin::get_import_order() const {
ERR_FAIL_V_MSG(-1, "Unimplemented _get_import_order in add-on.");
}
-void EditorImportPlugin::get_import_options(List<ResourceImporter::ImportOption> *r_options, int p_preset) const {
+void EditorImportPlugin::get_import_options(const String &p_path, List<ResourceImporter::ImportOption> *r_options, int p_preset) const {
Array needed;
needed.push_back("name");
needed.push_back("default_value");
Array options;
- if (GDVIRTUAL_CALL(_get_import_options, p_preset, options)) {
+ if (GDVIRTUAL_CALL(_get_import_options, p_path, p_preset, options)) {
for (int i = 0; i < options.size(); i++) {
Dictionary d = options[i];
ERR_FAIL_COND(!d.has_all(needed));
@@ -146,7 +146,7 @@ void EditorImportPlugin::get_import_options(List<ResourceImporter::ImportOption>
ERR_FAIL_MSG("Unimplemented _get_import_options in add-on.");
}
-bool EditorImportPlugin::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
+bool EditorImportPlugin::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const {
Dictionary d;
Map<StringName, Variant>::Element *E = p_options.front();
while (E) {
@@ -154,7 +154,7 @@ bool EditorImportPlugin::get_option_visibility(const String &p_option, const Map
E = E->next();
}
bool visible;
- if (GDVIRTUAL_CALL(_get_option_visibility, p_option, d, visible)) {
+ if (GDVIRTUAL_CALL(_get_option_visibility, p_path, p_option, d, visible)) {
return visible;
}
@@ -192,11 +192,11 @@ void EditorImportPlugin::_bind_methods() {
GDVIRTUAL_BIND(_get_preset_count)
GDVIRTUAL_BIND(_get_preset_name, "preset_index")
GDVIRTUAL_BIND(_get_recognized_extensions)
- GDVIRTUAL_BIND(_get_import_options, "preset_index")
+ GDVIRTUAL_BIND(_get_import_options, "path", "preset_index")
GDVIRTUAL_BIND(_get_save_extension)
GDVIRTUAL_BIND(_get_resource_type)
GDVIRTUAL_BIND(_get_priority)
GDVIRTUAL_BIND(_get_import_order)
- GDVIRTUAL_BIND(_get_option_visibility, "option_name", "options")
+ GDVIRTUAL_BIND(_get_option_visibility, "path", "option_name", "options")
GDVIRTUAL_BIND(_import, "source_file", "save_path", "options", "platform_variants", "gen_files");
}
diff --git a/editor/import/editor_import_plugin.h b/editor/import/editor_import_plugin.h
index 49c959ab44..6c5f4f6005 100644
--- a/editor/import/editor_import_plugin.h
+++ b/editor/import/editor_import_plugin.h
@@ -44,12 +44,12 @@ protected:
GDVIRTUAL0RC(int, _get_preset_count)
GDVIRTUAL1RC(String, _get_preset_name, int)
GDVIRTUAL0RC(Vector<String>, _get_recognized_extensions)
- GDVIRTUAL1RC(Array, _get_import_options, int)
+ GDVIRTUAL2RC(Array, _get_import_options, String, int)
GDVIRTUAL0RC(String, _get_save_extension)
GDVIRTUAL0RC(String, _get_resource_type)
GDVIRTUAL0RC(float, _get_priority)
GDVIRTUAL0RC(int, _get_import_order)
- GDVIRTUAL2RC(bool, _get_option_visibility, StringName, Dictionary)
+ GDVIRTUAL3RC(bool, _get_option_visibility, String, StringName, Dictionary)
GDVIRTUAL5RC(int, _import, String, String, Dictionary, Array, Array)
public:
@@ -63,8 +63,8 @@ public:
virtual String get_resource_type() const override;
virtual float get_priority() const override;
virtual int get_import_order() const override;
- virtual void get_import_options(List<ImportOption> *r_options, int p_preset) const override;
- virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override;
+ virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const override;
+ virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override;
virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files, Variant *r_metadata = nullptr) override;
};
diff --git a/editor/import/resource_importer_bitmask.cpp b/editor/import/resource_importer_bitmask.cpp
index 7fd9230284..c43052593d 100644
--- a/editor/import/resource_importer_bitmask.cpp
+++ b/editor/import/resource_importer_bitmask.cpp
@@ -57,7 +57,7 @@ String ResourceImporterBitMap::get_resource_type() const {
return "BitMap";
}
-bool ResourceImporterBitMap::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
+bool ResourceImporterBitMap::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const {
return true;
}
@@ -69,7 +69,7 @@ String ResourceImporterBitMap::get_preset_name(int p_idx) const {
return String();
}
-void ResourceImporterBitMap::get_import_options(List<ImportOption> *r_options, int p_preset) const {
+void ResourceImporterBitMap::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const {
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "create_from", PROPERTY_HINT_ENUM, "Black & White,Alpha"), 0));
r_options->push_back(ImportOption(PropertyInfo(Variant::FLOAT, "threshold", PROPERTY_HINT_RANGE, "0,1,0.01"), 0.5));
}
diff --git a/editor/import/resource_importer_bitmask.h b/editor/import/resource_importer_bitmask.h
index d68693c54a..f3da5f9a31 100644
--- a/editor/import/resource_importer_bitmask.h
+++ b/editor/import/resource_importer_bitmask.h
@@ -49,8 +49,8 @@ public:
virtual int get_preset_count() const override;
virtual String get_preset_name(int p_idx) const override;
- virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override;
- virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override;
+ virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override;
+ virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override;
virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
ResourceImporterBitMap();
diff --git a/editor/import/resource_importer_bmfont.cpp b/editor/import/resource_importer_bmfont.cpp
index a64be54f2d..f54065416e 100644
--- a/editor/import/resource_importer_bmfont.cpp
+++ b/editor/import/resource_importer_bmfont.cpp
@@ -56,11 +56,11 @@ String ResourceImporterBMFont::get_resource_type() const {
return "FontData";
}
-bool ResourceImporterBMFont::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
+bool ResourceImporterBMFont::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const {
return true;
}
-void ResourceImporterBMFont::get_import_options(List<ImportOption> *r_options, int p_preset) const {
+void ResourceImporterBMFont::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const {
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "compress"), true));
}
diff --git a/editor/import/resource_importer_bmfont.h b/editor/import/resource_importer_bmfont.h
index 065703132a..64d536535c 100644
--- a/editor/import/resource_importer_bmfont.h
+++ b/editor/import/resource_importer_bmfont.h
@@ -45,8 +45,8 @@ public:
virtual String get_save_extension() const override;
virtual String get_resource_type() const override;
- virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override;
- virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override;
+ virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override;
+ virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override;
virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
diff --git a/editor/import/resource_importer_csv_translation.cpp b/editor/import/resource_importer_csv_translation.cpp
index 07647d8b6a..7948d9e577 100644
--- a/editor/import/resource_importer_csv_translation.cpp
+++ b/editor/import/resource_importer_csv_translation.cpp
@@ -55,7 +55,7 @@ String ResourceImporterCSVTranslation::get_resource_type() const {
return "Translation";
}
-bool ResourceImporterCSVTranslation::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
+bool ResourceImporterCSVTranslation::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const {
return true;
}
@@ -67,7 +67,7 @@ String ResourceImporterCSVTranslation::get_preset_name(int p_idx) const {
return "";
}
-void ResourceImporterCSVTranslation::get_import_options(List<ImportOption> *r_options, int p_preset) const {
+void ResourceImporterCSVTranslation::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const {
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "compress"), true));
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "delimiter", PROPERTY_HINT_ENUM, "Comma,Semicolon,Tab"), 0));
}
diff --git a/editor/import/resource_importer_csv_translation.h b/editor/import/resource_importer_csv_translation.h
index d53e91e38b..de7ba3e3a0 100644
--- a/editor/import/resource_importer_csv_translation.h
+++ b/editor/import/resource_importer_csv_translation.h
@@ -46,8 +46,8 @@ public:
virtual int get_preset_count() const override;
virtual String get_preset_name(int p_idx) const override;
- virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override;
- virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override;
+ virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override;
+ virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override;
virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
diff --git a/editor/import/resource_importer_dynamicfont.cpp b/editor/import/resource_importer_dynamicfont.cpp
index a021275917..f7363a565d 100644
--- a/editor/import/resource_importer_dynamicfont.cpp
+++ b/editor/import/resource_importer_dynamicfont.cpp
@@ -66,7 +66,7 @@ String ResourceImporterDynamicFont::get_resource_type() const {
return "FontData";
}
-bool ResourceImporterDynamicFont::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
+bool ResourceImporterDynamicFont::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const {
if (p_option == "msdf_pixel_range" && !bool(p_options["multichannel_signed_distance_field"])) {
return false;
}
@@ -94,7 +94,7 @@ String ResourceImporterDynamicFont::get_preset_name(int p_idx) const {
}
}
-void ResourceImporterDynamicFont::get_import_options(List<ImportOption> *r_options, int p_preset) const {
+void ResourceImporterDynamicFont::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const {
bool msdf = p_preset == PRESET_MSDF;
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "antialiased"), true));
diff --git a/editor/import/resource_importer_dynamicfont.h b/editor/import/resource_importer_dynamicfont.h
index 52f256ab96..cb5294b9dd 100644
--- a/editor/import/resource_importer_dynamicfont.h
+++ b/editor/import/resource_importer_dynamicfont.h
@@ -57,8 +57,8 @@ public:
virtual int get_preset_count() const override;
virtual String get_preset_name(int p_idx) const override;
- virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override;
- virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override;
+ virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override;
+ virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override;
bool has_advanced_options() const override;
void show_advanced_options(const String &p_path) override;
diff --git a/editor/import/resource_importer_image.cpp b/editor/import/resource_importer_image.cpp
index 2dea359188..45cb5e2f9d 100644
--- a/editor/import/resource_importer_image.cpp
+++ b/editor/import/resource_importer_image.cpp
@@ -55,7 +55,7 @@ String ResourceImporterImage::get_resource_type() const {
return "Image";
}
-bool ResourceImporterImage::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
+bool ResourceImporterImage::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const {
return true;
}
@@ -67,7 +67,7 @@ String ResourceImporterImage::get_preset_name(int p_idx) const {
return String();
}
-void ResourceImporterImage::get_import_options(List<ImportOption> *r_options, int p_preset) const {
+void ResourceImporterImage::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const {
}
Error ResourceImporterImage::import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files, Variant *r_metadata) {
diff --git a/editor/import/resource_importer_image.h b/editor/import/resource_importer_image.h
index 7c8d5e228e..b7131ec850 100644
--- a/editor/import/resource_importer_image.h
+++ b/editor/import/resource_importer_image.h
@@ -47,8 +47,8 @@ public:
virtual int get_preset_count() const override;
virtual String get_preset_name(int p_idx) const override;
- virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override;
- virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override;
+ virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override;
+ virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override;
virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
diff --git a/editor/import/resource_importer_imagefont.cpp b/editor/import/resource_importer_imagefont.cpp
index 997280d1dd..04a68e4a53 100644
--- a/editor/import/resource_importer_imagefont.cpp
+++ b/editor/import/resource_importer_imagefont.cpp
@@ -55,11 +55,11 @@ String ResourceImporterImageFont::get_resource_type() const {
return "FontData";
}
-bool ResourceImporterImageFont::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
+bool ResourceImporterImageFont::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const {
return true;
}
-void ResourceImporterImageFont::get_import_options(List<ImportOption> *r_options, int p_preset) const {
+void ResourceImporterImageFont::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const {
r_options->push_back(ImportOption(PropertyInfo(Variant::PACKED_STRING_ARRAY, "character_ranges"), Vector<String>()));
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "columns"), 1));
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "rows"), 1));
diff --git a/editor/import/resource_importer_imagefont.h b/editor/import/resource_importer_imagefont.h
index 9b2b38596f..d600c35e1c 100644
--- a/editor/import/resource_importer_imagefont.h
+++ b/editor/import/resource_importer_imagefont.h
@@ -47,8 +47,8 @@ public:
virtual String get_save_extension() const override;
virtual String get_resource_type() const override;
- virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override;
- virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override;
+ virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override;
+ virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override;
virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
diff --git a/editor/import/resource_importer_layered_texture.cpp b/editor/import/resource_importer_layered_texture.cpp
index d5bb21443c..89c62ab5cb 100644
--- a/editor/import/resource_importer_layered_texture.cpp
+++ b/editor/import/resource_importer_layered_texture.cpp
@@ -118,7 +118,7 @@ String ResourceImporterLayeredTexture::get_resource_type() const {
ERR_FAIL_V(String());
}
-bool ResourceImporterLayeredTexture::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
+bool ResourceImporterLayeredTexture::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const {
if (p_option == "compress/lossy_quality" && p_options.has("compress/mode")) {
return int(p_options["compress/mode"]) == COMPRESS_LOSSY;
}
@@ -133,7 +133,7 @@ String ResourceImporterLayeredTexture::get_preset_name(int p_idx) const {
return "";
}
-void ResourceImporterLayeredTexture::get_import_options(List<ImportOption> *r_options, int p_preset) const {
+void ResourceImporterLayeredTexture::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const {
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "compress/mode", PROPERTY_HINT_ENUM, "Lossless (PNG),Lossy (WebP),Video RAM (S3TC/ETC/BPTC),Uncompressed,Basis Universal", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), 1));
r_options->push_back(ImportOption(PropertyInfo(Variant::FLOAT, "compress/lossy_quality", PROPERTY_HINT_RANGE, "0,1,0.01"), 0.7));
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "compress/hdr_compression", PROPERTY_HINT_ENUM, "Disabled,Opaque Only,Always"), 1));
diff --git a/editor/import/resource_importer_layered_texture.h b/editor/import/resource_importer_layered_texture.h
index 7d8fb3cac5..29dfe7263a 100644
--- a/editor/import/resource_importer_layered_texture.h
+++ b/editor/import/resource_importer_layered_texture.h
@@ -84,8 +84,8 @@ public:
virtual int get_preset_count() const override;
virtual String get_preset_name(int p_idx) const override;
- virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override;
- virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override;
+ virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override;
+ virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override;
void _save_tex(Vector<Ref<Image>> p_images, const String &p_to_path, int p_compress_mode, float p_lossy, Image::CompressMode p_vram_compression, Image::CompressSource p_csource, Image::UsedChannels used_channels, bool p_mipmaps, bool p_force_po2);
diff --git a/editor/import/resource_importer_obj.cpp b/editor/import/resource_importer_obj.cpp
index 8eab27b533..bb68de99b1 100644
--- a/editor/import/resource_importer_obj.cpp
+++ b/editor/import/resource_importer_obj.cpp
@@ -504,14 +504,14 @@ String ResourceImporterOBJ::get_preset_name(int p_idx) const {
return "";
}
-void ResourceImporterOBJ::get_import_options(List<ImportOption> *r_options, int p_preset) const {
+void ResourceImporterOBJ::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const {
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "generate_tangents"), true));
r_options->push_back(ImportOption(PropertyInfo(Variant::VECTOR3, "scale_mesh"), Vector3(1, 1, 1)));
r_options->push_back(ImportOption(PropertyInfo(Variant::VECTOR3, "offset_mesh"), Vector3(0, 0, 0)));
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "optimize_mesh"), true));
}
-bool ResourceImporterOBJ::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
+bool ResourceImporterOBJ::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const {
return true;
}
diff --git a/editor/import/resource_importer_obj.h b/editor/import/resource_importer_obj.h
index d9f2f79903..c3e46b6eb5 100644
--- a/editor/import/resource_importer_obj.h
+++ b/editor/import/resource_importer_obj.h
@@ -59,8 +59,8 @@ public:
virtual int get_preset_count() const override;
virtual String get_preset_name(int p_idx) const override;
- virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override;
- virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override;
+ virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override;
+ virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override;
virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
diff --git a/editor/import/resource_importer_scene.cpp b/editor/import/resource_importer_scene.cpp
index 9aaffe8abf..a25b694a60 100644
--- a/editor/import/resource_importer_scene.cpp
+++ b/editor/import/resource_importer_scene.cpp
@@ -91,6 +91,16 @@ Ref<Animation> EditorSceneFormatImporter::import_animation(const String &p_path,
ERR_FAIL_V(nullptr);
}
+void EditorSceneFormatImporter::get_import_options(const String &p_path, List<ResourceImporter::ImportOption> *r_options) {
+ GDVIRTUAL_CALL(_get_import_options, p_path);
+}
+
+Variant EditorSceneFormatImporter::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) {
+ Variant ret;
+ GDVIRTUAL_CALL(_get_option_visibility, p_path, p_option, ret);
+ return ret;
+}
+
//for documenters, these functions are useful when an importer calls an external conversion helper (like, fbx2gltf),
//and you want to load the resulting file
@@ -110,6 +120,8 @@ void EditorSceneFormatImporter::_bind_methods() {
GDVIRTUAL_BIND(_get_extensions);
GDVIRTUAL_BIND(_import_scene, "path", "flags", "bake_fps");
GDVIRTUAL_BIND(_import_animation, "path", "flags", "bake_fps");
+ GDVIRTUAL_BIND(_get_import_options, "path");
+ GDVIRTUAL_BIND(_get_option_visibility, "path", "option");
BIND_CONSTANT(IMPORT_SCENE);
BIND_CONSTANT(IMPORT_ANIMATION);
@@ -193,15 +205,15 @@ void EditorScenePostImportPlugin::internal_process(InternalImportCategory p_cate
current_options_dict = nullptr;
}
-void EditorScenePostImportPlugin::get_import_options(List<ResourceImporter::ImportOption> *r_options) {
+void EditorScenePostImportPlugin::get_import_options(const String &p_path, List<ResourceImporter::ImportOption> *r_options) {
current_option_list = r_options;
- GDVIRTUAL_CALL(_get_import_options);
+ GDVIRTUAL_CALL(_get_import_options, p_path);
current_option_list = nullptr;
}
-Variant EditorScenePostImportPlugin::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
+Variant EditorScenePostImportPlugin::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const {
current_options = &p_options;
Variant ret;
- GDVIRTUAL_CALL(_get_option_visibility, p_option, ret);
+ GDVIRTUAL_CALL(_get_option_visibility, p_path, p_option, ret);
current_options = nullptr;
return ret;
}
@@ -227,8 +239,8 @@ void EditorScenePostImportPlugin::_bind_methods() {
GDVIRTUAL_BIND(_get_internal_option_visibility, "category", "option");
GDVIRTUAL_BIND(_get_internal_option_update_view_required, "category", "option");
GDVIRTUAL_BIND(_internal_process, "category", "base_node", "node", "resource");
- GDVIRTUAL_BIND(_get_import_options);
- GDVIRTUAL_BIND(_get_option_visibility, "option");
+ GDVIRTUAL_BIND(_get_import_options, "path");
+ GDVIRTUAL_BIND(_get_option_visibility, "path", "option");
GDVIRTUAL_BIND(_pre_process, "scene");
GDVIRTUAL_BIND(_post_process, "scene");
@@ -269,7 +281,7 @@ int ResourceImporterScene::get_format_version() const {
return 1;
}
-bool ResourceImporterScene::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
+bool ResourceImporterScene::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const {
if (p_option.begins_with("animation/")) {
if (p_option != "animation/import" && !bool(p_options["animation/import"])) {
return false;
@@ -281,7 +293,14 @@ bool ResourceImporterScene::get_option_visibility(const String &p_option, const
}
for (int i = 0; i < post_importer_plugins.size(); i++) {
- Variant ret = post_importer_plugins.write[i]->get_option_visibility(p_option, p_options);
+ Variant ret = post_importer_plugins.write[i]->get_option_visibility(p_path, p_option, p_options);
+ if (ret.get_type() == Variant::BOOL) {
+ return ret;
+ }
+ }
+
+ for (Ref<EditorSceneFormatImporter> importer : importers) {
+ Variant ret = importer->get_option_visibility(p_path, p_option, p_options);
if (ret.get_type() == Variant::BOOL) {
return ret;
}
@@ -1218,7 +1237,7 @@ void ResourceImporterScene::get_internal_import_options(InternalImportCategory p
r_options->push_back(ImportOption(PropertyInfo(Variant::STRING, "use_external/path", PROPERTY_HINT_FILE, "*.material,*.res,*.tres"), ""));
} break;
case INTERNAL_IMPORT_CATEGORY_ANIMATION: {
- r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "settings/loop_mode"), 0));
+ r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "settings/loop_mode", PROPERTY_HINT_ENUM, "None,Linear,Pingpong"), 0));
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "save_to_file/enabled", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), false));
r_options->push_back(ImportOption(PropertyInfo(Variant::STRING, "save_to_file/path", PROPERTY_HINT_SAVE_FILE, "*.res,*.tres"), ""));
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "save_to_file/keep_custom_tracks"), ""));
@@ -1240,7 +1259,7 @@ void ResourceImporterScene::get_internal_import_options(InternalImportCategory p
r_options->push_back(ImportOption(PropertyInfo(Variant::STRING, "slice_" + itos(i + 1) + "/name"), ""));
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "slice_" + itos(i + 1) + "/start_frame"), 0));
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "slice_" + itos(i + 1) + "/end_frame"), 0));
- r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "slice_" + itos(i + 1) + "/loop_mode"), 0));
+ r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "slice_" + itos(i + 1) + "/loop_mode", PROPERTY_HINT_ENUM, "None,Linear,Pingpong"), 0));
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "slice_" + itos(i + 1) + "/save_to_file/enabled", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), false));
r_options->push_back(ImportOption(PropertyInfo(Variant::STRING, "slice_" + itos(i + 1) + "/save_to_file/path", PROPERTY_HINT_SAVE_FILE, ".res,*.tres"), ""));
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "slice_" + itos(i + 1) + "/save_to_file/keep_custom_tracks"), false));
@@ -1404,7 +1423,7 @@ bool ResourceImporterScene::get_internal_option_update_view_required(InternalImp
return false;
}
-void ResourceImporterScene::get_import_options(List<ImportOption> *r_options, int p_preset) const {
+void ResourceImporterScene::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const {
r_options->push_back(ImportOption(PropertyInfo(Variant::STRING, "nodes/root_type", PROPERTY_HINT_TYPE_STRING, "Node"), "Node3D"));
r_options->push_back(ImportOption(PropertyInfo(Variant::STRING, "nodes/root_name"), "Scene Root"));
@@ -1434,7 +1453,11 @@ void ResourceImporterScene::get_import_options(List<ImportOption> *r_options, in
r_options->push_back(ImportOption(PropertyInfo(Variant::DICTIONARY, "_subresources", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_NO_EDITOR), Dictionary()));
for (int i = 0; i < post_importer_plugins.size(); i++) {
- post_importer_plugins.write[i]->get_import_options(r_options);
+ post_importer_plugins.write[i]->get_import_options(p_path, r_options);
+ }
+
+ for (Ref<EditorSceneFormatImporter> importer : importers) {
+ importer->get_import_options(p_path, r_options);
}
}
diff --git a/editor/import/resource_importer_scene.h b/editor/import/resource_importer_scene.h
index a192921966..5437ecd159 100644
--- a/editor/import/resource_importer_scene.h
+++ b/editor/import/resource_importer_scene.h
@@ -55,6 +55,8 @@ protected:
GDVIRTUAL0RC(Vector<String>, _get_extensions)
GDVIRTUAL3R(Object *, _import_scene, String, uint32_t, uint32_t)
GDVIRTUAL3R(Ref<Animation>, _import_animation, String, uint32_t, uint32_t)
+ GDVIRTUAL1(_get_import_options, String)
+ GDVIRTUAL2RC(Variant, _get_option_visibility, String, String)
public:
enum ImportFlags {
@@ -69,6 +71,8 @@ public:
virtual void get_extensions(List<String> *r_extensions) const;
virtual Node *import_scene(const String &p_path, uint32_t p_flags, int p_bake_fps, List<String> *r_missing_deps, Error *r_err = nullptr);
virtual Ref<Animation> import_animation(const String &p_path, uint32_t p_flags, int p_bake_fps);
+ virtual void get_import_options(const String &p_path, List<ResourceImporter::ImportOption> *r_options);
+ virtual Variant get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options);
EditorSceneFormatImporter() {}
};
@@ -115,8 +119,8 @@ protected:
GDVIRTUAL2RC(Variant, _get_internal_option_visibility, int, String)
GDVIRTUAL2RC(Variant, _get_internal_option_update_view_required, int, String)
GDVIRTUAL4(_internal_process, int, Node *, Node *, RES)
- GDVIRTUAL0(_get_import_options)
- GDVIRTUAL1RC(Variant, _get_option_visibility, String)
+ GDVIRTUAL1(_get_import_options, String)
+ GDVIRTUAL2RC(Variant, _get_option_visibility, String, String)
GDVIRTUAL1(_pre_process, Node *)
GDVIRTUAL1(_post_process, Node *)
@@ -133,8 +137,8 @@ public:
virtual void internal_process(InternalImportCategory p_category, Node *p_base_scene, Node *p_node, RES p_resource, const Dictionary &p_options);
- virtual void get_import_options(List<ResourceImporter::ImportOption> *r_options);
- virtual Variant get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const;
+ virtual void get_import_options(const String &p_path, List<ResourceImporter::ImportOption> *r_options);
+ virtual Variant get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const;
virtual void pre_process(Node *p_scene, const Map<StringName, Variant> &p_options);
virtual void post_process(Node *p_scene, const Map<StringName, Variant> &p_options);
@@ -250,8 +254,8 @@ public:
bool get_internal_option_visibility(InternalImportCategory p_category, const String &p_option, const Map<StringName, Variant> &p_options) const;
bool get_internal_option_update_view_required(InternalImportCategory p_category, const String &p_option, const Map<StringName, Variant> &p_options) const;
- virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override;
- virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override;
+ virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override;
+ virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override;
// Import scenes *after* everything else (such as textures).
virtual int get_import_order() const override { return ResourceImporter::IMPORT_ORDER_SCENE; }
diff --git a/editor/import/resource_importer_shader_file.cpp b/editor/import/resource_importer_shader_file.cpp
index c01d8068da..797e11f5ea 100644
--- a/editor/import/resource_importer_shader_file.cpp
+++ b/editor/import/resource_importer_shader_file.cpp
@@ -65,10 +65,10 @@ String ResourceImporterShaderFile::get_preset_name(int p_idx) const {
return String();
}
-void ResourceImporterShaderFile::get_import_options(List<ImportOption> *r_options, int p_preset) const {
+void ResourceImporterShaderFile::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const {
}
-bool ResourceImporterShaderFile::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
+bool ResourceImporterShaderFile::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const {
return true;
}
diff --git a/editor/import/resource_importer_shader_file.h b/editor/import/resource_importer_shader_file.h
index c421132ec2..3ed489e9fb 100644
--- a/editor/import/resource_importer_shader_file.h
+++ b/editor/import/resource_importer_shader_file.h
@@ -46,8 +46,8 @@ public:
virtual int get_preset_count() const override;
virtual String get_preset_name(int p_idx) const override;
- virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override;
- virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override;
+ virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override;
+ virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override;
virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
diff --git a/editor/import/resource_importer_texture.cpp b/editor/import/resource_importer_texture.cpp
index e4553c625b..b1fa2eda28 100644
--- a/editor/import/resource_importer_texture.cpp
+++ b/editor/import/resource_importer_texture.cpp
@@ -153,7 +153,7 @@ String ResourceImporterTexture::get_resource_type() const {
return "StreamTexture2D";
}
-bool ResourceImporterTexture::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
+bool ResourceImporterTexture::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const {
if (p_option == "compress/lossy_quality") {
int compress_mode = int(p_options["compress/mode"]);
if (compress_mode != COMPRESS_LOSSY && compress_mode != COMPRESS_VRAM_COMPRESSED) {
@@ -194,7 +194,7 @@ String ResourceImporterTexture::get_preset_name(int p_idx) const {
return preset_names[p_idx];
}
-void ResourceImporterTexture::get_import_options(List<ImportOption> *r_options, int p_preset) const {
+void ResourceImporterTexture::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const {
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "compress/mode", PROPERTY_HINT_ENUM, "Lossless,Lossy,VRAM Compressed,VRAM Uncompressed,Basis Universal", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), p_preset == PRESET_3D ? 2 : 0));
r_options->push_back(ImportOption(PropertyInfo(Variant::FLOAT, "compress/lossy_quality", PROPERTY_HINT_RANGE, "0,1,0.01"), 0.7));
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "compress/hdr_compression", PROPERTY_HINT_ENUM, "Disabled,Opaque Only,Always"), 1));
diff --git a/editor/import/resource_importer_texture.h b/editor/import/resource_importer_texture.h
index 41220009cd..cb9d1b08cd 100644
--- a/editor/import/resource_importer_texture.h
+++ b/editor/import/resource_importer_texture.h
@@ -95,8 +95,8 @@ public:
virtual int get_preset_count() const override;
virtual String get_preset_name(int p_idx) const override;
- virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override;
- virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override;
+ virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override;
+ virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override;
virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
diff --git a/editor/import/resource_importer_texture_atlas.cpp b/editor/import/resource_importer_texture_atlas.cpp
index cf699599ae..3fdf5dd9db 100644
--- a/editor/import/resource_importer_texture_atlas.cpp
+++ b/editor/import/resource_importer_texture_atlas.cpp
@@ -59,7 +59,7 @@ String ResourceImporterTextureAtlas::get_resource_type() const {
return "Texture2D";
}
-bool ResourceImporterTextureAtlas::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
+bool ResourceImporterTextureAtlas::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const {
return true;
}
@@ -71,7 +71,7 @@ String ResourceImporterTextureAtlas::get_preset_name(int p_idx) const {
return String();
}
-void ResourceImporterTextureAtlas::get_import_options(List<ImportOption> *r_options, int p_preset) const {
+void ResourceImporterTextureAtlas::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const {
r_options->push_back(ImportOption(PropertyInfo(Variant::STRING, "atlas_file", PROPERTY_HINT_SAVE_FILE, "*.png"), ""));
r_options->push_back(ImportOption(PropertyInfo(Variant::INT, "import_mode", PROPERTY_HINT_ENUM, "Region,Mesh2D"), 0));
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "crop_to_region"), false));
@@ -134,7 +134,7 @@ static void _plot_triangle(Vector2i *vertices, const Vector2i &p_offset, bool p_
int max_y = MIN(y[2], height - p_offset.y - 1);
for (int yi = y[0]; yi < max_y; yi++) {
if (yi >= 0) {
- for (int xi = (xf > 0 ? int(xf) : 0); xi < (xt < width ? xt : width - 1); xi++) {
+ for (int xi = (xf > 0 ? int(xf) : 0); xi < (xt < src_width ? xt : src_width - 1); xi++) {
int px = xi, py = yi;
int sx = px, sy = py;
sx = CLAMP(sx, 0, src_width - 1);
@@ -156,7 +156,7 @@ static void _plot_triangle(Vector2i *vertices, const Vector2i &p_offset, bool p_
p_image->set_pixel(px, py, color);
}
- for (int xi = (xf < width ? int(xf) : width - 1); xi >= (xt > 0 ? xt : 0); xi--) {
+ for (int xi = (xf < src_width ? int(xf) : src_width - 1); xi >= (xt > 0 ? xt : 0); xi--) {
int px = xi, py = yi;
int sx = px, sy = py;
sx = CLAMP(sx, 0, src_width - 1);
diff --git a/editor/import/resource_importer_texture_atlas.h b/editor/import/resource_importer_texture_atlas.h
index d518a120bf..177ef949ac 100644
--- a/editor/import/resource_importer_texture_atlas.h
+++ b/editor/import/resource_importer_texture_atlas.h
@@ -60,8 +60,8 @@ public:
virtual int get_preset_count() const override;
virtual String get_preset_name(int p_idx) const override;
- virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override;
- virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override;
+ virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override;
+ virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override;
virtual String get_option_group_file() const override;
virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
diff --git a/editor/import/resource_importer_wav.cpp b/editor/import/resource_importer_wav.cpp
index 877bdd50fb..820eba951f 100644
--- a/editor/import/resource_importer_wav.cpp
+++ b/editor/import/resource_importer_wav.cpp
@@ -58,7 +58,7 @@ String ResourceImporterWAV::get_resource_type() const {
return "AudioStreamSample";
}
-bool ResourceImporterWAV::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
+bool ResourceImporterWAV::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const {
if (p_option == "force/max_rate_hz" && !bool(p_options["force/max_rate"])) {
return false;
}
@@ -74,7 +74,7 @@ String ResourceImporterWAV::get_preset_name(int p_idx) const {
return String();
}
-void ResourceImporterWAV::get_import_options(List<ImportOption> *r_options, int p_preset) const {
+void ResourceImporterWAV::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const {
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "force/8_bit"), false));
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "force/mono"), false));
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "force/max_rate", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_UPDATE_ALL_IF_MODIFIED), false));
diff --git a/editor/import/resource_importer_wav.h b/editor/import/resource_importer_wav.h
index 7413dbd11c..e3e605aeb2 100644
--- a/editor/import/resource_importer_wav.h
+++ b/editor/import/resource_importer_wav.h
@@ -46,8 +46,8 @@ public:
virtual int get_preset_count() const override;
virtual String get_preset_name(int p_idx) const override;
- virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override;
- virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override;
+ virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override;
+ virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override;
static void _compress_ima_adpcm(const Vector<float> &p_data, Vector<uint8_t> &dst_data) {
/*p_sample_data->data = (void*)malloc(len);
diff --git a/editor/import/scene_import_settings.cpp b/editor/import/scene_import_settings.cpp
index 9f91a32c44..5690d49a55 100644
--- a/editor/import/scene_import_settings.cpp
+++ b/editor/import/scene_import_settings.cpp
@@ -664,7 +664,7 @@ void SceneImportSettings::_select(Tree *p_from, String p_type, String p_id) {
List<ResourceImporter::ImportOption> options;
if (scene_import_settings_data->category == ResourceImporterScene::INTERNAL_IMPORT_CATEGORY_MAX) {
- ResourceImporterScene::get_singleton()->get_import_options(&options);
+ ResourceImporterScene::get_singleton()->get_import_options(base_path, &options);
} else {
ResourceImporterScene::get_singleton()->get_internal_import_options(scene_import_settings_data->category, &options);
}
diff --git a/editor/import_defaults_editor.cpp b/editor/import_defaults_editor.cpp
index 8300dcf555..4b69810861 100644
--- a/editor/import_defaults_editor.cpp
+++ b/editor/import_defaults_editor.cpp
@@ -62,7 +62,7 @@ protected:
return;
}
for (const PropertyInfo &E : properties) {
- if (importer->get_option_visibility(E.name, values)) {
+ if (importer->get_option_visibility("", E.name, values)) {
p_list->push_back(E);
}
}
@@ -119,7 +119,7 @@ void ImportDefaultsEditor::_update_importer() {
if (importer.is_valid()) {
List<ResourceImporter::ImportOption> options;
- importer->get_import_options(&options);
+ importer->get_import_options("", &options);
Dictionary d;
if (ProjectSettings::get_singleton()->has_setting("importer_defaults/" + importer->get_importer_name())) {
d = ProjectSettings::get_singleton()->get("importer_defaults/" + importer->get_importer_name());
diff --git a/editor/import_dock.cpp b/editor/import_dock.cpp
index a6e1e1d094..cc6b4e66e4 100644
--- a/editor/import_dock.cpp
+++ b/editor/import_dock.cpp
@@ -42,6 +42,7 @@ public:
Vector<String> paths;
Set<StringName> checked;
bool checking;
+ String base_options_path;
bool _set(const StringName &p_name, const Variant &p_value) {
if (values.has(p_name)) {
@@ -66,7 +67,7 @@ public:
}
void _get_property_list(List<PropertyInfo> *p_list) const {
for (const PropertyInfo &E : properties) {
- if (!importer->get_option_visibility(E.name, values)) {
+ if (!importer->get_option_visibility(base_options_path, E.name, values)) {
continue;
}
PropertyInfo pi = E;
@@ -104,8 +105,9 @@ void ImportDock::set_edit_path(const String &p_path) {
params->paths.clear();
params->paths.push_back(p_path);
+ params->base_options_path = p_path;
- _update_options(config);
+ _update_options(p_path, config);
List<Ref<ResourceImporter>> importers;
ResourceFormatImporter::get_singleton()->get_importers_for_extension(p_path.get_extension(), &importers);
@@ -146,17 +148,18 @@ void ImportDock::_add_keep_import_option(const String &p_importer_name) {
}
}
-void ImportDock::_update_options(const Ref<ConfigFile> &p_config) {
+void ImportDock::_update_options(const String &p_path, const Ref<ConfigFile> &p_config) {
List<ResourceImporter::ImportOption> options;
if (params->importer.is_valid()) {
- params->importer->get_import_options(&options);
+ params->importer->get_import_options(p_path, &options);
}
params->properties.clear();
params->values.clear();
params->checking = params->paths.size() > 1;
params->checked.clear();
+ params->base_options_path = p_path;
for (const ResourceImporter::ImportOption &E : options) {
params->properties.push_back(E.option);
@@ -184,10 +187,12 @@ void ImportDock::set_edit_multiple_paths(const Vector<String> &p_paths) {
// Use the value that is repeated the most.
Map<String, Dictionary> value_frequency;
+ Set<String> extensions;
for (int i = 0; i < p_paths.size(); i++) {
Ref<ConfigFile> config;
config.instantiate();
+ extensions.insert(p_paths[i].get_extension());
Error err = config->load(p_paths[i] + ".import");
ERR_CONTINUE(err != OK);
@@ -223,13 +228,18 @@ void ImportDock::set_edit_multiple_paths(const Vector<String> &p_paths) {
ERR_FAIL_COND(params->importer.is_null());
+ String base_path;
+ if (extensions.size() == 1 && p_paths.size() > 0) {
+ base_path = p_paths[0];
+ }
List<ResourceImporter::ImportOption> options;
- params->importer->get_import_options(&options);
+ params->importer->get_import_options(base_path, &options);
params->properties.clear();
params->values.clear();
params->checking = true;
params->checked.clear();
+ params->base_options_path = base_path;
for (const ResourceImporter::ImportOption &E : options) {
params->properties.push_back(E.option);
@@ -327,22 +337,22 @@ void ImportDock::_importer_selected(int i_idx) {
String name = import_as->get_selected_metadata();
if (name == "keep") {
params->importer.unref();
- _update_options(Ref<ConfigFile>());
+ _update_options(params->base_options_path, Ref<ConfigFile>());
} else {
Ref<ResourceImporter> importer = ResourceFormatImporter::get_singleton()->get_importer_by_name(name);
ERR_FAIL_COND(importer.is_null());
params->importer = importer;
-
Ref<ConfigFile> config;
if (params->paths.size()) {
+ String path = params->paths[0];
config.instantiate();
- Error err = config->load(params->paths[0] + ".import");
+ Error err = config->load(path + ".import");
if (err != OK) {
config.unref();
}
}
- _update_options(config);
+ _update_options(params->base_options_path, config);
}
}
@@ -387,7 +397,7 @@ void ImportDock::_preset_selected(int p_idx) {
default: {
List<ResourceImporter::ImportOption> options;
- params->importer->get_import_options(&options, p_idx);
+ params->importer->get_import_options(params->base_options_path, &options, p_idx);
if (params->checking) {
params->checked.clear();
diff --git a/editor/import_dock.h b/editor/import_dock.h
index 150c44576d..ac73f3e3c0 100644
--- a/editor/import_dock.h
+++ b/editor/import_dock.h
@@ -64,7 +64,7 @@ class ImportDock : public VBoxContainer {
void _preset_selected(int p_idx);
void _importer_selected(int i_idx);
- void _update_options(const Ref<ConfigFile> &p_config = Ref<ConfigFile>());
+ void _update_options(const String &p_path, const Ref<ConfigFile> &p_config = Ref<ConfigFile>());
void _update_preset_menu();
void _add_keep_import_option(const String &p_importer_name);
diff --git a/editor/plugins/animation_blend_tree_editor_plugin.cpp b/editor/plugins/animation_blend_tree_editor_plugin.cpp
index 55ffbf9477..2aded41810 100644
--- a/editor/plugins/animation_blend_tree_editor_plugin.cpp
+++ b/editor/plugins/animation_blend_tree_editor_plugin.cpp
@@ -68,7 +68,7 @@ void AnimationNodeBlendTreeEditor::remove_custom_type(const Ref<Script> &p_scrip
void AnimationNodeBlendTreeEditor::_update_options_menu(bool p_has_input_ports) {
add_node->get_popup()->clear();
- add_node->get_popup()->set_size(Size2i(-1, -1));
+ add_node->get_popup()->reset_size();
for (int i = 0; i < add_options.size(); i++) {
if (p_has_input_ports && add_options[i].input_port_count == 0) {
continue;
diff --git a/editor/plugins/canvas_item_editor_plugin.cpp b/editor/plugins/canvas_item_editor_plugin.cpp
index 02756916a5..ecc404f903 100644
--- a/editor/plugins/canvas_item_editor_plugin.cpp
+++ b/editor/plugins/canvas_item_editor_plugin.cpp
@@ -877,7 +877,7 @@ void CanvasItemEditor::_selection_result_pressed(int p_result) {
void CanvasItemEditor::_selection_menu_hide() {
selection_results.clear();
selection_menu->clear();
- selection_menu->set_size(Vector2(0, 0));
+ selection_menu->reset_size();
}
void CanvasItemEditor::_add_node_pressed(int p_result) {
@@ -2265,7 +2265,7 @@ bool CanvasItemEditor::_gui_input_select(const Ref<InputEvent> &p_event) {
}
if (b.is_valid() && b->is_pressed() && b->get_button_index() == MouseButton::RIGHT) {
- add_node_menu->set_size(Vector2(1, 1));
+ add_node_menu->reset_size();
add_node_menu->set_position(get_screen_position() + b->get_position());
add_node_menu->popup();
node_create_position = transform.affine_inverse().xform((get_local_mouse_position()));
diff --git a/editor/plugins/curve_editor_plugin.cpp b/editor/plugins/curve_editor_plugin.cpp
index 005cf27e8a..daf34903e6 100644
--- a/editor/plugins/curve_editor_plugin.cpp
+++ b/editor/plugins/curve_editor_plugin.cpp
@@ -383,7 +383,7 @@ void CurveEditor::open_context_menu(Vector2 pos) {
_context_menu->add_submenu_item(TTR("Load Preset"), _presets_menu->get_name());
- _context_menu->set_size(Size2(0, 0));
+ _context_menu->reset_size();
_context_menu->popup();
}
diff --git a/editor/plugins/node_3d_editor_plugin.cpp b/editor/plugins/node_3d_editor_plugin.cpp
index b74d229d3e..d6e6f0597a 100644
--- a/editor/plugins/node_3d_editor_plugin.cpp
+++ b/editor/plugins/node_3d_editor_plugin.cpp
@@ -860,7 +860,7 @@ void Node3DEditorViewport::_update_name() {
}
view_menu->set_text(name);
- view_menu->set_size(Vector2(0, 0)); // resets the button size
+ view_menu->reset_size();
}
void Node3DEditorViewport::_compute_edit(const Point2 &p_point) {
@@ -3620,7 +3620,7 @@ void Node3DEditorViewport::_selection_result_pressed(int p_result) {
void Node3DEditorViewport::_selection_menu_hide() {
selection_results.clear();
selection_menu->clear();
- selection_menu->set_size(Vector2(0, 0));
+ selection_menu->reset_size();
}
void Node3DEditorViewport::set_can_preview(Camera3D *p_preview) {
diff --git a/editor/plugins/script_editor_plugin.cpp b/editor/plugins/script_editor_plugin.cpp
index e87d31f018..583862893c 100644
--- a/editor/plugins/script_editor_plugin.cpp
+++ b/editor/plugins/script_editor_plugin.cpp
@@ -3052,7 +3052,7 @@ void ScriptEditor::_make_script_list_context_menu() {
context_menu->add_shortcut(ED_GET_SHORTCUT("script_editor/toggle_scripts_panel"), TOGGLE_SCRIPTS_PANEL);
context_menu->set_position(get_global_transform().xform(get_local_mouse_position()));
- context_menu->set_size(Vector2(1, 1));
+ context_menu->reset_size();
context_menu->popup();
}
diff --git a/editor/plugins/script_text_editor.cpp b/editor/plugins/script_text_editor.cpp
index 93adced59d..30a4cef8ca 100644
--- a/editor/plugins/script_text_editor.cpp
+++ b/editor/plugins/script_text_editor.cpp
@@ -550,7 +550,7 @@ void ScriptTextEditor::_validate_script() {
void ScriptTextEditor::_update_bookmark_list() {
bookmarks_menu->clear();
- bookmarks_menu->set_size(Size2(1, 1));
+ bookmarks_menu->reset_size();
bookmarks_menu->add_shortcut(ED_GET_SHORTCUT("script_text_editor/toggle_bookmark"), BOOKMARK_TOGGLE);
bookmarks_menu->add_shortcut(ED_GET_SHORTCUT("script_text_editor/remove_all_bookmarks"), BOOKMARK_REMOVE_ALL);
@@ -702,7 +702,7 @@ void ScriptTextEditor::_code_complete_script(const String &p_code, List<ScriptCo
void ScriptTextEditor::_update_breakpoint_list() {
breakpoints_menu->clear();
- breakpoints_menu->set_size(Size2(1, 1));
+ breakpoints_menu->reset_size();
breakpoints_menu->add_shortcut(ED_GET_SHORTCUT("script_text_editor/toggle_breakpoint"), DEBUG_TOGGLE_BREAKPOINT);
breakpoints_menu->add_shortcut(ED_GET_SHORTCUT("script_text_editor/remove_all_breakpoints"), DEBUG_REMOVE_ALL_BREAKPOINTS);
@@ -1689,7 +1689,7 @@ void ScriptTextEditor::_make_context_menu(bool p_selection, bool p_color, bool p
context_menu->set_item_disabled(context_menu->get_item_index(EDIT_REDO), !tx->has_redo());
context_menu->set_position(get_global_transform().xform(p_pos));
- context_menu->set_size(Vector2(1, 1));
+ context_menu->reset_size();
context_menu->popup();
}
diff --git a/editor/plugins/shader_editor_plugin.cpp b/editor/plugins/shader_editor_plugin.cpp
index 984dc0a1c9..7c1fda77bb 100644
--- a/editor/plugins/shader_editor_plugin.cpp
+++ b/editor/plugins/shader_editor_plugin.cpp
@@ -34,6 +34,7 @@
#include "core/io/resource_saver.h"
#include "core/os/keyboard.h"
#include "core/os/os.h"
+#include "core/version_generated.gen.h"
#include "editor/editor_node.h"
#include "editor/editor_scale.h"
#include "editor/editor_settings.h"
@@ -142,10 +143,10 @@ void ShaderTextEditor::_load_theme_settings() {
}
}
- const Color member_variable_color = EDITOR_GET("text_editor/theme/highlighting/member_variable_color");
+ const Color user_type_color = EDITOR_GET("text_editor/theme/highlighting/user_type_color");
for (const String &E : built_ins) {
- syntax_highlighter->add_keyword_color(E, member_variable_color);
+ syntax_highlighter->add_keyword_color(E, user_type_color);
}
// Colorize comments.
@@ -384,7 +385,7 @@ void ShaderEditor::_menu_option(int p_option) {
shader_editor->remove_all_bookmarks();
} break;
case HELP_DOCS: {
- OS::get_singleton()->shell_open("https://docs.godotengine.org/en/latest/tutorials/shaders/shader_reference/index.html");
+ OS::get_singleton()->shell_open(vformat("%s/tutorials/shaders/shader_reference/index.html", VERSION_DOCS_URL));
} break;
}
if (p_option != SEARCH_FIND && p_option != SEARCH_REPLACE && p_option != SEARCH_GOTO_LINE) {
@@ -645,7 +646,7 @@ void ShaderEditor::_make_context_menu(bool p_selection, Vector2 p_position) {
context_menu->add_shortcut(ED_GET_SHORTCUT("script_text_editor/toggle_bookmark"), BOOKMARK_TOGGLE);
context_menu->set_position(get_global_transform().xform(p_position));
- context_menu->set_size(Vector2(1, 1));
+ context_menu->reset_size();
context_menu->popup();
}
diff --git a/editor/plugins/skeleton_2d_editor_plugin.cpp b/editor/plugins/skeleton_2d_editor_plugin.cpp
index c350004f0f..510e264c48 100644
--- a/editor/plugins/skeleton_2d_editor_plugin.cpp
+++ b/editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -52,34 +52,34 @@ void Skeleton2DEditor::_menu_option(int p_option) {
}
switch (p_option) {
- case MENU_OPTION_MAKE_REST: {
+ case MENU_OPTION_SET_REST: {
if (node->get_bone_count() == 0) {
err_dialog->set_text(TTR("This skeleton has no bones, create some children Bone2D nodes."));
err_dialog->popup_centered();
return;
}
UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo();
- ur->create_action(TTR("Create Rest Pose from Bones"));
+ ur->create_action(TTR("Set Rest Pose to Bones"));
for (int i = 0; i < node->get_bone_count(); i++) {
Bone2D *bone = node->get_bone(i);
- ur->add_do_method(bone, "set_rest", bone->get_transform());
- ur->add_undo_method(bone, "set_rest", bone->get_rest());
+ ur->add_do_method(bone, "set_transform", bone->get_rest());
+ ur->add_undo_method(bone, "set_transform", bone->get_transform());
}
ur->commit_action();
} break;
- case MENU_OPTION_SET_REST: {
+ case MENU_OPTION_MAKE_REST: {
if (node->get_bone_count() == 0) {
err_dialog->set_text(TTR("This skeleton has no bones, create some children Bone2D nodes."));
err_dialog->popup_centered();
return;
}
UndoRedo *ur = EditorNode::get_singleton()->get_undo_redo();
- ur->create_action(TTR("Set Rest Pose to Bones"));
+ ur->create_action(TTR("Create Rest Pose from Bones"));
for (int i = 0; i < node->get_bone_count(); i++) {
Bone2D *bone = node->get_bone(i);
- ur->add_do_method(bone, "set_transform", bone->get_rest());
- ur->add_undo_method(bone, "set_transform", bone->get_transform());
+ ur->add_do_method(bone, "set_rest", bone->get_transform());
+ ur->add_undo_method(bone, "set_rest", bone->get_rest());
}
ur->commit_action();
@@ -98,10 +98,10 @@ Skeleton2DEditor::Skeleton2DEditor() {
options->set_text(TTR("Skeleton2D"));
options->set_icon(EditorNode::get_singleton()->get_gui_base()->get_theme_icon(SNAME("Skeleton2D"), SNAME("EditorIcons")));
- options->get_popup()->add_item(TTR("Reset to Rest Pose"), MENU_OPTION_MAKE_REST);
+ options->get_popup()->add_item(TTR("Reset to Rest Pose"), MENU_OPTION_SET_REST);
options->get_popup()->add_separator();
// Use the "Overwrite" word to highlight that this is a destructive operation.
- options->get_popup()->add_item(TTR("Overwrite Rest Pose"), MENU_OPTION_SET_REST);
+ options->get_popup()->add_item(TTR("Overwrite Rest Pose"), MENU_OPTION_MAKE_REST);
options->set_switch_on_hover(true);
options->get_popup()->connect("id_pressed", callable_mp(this, &Skeleton2DEditor::_menu_option));
diff --git a/editor/plugins/skeleton_2d_editor_plugin.h b/editor/plugins/skeleton_2d_editor_plugin.h
index dacd8fe43f..066888f685 100644
--- a/editor/plugins/skeleton_2d_editor_plugin.h
+++ b/editor/plugins/skeleton_2d_editor_plugin.h
@@ -40,8 +40,8 @@ class Skeleton2DEditor : public Control {
GDCLASS(Skeleton2DEditor, Control);
enum Menu {
- MENU_OPTION_MAKE_REST,
MENU_OPTION_SET_REST,
+ MENU_OPTION_MAKE_REST,
};
Skeleton2D *node;
diff --git a/editor/plugins/text_editor.cpp b/editor/plugins/text_editor.cpp
index ebfe6c9ee3..e252792c43 100644
--- a/editor/plugins/text_editor.cpp
+++ b/editor/plugins/text_editor.cpp
@@ -508,7 +508,7 @@ void TextEditor::_make_context_menu(bool p_selection, bool p_can_fold, bool p_is
context_menu->set_item_disabled(context_menu->get_item_index(EDIT_REDO), !tx->has_redo());
context_menu->set_position(get_global_transform().xform(p_position));
- context_menu->set_size(Vector2(1, 1));
+ context_menu->reset_size();
context_menu->popup();
}
diff --git a/editor/plugins/theme_editor_preview.cpp b/editor/plugins/theme_editor_preview.cpp
index df0b35908b..f13fcb005f 100644
--- a/editor/plugins/theme_editor_preview.cpp
+++ b/editor/plugins/theme_editor_preview.cpp
@@ -71,6 +71,9 @@ void ThemeEditorPreview::_preview_visibility_changed() {
void ThemeEditorPreview::_picker_button_cbk() {
picker_overlay->set_visible(picker_button->is_pressed());
+ if (picker_button->is_pressed()) {
+ _reset_picker_overlay();
+ }
}
Control *ThemeEditorPreview::_find_hovered_control(Control *p_parent, Vector2 p_mouse_position) {
diff --git a/editor/plugins/tiles/tile_proxies_manager_dialog.cpp b/editor/plugins/tiles/tile_proxies_manager_dialog.cpp
index 9e47a44b34..60a66ab954 100644
--- a/editor/plugins/tiles/tile_proxies_manager_dialog.cpp
+++ b/editor/plugins/tiles/tile_proxies_manager_dialog.cpp
@@ -34,7 +34,7 @@
void TileProxiesManagerDialog::_right_clicked(int p_item, Vector2 p_local_mouse_pos, Object *p_item_list) {
ItemList *item_list = Object::cast_to<ItemList>(p_item_list);
- popup_menu->set_size(Vector2(1, 1));
+ popup_menu->reset_size();
popup_menu->set_position(get_position() + item_list->get_global_mouse_position());
popup_menu->popup();
}
diff --git a/editor/plugins/visual_shader_editor_plugin.cpp b/editor/plugins/visual_shader_editor_plugin.cpp
index a4706bf0d9..b1a9da9e26 100644
--- a/editor/plugins/visual_shader_editor_plugin.cpp
+++ b/editor/plugins/visual_shader_editor_plugin.cpp
@@ -132,7 +132,7 @@ void VisualShaderGraphPlugin::show_port_preview(VisualShader::Type p_type, int p
if (links[p_node_id].preview_visible && !is_dirty() && links[p_node_id].preview_box != nullptr) {
links[p_node_id].graph_node->remove_child(links[p_node_id].preview_box);
memdelete(links[p_node_id].preview_box);
- links[p_node_id].graph_node->set_size(Vector2(-1, -1));
+ links[p_node_id].graph_node->reset_size();
links[p_node_id].preview_visible = false;
}
@@ -256,7 +256,7 @@ void VisualShaderGraphPlugin::update_node_size(int p_node_id) {
if (!links.has(p_node_id)) {
return;
}
- links[p_node_id].graph_node->set_size(Size2(-1, -1));
+ links[p_node_id].graph_node->reset_size();
}
void VisualShaderGraphPlugin::register_default_input_button(int p_node_id, int p_port_id, Button *p_button) {
@@ -1976,7 +1976,7 @@ void VisualShaderEditor::_set_node_size(int p_type, int p_node, const Vector2 &p
}
gn->set_custom_minimum_size(size);
- gn->set_size(Size2(1, 1));
+ gn->reset_size();
if (!expression_node.is_null() && text_box) {
Size2 box_size = size;
@@ -1990,7 +1990,7 @@ void VisualShaderEditor::_set_node_size(int p_type, int p_node, const Vector2 &p
box_size.y -= text_box->get_offset(SIDE_TOP);
box_size.y -= 28 * EDSCALE;
text_box->set_custom_minimum_size(box_size);
- text_box->set_size(Size2(1, 1));
+ text_box->reset_size();
}
}
}
@@ -2038,8 +2038,8 @@ void VisualShaderEditor::_comment_title_popup_show(const Point2 &p_position, int
}
void VisualShaderEditor::_comment_title_text_changed(const String &p_new_text) {
- comment_title_change_edit->set_size(Size2(-1, -1));
- comment_title_change_popup->set_size(Size2(-1, -1));
+ comment_title_change_edit->reset_size();
+ comment_title_change_popup->reset_size();
}
void VisualShaderEditor::_comment_title_text_submitted(const String &p_new_text) {
@@ -2083,8 +2083,8 @@ void VisualShaderEditor::_comment_desc_popup_show(const Point2 &p_position, int
}
void VisualShaderEditor::_comment_desc_text_changed() {
- comment_desc_change_edit->set_size(Size2(-1, -1));
- comment_desc_change_popup->set_size(Size2(-1, -1));
+ comment_desc_change_edit->reset_size();
+ comment_desc_change_popup->reset_size();
}
void VisualShaderEditor::_comment_desc_confirm() {
@@ -3167,7 +3167,7 @@ void VisualShaderEditor::_graph_gui_input(const Ref<InputEvent> &p_event) {
menu_point = graph->get_local_mouse_position();
Point2 gpos = Input::get_singleton()->get_mouse_position();
popup_menu->set_position(gpos);
- popup_menu->set_size(Size2(-1, -1));
+ popup_menu->reset_size();
popup_menu->popup();
}
}
@@ -4258,8 +4258,8 @@ VisualShaderEditor::VisualShaderEditor() {
comment_title_change_edit->connect("text_changed", callable_mp(this, &VisualShaderEditor::_comment_title_text_changed));
comment_title_change_edit->connect("text_submitted", callable_mp(this, &VisualShaderEditor::_comment_title_text_submitted));
comment_title_change_popup->add_child(comment_title_change_edit);
- comment_title_change_edit->set_size(Size2(-1, -1));
- comment_title_change_popup->set_size(Size2(-1, -1));
+ comment_title_change_edit->reset_size();
+ comment_title_change_popup->reset_size();
comment_title_change_popup->connect("focus_exited", callable_mp(this, &VisualShaderEditor::_comment_title_popup_focus_out));
comment_title_change_popup->connect("popup_hide", callable_mp(this, &VisualShaderEditor::_comment_title_popup_hide));
add_child(comment_title_change_popup);
@@ -4271,8 +4271,8 @@ VisualShaderEditor::VisualShaderEditor() {
comment_desc_change_edit->connect("text_changed", callable_mp(this, &VisualShaderEditor::_comment_desc_text_changed));
comment_desc_vbox->add_child(comment_desc_change_edit);
comment_desc_change_edit->set_custom_minimum_size(Size2(300 * EDSCALE, 150 * EDSCALE));
- comment_desc_change_edit->set_size(Size2(-1, -1));
- comment_desc_change_popup->set_size(Size2(-1, -1));
+ comment_desc_change_edit->reset_size();
+ comment_desc_change_popup->reset_size();
comment_desc_change_popup->connect("focus_exited", callable_mp(this, &VisualShaderEditor::_comment_desc_confirm));
comment_desc_change_popup->connect("popup_hide", callable_mp(this, &VisualShaderEditor::_comment_desc_popup_hide));
Button *comment_desc_confirm_button = memnew(Button);
diff --git a/editor/project_export.cpp b/editor/project_export.cpp
index ad9c81458f..a97d38323e 100644
--- a/editor/project_export.cpp
+++ b/editor/project_export.cpp
@@ -38,6 +38,7 @@
#include "core/io/resource_saver.h"
#include "core/os/os.h"
#include "core/string/optimized_translation.h"
+#include "core/version_generated.gen.h"
#include "editor_data.h"
#include "editor_node.h"
#include "editor_scale.h"
@@ -456,7 +457,7 @@ void ProjectExportDialog::_enc_filters_changed(const String &p_filters) {
}
void ProjectExportDialog::_open_key_help_link() {
- OS::get_singleton()->shell_open("https://docs.godotengine.org/en/latest/development/compiling/compiling_with_script_encryption_key.html");
+ OS::get_singleton()->shell_open(vformat("%s/development/compiling/compiling_with_script_encryption_key.html", VERSION_DOCS_URL));
}
void ProjectExportDialog::_enc_pck_changed(bool p_pressed) {
@@ -1276,11 +1277,13 @@ ProjectExportDialog::ProjectExportDialog() {
export_debug = memnew(CheckBox);
export_debug->set_text(TTR("Export With Debug"));
export_debug->set_pressed(true);
+ export_debug->set_h_size_flags(Control::SIZE_SHRINK_CENTER);
export_project->get_vbox()->add_child(export_debug);
export_pck_zip_debug = memnew(CheckBox);
export_pck_zip_debug->set_text(TTR("Export With Debug"));
export_pck_zip_debug->set_pressed(true);
+ export_pck_zip_debug->set_h_size_flags(Control::SIZE_SHRINK_CENTER);
export_pck_zip->get_vbox()->add_child(export_pck_zip_debug);
set_hide_on_ok(false);
diff --git a/editor/project_manager.cpp b/editor/project_manager.cpp
index 5c57c0d65c..7b942adb54 100644
--- a/editor/project_manager.cpp
+++ b/editor/project_manager.cpp
@@ -52,6 +52,7 @@
#include "scene/gui/texture_rect.h"
#include "scene/main/window.h"
#include "servers/display_server.h"
+#include "servers/navigation_server_3d.h"
static inline String get_project_key_from_path(const String &dir) {
return dir.replace("/", "::");
@@ -2382,6 +2383,11 @@ ProjectManager::ProjectManager() {
EditorSettings::create();
}
+ // Turn off some servers we aren't going to be using in the Project Manager.
+ NavigationServer3D::get_singleton()->set_active(false);
+ PhysicsServer3D::get_singleton()->set_active(false);
+ PhysicsServer2D::get_singleton()->set_active(false);
+
EditorSettings::get_singleton()->set_optimize_save(false); //just write settings as they came
{
diff --git a/editor/property_editor.cpp b/editor/property_editor.cpp
index f10ecab34e..061f4d218a 100644
--- a/editor/property_editor.cpp
+++ b/editor/property_editor.cpp
@@ -312,7 +312,7 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant::
spinbox->hide();
slider->hide();
menu->clear();
- menu->set_size(Size2(1, 1) * EDSCALE);
+ menu->reset_size();
for (int i = 0; i < MAX_VALUE_EDITORS; i++) {
if (i < MAX_VALUE_EDITORS / 4) {
diff --git a/editor/scene_tree_dock.cpp b/editor/scene_tree_dock.cpp
index 0b293c9caf..611038a947 100644
--- a/editor/scene_tree_dock.cpp
+++ b/editor/scene_tree_dock.cpp
@@ -899,7 +899,7 @@ void SceneTreeDock::_tool_selected(int p_tool, bool p_confirm_override) {
// Resize the dialog to its minimum size.
// This prevents the dialog from being too wide after displaying
// a deletion confirmation for a node with a long name.
- delete_dialog->set_size(Size2());
+ delete_dialog->reset_size();
delete_dialog->popup_centered();
}
@@ -2575,7 +2575,7 @@ void SceneTreeDock::_files_dropped(Vector<String> p_files, NodePath p_to, int p_
menu_properties->set_item_metadata(menu_properties->get_item_count() - 1, p);
}
- menu_properties->set_size(Size2(1, 1));
+ menu_properties->reset_size();
menu_properties->set_position(get_screen_position() + get_local_mouse_position());
menu_properties->popup();
} else if (!valid_properties.is_empty()) {
@@ -2667,7 +2667,7 @@ void SceneTreeDock::_tree_rmb(const Vector2 &p_menu_pos) {
menu->add_icon_shortcut(get_theme_icon(SNAME("Instance"), SNAME("EditorIcons")), ED_GET_SHORTCUT("scene_tree/instance_scene"), TOOL_INSTANTIATE);
}
- menu->set_size(Size2(1, 1));
+ menu->reset_size();
menu->set_position(get_screen_position() + p_menu_pos);
menu->popup();
return;
@@ -2690,7 +2690,7 @@ void SceneTreeDock::_tree_rmb(const Vector2 &p_menu_pos) {
if (profile_allow_editing) {
subresources.clear();
menu_subresources->clear();
- menu_subresources->set_size(Size2(1, 1));
+ menu_subresources->reset_size();
_add_children_to_popup(selection.front()->get(), 0);
if (menu->get_item_count() > 0) {
menu->add_separator();
@@ -2831,7 +2831,7 @@ void SceneTreeDock::_tree_rmb(const Vector2 &p_menu_pos) {
menu->add_separator();
menu->add_icon_shortcut(get_theme_icon(SNAME("Remove"), SNAME("EditorIcons")), ED_SHORTCUT("scene_tree/delete", TTR("Delete Node(s)"), Key::KEY_DELETE), TOOL_ERASE);
}
- menu->set_size(Size2(1, 1));
+ menu->reset_size();
menu->set_position(p_menu_pos);
menu->popup();
}
@@ -2843,7 +2843,7 @@ void SceneTreeDock::_open_tree_menu() {
menu->add_check_item(TTR("Auto Expand to Selected"), TOOL_AUTO_EXPAND);
menu->set_item_checked(menu->get_item_idx_from_text(TTR("Auto Expand to Selected")), EditorSettings::get_singleton()->get("docks/scene_tree/auto_expand_to_selected"));
- menu->set_size(Size2(1, 1));
+ menu->reset_size();
menu->set_position(get_screen_position() + get_local_mouse_position());
menu->popup();
}
diff --git a/editor/script_create_dialog.cpp b/editor/script_create_dialog.cpp
index 1e19d9bd47..fb1575ad8c 100644
--- a/editor/script_create_dialog.cpp
+++ b/editor/script_create_dialog.cpp
@@ -315,7 +315,9 @@ void ScriptCreateDialog::_create_new() {
}
}
- if (!is_built_in) {
+ if (is_built_in) {
+ scr->set_name(internal_name->get_text());
+ } else {
String lpath = ProjectSettings::get_singleton()->localize_path(file_path->get_text());
scr->set_path(lpath);
Error err = ResourceSaver::save(lpath, scr, ResourceSaver::FLAG_CHANGE_PATH);
@@ -686,6 +688,11 @@ void ScriptCreateDialog::_update_dialog() {
builtin_warning_label->set_visible(is_built_in);
+ path_controls[0]->set_visible(!is_built_in);
+ path_controls[1]->set_visible(!is_built_in);
+ name_controls[0]->set_visible(is_built_in);
+ name_controls[1]->set_visible(is_built_in);
+
// Check if the script name is the same as the parent class.
// This warning isn't relevant if the script is built-in.
script_name_warning_label->set_visible(!is_built_in && _get_class_name() == parent_name->get_text());
@@ -868,9 +875,24 @@ ScriptCreateDialog::ScriptCreateDialog() {
path_button = memnew(Button);
path_button->connect("pressed", callable_mp(this, &ScriptCreateDialog::_browse_path), varray(false, true));
hb->add_child(path_button);
- gc->add_child(memnew(Label(TTR("Path:"))));
+ Label *label = memnew(Label(TTR("Path:")));
+ gc->add_child(label);
gc->add_child(hb);
re_check_path = false;
+ path_controls[0] = label;
+ path_controls[1] = hb;
+
+ /* Name */
+
+ internal_name = memnew(LineEdit);
+ internal_name->set_h_size_flags(Control::SIZE_EXPAND_FILL);
+ label = memnew(Label(TTR("Name:")));
+ gc->add_child(label);
+ gc->add_child(internal_name);
+ name_controls[0] = label;
+ name_controls[1] = internal_name;
+ label->hide();
+ internal_name->hide();
/* Dialog Setup */
diff --git a/editor/script_create_dialog.h b/editor/script_create_dialog.h
index 7c2ef1e150..dba798eea7 100644
--- a/editor/script_create_dialog.h
+++ b/editor/script_create_dialog.h
@@ -57,6 +57,7 @@ class ScriptCreateDialog : public ConfirmationDialog {
OptionButton *language_menu;
OptionButton *template_menu;
LineEdit *file_path;
+ LineEdit *internal_name;
Button *path_button;
EditorFileDialog *file_browse;
CheckBox *internal;
@@ -81,6 +82,9 @@ class ScriptCreateDialog : public ConfirmationDialog {
int default_language;
bool re_check_path;
+ Control *path_controls[2];
+ Control *name_controls[2];
+
enum ScriptOrigin {
SCRIPT_ORIGIN_PROJECT,
SCRIPT_ORIGIN_EDITOR,
diff --git a/editor/translations/af.po b/editor/translations/af.po
index 2e733a4fb8..a1a19d1679 100644
--- a/editor/translations/af.po
+++ b/editor/translations/af.po
@@ -7803,11 +7803,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
diff --git a/editor/translations/ar.po b/editor/translations/ar.po
index a32b919cf2..c8cc51dd2c 100644
--- a/editor/translations/ar.po
+++ b/editor/translations/ar.po
@@ -61,8 +61,8 @@ msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-10-30 00:50+0000\n"
-"Last-Translator: HASSAN GAMER - حسن جيمر <gamerhassan55@gmail.com>\n"
+"PO-Revision-Date: 2021-11-11 08:00+0000\n"
+"Last-Translator: Nabeel20 <nabeelandnizam@gmail.com>\n"
"Language-Team: Arabic <https://hosted.weblate.org/projects/godot-engine/"
"godot/ar/>\n"
"Language: ar\n"
@@ -71,7 +71,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -985,7 +985,6 @@ msgid "Edit..."
msgstr "تعديل..."
#: editor/connections_dialog.cpp
-#, fuzzy
msgid "Go to Method"
msgstr "إذهب إلى الدالة"
@@ -1297,9 +1296,8 @@ msgid "Licenses"
msgstr "تراخيص"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Error opening asset file for \"%s\" (not in ZIP format)."
-msgstr "حدث خطأ Ø¹Ù†Ø¯ÙØªØ­ مل٠الحزمة بسبب أن المل٠ليس ÙÙŠ صيغة \"ZIP\"."
+msgstr "حدث خطأ Ø¹Ù†Ø¯ÙØªØ­ مل٠%s الحزمة بسبب أن المل٠ليس ÙÙŠ صيغة \"ZIP\"."
#: editor/editor_asset_installer.cpp
msgid "%s (already exists)"
@@ -1882,14 +1880,12 @@ msgid "Current Profile:"
msgstr "المل٠(النسخة) الحالية:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Create Profile"
-msgstr "مسح الملÙ"
+msgstr "أصنع حساب"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Remove Profile"
-msgstr "إزالة البلاط"
+msgstr "أمسح الحساب"
#: editor/editor_feature_profile.cpp
msgid "Available Profiles:"
@@ -1909,9 +1905,8 @@ msgid "Export"
msgstr "تصدير"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Configure Selected Profile:"
-msgstr "المل٠(النسخة) الحالية:"
+msgstr "عدل على الحساب الحالي:"
#: editor/editor_feature_profile.cpp
#, fuzzy
@@ -2587,7 +2582,7 @@ msgstr "هل تريد Ø­ÙØ¸ التغييرات إلي'%s' قبل الإغلاق
#: editor/editor_node.cpp
msgid "%s no longer exists! Please specify a new save location."
-msgstr ""
+msgstr "%s لم يعد موجوداً! من ÙØ¶Ù„Ùƒ حدد موقعاً جديداً Ù„Ù„Ø­ÙØ¸."
#: editor/editor_node.cpp
msgid ""
@@ -2634,11 +2629,11 @@ msgstr "لم يتم Ø­ÙØ¸ المشهد الحالي. Ø¥ÙØªØ­Ù‡ علي أية Ø
#: editor/editor_node.cpp
msgid "Can't undo while mouse buttons are pressed."
-msgstr ""
+msgstr "لا يمكن التراجع أثناء ضغط أزار Ø§Ù„ÙØ£Ø±Ø©."
#: editor/editor_node.cpp
msgid "Nothing to undo."
-msgstr ""
+msgstr "لا شيء للتراجع عنه."
#: editor/editor_node.cpp
#, fuzzy
@@ -2647,11 +2642,11 @@ msgstr "تراجع"
#: editor/editor_node.cpp
msgid "Can't redo while mouse buttons are pressed."
-msgstr ""
+msgstr "لا يمكن إعادة العمل أثناء ضغط أزرار Ø§Ù„ÙØ£Ø±Ø©."
#: editor/editor_node.cpp
msgid "Nothing to redo."
-msgstr ""
+msgstr "لا شيء لإعادة عمله مجدداً."
#: editor/editor_node.cpp
#, fuzzy
@@ -3598,7 +3593,7 @@ msgstr ""
#: editor/editor_resource_picker.cpp
msgid "Quick Load"
-msgstr ""
+msgstr "تحميل سريع"
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
msgid "Make Unique"
@@ -7804,14 +7799,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "لا يملك هذا الهكيل أيّة عظام، أنشئ بعض عÙقد العظام ثنائية Ø§Ù„Ø¨ÙØ¹Ø¯ كأبناء."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "إنشاء وضعية الراحة من العظام"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "تحديد وضعية الراحة على العظام"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "إنشاء وضعية الراحة من العظام"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "هيكل ثنائي Ø§Ù„Ø¨ÙØ¹Ø¯"
diff --git a/editor/translations/az.po b/editor/translations/az.po
index 77470b2db5..df60e7757a 100644
--- a/editor/translations/az.po
+++ b/editor/translations/az.po
@@ -7515,11 +7515,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
diff --git a/editor/translations/bg.po b/editor/translations/bg.po
index 11a94b8796..98f60b8518 100644
--- a/editor/translations/bg.po
+++ b/editor/translations/bg.po
@@ -7514,14 +7514,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "Създаване на поза на Ð¿Ð¾ÐºÐ¾Ñ Ð¾Ñ‚ коÑтите"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "Създаване на поза на Ð¿Ð¾ÐºÐ¾Ñ Ð¾Ñ‚ коÑтите"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr ""
diff --git a/editor/translations/bn.po b/editor/translations/bn.po
index b3efe37fe4..a8581e7f45 100644
--- a/editor/translations/bn.po
+++ b/editor/translations/bn.po
@@ -8227,15 +8227,15 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Set Rest Pose to Bones"
+msgstr ""
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
msgid "Create Rest Pose from Bones"
msgstr "Mesh হতে Emitter তৈরি করà§à¦¨"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
-msgstr ""
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
msgid "Skeleton2D"
msgstr "সà§à¦•েলেটন/কাঠাম..."
diff --git a/editor/translations/br.po b/editor/translations/br.po
index 690ede66ef..3cbe4155a9 100644
--- a/editor/translations/br.po
+++ b/editor/translations/br.po
@@ -7436,11 +7436,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
diff --git a/editor/translations/ca.po b/editor/translations/ca.po
index 92dd5fff63..22b9e47836 100644
--- a/editor/translations/ca.po
+++ b/editor/translations/ca.po
@@ -7892,15 +7892,15 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "Aquest esquelet no té ossos, crea alguns nodes Bone2D fills."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Set Rest Pose to Bones"
+msgstr "Estableix la Postura de Repòs als Ossos"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
msgid "Create Rest Pose from Bones"
msgstr "Crea Punts d'Emissió des d'una Malla"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
-msgstr "Estableix la Postura de Repòs als Ossos"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Esquelet2D"
diff --git a/editor/translations/cs.po b/editor/translations/cs.po
index 721a03dfc5..34de7ebc7a 100644
--- a/editor/translations/cs.po
+++ b/editor/translations/cs.po
@@ -7722,14 +7722,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "Kostra nemá žádné kosti, vytvoř nějaké potomky Bone2D."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "Vytvořit klidovou pózu z kostí"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "Nastavit kosti podle klidové pózy"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "Vytvořit klidovou pózu z kostí"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Skeleton2D (Kostra 2D)"
diff --git a/editor/translations/da.po b/editor/translations/da.po
index fcef08f4e1..12df305276 100644
--- a/editor/translations/da.po
+++ b/editor/translations/da.po
@@ -14,7 +14,7 @@
# Rémi Verschelde <akien@godotengine.org>, 2019.
# Mads K. Bredager <mbredager@gmail.com>, 2019.
# Kristoffer Andersen <kjaa@google.com>, 2019.
-# Joe Osborne <reachjoe.o@gmail.com>, 2020.
+# Joe Osborne <reachjoe.o@gmail.com>, 2020, 2021.
# Autowinto <happymansi@hotmail.com>, 2020, 2021.
# Mikkel Mouridsen <mikkelmouridsen@me.com>, 2020, 2021.
# snakatk <snaqii@live.dk>, 2021.
@@ -23,8 +23,8 @@ msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-10-31 22:17+0000\n"
-"Last-Translator: Kim Nielsen <kimmowich@stofanet.dk>\n"
+"PO-Revision-Date: 2021-11-05 11:56+0000\n"
+"Last-Translator: Joe Osborne <reachjoe.o@gmail.com>\n"
"Language-Team: Danish <https://hosted.weblate.org/projects/godot-engine/"
"godot/da/>\n"
"Language: da\n"
@@ -232,9 +232,8 @@ msgid "Animation Playback Track"
msgstr "Animation-afspilningsspor"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Animation length (frames)"
-msgstr "Animations længde (i sekunder)"
+msgstr "Animations længde (billeder)"
#: editor/animation_track_editor.cpp
#, fuzzy
@@ -263,9 +262,8 @@ msgid "Anim Clips:"
msgstr "Anim klip:"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Change Track Path"
-msgstr "Ændre Array-Værdi"
+msgstr "Ændre sporsti"
#: editor/animation_track_editor.cpp
msgid "Toggle this track on/off."
@@ -391,9 +389,8 @@ msgstr "Anim Indsæt"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "node '%s'"
-msgstr "Kan ikke åbne '%s'."
+msgstr "node '%s'"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
@@ -630,9 +627,8 @@ msgid "Go to Previous Step"
msgstr "GÃ¥ til Forrige Trin"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Apply Reset"
-msgstr "Nulstil Zoom"
+msgstr "Anvende nulstilling"
#: editor/animation_track_editor.cpp
msgid "Optimize Animation"
@@ -8011,15 +8007,15 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Set Rest Pose to Bones"
+msgstr ""
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
msgid "Create Rest Pose from Bones"
msgstr "Spil Brugerdefineret Scene"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
-msgstr ""
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
msgid "Skeleton2D"
msgstr "Singleton"
diff --git a/editor/translations/de.po b/editor/translations/de.po
index ecc7ec9611..56eca938d0 100644
--- a/editor/translations/de.po
+++ b/editor/translations/de.po
@@ -7842,14 +7842,14 @@ msgstr ""
"hinzugefügt werden."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "Ruhe-Pose aus Knochen erstellen"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "Knochen in Ruhe-Pose setzen"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "Ruhe-Pose aus Knochen erstellen"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Skelett2D"
diff --git a/editor/translations/editor.pot b/editor/translations/editor.pot
index 778947373b..9d183271f6 100644
--- a/editor/translations/editor.pot
+++ b/editor/translations/editor.pot
@@ -7409,11 +7409,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
diff --git a/editor/translations/el.po b/editor/translations/el.po
index 07e55d9a90..3aa20da318 100644
--- a/editor/translations/el.po
+++ b/editor/translations/el.po
@@ -7863,14 +7863,14 @@ msgstr ""
"Αυτός ο σκελετός δεν έχει οστά, δώστε του κάποιους κόμβους-παιδιά Bone2D."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "ΔημιουÏγία Στάσης ΑδÏάνειας από Οστά"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "ΟÏισμός Στάσης ΑδÏάνειας σε Οστά"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "ΔημιουÏγία Στάσης ΑδÏάνειας από Οστά"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Skeleton2D"
diff --git a/editor/translations/eo.po b/editor/translations/eo.po
index 9ccaacaa39..c9dd8cfaa8 100644
--- a/editor/translations/eo.po
+++ b/editor/translations/eo.po
@@ -7747,11 +7747,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
diff --git a/editor/translations/es.po b/editor/translations/es.po
index b1b3ba6b69..fe7278beaf 100644
--- a/editor/translations/es.po
+++ b/editor/translations/es.po
@@ -43,7 +43,7 @@
# Dario <darlex259@gmail.com>, 2019.
# Adolfo Jayme Barrientos <fitojb@ubuntu.com>, 2019.
# Julián Luini <jluini@gmail.com>, 2020.
-# Victor S. <victorstancioiu@gmail.com>, 2020.
+# Victor S. <victorstancioiu@gmail.com>, 2020, 2021.
# henry rujano herrera <rujhen@gmail.com>, 2020.
# Megamega53 <Christopher.Morales21@myhunter.cuny.edu>, 2020.
# Serk Lintur <serk.lintur@gmail.com>, 2020.
@@ -76,8 +76,8 @@ msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-10-31 22:17+0000\n"
-"Last-Translator: Anderson Guzman Abreu <chicobello1111@gmail.com>\n"
+"PO-Revision-Date: 2021-11-11 16:02+0000\n"
+"Last-Translator: Victor S. <victorstancioiu@gmail.com>\n"
"Language-Team: Spanish <https://hosted.weblate.org/projects/godot-engine/"
"godot/es/>\n"
"Language: es\n"
@@ -85,7 +85,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -2941,7 +2941,7 @@ msgstr "Añadir nueva escena."
#: editor/editor_node.cpp
msgid "Scene"
-msgstr "Escenas"
+msgstr "Escena"
#: editor/editor_node.cpp
msgid "Go to previously opened scene."
@@ -7842,14 +7842,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "Este esqueleto no tiene huesos, crea algunos nodos Bone2D hijos."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "Crear Pose de Descanso a partir de los Huesos"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "Establecer Pose de Descanso en los Huesos"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "Crear Pose de Descanso a partir de los Huesos"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Skeleton2D"
diff --git a/editor/translations/es_AR.po b/editor/translations/es_AR.po
index 1276ebe607..271bb11040 100644
--- a/editor/translations/es_AR.po
+++ b/editor/translations/es_AR.po
@@ -7778,14 +7778,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "Este esqueleto no tiene huesos, crea algunos nodos Bone2D hijos."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "Crear Pose de Descanso a partir de Huesos"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "Asignar Pose de Descanso a Huesos"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "Crear Pose de Descanso a partir de Huesos"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Skeleton2D"
diff --git a/editor/translations/et.po b/editor/translations/et.po
index bc58f54d39..4dba826523 100644
--- a/editor/translations/et.po
+++ b/editor/translations/et.po
@@ -7514,11 +7514,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
diff --git a/editor/translations/eu.po b/editor/translations/eu.po
index 54b7590858..be9638fa8f 100644
--- a/editor/translations/eu.po
+++ b/editor/translations/eu.po
@@ -7491,11 +7491,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
diff --git a/editor/translations/fa.po b/editor/translations/fa.po
index cc894bba12..54715f5c9d 100644
--- a/editor/translations/fa.po
+++ b/editor/translations/fa.po
@@ -7814,15 +7814,15 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Set Rest Pose to Bones"
+msgstr ""
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
msgid "Create Rest Pose from Bones"
msgstr "پخش Ø³ÙØ§Ø±Ø´ÛŒ صحنه"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
-msgstr ""
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr ""
diff --git a/editor/translations/fi.po b/editor/translations/fi.po
index 830a83ccd8..b3fc0d100b 100644
--- a/editor/translations/fi.po
+++ b/editor/translations/fi.po
@@ -7727,14 +7727,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "Tällä luurangolla ei ole luita, luo joitakin Bone2D alisolmuja."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "Luo lepoasento luista"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "Aseta lepoasento luille"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "Luo lepoasento luista"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Skeleton2D"
diff --git a/editor/translations/fil.po b/editor/translations/fil.po
index 6452afd85e..84d4b6ff2a 100644
--- a/editor/translations/fil.po
+++ b/editor/translations/fil.po
@@ -7,12 +7,13 @@
# Bakainkorp <Ryan.Bautista86@myhunter.cuny.edu>, 2019.
# Jethro Parker <lionbearjet@hotmail.com>, 2020.
# Sven Sorupia <stsorupia@gmail.com>, 2021.
+# Napstaguy04 <brokenscreen3@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-06-07 23:43+0000\n"
-"Last-Translator: Sven Sorupia <stsorupia@gmail.com>\n"
+"PO-Revision-Date: 2021-11-19 08:44+0000\n"
+"Last-Translator: Napstaguy04 <brokenscreen3@gmail.com>\n"
"Language-Team: Filipino <https://hosted.weblate.org/projects/godot-engine/"
"godot/fil/>\n"
"Language: fil\n"
@@ -20,7 +21,7 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n != 1 && n != 2 && n != 3 && (n % 10 == 4 "
"|| n % 10 == 6 || n % 10 == 9);\n"
-"X-Generator: Weblate 4.7-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -7444,11 +7445,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -10869,7 +10870,7 @@ msgstr ""
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "General"
-msgstr ""
+msgstr "Pangkalahatan"
#: editor/project_settings_editor.cpp
msgid "Override For..."
diff --git a/editor/translations/fr.po b/editor/translations/fr.po
index 5661d9bb62..8da997112f 100644
--- a/editor/translations/fr.po
+++ b/editor/translations/fr.po
@@ -7876,14 +7876,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "Ce squelette n'a pas d'os, créez des nœuds Bone2D enfants."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "Créer la position de repos d'après les os"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "Régler la position de repos sur les os"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "Créer la position de repos d'après les os"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Squelette 2D"
diff --git a/editor/translations/ga.po b/editor/translations/ga.po
index 25b6ffc4eb..41c2b72c3f 100644
--- a/editor/translations/ga.po
+++ b/editor/translations/ga.po
@@ -7427,11 +7427,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
diff --git a/editor/translations/gl.po b/editor/translations/gl.po
index 7d310fe7f9..43be118f3d 100644
--- a/editor/translations/gl.po
+++ b/editor/translations/gl.po
@@ -7706,14 +7706,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "Este esqueleto non ten ósos; crea uns nodos fillo Bone2D."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "Crear Pose de Repouso a partir dos Ósos"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "Asignar Pose de Repouso aos Ósos"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "Crear Pose de Repouso a partir dos Ósos"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Skeleton2D"
diff --git a/editor/translations/he.po b/editor/translations/he.po
index 094b9c7850..8150eb063d 100644
--- a/editor/translations/he.po
+++ b/editor/translations/he.po
@@ -7831,15 +7831,15 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Set Rest Pose to Bones"
+msgstr ""
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
msgid "Create Rest Pose from Bones"
msgstr "נגינת סצנה בהת×מה ×ישית"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
-msgstr ""
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
msgid "Skeleton2D"
msgstr "יחידני"
diff --git a/editor/translations/hi.po b/editor/translations/hi.po
index 637ce36b91..c9d5128faa 100644
--- a/editor/translations/hi.po
+++ b/editor/translations/hi.po
@@ -7677,11 +7677,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
diff --git a/editor/translations/hr.po b/editor/translations/hr.po
index bc30be7c08..e4a3ff779e 100644
--- a/editor/translations/hr.po
+++ b/editor/translations/hr.po
@@ -7476,11 +7476,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
diff --git a/editor/translations/hu.po b/editor/translations/hu.po
index fbce7de381..06185da411 100644
--- a/editor/translations/hu.po
+++ b/editor/translations/hu.po
@@ -18,13 +18,15 @@
# Gergő Pistai <gergopistai@gmail.com>, 2021.
# Misi <varady.misi@gmail.com>, 2021.
# Looky1173 <lgl1173and2006@gmail.com>, 2021.
+# Frontrider <frontrider@tutanota.com>, 2021.
+# Andras Virag <snowflake71@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-10-31 22:17+0000\n"
-"Last-Translator: Looky1173 <lgl1173and2006@gmail.com>\n"
+"PO-Revision-Date: 2021-11-14 11:41+0000\n"
+"Last-Translator: Andras Virag <snowflake71@gmail.com>\n"
"Language-Team: Hungarian <https://hosted.weblate.org/projects/godot-engine/"
"godot/hu/>\n"
"Language: hu\n"
@@ -32,7 +34,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -2143,22 +2145,20 @@ msgid "Methods"
msgstr "Metódusok"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Theme Properties"
-msgstr "Téma Tulajdonságok"
+msgstr "Téma Tulajdonságai"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Enumerations"
-msgstr "Számlálók"
+msgstr "Listák"
#: editor/editor_help.cpp editor/plugins/theme_editor_plugin.cpp
msgid "Constants"
-msgstr "Konstansok"
+msgstr "Ãllandók"
#: editor/editor_help.cpp
msgid "Property Descriptions"
-msgstr "Tulajdonság leírások"
+msgstr "Tulajdonság leírásai"
#: editor/editor_help.cpp
msgid "(value)"
@@ -7738,11 +7738,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
diff --git a/editor/translations/id.po b/editor/translations/id.po
index 784409cddb..a52361e5c7 100644
--- a/editor/translations/id.po
+++ b/editor/translations/id.po
@@ -34,13 +34,14 @@
# undisputedgoose <diablodvorak@gmail.com>, 2021.
# Tsaqib Fadhlurrahman Soka <sokatsaqib@gmail.com>, 2021.
# Hilman Hazazi <hafizd.muhammad.kren.403@gmail.com>, 2021.
+# Brian <brian@brianthe.dev>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-10-15 04:32+0000\n"
-"Last-Translator: Tsaqib Fadhlurrahman Soka <sokatsaqib@gmail.com>\n"
+"PO-Revision-Date: 2021-11-19 08:43+0000\n"
+"Last-Translator: Brian <brian@brianthe.dev>\n"
"Language-Team: Indonesian <https://hosted.weblate.org/projects/godot-engine/"
"godot/id/>\n"
"Language: id\n"
@@ -48,7 +49,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -2430,9 +2431,8 @@ msgstr ""
"tidak terpenuhi."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Could not save one or more scenes!"
-msgstr "Tidak dapat memulai subproses!"
+msgstr "Tidak dapat menyimpan satu atau lebih skena!"
#: editor/editor_node.cpp
msgid "Save All Scenes"
@@ -7380,14 +7380,12 @@ msgid "Move Down"
msgstr "Turunkan"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Next Script"
-msgstr "Skrip berikutnya"
+msgstr "Skrip Berikutnya"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Previous Script"
-msgstr "Skrip sebelumnya"
+msgstr "Skrip Sebelumnya"
#: editor/plugins/script_editor_plugin.cpp
msgid "File"
@@ -7741,14 +7739,14 @@ msgstr ""
"Kerangka ini tidak memiliki pertulangan, buatlah beberapa anak node Bone2D."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "Buat Pose Istirahat dari Pertulangan"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "Atur Pose Istirahat ke Pertulangan"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "Buat Pose Istirahat dari Pertulangan"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Skeleton2D"
@@ -7805,9 +7803,8 @@ msgid "Left Orthogonal"
msgstr "Ortogonal Kiri"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Left Perspective"
-msgstr "Perspektif"
+msgstr "Perspektif Kiri"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Right Orthogonal"
@@ -7908,7 +7905,7 @@ msgstr "Dongak:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Yaw:"
-msgstr ""
+msgstr "Yaw:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Size:"
@@ -7940,7 +7937,7 @@ msgstr "Sudut:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "FPS: %d (%s ms)"
-msgstr ""
+msgstr "FPS: %d (%s ms)"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Top View."
@@ -8075,9 +8072,8 @@ msgid "Freelook Slow Modifier"
msgstr "Pengubah Lambat Tampilan Bebas"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Toggle Camera Preview"
-msgstr "Ubah Ukuran Kamera"
+msgstr "Alihkan Pratinjau Kamera"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Rotation Locked"
diff --git a/editor/translations/is.po b/editor/translations/is.po
index 4c9221925a..fcf380d7c8 100644
--- a/editor/translations/is.po
+++ b/editor/translations/is.po
@@ -7511,11 +7511,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
diff --git a/editor/translations/it.po b/editor/translations/it.po
index 5dfecbf0e8..dded7242e0 100644
--- a/editor/translations/it.po
+++ b/editor/translations/it.po
@@ -40,7 +40,7 @@
# Mirko Soppelsa <miknsop@gmail.com>, 2019, 2020, 2021.
# No <kingofwizards.kw7@gmail.com>, 2019.
# StarFang208 <polaritymanx@yahoo.it>, 2019.
-# Katia Piazza <gydey@ridiculousglitch.com>, 2019.
+# Katia Piazza <gydey@ridiculousglitch.com>, 2019, 2021.
# nickfla1 <lanterniniflavio@gmail.com>, 2019.
# Fabio Iotti <fabiogiopla@gmail.com>, 2020.
# Douglas Fiedler <dognew@gmail.com>, 2020.
@@ -61,12 +61,15 @@
# Daniele Basso <tiziodcaio@gmail.com>, 2021.
# Riteo Siuga <riteo@posteo.net>, 2021.
# Luigi <luibass92@live.it>, 2021.
+# Micky <micheledevita2@gmail.com>, 2021.
+# Fabio Plos <altre0cose@gmail.com>, 2021.
+# Theraloss <danilo.polani@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-10-24 20:52+0000\n"
+"PO-Revision-Date: 2021-11-19 08:43+0000\n"
"Last-Translator: Riteo Siuga <riteo@posteo.net>\n"
"Language-Team: Italian <https://hosted.weblate.org/projects/godot-engine/"
"godot/it/>\n"
@@ -75,7 +78,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -674,9 +677,8 @@ msgid "Use Bezier Curves"
msgstr "Usa le curve di Bézier"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Create RESET Track(s)"
-msgstr "Crea delle tracce di reimpostazione"
+msgstr "Crea traccia/e di rispristino"
#: editor/animation_track_editor.cpp
msgid "Anim. Optimizer"
@@ -1417,14 +1419,12 @@ msgid "Mute"
msgstr "Muto"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Bypass"
-msgstr "Bypassa"
+msgstr "Aggira"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Bus Options"
-msgstr "Opzioni del bus"
+msgstr "Opzioni Bus"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
@@ -1437,7 +1437,7 @@ msgstr "Ripristina il volume"
#: editor/editor_audio_buses.cpp
msgid "Delete Effect"
-msgstr "Elimina l'effetto"
+msgstr "Elimina Effetto"
#: editor/editor_audio_buses.cpp
msgid "Audio"
@@ -1449,7 +1449,7 @@ msgstr "Aggiungi un bus audio"
#: editor/editor_audio_buses.cpp
msgid "Master bus can't be deleted!"
-msgstr "Il bus principale non può essere cancellato!"
+msgstr "Il bus principale non può essere eliminato!"
#: editor/editor_audio_buses.cpp
msgid "Delete Audio Bus"
@@ -1523,7 +1523,7 @@ msgstr "Salva questa disposizione di bus in un file."
#: editor/editor_audio_buses.cpp editor/import_dock.cpp
msgid "Load Default"
-msgstr "Carica i predefiniti"
+msgstr "Carica predefinita"
#: editor/editor_audio_buses.cpp
msgid "Load the default Bus Layout."
@@ -1547,43 +1547,35 @@ msgstr "Non deve collidere con il nome di una classe del motore esistente."
#: editor/editor_autoload_settings.cpp
msgid "Must not collide with an existing built-in type name."
-msgstr "Non deve collidere con il nome di un tipo built-in esistente."
+msgstr "Non deve confliggere con il nome di un tipo predefinito già esistente."
#: editor/editor_autoload_settings.cpp
msgid "Must not collide with an existing global constant name."
msgstr "Non deve collidere con il nome di una costante globale esistente."
#: editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "Keyword cannot be used as an autoload name."
-msgstr ""
-"Una parola chiave non può essere utilizzata come nome di un caricamento "
-"automatico."
+msgstr "Una parola chiave non può essere utilizzata come nome di un Autoload."
#: editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "Autoload '%s' already exists!"
msgstr "L'Autoload \"%s\" esiste già!"
#: editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "Rename Autoload"
-msgstr "Rinomina un Autoload"
+msgstr "Rinomina Autocaricamento"
#: editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "Toggle AutoLoad Globals"
-msgstr "Commuta AutoLoad globals"
+msgstr "Commuta Autocaricamenti Globali"
#: editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "Move Autoload"
-msgstr "Sposta un Autoload"
+msgstr "Sposta l'Autocaricamento"
#: editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "Remove Autoload"
-msgstr "Rimuovi un Autoload"
+msgstr "Rimuovi l'autocaricamento"
#: editor/editor_autoload_settings.cpp editor/editor_plugin_settings.cpp
msgid "Enable"
@@ -1815,7 +1807,7 @@ msgstr "Permette di modificare gli script usando l'editor di script integrato."
#: editor/editor_feature_profile.cpp
msgid "Provides built-in access to the Asset Library."
-msgstr "Offre un accesso alla libreria dei contenuti integrato."
+msgstr "Offre un accesso incorporato alla Libreria dei Contenuti."
#: editor/editor_feature_profile.cpp
msgid "Allows editing the node hierarchy in the Scene dock."
@@ -1843,9 +1835,8 @@ msgstr ""
"individuali. Richiede il pannello del file system per funzionare."
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "(current)"
-msgstr "(Corrente)"
+msgstr "(Attuale)"
#: editor/editor_feature_profile.cpp
msgid "(none)"
@@ -1888,19 +1879,16 @@ msgid "Enable Contextual Editor"
msgstr "Abilita l'editor contestuale"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Class Properties:"
-msgstr "Proprietà:"
+msgstr "Proprietà delle classi:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Main Features:"
-msgstr "Funzionalità"
+msgstr "Funzionalità Principali"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Nodes and Classes:"
-msgstr "Classi abilitate:"
+msgstr "Nodi e Classi:"
#: editor/editor_feature_profile.cpp
msgid "File '%s' format is invalid, import aborted."
@@ -1919,23 +1907,20 @@ msgid "Error saving profile to path: '%s'."
msgstr "Errore di salvataggio del profilo nel percorso: \"%s\"."
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Reset to Default"
-msgstr "Ripristinare le impostazioni predefinite"
+msgstr "Ripristina le impostazioni predefinite"
#: editor/editor_feature_profile.cpp
msgid "Current Profile:"
msgstr "Profilo attuale:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Create Profile"
-msgstr "Cancella il profilo"
+msgstr "Crea un profilo"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Remove Profile"
-msgstr "Rimuovi Tile"
+msgstr "Rimuovi un profilo"
#: editor/editor_feature_profile.cpp
msgid "Available Profiles:"
@@ -1955,14 +1940,12 @@ msgid "Export"
msgstr "Esporta"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Configure Selected Profile:"
-msgstr "Profilo attuale:"
+msgstr "Configura il profilo selezionato:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Extra Options:"
-msgstr "Opzioni Texture"
+msgstr "Opzioni Addizionali"
#: editor/editor_feature_profile.cpp
msgid "Create or import a profile to edit available classes and properties."
@@ -1995,9 +1978,8 @@ msgid "Select Current Folder"
msgstr "Seleziona la cartella attuale"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
-#, fuzzy
msgid "File exists, overwrite?"
-msgstr "File esistente, sovrascriverlo?"
+msgstr "File esistente, sovrascrivere?"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Select This Folder"
@@ -2180,9 +2162,8 @@ msgid "Description"
msgstr "Descrizione"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Online Tutorials"
-msgstr "Tutorial Online"
+msgstr "Corsi Online"
#: editor/editor_help.cpp
msgid "Properties"
@@ -2341,9 +2322,8 @@ msgid "Clear"
msgstr "Rimuovi tutto"
#: editor/editor_log.cpp
-#, fuzzy
msgid "Clear Output"
-msgstr "Svuota output"
+msgstr "Svuota l'output"
#: editor/editor_network_profiler.cpp editor/editor_node.cpp
#: editor/editor_profiler.cpp
@@ -2500,9 +2480,8 @@ msgstr ""
"eredità) non siano state soddisfatte."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Could not save one or more scenes!"
-msgstr "Impossibile salvare la texture convertita:"
+msgstr "Impossibile salvare una o più scene!"
#: editor/editor_node.cpp
msgid "Save All Scenes"
@@ -2543,7 +2522,7 @@ msgid ""
"To restore the Default layout to its base settings, use the Delete Layout "
"option and delete the Default layout."
msgstr ""
-"Disposzione predefinita dell'editor sovrascritta.\n"
+"Disposizione predefinita dell'editor sovrascritta.\n"
"Per ripristinare la disposizione predefinita alle sue impostazioni di base, "
"usare l'opzione elimina layout ed eliminare la disposizione predefinita."
@@ -2646,7 +2625,7 @@ msgstr "Salvare le modifiche a \"%s\" prima di chiudere?"
#: editor/editor_node.cpp
msgid "%s no longer exists! Please specify a new save location."
-msgstr ""
+msgstr "%s non esiste più! Specificare una nuova posizione di salvataggio"
#: editor/editor_node.cpp
msgid ""
@@ -2657,11 +2636,12 @@ msgstr ""
"sono state salvate comunque."
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"A root node is required to save the scene. You can add a root node using the "
"Scene tree dock."
-msgstr "È necessario un nodo radice per salvare la scena."
+msgstr ""
+"È necessario un nodo principale per salvare la scena. Puoi aggiungerne uno "
+"nel pannello di scena"
#: editor/editor_node.cpp
msgid "Save Scene As..."
@@ -2693,29 +2673,27 @@ msgstr "Scena attuale non salvata. Aprire comunque?"
#: editor/editor_node.cpp
msgid "Can't undo while mouse buttons are pressed."
-msgstr ""
+msgstr "Impossible annullare quando i bottoni del mouse sono premuti"
#: editor/editor_node.cpp
msgid "Nothing to undo."
-msgstr ""
+msgstr "Niente da annullare."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Undo: %s"
msgstr "Annulla"
#: editor/editor_node.cpp
msgid "Can't redo while mouse buttons are pressed."
-msgstr ""
+msgstr "Impossibile ripetere mentre si premono pulsanti del mouse."
#: editor/editor_node.cpp
msgid "Nothing to redo."
-msgstr ""
+msgstr "Niente da ripetere."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Redo: %s"
-msgstr "Rifai"
+msgstr "Ripeti: %s"
#: editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
@@ -3072,9 +3050,8 @@ msgid "Orphan Resource Explorer..."
msgstr "Explorer di risorse orfane…"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Reload Current Project"
-msgstr "Rinomina progetto"
+msgstr "Rinomina il progetto corrente"
#: editor/editor_node.cpp
msgid "Quit to Project List"
@@ -3169,7 +3146,6 @@ msgid "Synchronize Script Changes"
msgstr "Sincronizza le modifiche degli script"
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"When this option is enabled, any script that is saved will be reloaded in "
"the running project.\n"
@@ -3194,12 +3170,10 @@ msgid "Editor Layout"
msgstr "Disposizione dell'editor"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Take Screenshot"
-msgstr "Acquisisci una schermata"
+msgstr "Acquisisci la schermata"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Screenshots are stored in the Editor Data/Settings Folder."
msgstr ""
"Gli screenshot vengono memorizzati nella cartella Data/Settings dell'editor."
@@ -3237,9 +3211,8 @@ msgid "Help"
msgstr "Aiuto"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Online Documentation"
-msgstr "Apri la documentazione"
+msgstr "Documentazione in linea"
#: editor/editor_node.cpp
msgid "Questions & Answers"
@@ -3250,21 +3223,18 @@ msgid "Report a Bug"
msgstr "Segnala un problema"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Suggest a Feature"
-msgstr "Imposta un Valore"
+msgstr "Suggerisci una funzionalità"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Send Docs Feedback"
-msgstr "Valuta la documentazione"
+msgstr "Manda un parere sulla documentazione"
#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
msgid "Community"
msgstr "Comunità"
#: editor/editor_node.cpp
-#, fuzzy
msgid "About Godot"
msgstr "Informazioni su Godot"
@@ -3363,14 +3333,12 @@ msgid "Manage Templates"
msgstr "Gestisci i modelli d'esportazione"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Install from file"
-msgstr "Installa Da File"
+msgstr "Installa da un file"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Select android sources file"
-msgstr "Seleziona una Mesh Sorgente:"
+msgstr "Selezionare l'archivio delle sorgenti per android"
#: editor/editor_node.cpp
msgid ""
@@ -3421,9 +3389,8 @@ msgid "Merge With Existing"
msgstr "Unisci con una esistente"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Apply MeshInstance Transforms"
-msgstr "Cambia la trasformazione di un'animazione"
+msgstr "Applica le trasformazioni dei MeshInstance"
#: editor/editor_node.cpp
msgid "Open & Run a Script"
@@ -3460,9 +3427,8 @@ msgid "Select"
msgstr "Seleziona"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Select Current"
-msgstr "Seleziona la cartella attuale"
+msgstr "Seleziona l'attuale"
#: editor/editor_node.cpp
msgid "Open 2D Editor"
@@ -3499,7 +3465,7 @@ msgstr "Nessuna sottorisorsa trovata."
#: editor/editor_path.cpp
#, fuzzy
msgid "Open a list of sub-resources."
-msgstr "Nessuna sottorisorsa trovata."
+msgstr "Apre una lista di sottorisorse."
#: editor/editor_plugin.cpp
msgid "Creating Mesh Previews"
@@ -3526,14 +3492,12 @@ msgid "Update"
msgstr "Aggiorna"
#: editor/editor_plugin_settings.cpp
-#, fuzzy
msgid "Version"
-msgstr "Versione:"
+msgstr "Versione"
#: editor/editor_plugin_settings.cpp
-#, fuzzy
msgid "Author"
-msgstr "Autori"
+msgstr "Autore"
#: editor/editor_plugin_settings.cpp
#: editor/plugins/version_control_editor_plugin.cpp
@@ -3546,9 +3510,8 @@ msgid "Measure:"
msgstr "Misura:"
#: editor/editor_profiler.cpp
-#, fuzzy
msgid "Frame Time (ms)"
-msgstr "Tempo fotogramma (sec)"
+msgstr "Durata di un fotogramma (ms)"
#: editor/editor_profiler.cpp
#, fuzzy
@@ -3638,7 +3601,6 @@ msgstr ""
"Esse devono appartenere a una scena."
#: editor/editor_properties.cpp
-#, fuzzy
msgid ""
"Can't create a ViewportTexture on this resource because it's not set as "
"local to scene.\n"
@@ -3647,8 +3609,8 @@ msgid ""
msgstr ""
"Impossibile creare un VieportTexture su questa risorsa perché non è stata "
"impostata come locale alla scena.\n"
-"Per favore attivare la properietà \"local to scene\" su di essa (e su tutte "
-"quelle che la contengono fino ad arrivare a un nodo)."
+"Si prega di attivare la proprietà \"local to scene\" su di essa (e su tutte "
+"le risorse che la contengono fino ad arrivare a un nodo)."
#: editor/editor_properties.cpp editor/property_editor.cpp
msgid "Pick a Viewport"
@@ -3693,13 +3655,13 @@ msgstr ""
"questa proprietà (%s)."
#: editor/editor_resource_picker.cpp
+#, fuzzy
msgid "Quick Load"
-msgstr ""
+msgstr "Caricamento rapido"
#: editor/editor_resource_picker.cpp editor/property_editor.cpp
-#, fuzzy
msgid "Make Unique"
-msgstr "Rendi unico"
+msgstr "Rendi Unico"
#: editor/editor_resource_picker.cpp
#: editor/plugins/animation_blend_space_1d_editor.cpp
@@ -3772,8 +3734,8 @@ msgstr "Hai dimenticato il metodo \"_run\"?"
#, fuzzy
msgid "Hold %s to round to integers. Hold Shift for more precise changes."
msgstr ""
-"Tenere premuto il tasto Ctrl per arrotondare ai numeri interi. Tenere "
-"premuto Shift per modifiche più precise."
+"Tenere premuto %s per arrotondare ai numeri interi. Tenere premuto Shift per "
+"modifiche più precise."
#: editor/editor_sub_scene.cpp
msgid "Select Node(s) to Import"
@@ -3823,14 +3785,13 @@ msgid "Connecting to the mirror..."
msgstr "Connessione al mirror in corso..."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Can't resolve the requested address."
-msgstr "Impossibile risolvere l'hostname:"
+msgstr "Impossibile risolvere l'hostname."
#: editor/export_template_manager.cpp
#, fuzzy
msgid "Can't connect to the mirror."
-msgstr "Impossibile connetersi all'host:"
+msgstr "Impossibile connettersi all'host."
#: editor/export_template_manager.cpp
#, fuzzy
@@ -3845,12 +3806,11 @@ msgstr "Richiesta fallita."
#: editor/export_template_manager.cpp
#, fuzzy
msgid "Request ended up in a redirect loop."
-msgstr "Richiesta fallita, troppi ridirezionamenti"
+msgstr "Richiesta bloccata in un ciclo di reindirizzamento."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Request failed:"
-msgstr "Richiesta fallita."
+msgstr "Richiesta fallita:"
#: editor/export_template_manager.cpp
msgid "Download complete; extracting templates..."
@@ -3865,8 +3825,8 @@ msgid ""
"Templates installation failed.\n"
"The problematic templates archives can be found at '%s'."
msgstr ""
-"Installazione del template fallita.\n"
-"Gli archivi dei template problematici possono essere trovati qui: \"%s\"."
+"Installazione dei modelli fallita.\n"
+"Gli archivi dei modelli problematici possono essere trovati qui: \"%s\"."
#: editor/export_template_manager.cpp
msgid "Error getting the list of mirrors."
@@ -3888,8 +3848,8 @@ msgid ""
"No download links found for this version. Direct download is only available "
"for official releases."
msgstr ""
-"Nessun collegamento di download trovato per questa versione. I download "
-"diretti sono disponibili solo per i rilasci ufficiali."
+"Nessun link per il download trovato per questa versione. I download diretti "
+"sono disponibili solo per i rilasci ufficiali."
#: editor/export_template_manager.cpp
msgid "Disconnected"
@@ -3901,7 +3861,7 @@ msgstr "Risolvendo"
#: editor/export_template_manager.cpp
msgid "Can't Resolve"
-msgstr "Impossibile Risolvere"
+msgstr "Impossibile risolvere"
#: editor/export_template_manager.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
@@ -3936,7 +3896,7 @@ msgstr "Errore Handshake SSL"
#: editor/export_template_manager.cpp
#, fuzzy
msgid "Can't open the export templates file."
-msgstr "Impossibile aprire zip dei template d'esportazionie."
+msgstr "Impossibile aprire zip dei template d'esportazione."
#: editor/export_template_manager.cpp
#, fuzzy
@@ -3955,7 +3915,7 @@ msgstr "Errore di creazione del percorso per i template:"
#: editor/export_template_manager.cpp
msgid "Extracting Export Templates"
-msgstr "Estrazione Templates d'Esportazione"
+msgstr "Estrazione Template d'Esportazione"
#: editor/export_template_manager.cpp
msgid "Importing:"
@@ -4003,7 +3963,7 @@ msgstr "Disinstalla"
#: editor/export_template_manager.cpp
#, fuzzy
msgid "Uninstall templates for the current version."
-msgstr "Valore iniziale per il contatore"
+msgstr "Disinstalla template dalla versione attuale."
#: editor/export_template_manager.cpp
#, fuzzy
@@ -4041,12 +4001,11 @@ msgstr ""
#: editor/export_template_manager.cpp
#, fuzzy
msgid "Install from File"
-msgstr "Installa Da File"
+msgstr "Installa da File"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Install templates from a local file."
-msgstr "Importa i modelli da un file ZIP"
+msgstr "Importa i modelli da un file locale."
#: editor/export_template_manager.cpp editor/find_in_files.cpp
#: editor/progress_dialog.cpp scene/gui/dialogs.cpp
@@ -4056,21 +4015,19 @@ msgstr "Annulla"
#: editor/export_template_manager.cpp
#, fuzzy
msgid "Cancel the download of the templates."
-msgstr "Impossibile aprire zip dei template d'esportazionie."
+msgstr "Annulla lo scaricamento dei modelli."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Other Installed Versions:"
-msgstr "Versioni Installate:"
+msgstr "Altre Versioni Installate:"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Uninstall Template"
-msgstr "Disinstalla"
+msgstr "Disinstalla Modello"
#: editor/export_template_manager.cpp
msgid "Select Template File"
-msgstr "Seleziona file template"
+msgstr "Seleziona File Modello"
#: editor/export_template_manager.cpp
msgid "Godot Export Templates"
@@ -4098,7 +4055,7 @@ msgstr ""
msgid ""
"Importing has been disabled for this file, so it can't be opened for editing."
msgstr ""
-"L'importazione è stata disabilitata per questo file, perciò non possiamo "
+"L'importazione è stata disabilitata per questo file, perciò non è possibile "
"aprirlo per modificarlo."
#: editor/filesystem_dock.cpp
@@ -4131,7 +4088,7 @@ msgstr "Il nome fornito contiene caratteri non validi."
#: editor/filesystem_dock.cpp
msgid "A file or folder with this name already exists."
-msgstr "Un file o cartella con questo nome é già esistente."
+msgstr "Un file o cartella con questo nome è già esistente."
#: editor/filesystem_dock.cpp
msgid "Name contains invalid characters."
@@ -4163,15 +4120,15 @@ msgstr "Rinomina cartella:"
#: editor/filesystem_dock.cpp
msgid "Duplicating file:"
-msgstr "Duplicando file:"
+msgstr "Duplica file:"
#: editor/filesystem_dock.cpp
msgid "Duplicating folder:"
-msgstr "Duplicando cartella:"
+msgstr "Duplica cartella:"
#: editor/filesystem_dock.cpp
msgid "New Inherited Scene"
-msgstr "Nuova scena ereditata"
+msgstr "Nuova Scena Ereditata"
#: editor/filesystem_dock.cpp
msgid "Set As Main Scene"
@@ -4179,7 +4136,7 @@ msgstr "Imposta Come Scena Principale"
#: editor/filesystem_dock.cpp
msgid "Open Scenes"
-msgstr "Apri scene"
+msgstr "Apri Scene"
#: editor/filesystem_dock.cpp
msgid "Instance"
@@ -4187,7 +4144,7 @@ msgstr "Istanza"
#: editor/filesystem_dock.cpp
msgid "Add to Favorites"
-msgstr "Aggiungi ai preferiti"
+msgstr "Aggiungi ai Preferiti"
#: editor/filesystem_dock.cpp
msgid "Remove from Favorites"
@@ -4207,7 +4164,7 @@ msgstr "Sposta in..."
#: editor/filesystem_dock.cpp
msgid "New Scene..."
-msgstr "Nuova scena…"
+msgstr "Nuova Scena…"
#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
msgid "New Script..."
@@ -4230,35 +4187,33 @@ msgid "Collapse All"
msgstr "Comprimi Tutto"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Sort files"
-msgstr "Cerca file"
+msgstr "Ordina file"
#: editor/filesystem_dock.cpp
msgid "Sort by Name (Ascending)"
-msgstr "Ordina per nome (crescente)"
+msgstr "Ordina per nome (Crescente)"
#: editor/filesystem_dock.cpp
msgid "Sort by Name (Descending)"
-msgstr "Ordina per nome (decrescente)"
+msgstr "Ordina per nome (Decrescente)"
#: editor/filesystem_dock.cpp
msgid "Sort by Type (Ascending)"
-msgstr "Ordina per tipo (crescente)"
+msgstr "Ordina per tipo (Crescente)"
#: editor/filesystem_dock.cpp
msgid "Sort by Type (Descending)"
-msgstr "Ordina per tipo (decrescente)"
+msgstr "Ordina per tipo (Decrescente)"
#: editor/filesystem_dock.cpp
-#, fuzzy
msgid "Sort by Last Modified"
-msgstr "Ultima Modifica"
+msgstr "Ordina per Ultima Modifica"
#: editor/filesystem_dock.cpp
#, fuzzy
msgid "Sort by First Modified"
-msgstr "Ultima Modifica"
+msgstr "Ordina per Prima Modifica"
#: editor/filesystem_dock.cpp
msgid "Duplicate..."
@@ -4282,7 +4237,7 @@ msgstr "Cartella/File successivo"
#: editor/filesystem_dock.cpp
msgid "Re-Scan Filesystem"
-msgstr "Riscansiona il Filesystem"
+msgstr "Ri-scansiona il Filesystem"
#: editor/filesystem_dock.cpp
msgid "Toggle Split Mode"
@@ -4325,7 +4280,7 @@ msgstr "Crea Script"
#: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp
msgid "Find in Files"
-msgstr "Trova nei file"
+msgstr "Trova nei File"
#: editor/find_in_files.cpp
msgid "Find:"
@@ -4365,8 +4320,9 @@ msgid "Replace: "
msgstr "Sostituisci: "
#: editor/find_in_files.cpp
+#, fuzzy
msgid "Replace all (no undo)"
-msgstr "Sostituisci tutto (no undo)"
+msgstr "Sostituisci tutto (non annullabile)"
#: editor/find_in_files.cpp
msgid "Searching..."
@@ -4414,7 +4370,7 @@ msgstr "Gruppi"
#: editor/groups_editor.cpp
msgid "Nodes Not in Group"
-msgstr "Nodi non nel Gruppo"
+msgstr "Nodi Non nel Gruppo"
#: editor/groups_editor.cpp editor/scene_tree_dock.cpp
#: editor/scene_tree_editor.cpp
@@ -4423,7 +4379,7 @@ msgstr "Filtra nodi"
#: editor/groups_editor.cpp
msgid "Nodes in Group"
-msgstr "Nodi in Gruppo"
+msgstr "Nodi nel Gruppo"
#: editor/groups_editor.cpp
msgid "Empty groups will be automatically removed."
@@ -4533,7 +4489,7 @@ msgstr "Ripristinare le impostazioni predefinite"
#: editor/import_dock.cpp
msgid "Keep File (No Import)"
-msgstr "Mantieni il file ( Non importare)"
+msgstr "Mantieni il File (Non Importare)"
#: editor/import_dock.cpp
msgid "%d Files"
@@ -4558,6 +4514,11 @@ msgid ""
"Selecting another resource in the FileSystem dock without clicking Reimport "
"first will discard changes made in the Import dock."
msgstr ""
+"Hai modifiche non applicate in sospeso. Cliccare Reimporta per applicare le "
+"modifiche effettuate alle opzioni di importazione.\n"
+"Selezionare un'altra risorsa nel pannello del file system senza prima "
+"cliccare su Reimporta annullerà le modifiche effettuate nel riquadro di "
+"Importazione."
#: editor/import_dock.cpp
msgid "Import As:"
@@ -4587,14 +4548,12 @@ msgid "Failed to load resource."
msgstr "Caricamento della risorsa fallito."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Copy Properties"
-msgstr "Proprietà"
+msgstr "Copia Proprietà"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Paste Properties"
-msgstr "Proprietà"
+msgstr "Incolla Proprietà"
#: editor/inspector_dock.cpp
msgid "Make Sub-Resources Unique"
@@ -4610,7 +4569,7 @@ msgstr "Carica una risorsa esistente dal disco e modificala."
#: editor/inspector_dock.cpp
msgid "Save the currently edited resource."
-msgstr "Salva la risorsa in modifica."
+msgstr "Salva la risorsa attualmente in modifica."
#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
#: editor/plugins/script_editor_plugin.cpp
@@ -4619,27 +4578,24 @@ msgid "Save As..."
msgstr "Salva Come..."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Extra resource options."
-msgstr "Non è nel percorso risorse."
+msgstr "Ulteriori opzioni di risorsa."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Edit Resource from Clipboard"
-msgstr "Modifica gli appunti delle risorse"
+msgstr "Modifica la Risorsa dagli Appunti"
#: editor/inspector_dock.cpp
msgid "Copy Resource"
msgstr "Copia Risorsa"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Make Resource Built-In"
-msgstr "Rendi Built-In"
+msgstr "Rendi Risorsa Integrata"
#: editor/inspector_dock.cpp
msgid "Go to the previous edited object in history."
-msgstr "Vai all'ultimo oggetto modificato nella cronologia."
+msgstr "Vai al precedente oggetto modificato nella cronologia."
#: editor/inspector_dock.cpp
msgid "Go to the next edited object in history."
@@ -4650,26 +4606,24 @@ msgid "History of recently edited objects."
msgstr "Cronologia di oggetti recentemente modificati."
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Open documentation for this object."
-msgstr "Apri la documentazione"
+msgstr "Apri la documentazione per questo oggetto."
#: editor/inspector_dock.cpp editor/scene_tree_dock.cpp
msgid "Open Documentation"
-msgstr "Apri la documentazione"
+msgstr "Apri la Documentazione"
#: editor/inspector_dock.cpp
msgid "Filter properties"
msgstr "Filtra proprietà"
#: editor/inspector_dock.cpp
-#, fuzzy
msgid "Manage object properties."
-msgstr "Proprietà oggetto."
+msgstr "Gestisci proprietà oggetto."
#: editor/inspector_dock.cpp
msgid "Changes may be lost!"
-msgstr "I cambiamenti potrebbero essere persi!"
+msgstr "Le modifiche potrebbero essere perse!"
#: editor/multi_node_edit.cpp
msgid "MultiNode Set"
@@ -4677,7 +4631,7 @@ msgstr "MultiNode Set"
#: editor/node_dock.cpp
msgid "Select a single node to edit its signals and groups."
-msgstr "Seleziona un singolo nodo per eliminare i suoi segnali e gruppi."
+msgstr "Seleziona un singolo nodo per modificarne i segnali e gruppi."
#: editor/plugin_config_dialog.cpp
msgid "Edit a Plugin"
@@ -4728,6 +4682,7 @@ msgid "Create points."
msgstr "Crea punti."
#: editor/plugins/abstract_polygon_2d_editor.cpp
+#, fuzzy
msgid ""
"Edit points.\n"
"LMB: Move Point\n"
@@ -4904,7 +4859,7 @@ msgstr "Cancella punti e triangoli."
#: editor/plugins/animation_blend_space_2d_editor.cpp
msgid "Generate blend triangles automatically (instead of manually)"
-msgstr "Genera i tringoli di fusione automaticamente (anzichè manualmente)"
+msgstr "Genera i triangoli di fusione automaticamente (anziché manualmente)"
#: editor/plugins/animation_blend_space_2d_editor.cpp
#: editor/plugins/animation_tree_player_editor_plugin.cpp
@@ -4923,7 +4878,7 @@ msgstr "Modifica Filtri"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
msgid "Output node can't be added to the blend tree."
-msgstr "Il nodo di output non può essere aggiunto all'albero di fusione."
+msgstr "Il nodo in output non può essere aggiunto al BlendTree."
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
msgid "Add Node to BlendTree"
@@ -5101,7 +5056,7 @@ msgstr "Nessuna animazione da modificare!"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation backwards from current pos. (A)"
msgstr ""
-"Esegui la seguente animazione al contrario dalla posizione corrente (A)"
+"Esegui la seguente animazione al contrario dalla posizione corrente. (A)"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation backwards from end. (Shift+A)"
@@ -5113,11 +5068,11 @@ msgstr "Ferma il playback dell'animazione. (S)"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation from start. (Shift+D)"
-msgstr "Esegui l'animazione seguente dall'inizio (Shift+D)"
+msgstr "Esegui la seguente l'animazione dall'inizio. (Shift+D)"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation from current pos. (D)"
-msgstr "Esegui la seguente animazione dalla posizione corrente (D)"
+msgstr "Esegui la seguente animazione dalla posizione corrente. (D)"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation position (in seconds)."
@@ -5150,7 +5105,7 @@ msgstr "Apri nell'Inspector"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Display list of animations in player."
-msgstr "Mostra una lista di animazioni nel player."
+msgstr "Mostra la lista di animazioni nel player."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Autoplay on Load"
@@ -5162,7 +5117,7 @@ msgstr "Abilita l'Onion Skinning"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Onion Skinning Options"
-msgstr "Opzioni dell'onion skinning"
+msgstr "Opzioni dell'Onion Skinning"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Directions"
@@ -5322,7 +5277,7 @@ msgstr ""
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Set the end animation. This is useful for sub-transitions."
-msgstr "Assegna l'animazione finale. Questo è utile per le sotto-transizioni."
+msgstr "Assegna l'animazione finale. Utile per le sotto-transizioni."
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Transition: "
@@ -5330,7 +5285,7 @@ msgstr "Transizione: "
#: editor/plugins/animation_state_machine_editor.cpp
msgid "Play Mode:"
-msgstr "Modalità Gioco:"
+msgstr "Modalità Riproduzione:"
#: editor/plugins/animation_tree_editor_plugin.cpp
#: editor/plugins/animation_tree_player_editor_plugin.cpp
@@ -5364,7 +5319,7 @@ msgstr "Mischia"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Auto Restart:"
-msgstr "Restart Automatico:"
+msgstr "Riavvio Automatico:"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Restart (s):"
@@ -5372,7 +5327,7 @@ msgstr "Riavvia (s):"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Random Restart (s):"
-msgstr "Restart Casuale(i):"
+msgstr "Riavvio Casuale (s):"
#: editor/plugins/animation_tree_player_editor_plugin.cpp
msgid "Start!"
@@ -5515,7 +5470,7 @@ msgstr "Impossibile risolvere."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, return code:"
-msgstr "Richiesta fallita, codice di return:"
+msgstr "Richiesta fallita, codice ritornato:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Cannot save response to:"
@@ -5531,7 +5486,7 @@ msgstr "Richiesta fallita, troppi ridirezionamenti"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Redirect loop."
-msgstr "Ridirigi loop."
+msgstr "Ciclo di reindirizzamento."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Request failed, timeout"
@@ -5547,7 +5502,7 @@ msgstr "Fallito:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Bad download hash, assuming file has been tampered with."
-msgstr "Hash di download non buono, si presume il file sia stato manipolato."
+msgstr "Hash di download errato, si presume il file sia stato manomesso."
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Expected:"
@@ -5559,11 +5514,11 @@ msgstr "Ottenuto:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Failed SHA-256 hash check"
-msgstr "Check has SHA-256 fallito"
+msgstr "Controllo hash SHA-256 fallito"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Asset Download Error:"
-msgstr "Errore di scaricamento del contenuto:"
+msgstr "Errore di download del contenuto:"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Downloading (%s / %s)..."
@@ -5599,7 +5554,7 @@ msgstr "Errore durante il download"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Download for this asset is already in progress!"
-msgstr "Lo scaricamento di questo contenuto è già in corso!"
+msgstr "Il download di questo contenuto è già in corso!"
#: editor/plugins/asset_library_editor_plugin.cpp
msgid "Recently Updated"
@@ -5695,7 +5650,7 @@ msgstr "File ZIP dei contenuti"
#: editor/plugins/audio_stream_editor_plugin.cpp
msgid "Audio Preview Play/Pause"
-msgstr "Avvia/Pausa l'anteprima audio"
+msgstr "Riproduci/Pausa Anteprima Audio"
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid ""
@@ -5771,7 +5726,7 @@ msgstr "Passo della griglia:"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Primary Line Every:"
-msgstr "Line Primaria Ogni:"
+msgstr "Linea Principale Ogni:"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "steps"
@@ -5860,15 +5815,13 @@ msgstr "Sposta CanvasItem \"%s\" a (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Locked"
-msgstr "Blocca selezionato"
+msgstr "Bloccato"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Grouped"
-msgstr "Gruppo"
+msgstr "Raggruppato"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid ""
@@ -5887,7 +5840,7 @@ msgid ""
"When active, moving Control nodes changes their anchors instead of their "
"margins."
msgstr ""
-"Quando attivato, muovere i nodi Control cambia le loro ancore invece dei "
+"Se è attivato, spostare i nodi Control modifica le loro ancore invece dei "
"loro margini."
#: editor/plugins/canvas_item_editor_plugin.cpp
@@ -5928,7 +5881,7 @@ msgstr "Centro"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Left Wide"
-msgstr "Lato sinistro"
+msgstr "Lato Sinistro"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Top Wide"
@@ -5972,13 +5925,13 @@ msgstr "Cambia Ancore"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid ""
"Project Camera Override\n"
"Overrides the running project's camera with the editor viewport camera."
msgstr ""
"Sovrascrivi Camera Gioco\n"
-"Sovrascrive la camera del gioco con la camera del viewport dell'editor."
+"Sovrascrive la camera del progetto in esecuzione con la camera del viewport "
+"dell'editor."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -5994,22 +5947,22 @@ msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Lock Selected"
-msgstr "Blocca selezionato"
+msgstr "Blocca selezionato(i)"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Unlock Selected"
-msgstr "Sblocca selezionati"
+msgstr "Sblocca selezionato(i)"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Group Selected"
-msgstr "Gruppo Selezionato"
+msgstr "Raggruppa Selezionato(i)"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Ungroup Selected"
-msgstr "Rimuovi selezionati dal gruppo"
+msgstr "Rimuovi selezionato(i) dal gruppo"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Paste Pose"
@@ -6017,7 +5970,7 @@ msgstr "Incolla Posa"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Clear Guides"
-msgstr "Rimuovi guide"
+msgstr "Rimuovi Guide"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Create Custom Bone(s) from Node(s)"
@@ -6025,7 +5978,7 @@ msgstr "Crea Ossa personalizzate a partire da uno o più Nodi"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Clear Bones"
-msgstr "Rimuovi ossa"
+msgstr "Rimuovi Ossa"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Make IK Chain"
@@ -6048,40 +6001,36 @@ msgstr ""
#: editor/plugins/texture_region_editor_plugin.cpp
#: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp
msgid "Zoom Reset"
-msgstr "Ripristina ingrandimento"
+msgstr "Ripristina Zoom"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Select Mode"
-msgstr "Modalità di selezione"
+msgstr "Modalità di Selezione"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Drag: Rotate selected node around pivot."
-msgstr "Rimuovi il nodo o la transizione selezionati."
+msgstr "Trascina: Ruota il nodo selezionato attorno al perno."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Alt+Drag: Move selected node."
-msgstr "Alt+Drag: Muovi"
+msgstr "Alt+Trascina: Muovi nodo selezionato."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "V: Set selected node's pivot position."
-msgstr "Rimuovi il nodo o la transizione selezionati."
+msgstr "V: Imposta il perno di rotazione del nodo selezionato."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Alt+RMB: Show list of all nodes at position clicked, including locked."
msgstr ""
-"Mostra una lista di tutti gli oggetti alla posizione cliccata\n"
-"(identico a Alt+RMB in modalità selezione)."
+"Alt+Tasto Destro del Mouse: Mostra una lista di tutti i nodi presenti nel "
+"posto cliccato, compresi quelli bloccati."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "RMB: Add node at position clicked."
-msgstr "Click destro: aggiungi un nodo sulla posizione cliccata."
+msgstr "Click destro: Aggiungi nodo alla posizione cliccata."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -6105,7 +6054,7 @@ msgid ""
"(same as Alt+RMB in select mode)."
msgstr ""
"Mostra una lista di tutti gli oggetti alla posizione cliccata\n"
-"(identico a Alt+RMB in modalità selezione)."
+"(identico a Alt+Click Destro in modalità selezione)."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Click to change object's rotation pivot."
@@ -6117,7 +6066,7 @@ msgstr "Modalità di Pan"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Ruler Mode"
-msgstr "Modalità righello"
+msgstr "Modalità Righello"
#: editor/plugins/canvas_item_editor_plugin.cpp
#, fuzzy
@@ -6251,6 +6200,7 @@ msgid "Always Show Grid"
msgstr "Mostra sempre Griglia"
#: editor/plugins/canvas_item_editor_plugin.cpp
+#, fuzzy
msgid "Show Helpers"
msgstr "Mostra guide"
@@ -6276,11 +6226,11 @@ msgstr "Mostra Gruppo e Blocca Icone"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
-msgstr "Centra selezione"
+msgstr "Centra Selezione"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Frame Selection"
-msgstr "Selezione frame"
+msgstr "Selezione Frame"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Preview Canvas Scale"
@@ -6321,11 +6271,11 @@ msgstr "Inserimento Automatico Chiave"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Animation Key and Pose Options"
-msgstr "Chiavi d'Animazione e Opzioni Posa"
+msgstr "Opzioni di Chiavi d'Animazione e Posa"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Insert Key (Existing Tracks)"
-msgstr "Inserisci chiave (tracce esistenti)"
+msgstr "Inserisci Chiave (Tracce Esistenti)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Copy Pose"
@@ -6333,17 +6283,15 @@ msgstr "Copia Posa"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Clear Pose"
-msgstr "Azzera posa"
+msgstr "Azzera Posa"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Add Node Here"
-msgstr "Aggiungi Nodo"
+msgstr "Aggiungi Nodo Qui"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Instance Scene Here"
-msgstr "Istanzia Scena(e)"
+msgstr "Istanzia Scena(e) Qui"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Multiply grid step by 2"
@@ -6351,7 +6299,7 @@ msgstr "Moltiplica per 2 il passo della griglia"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Divide grid step by 2"
-msgstr "Dividi per 2 il passo della griglia"
+msgstr "Divide per 2 il passo della griglia"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Pan View"
@@ -6359,49 +6307,43 @@ msgstr "Trasla Visuale"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 3.125%"
-msgstr "Ingrandisci al 3.125%"
+msgstr "Zoom a 3.125%"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 6.25%"
-msgstr "Ingrandisci al 6.25%"
+msgstr "Zoom a 6.25%"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 12.5%"
-msgstr "Ingrandisci al 12.5%"
+msgstr "Zoom a 12.5%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 25%"
-msgstr "Rimpicciolisci"
+msgstr "Zoom a 25%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 50%"
-msgstr "Rimpicciolisci"
+msgstr "Zoom a 50%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 100%"
-msgstr "Rimpicciolisci"
+msgstr "Zoom a 100%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 200%"
-msgstr "Rimpicciolisci"
+msgstr "Zoom a 200%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 400%"
-msgstr "Rimpicciolisci"
+msgstr "Zoom a 400%"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 800%"
-msgstr "Rimpicciolisci"
+msgstr "Zoom a 800%"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 1600%"
-msgstr "Ingrandisci al 1600%"
+msgstr "Zoom a 1600%"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Add %s"
@@ -6434,8 +6376,8 @@ msgid ""
"Drag & drop + Shift : Add node as sibling\n"
"Drag & drop + Alt : Change node type"
msgstr ""
-"Premi & Trascina + Shift : Aggiungi nodo come fratello\n"
-"Premi & Trascina + Alt : Cambia tipo del nodo"
+"Trascina & Rilascia + Shift : Aggiungi nodo come fratello\n"
+"Trascina & Rilascia + Alt : Cambia tipo del nodo"
#: editor/plugins/collision_polygon_editor_plugin.cpp
msgid "Create Polygon3D"
@@ -6617,7 +6559,7 @@ msgstr "Editor Lista Elementi"
#: editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Create Occluder Polygon"
-msgstr "Crea Poligono di occlusione"
+msgstr "Crea Poligono di Occlusione"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
@@ -6730,7 +6672,7 @@ msgid ""
msgstr ""
"Crea una StaticBody e le assegna automaticamente una forma di collisione "
"basata sui poligoni.\n"
-"Questa é l'opzione piú accurata (anche se piú lenta) per il calcolo delle "
+"Questa é l'opzione più accurata (anche se più lenta) per il calcolo delle "
"collisioni."
#: editor/plugins/mesh_instance_editor_plugin.cpp
@@ -6756,7 +6698,7 @@ msgid ""
"This is the fastest (but least accurate) option for collision detection."
msgstr ""
"Crea una singola forma di collisione convessa.\n"
-"Questa é l'opzione piú veloce (anche se meno accurata) per il calcolo delle "
+"Questa è l'opzione più veloce (sebbene meno accurata) per il calcolo delle "
"collisioni."
#: editor/plugins/mesh_instance_editor_plugin.cpp
@@ -6771,22 +6713,21 @@ msgid ""
"geometry in some cases, at the cost of accuracy."
msgstr ""
"Crea una forma di collisione convessa semplificata.\n"
-"Essa è simile a una forma di collisione singola ma in alcuni casi può "
-"risultare in una geometria più semplice al costo di risultare inaccurata."
+"Essa è simile a una forma di collisione singola, ma in alcuni casi può "
+"risultare in una geometria più semplice, al costo di risultare inaccurata."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Multiple Convex Collision Siblings"
msgstr "Crea Multipli Fratelli di Collsione Convessa"
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid ""
"Creates a polygon-based collision shape.\n"
"This is a performance middle-ground between a single convex collision and a "
"polygon-based collision."
msgstr ""
"Crea una forma di collisione basata sui poligoni.\n"
-"Questa opzione é, in termini di perfomance, un compromesso tra le due "
+"Questa opzione è, in termini di prestazioni, un compromesso tra le due "
"opzioni prima di questa."
#: editor/plugins/mesh_instance_editor_plugin.cpp
@@ -6794,6 +6735,7 @@ msgid "Create Outline Mesh..."
msgstr "Crea Mesh di Outline..."
#: editor/plugins/mesh_instance_editor_plugin.cpp
+#, fuzzy
msgid ""
"Creates a static outline mesh. The outline mesh will have its normals "
"flipped automatically.\n"
@@ -6851,7 +6793,7 @@ msgstr "Aggiungi Elemento"
#: editor/plugins/mesh_library_editor_plugin.cpp
msgid "Remove Selected Item"
-msgstr "Rimuovi Elementi Selezionati"
+msgstr "Rimuovi Elemento Selezionato"
#: editor/plugins/mesh_library_editor_plugin.cpp
#, fuzzy
@@ -6887,7 +6829,7 @@ msgstr "Sorgente Mesh invalida (non è una MeshInstance)."
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "Mesh source is invalid (contains no Mesh resource)."
-msgstr "Sorgente Mesh invalida (non contiene alcun a risorsa Mesh)."
+msgstr "Sorgente Mesh invalida (non contiene alcuna risorsa Mesh)."
#: editor/plugins/multimesh_editor_plugin.cpp
msgid "No surface source specified."
@@ -6910,6 +6852,7 @@ msgid "Select a Source Mesh:"
msgstr "Seleziona una Mesh Sorgente:"
#: editor/plugins/multimesh_editor_plugin.cpp
+#, fuzzy
msgid "Select a Target Surface:"
msgstr "Seleziona una Superficie di Target:"
@@ -6922,6 +6865,7 @@ msgid "Populate MultiMesh"
msgstr "Popola MultiMesh"
#: editor/plugins/multimesh_editor_plugin.cpp
+#, fuzzy
msgid "Target Surface:"
msgstr "Superficie Target:"
@@ -6982,7 +6926,7 @@ msgstr "Genera Rect Visibilità"
#: editor/plugins/particles_2d_editor_plugin.cpp
msgid "Can only set point into a ParticlesMaterial process material"
msgstr ""
-"É solamente possibile impostare il punto in un materiale di processo "
+"È solamente possibile impostare il punto in un materiale di processo "
"ParticlesMaterial"
#: editor/plugins/particles_2d_editor_plugin.cpp
@@ -6996,7 +6940,7 @@ msgstr "Tempo di Generazione (sec):"
#: editor/plugins/particles_editor_plugin.cpp
msgid "The geometry's faces don't contain any area."
-msgstr "La faccia della geometria non contiene alcuna area."
+msgstr "Le facce della geometria non contengono nessuna area."
#: editor/plugins/particles_editor_plugin.cpp
msgid "The geometry doesn't contain any faces."
@@ -7040,7 +6984,7 @@ msgstr "Sorgente Emissione: "
#: editor/plugins/particles_editor_plugin.cpp
msgid "A processor material of type 'ParticlesMaterial' is required."
-msgstr "Un processor material di tipo \"ParticlesMaterial\" é richiesto."
+msgstr "Un processor material di tipo 'ParticlesMaterial' é richiesto."
#: editor/plugins/particles_editor_plugin.cpp
msgid "Generating AABB"
@@ -7052,7 +6996,7 @@ msgstr "Genera Visibilità AABB"
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
-msgstr "Rimuovi Punto da Curva"
+msgstr "Rimuovi Punto dalla Curva"
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Out-Control from Curve"
@@ -7060,7 +7004,7 @@ msgstr "Rimuovi Out-Control dalla Curva"
#: editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove In-Control from Curve"
-msgstr "Rimuovi In-Control da Curva"
+msgstr "Rimuovi In-Control dalla Curva"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
@@ -7124,7 +7068,7 @@ msgstr "Elimina Punto"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
-msgstr "Chiudi curva"
+msgstr "Chiudi Curva"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
@@ -7136,12 +7080,12 @@ msgstr "Opzioni"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
msgid "Mirror Handle Angles"
-msgstr "Specchia maniglie angolari"
+msgstr "Specchia Angoli Manico"
#: editor/plugins/path_2d_editor_plugin.cpp
#: editor/plugins/path_editor_plugin.cpp
msgid "Mirror Handle Lengths"
-msgstr "Specchia lunghezza maniglie"
+msgstr "Specchia Lunghezze Manico"
#: editor/plugins/path_editor_plugin.cpp
msgid "Curve Point #"
@@ -7177,20 +7121,20 @@ msgstr "Rimuovi Punto In-Control"
#: editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
-msgstr "Dividere segmento (in curva)"
+msgstr "Dividere Segmento (in curva)"
#: editor/plugins/physical_bone_plugin.cpp
msgid "Move Joint"
-msgstr "Spostare il giunto"
+msgstr "Sposta Articolazione"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid ""
"The skeleton property of the Polygon2D does not point to a Skeleton2D node"
-msgstr "La proprietà scheletro del Polygon2D non punta a un nodo Skeleton2D"
+msgstr "La proprietà skeleton del Polygon2D non punta a un nodo Skeleton2D"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Sync Bones"
-msgstr "Sincronizza ossa"
+msgstr "Sincronizza Ossa"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid ""
@@ -7198,11 +7142,11 @@ msgid ""
"Set a texture to be able to edit UV."
msgstr ""
"Nessuna texture in questo poligono.\n"
-"Impostare una texture per poter modificare UV."
+"Imposta una texture per poter modificare l'UV."
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Create UV Map"
-msgstr "Creare mappa UV"
+msgstr "Creare Mappa UV"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid ""
@@ -7214,39 +7158,39 @@ msgstr ""
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Create Polygon & UV"
-msgstr "Crea poligono e UV"
+msgstr "Crea Poligono & UV"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Create Internal Vertex"
-msgstr "Crea vertice interno"
+msgstr "Crea Vertice Interno"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Remove Internal Vertex"
-msgstr "Rimuovi vertice interno"
+msgstr "Rimuovi Vertice Interno"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Invalid Polygon (need 3 different vertices)"
-msgstr "Poligono non valido (sono necessari 3 vertici differenti)"
+msgstr "Poligono non valido (sono necessari 3 vertici diversi)"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Add Custom Polygon"
-msgstr "Aggiungi poligono personalizzato"
+msgstr "Aggiungi Poligono Personalizzato"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Remove Custom Polygon"
-msgstr "Rimuovi poligono personalizzato"
+msgstr "Rimuovi Poligono Personalizzato"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Transform UV Map"
-msgstr "Trasforma la mappa UV"
+msgstr "Trasforma Mappa UV"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Transform Polygon"
-msgstr "Trasforma il poligono"
+msgstr "Trasforma Poligono"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Paint Bone Weights"
-msgstr "Dipingi peso delle ossa"
+msgstr "Dipingi Peso delle Ossa"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Open Polygon 2D UV editor."
@@ -7311,8 +7255,8 @@ msgstr "Scala poligono"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Create a custom polygon. Enables custom polygon rendering."
msgstr ""
-"Crea un poligono personalizzato. Abilita il rendering personalizzato dei "
-"poligoni."
+"Crea un poligono personalizzato. Abilita il rendering dei poligoni "
+"personalizzati."
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid ""
@@ -7320,7 +7264,7 @@ msgid ""
"disabled."
msgstr ""
"Rimuove un poligono personalizzato. Se non ne rimane nessuno, il rendering "
-"personalizzato dei poligoni è disabilitato."
+"dei poligoni personalizzati è disabilitato."
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Paint weights with specified intensity."
@@ -7388,7 +7332,7 @@ msgstr "Passo Y della griglia:"
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Sync Bones to Polygon"
-msgstr "Sincronizza le ossa al poligono"
+msgstr "Sincronizza Ossa a Poligono"
#: editor/plugins/resource_preloader_editor_plugin.cpp
msgid "ERROR: Couldn't load resource!"
@@ -7438,7 +7382,7 @@ msgstr "Carica risorsa"
#: editor/plugins/resource_preloader_editor_plugin.cpp
msgid "ResourcePreloader"
-msgstr "Preloader Risorsa"
+msgstr "ResourcePreloader"
#: editor/plugins/room_manager_editor_plugin.cpp
#, fuzzy
@@ -7466,9 +7410,8 @@ msgid "Occluder Set Transform"
msgstr "Azzera la trasformazione"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Center Node"
-msgstr "Crea Nodo"
+msgstr "Centra Nodo"
#: editor/plugins/root_motion_editor_plugin.cpp
msgid "AnimationTree has no path set to an AnimationPlayer"
@@ -7480,11 +7423,11 @@ msgstr "Il percorso per AnimationPlayer non è valido"
#: editor/plugins/script_editor_plugin.cpp
msgid "Clear Recent Files"
-msgstr "Elimina i file recenti"
+msgstr "Pulisci file recenti"
#: editor/plugins/script_editor_plugin.cpp
msgid "Close and save changes?"
-msgstr "Chiudere e salvare i cambiamenti?"
+msgstr "Chiudi e salva le modifiche?"
#: editor/plugins/script_editor_plugin.cpp
msgid "Error writing TextFile:"
@@ -7540,11 +7483,10 @@ msgid "Script is not in tool mode, will not be able to run."
msgstr "Lo script non è in modalità tool, non sarà possibile eseguirlo."
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid ""
"To run this script, it must inherit EditorScript and be set to tool mode."
msgstr ""
-"Per eseguire questo script, esso deve ereditare da EditorScript ed essere "
+"Per eseguire questo script, deve ereditare da EditorScript ed essere "
"impostato in modalità tool."
#: editor/plugins/script_editor_plugin.cpp
@@ -7606,12 +7548,10 @@ msgid "Move Down"
msgstr "Sposta giù"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Next Script"
msgstr "Script successivo"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Previous Script"
msgstr "Script precedente"
@@ -7625,7 +7565,7 @@ msgstr "Apri..."
#: editor/plugins/script_editor_plugin.cpp
msgid "Reopen Closed Script"
-msgstr "Riapri lo script chiuso"
+msgstr "Riapri script chiuso"
#: editor/plugins/script_editor_plugin.cpp
msgid "Save All"
@@ -7711,7 +7651,6 @@ msgstr "Debug con un editor esterno"
#: editor/plugins/script_editor_plugin.cpp
#: editor/plugins/shader_editor_plugin.cpp
-#, fuzzy
msgid "Online Docs"
msgstr "Documentazione online"
@@ -7721,15 +7660,15 @@ msgstr "Apri la documentazione online di Godot."
#: editor/plugins/script_editor_plugin.cpp
msgid "Search the reference documentation."
-msgstr "Cerca Riferimenti nella documentazione."
+msgstr "Cerca riferimenti nella documentazione."
#: editor/plugins/script_editor_plugin.cpp
msgid "Go to previous edited document."
-msgstr "Vai al documento precedentemente modificato."
+msgstr "Vai al documento modificato precedente."
#: editor/plugins/script_editor_plugin.cpp
msgid "Go to next edited document."
-msgstr "Vai al documento successivo."
+msgstr "Vai al documento modificato successivo."
#: editor/plugins/script_editor_plugin.cpp
msgid "Discard"
@@ -7740,8 +7679,8 @@ msgid ""
"The following files are newer on disk.\n"
"What action should be taken?:"
msgstr ""
-"I file seguenti sono più recenti su disco.\n"
-"Che azione deve essere intrapresa?:"
+"I seguenti file sono più recenti sul disco.\n"
+"Che azione dovrebbe essere intrapresa?:"
#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
msgid "Debugger"
@@ -7749,7 +7688,7 @@ msgstr "Debugger"
#: editor/plugins/script_editor_plugin.cpp
msgid "Search Results"
-msgstr "Cerca risultati"
+msgstr "Risultati Ricerca"
#: editor/plugins/script_editor_plugin.cpp
msgid "Clear Recent Scripts"
@@ -7911,7 +7850,7 @@ msgstr "Aiuto contestuale"
#: editor/plugins/script_text_editor.cpp
msgid "Toggle Bookmark"
-msgstr "Commuta i segnalibri"
+msgstr "Commuta segnalibro"
#: editor/plugins/script_text_editor.cpp
msgid "Go to Next Bookmark"
@@ -7967,21 +7906,20 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "Questo scheletro non ha ossa, crea dei nodi figlio Bone2D."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "Crea Posizione di Riposo dalle Ossa"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "Imposta Ossa in Posizione di Riposo"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "Crea Posizione di Riposo dalle Ossa"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Skeleton2D"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-#, fuzzy
msgid "Reset to Rest Pose"
-msgstr "Imposta Ossa in Posizione di Riposo"
+msgstr "Ripristina a Posizione di Riposo"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
@@ -8010,77 +7948,66 @@ msgstr "Ortogonale"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Perspective"
-msgstr "Prospettiva"
+msgstr "Prospettica"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Top Orthogonal"
-msgstr "Ortogonale"
+msgstr "Ortogonale dall'Alto"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Top Perspective"
-msgstr "Prospettiva"
+msgstr "Prospettica dall'Alto"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Bottom Orthogonal"
-msgstr "Ortogonale"
+msgstr "Ortogonale dal Basso"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Bottom Perspective"
-msgstr "Prospettiva"
+msgstr "Prospettica dal Basso"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Left Orthogonal"
-msgstr "Ortogonale"
+msgstr "Ortogonale a Sinistra"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Left Perspective"
-msgstr "Prospettiva"
+msgstr "Prospettica a Sinistra"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Right Orthogonal"
-msgstr "Ortogonale"
+msgstr "Ortogonale a Destra"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Right Perspective"
-msgstr "Prospettiva"
+msgstr "Prospettica a Destra"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Front Orthogonal"
-msgstr "Ortogonale"
+msgstr "Ortogonale di Fronte"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Front Perspective"
-msgstr "Prospettiva"
+msgstr "Prospettica di Fronte"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Rear Orthogonal"
-msgstr "Ortogonale"
+msgstr "Ortogonale da Dietro"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Rear Perspective"
-msgstr "Prospettiva"
+msgstr "Prospettica da Dietro"
#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
#: editor/plugins/spatial_editor_plugin.cpp
msgid " [auto]"
-msgstr ""
+msgstr " [auto]"
#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
#: editor/plugins/spatial_editor_plugin.cpp
+#, fuzzy
msgid " [portals active]"
-msgstr ""
+msgstr " [portali attivi]"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
@@ -8109,15 +8036,13 @@ msgid "None"
msgstr "Nessuno"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Rotate"
-msgstr "Stato"
+msgstr "Ruota"
#. TRANSLATORS: This refers to the movement that changes the position of an object.
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Translate"
-msgstr "Trasla:"
+msgstr "Trasla"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Scale"
@@ -8144,38 +8069,32 @@ msgid "Animation Key Inserted."
msgstr "Chiave d'animazione inserita."
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Pitch:"
-msgstr "Inclinazione"
+msgstr "Inclinazione:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Yaw:"
msgstr "Imbardata:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Size:"
-msgstr "Dimensione: "
+msgstr "Dimensione:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Objects Drawn:"
-msgstr "Oggetti disegnati"
+msgstr "Oggetti disegnati:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Material Changes:"
-msgstr "Cambiamenti dei materiali"
+msgstr "Cambiamenti dei materiali:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Shader Changes:"
-msgstr "Cambiamenti degli shader"
+msgstr "Cambiamenti degli shader:"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Surface Changes:"
-msgstr "Cambiamenti delle superfici"
+msgstr "Cambiamenti delle superfici:"
#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
@@ -8183,9 +8102,8 @@ msgid "Draw Calls:"
msgstr "Draw Calls"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Vertices:"
-msgstr "Vertici"
+msgstr "Vertici:"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "FPS: %d (%s ms)"
@@ -8321,12 +8239,11 @@ msgstr "Modificatore Velocità Vista Libera"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Freelook Slow Modifier"
-msgstr "Modificatore Vista Libera Velocità Lenta"
+msgstr "Modificatore Velocità Lenta Vista Libera"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Toggle Camera Preview"
-msgstr "Cambia dimensione Telecamera"
+msgstr "Cambia Anteprima Telecamera"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "View Rotation Locked"
@@ -8345,13 +8262,12 @@ msgid ""
"It cannot be used as a reliable indication of in-game performance."
msgstr ""
"Nota: Il valore di FPS mostrato è relativo al framerate dell'editor.\n"
-"Non può essere usato come indicatore affidabile delle performance durante il "
+"Non può essere usato come indicatore affidabile delle prestazioni durante il "
"gioco."
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Convert Rooms"
-msgstr "Converti in %s"
+msgstr "Converti Stanze"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "XForm Dialog"
@@ -8367,7 +8283,7 @@ msgid ""
msgstr ""
"Fare clic per passare da uno stato di visibilità all'altro.\n"
"\n"
-"Apri gli occhi: Gizmo è visibile.\n"
+"Occhio aperto: Gizmo è visibile.\n"
"Occhio chiuso: Gizmo è nascosto.\n"
"Occhio semiaperto: Gizmo è visibile anche attraverso superfici opache "
"(\"raggi X\")."
@@ -8388,9 +8304,8 @@ msgid "Use Local Space"
msgstr "Usa Spazio Locale"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Use Snap"
-msgstr "Scatta"
+msgstr "Usa Scatto"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Converts rooms for portal culling."
@@ -8513,14 +8428,12 @@ msgid "View Grid"
msgstr "Visualizza Griglia"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "View Portal Culling"
-msgstr "Impostazioni Viewport"
+msgstr "Visualizza Eliminazione Portali"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "View Occlusion Culling"
-msgstr "Impostazioni Viewport"
+msgstr "Visualizza Eliminazione Occlusioni"
#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -8577,7 +8490,7 @@ msgstr "Ruota (gradi):"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Scale (ratio):"
-msgstr "Scala (rateo):"
+msgstr "Scala (rapporto):"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Type"
@@ -8592,9 +8505,8 @@ msgid "Post"
msgstr "Post"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Unnamed Gizmo"
-msgstr "Progetto Senza Nome"
+msgstr "Gizmo Senza Nome"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Create Mesh2D"
@@ -8626,7 +8538,7 @@ msgstr "Crea LightOccluder2D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "LightOccluder2D Preview"
-msgstr "Crea LightOccluder2D"
+msgstr "Anteprima LightOccluder2D"
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Sprite is empty!"
@@ -8684,7 +8596,7 @@ msgstr "Rimpicciolisci (Pixels): "
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Grow (Pixels): "
-msgstr "Aumento (Pixels): "
+msgstr "Ingrandisci (Pixels): "
#: editor/plugins/sprite_editor_plugin.cpp
msgid "Update Preview"
@@ -8700,7 +8612,7 @@ msgstr "Nessun Frame selezionato"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Add %d Frame(s)"
-msgstr "Aggiungi %d frame(s)"
+msgstr "Aggiungi %d frame"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Add Frame"
@@ -8728,7 +8640,7 @@ msgstr "Aggiungi vuoto"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Change Animation FPS"
-msgstr "Cambia FPS ANimazione"
+msgstr "Cambia FPS Animazione"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "(empty)"
@@ -8764,7 +8676,7 @@ msgstr "Aggiungi una Texture da File"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Add Frames from a Sprite Sheet"
-msgstr "Aggiungi Frames da uno Spritesheet"
+msgstr "Aggiungi Frame da uno Spritesheet"
#: editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Insert Empty (Before)"
@@ -8854,14 +8766,12 @@ msgid "Colors"
msgstr "Colore"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Fonts"
msgstr "Font"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Icons"
-msgstr "Icona"
+msgstr "Icone"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8873,47 +8783,40 @@ msgid "{num} color(s)"
msgstr "{num} colori"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No colors found."
-msgstr "Nessuna sottorisorsa trovata."
+msgstr "Nessun colore trovato."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "{num} constant(s)"
-msgstr "Costanti"
+msgstr "{num} costanti"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No constants found."
-msgstr "Costante di colore."
+msgstr "Nessuna costante trovata."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "{num} font(s)"
-msgstr "{num} caratteri"
+msgstr "{num} font"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No fonts found."
-msgstr "Non trovato!"
+msgstr "Nessun font trovato."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} icon(s)"
msgstr "{num} icone"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No icons found."
-msgstr "Non trovato!"
+msgstr "Nessuna icona trovata."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} stylebox(es)"
msgstr "{num} stylebox"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No styleboxes found."
-msgstr "Nessuna sottorisorsa trovata."
+msgstr "Nessun stylebox trovato."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} currently selected"
@@ -8921,7 +8824,7 @@ msgstr "{num} selezionati"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Nothing was selected for the import."
-msgstr ""
+msgstr "Non è stato selezionato nulla da importare."
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8943,13 +8846,12 @@ msgid "Finalizing"
msgstr "Analizzando"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Filter:"
-msgstr "Filtro:"
+msgstr "Filtra:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "With Data"
-msgstr ""
+msgstr "Con i Dati"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -9027,6 +8929,8 @@ msgid ""
"Caution: Adding icon data may considerably increase the size of your Theme "
"resource."
msgstr ""
+"Attenzione: Aggiungere i dati delle icone potrebbe aumentare notevolmente il "
+"peso della tua risorsa Tema."
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -9044,27 +8948,24 @@ msgid "Select all Theme items."
msgstr "Seleziona file template"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select With Data"
-msgstr "Selezione Punti"
+msgstr "Selezione con data"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all Theme items with item data."
msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Deselect All"
-msgstr "Seleziona tutto"
+msgstr "Deseleziona tutto"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all Theme items."
-msgstr ""
+msgstr "Deseleziona tutti gli elementi del Tema."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Import Selected"
-msgstr "Importa Scena"
+msgstr "Importa Selezionati"
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
@@ -9166,13 +9067,12 @@ msgid "Rename Stylebox Item"
msgstr "Rimuovi Elementi Selezionati"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Invalid file, not a Theme resource."
-msgstr "File non valido, non è una disposizione di un bus audio."
+msgstr "File non valido, non una risorsa Tema."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Invalid file, same as the edited Theme resource."
-msgstr ""
+msgstr "File non valido, corrisponde alla risorsa Tema in modifica."
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -9195,9 +9095,8 @@ msgid "Add Type:"
msgstr "Tipo:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Item:"
-msgstr "Aggiungi Elemento"
+msgstr "Aggiungi Elemento:"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -9205,42 +9104,36 @@ msgid "Add StyleBox Item"
msgstr "Aggiungi Tutti gli Elementi"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove Items:"
-msgstr "Rimuovi l'elemento"
+msgstr "Rimuovi elementi:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove Class Items"
msgstr "Rimuovi Elementi di Classe"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove Custom Items"
-msgstr "Rimuovi Elementi di Classe"
+msgstr "Rimuovi Elementi Personalizzati"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove All Items"
msgstr "Rimuovi tutti gli elementi"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Theme Item"
-msgstr "Elementi Tema GUI"
+msgstr "Aggiungi Elemento di Tema"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Old Name:"
-msgstr "Nome del nodo:"
+msgstr "Nome precedente:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Import Items"
-msgstr "Importa tema"
+msgstr "Importa Elementi"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Default Theme"
-msgstr "Predefinito"
+msgstr "Tema Predefinito"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -9268,9 +9161,8 @@ msgid "Cancel Item Rename"
msgstr "Rinomina in blocco"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Override Item"
-msgstr "Sovrascrizioni"
+msgstr "Sovrascrivi Elemento"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Unpin this StyleBox as a main style."
@@ -9305,20 +9197,19 @@ msgstr "Carica i predefiniti"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Show default type items alongside items that have been overridden."
msgstr ""
+"Mostra elementi predefiniti assieme ad elementi che sono stati sovrascritti."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Override All"
-msgstr "Sovrascrizioni"
+msgstr "Sovrascrivi tutti"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Override all default type items."
-msgstr ""
+msgstr "Sovrascrivi tutti gli elementi predefiniti."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Theme:"
-msgstr "Tema"
+msgstr "Tema:"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -9439,19 +9330,21 @@ msgstr "Ha,Molte,Opzioni"
#: editor/plugins/theme_editor_preview.cpp
msgid "Invalid path, the PackedScene resource was probably moved or removed."
msgstr ""
+"Percorso non valido, la risorsa PackedScene è stata probabilmente spostata o "
+"rimossa."
#: editor/plugins/theme_editor_preview.cpp
msgid "Invalid PackedScene resource, must have a Control node at its root."
msgstr ""
+"Risorsa PackedScene non valida, deve avere un nodo Control alla radice."
#: editor/plugins/theme_editor_preview.cpp
-#, fuzzy
msgid "Invalid file, not a PackedScene resource."
-msgstr "File non valido, non è una disposizione di un bus audio."
+msgstr "File non valido, non è una risorsa PackedScene."
#: editor/plugins/theme_editor_preview.cpp
msgid "Reload the scene to reflect its most actual state."
-msgstr ""
+msgstr "Ricarica la scena per riflettere i suo stato più reale."
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Erase Selection"
@@ -9866,7 +9759,7 @@ msgstr "Rimuovi Poligono di Navigazione"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Edit Tile Priority"
-msgstr "Modifica Priorità Tile"
+msgstr "Modifica Priorità della Tile"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Edit Tile Z Index"
@@ -9898,7 +9791,7 @@ msgstr "TileSet"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "No VCS addons are available."
-msgstr "Non sono disponibili addons VCS."
+msgstr "Non sono disponibili estensioni VCS."
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Error"
@@ -9914,7 +9807,7 @@ msgstr "Commit"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "VCS Addon is not initialized"
-msgstr "L'Addon VCS non è inizializzato"
+msgstr "L'Estenzione VCS non è inizializzata"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Version Control System"
@@ -9962,7 +9855,7 @@ msgstr "Stage Tutto"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "Commit Changes"
-msgstr "Commit Cambiamenti"
+msgstr "Commit Modifiche"
#: editor/plugins/version_control_editor_plugin.cpp
msgid "View file diffs before committing them to the latest version"
@@ -10004,11 +9897,11 @@ msgstr "Sampler"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Add input port"
-msgstr "Aggiungi porta di Input"
+msgstr "Aggiungi porta di input"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Add output port"
-msgstr "Aggiungi porta di Output"
+msgstr "Aggiungi porta di output"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Change input port type"
@@ -10020,11 +9913,11 @@ msgstr "Cambia tipo di porta di output"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Change input port name"
-msgstr "Cambia Nome porta Input"
+msgstr "Cambia nome porta Input"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Change output port name"
-msgstr "Cambia Nome porta Input"
+msgstr "Cambia nome porta Input"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Remove input port"
@@ -10178,11 +10071,11 @@ msgstr "Uguale (==)"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Greater Than (>)"
-msgstr "Maggiore Di (>)"
+msgstr "Maggiore di (>)"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Greater Than or Equal (>=)"
-msgstr "Maggiore o uguale (>=)"
+msgstr "Maggiore o Uguale a (>=)"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
@@ -10210,11 +10103,11 @@ msgstr ""
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Less Than (<)"
-msgstr "Minore Di (<)"
+msgstr "Minore di (<)"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Less Than or Equal (<=)"
-msgstr "Minore o Uguale (<=)"
+msgstr "Minore o Uguale a (<=)"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Not Equal (!=)"
@@ -10451,9 +10344,8 @@ msgid "Finds the nearest even integer to the parameter."
msgstr "Trova il numero intero pari più vicino al parametro."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Clamps the value between 0.0 and 1.0."
-msgstr "Blocca il valore tra 0.0 e 1.0."
+msgstr "Limita il valore tra 0.0 e 1.0."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Extracts the sign of the parameter."
@@ -10472,7 +10364,6 @@ msgid "Returns the square root of the parameter."
msgstr "Restituisce la radice quadrata del parametro."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid ""
"SmoothStep function( scalar(edge0), scalar(edge1), scalar(x) ).\n"
"\n"
@@ -10561,7 +10452,6 @@ msgid "Transform function."
msgstr "Funzione di trasformazione."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid ""
"Calculate the outer product of a pair of vectors.\n"
"\n"
@@ -10575,10 +10465,10 @@ msgstr ""
"\n"
"OuterProduct considera il primo parametro \"c\" come un vettore colonna "
"(matrice con una colonna) ed il secondo, \"r\", come un vettore riga "
-"(matrice con una riga) ed esegue una moltiplicazione algebrica lineare di "
-"matrici \"c * r\", creando una matrice i cui numeri di righe sono il numero "
-"di componenti di \"c\" e le cui colonne sono il numero di componenti in \"r"
-"\"."
+"(matrice con una sola riga) ed esegue una moltiplicazione algebrica lineare "
+"di matrici \"c * r\", creando una matrice il quale numero di righe è il "
+"numero di componenti di \"c\" e il cui numero di colonne è il numero di "
+"componenti in \"r\"."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Composes transform from four vectors."
@@ -10695,7 +10585,6 @@ msgid "Returns the vector that points in the direction of refraction."
msgstr "Restituisce un vettore che punta nella direzione della refrazione."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid ""
"SmoothStep function( vector(edge0), vector(edge1), vector(x) ).\n"
"\n"
@@ -10705,12 +10594,11 @@ msgid ""
msgstr ""
"SmoothStep function( vector(edge0), vector(edge1), vector(x) ).\n"
"\n"
-"Restituisce 0.0 se \"x\" è minore di \"edge0\", e 1.0 se \"x\" è più grande "
+"Restituisce 0.0 se \"x\" è minore di \"edge0\", o 1.0 se \"x\" è più grande "
"di \"edge1\". Altrimenti, il valore di ritorno è interpolato tra 0.0 e 1.0 "
"usando i polinomiali di Hermite."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid ""
"SmoothStep function( scalar(edge0), scalar(edge1), vector(x) ).\n"
"\n"
@@ -10720,7 +10608,7 @@ msgid ""
msgstr ""
"SmoothStep function( scalar(edge0), scalar(edge1), vector(x) ).\n"
"\n"
-"Restituisce 0.0 se \"x\" è minore di \"edge0\", e 1.0 se \"x\" è più grande "
+"Restituisce 0.0 se \"x\" è minore di \"edge0\", o 1.0 se \"x\" è più grande "
"di \"edge1\". Altrimenti, il valore di ritorno è interpolato tra 0.0 e 1.0 "
"usando i polinomiali di Hermite."
@@ -10773,16 +10661,15 @@ msgid "Vector uniform."
msgstr "Uniforme vettore."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid ""
"Custom Godot Shader Language expression, with custom amount of input and "
"output ports. This is a direct injection of code into the vertex/fragment/"
"light function, do not use it to write the function declarations inside."
msgstr ""
-"Una espressione del Custom Godot Shader Language, con quantità "
-"personalizzabile di porte input e output. Questa è una iniezione diretta di "
-"codice nella funzione vertex/fragment/light. Non usarla per scrivere le "
-"dichiarazione della funzione all'interno."
+"Una espressione personalizzata in Godot Shader Language, con quantità "
+"variabile di porte input e output. Questa è una iniezione diretta di codice "
+"nella funzione vertex/fragment/light, non usarla per scrivere dichiarazioni "
+"di funzioni al suo interno."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
@@ -10799,30 +10686,29 @@ msgid ""
"it later in the Expressions. You can also declare varyings, uniforms and "
"constants."
msgstr ""
-"Espressione custom per il Godot Shader Language, la quale sarà "
-"sovraposizionata allo shader risultante. Puoi piazzare varie definizioni di "
-"funzioni all'interno e chiamarla dopo nelle Espressioni. Puoi anche "
+"Espressione personalizzata per il Godot Shader Language, la quale sarà "
+"sovrapposta allo shader risultante. Puoi piazzare varie definizioni di "
+"funzioni all'interno e chiamarla in seguito nelle Espressioni. Puoi anche "
"dichiarare varianti, uniformi e costanti."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "A reference to an existing uniform."
-msgstr "Un riferimento a una uniform esistente."
+msgstr "Un riferimento a una uniforme esistente."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "(Fragment/Light mode only) Scalar derivative function."
-msgstr "(Solo modalità Fragment/Light) Fuzione derivata scalare."
+msgstr "(Solo in modalità Fragment/Light) Funzione derivata scalare."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "(Fragment/Light mode only) Vector derivative function."
-msgstr "(Solo modalità Fragment/Light) Fuzione derivata vettoriale."
+msgstr "(Solo in modalità Fragment/Light) Funzione derivata vettoriale."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid ""
"(Fragment/Light mode only) (Vector) Derivative in 'x' using local "
"differencing."
msgstr ""
-"(Solo modalità Fragment/Light) (Vettore) Derivata in \"x\" usando la "
+"(Solo in modalità Fragment/Light) (Vettore) Derivata in \"x\" usando la "
"differenziazione locale."
#: editor/plugins/visual_shader_editor_plugin.cpp
@@ -10830,7 +10716,7 @@ msgid ""
"(Fragment/Light mode only) (Scalar) Derivative in 'x' using local "
"differencing."
msgstr ""
-"(Solo modalità Fragment/Light) (Scalare) Derivata in \"x\" usando la "
+"(Solo in modalità Fragment/Light) (Scalare) Derivata in \"x\" usando la "
"differeziazione locale."
#: editor/plugins/visual_shader_editor_plugin.cpp
@@ -10838,7 +10724,7 @@ msgid ""
"(Fragment/Light mode only) (Vector) Derivative in 'y' using local "
"differencing."
msgstr ""
-"(Soltanto modalità Fragment/Light) (Vettore) Derivata in \"y\" usando la "
+"(Solo in modalità Fragment/Light) (Vettore) Derivata in \"y\" usando la "
"differenziazione locale."
#: editor/plugins/visual_shader_editor_plugin.cpp
@@ -10846,35 +10732,32 @@ msgid ""
"(Fragment/Light mode only) (Scalar) Derivative in 'y' using local "
"differencing."
msgstr ""
-"(Soltanto modalità Fragment/Light) (Scalare) Derivata in \"y\" usando la "
+"(Solo in modalità Fragment/Light) (Scalare) Derivata in \"y\" usando la "
"differenziazione locale."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid ""
"(Fragment/Light mode only) (Vector) Sum of absolute derivative in 'x' and "
"'y'."
msgstr ""
-"(Soltanto modalità Fragment/Light) (Vettore) Somma delle derivate assolute "
-"in \"x\" e \"y\"."
+"(Solo in modalità Fragment/Light) (Vettore) Somma delle derivate assolute in "
+"\"x\" e \"y\"."
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid ""
"(Fragment/Light mode only) (Scalar) Sum of absolute derivative in 'x' and "
"'y'."
msgstr ""
-"(Soltanto modalità Fragment/Light) (Scalare) Somma delle derivate assolute "
-"in \"x\" e \"y\"."
+"(Solo in modalità Fragment/Light) (Scalare) Somma delle derivate assolute in "
+"\"x\" e \"y\"."
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "VisualShader"
msgstr "VisualShader"
#: editor/plugins/visual_shader_editor_plugin.cpp
-#, fuzzy
msgid "Edit Visual Property:"
-msgstr "Modifica Proprietà Visive"
+msgstr "Modifica Proprietà Visive:"
#: editor/plugins/visual_shader_editor_plugin.cpp
msgid "Visual Shader Mode Changed"
@@ -10893,17 +10776,16 @@ msgid ""
"Failed to export the project for platform '%s'.\n"
"Export templates seem to be missing or invalid."
msgstr ""
-"Impossibile esportare il progetto per la piattaforma \"%s\".\n"
+"Non è stato possibile esportare il progetto per la piattaforma \"%s\".\n"
"I template di esportazione sembrano essere mancanti o non validi."
#: editor/project_export.cpp
-#, fuzzy
msgid ""
"Failed to export the project for platform '%s'.\n"
"This might be due to a configuration issue in the export preset or your "
"export settings."
msgstr ""
-"Impossibile esportare il progetto per la piattaforma \"%s\".\n"
+"Non è stato possibile esportare il progetto per la piattaforma \"%s\".\n"
"Questo potrebbe essere dovuto a un problema di configurazione nel preset di "
"esportazione o nelle impostazioni di esportazione."
@@ -10975,7 +10857,7 @@ msgid ""
"(comma-separated, e.g: *.json, *.txt, docs/*)"
msgstr ""
"Filtri per esportare file/cartelle che non sono risorse\n"
-"(separati da virgole, per sempio: *.json, *.txt, docs/*)"
+"(separati da virgole, per esempio: *.json, *.txt, docs/*)"
#: editor/project_export.cpp
msgid ""
@@ -10983,7 +10865,7 @@ msgid ""
"(comma-separated, e.g: *.json, *.txt, docs/*)"
msgstr ""
"Filtri per escludere file/cartelle dal progetto\n"
-"(separati da virgole, per sempio: *.json, *.txt, docs/*)"
+"(separati da virgole, per esempio: *.json, *.txt, docs/*)"
#: editor/project_export.cpp
msgid "Features"
@@ -11002,9 +10884,8 @@ msgid "Script"
msgstr "Script"
#: editor/project_export.cpp
-#, fuzzy
msgid "GDScript Export Mode:"
-msgstr "Modalità Esportazione Script:"
+msgstr "Modalità Esportazione GDScript:"
#: editor/project_export.cpp
msgid "Text"
@@ -11012,21 +10893,20 @@ msgstr "Testo"
#: editor/project_export.cpp
msgid "Compiled Bytecode (Faster Loading)"
-msgstr ""
+msgstr "Compilato in Bytecode (Caricamento più Veloce)"
#: editor/project_export.cpp
msgid "Encrypted (Provide Key Below)"
msgstr "Criptato (Fornisci la Chiave Sotto)"
#: editor/project_export.cpp
-#, fuzzy
msgid "Invalid Encryption Key (must be 64 hexadecimal characters long)"
-msgstr "Chiave Crittografica non Valida (deve essere lunga 64 caratteri)"
+msgstr ""
+"Chiave Crittografica non Valida (deve essere lunga 64 caratteri esadecimali)"
#: editor/project_export.cpp
-#, fuzzy
msgid "GDScript Encryption Key (256-bits as hexadecimal):"
-msgstr "Chiave di Crittografia Script (256-bits come esadecimali):"
+msgstr "Chiave di Crittografia GDScript (256 bit in esadecimale):"
#: editor/project_export.cpp
msgid "Export PCK/Zip"
@@ -11034,7 +10914,7 @@ msgstr "Esporta PCK/Zip"
#: editor/project_export.cpp
msgid "Export Project"
-msgstr "Esporta progetto"
+msgstr "Esporta Progetto"
#: editor/project_export.cpp
msgid "Export mode?"
@@ -11066,7 +10946,7 @@ msgstr "Esporta Con Debug"
#: editor/project_manager.cpp
msgid "The path specified doesn't exist."
-msgstr "Il percorso specificato non é esistente."
+msgstr "Il percorso specificato non esiste."
#: editor/project_manager.cpp
msgid "Error opening package file (it's not in ZIP format)."
@@ -11085,7 +10965,7 @@ msgstr "Si prega di scegliere una cartella vuota."
#: editor/project_manager.cpp
msgid "Please choose a \"project.godot\" or \".zip\" file."
-msgstr "Perfavore, scegli un file \"project.godot\" o \".zip\"."
+msgstr "Si prega di scegliere un file \"project.godot\" o \".zip\"."
#: editor/project_manager.cpp
msgid "This directory already contains a Godot project."
@@ -11100,9 +10980,8 @@ msgid "Imported Project"
msgstr "Progetto Importato"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Invalid project name."
-msgstr "Nome Progetto non Valido."
+msgstr "Nome del progetto non valido."
#: editor/project_manager.cpp
msgid "Couldn't create folder."
@@ -11118,7 +10997,7 @@ msgstr "Sarebbe una buona idea dare un nome al tuo progetto."
#: editor/project_manager.cpp
msgid "Invalid project path (changed anything?)."
-msgstr "Percorso di progetto invalido (cambiato qualcosa?)."
+msgstr "Percorso del progetto invalido (cambiato qualcosa?)."
#: editor/project_manager.cpp
msgid ""
@@ -11130,13 +11009,14 @@ msgstr ""
#: editor/project_manager.cpp
msgid "Couldn't edit project.godot in project path."
-msgstr "Impossibile modificare project.godot nel percorso di progetto."
+msgstr "Impossibile modificare project.godot nel percorso del progetto."
#: editor/project_manager.cpp
msgid "Couldn't create project.godot in project path."
-msgstr "Impossibile creare project.godot nel percorso di progetto."
+msgstr "Impossibile creare project.godot nel percorso del progetto."
#: editor/project_manager.cpp
+#, fuzzy
msgid "Error opening package file, not in ZIP format."
msgstr "Errore nell'apertura del file del pacchetto, non è in formato ZIP."
@@ -11150,7 +11030,7 @@ msgstr "Pacchetto installato con successo!"
#: editor/project_manager.cpp
msgid "Rename Project"
-msgstr "Rinomina progetto"
+msgstr "Rinomina Progetto"
#: editor/project_manager.cpp
msgid "Import Existing Project"
@@ -11186,7 +11066,7 @@ msgstr "Percorso Progetto:"
#: editor/project_manager.cpp
msgid "Project Installation Path:"
-msgstr "Percorso Progetto di Installazione:"
+msgstr "Percorso Installazione del Progetto:"
#: editor/project_manager.cpp
msgid "Renderer:"
@@ -11209,7 +11089,7 @@ msgid ""
msgstr ""
"Qualità visiva migliore\n"
"Tutte le funzionalità disponibili\n"
-"Incompatibile con vecchi hardware\n"
+"Incompatibile con hardware poco recente\n"
"Non consigliato per giochi web"
#: editor/project_manager.cpp
@@ -11225,14 +11105,14 @@ msgid ""
msgstr ""
"Qualità visiva inferiore\n"
"Alcune funzionalità non disponibili\n"
-"Funziona sulla maggior parte degli hardware\n"
-"Raccomandato per giochi web"
+"Funziona sulla maggior parte di hardware\n"
+"Consigliato per giochi web"
#: editor/project_manager.cpp
msgid "Renderer can be changed later, but scenes may need to be adjusted."
msgstr ""
"Il renderer può essere cambiato in seguito, ma potrebbe essere necessario "
-"regolare le scene."
+"rivedere le scene."
#: editor/project_manager.cpp
msgid "Unnamed Project"
@@ -11327,22 +11207,20 @@ msgid "Are you sure to run %d projects at once?"
msgstr "Sei sicuro di voler eseguire %d progetti contemporaneamente?"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Remove %d projects from the list?"
-msgstr "Seleziona il dispositivo dall'elenco"
+msgstr "Rimuovere %d progetti dall'elenco?"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Remove this project from the list?"
-msgstr "Seleziona il dispositivo dall'elenco"
+msgstr "Rimuovere questo progetto dall'elenco?"
#: editor/project_manager.cpp
msgid ""
"Remove all missing projects from the list?\n"
"The project folders' contents won't be modified."
msgstr ""
-"Rimuovere tutti i progetti mancanti dalla lista?\n"
-"I contenuti delle cartelle di progetto non saranno modificati."
+"Rimuovere tutti i progetti mancanti dall'elenco?\n"
+"Il contenuto delle cartelle di progetto non verrà modificato."
#: editor/project_manager.cpp
msgid ""
@@ -11358,9 +11236,9 @@ msgid ""
"Are you sure to scan %s folders for existing Godot projects?\n"
"This could take a while."
msgstr ""
-"Sei sicuro di voler scannerizzare %s cartelle per progetti Godot già "
+"Sei sicuro di voler scansionare %s cartelle per progetti Godot già "
"esistenti?\n"
-"Per questo potrebbe volerci un pò."
+"Potrebbe volerci un po' di tempo."
#. TRANSLATORS: This refers to the application where users manage their Godot projects.
#: editor/project_manager.cpp
@@ -11368,9 +11246,8 @@ msgid "Project Manager"
msgstr "Gestore dei progetti"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Local Projects"
-msgstr "Progetti"
+msgstr "Progetti Locali"
#: editor/project_manager.cpp
msgid "Loading, please wait..."
@@ -11381,23 +11258,20 @@ msgid "Last Modified"
msgstr "Ultima Modifica"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Edit Project"
-msgstr "Esporta progetto"
+msgstr "Modifica Progetto"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Run Project"
-msgstr "Rinomina progetto"
+msgstr "Esegui progetto"
#: editor/project_manager.cpp
msgid "Scan"
-msgstr "Esamina"
+msgstr "Scansiona"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Scan Projects"
-msgstr "Progetti"
+msgstr "Scansiona Progetti"
#: editor/project_manager.cpp
msgid "Select a Folder to Scan"
@@ -11408,18 +11282,16 @@ msgid "New Project"
msgstr "Nuovo Progetto"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Import Project"
-msgstr "Progetto Importato"
+msgstr "Importa Progetto"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Remove Project"
-msgstr "Rinomina progetto"
+msgstr "Rimuovi Progetto"
#: editor/project_manager.cpp
msgid "Remove Missing"
-msgstr "Rimuovi mancante"
+msgstr "Rimuovi Mancanti"
#: editor/project_manager.cpp
msgid "About"
@@ -11439,7 +11311,7 @@ msgstr "Rimuovi Tutto"
#: editor/project_manager.cpp
msgid "Also delete project contents (no undo!)"
-msgstr ""
+msgstr "Elimina anche i contenuti del progetto (non reversibile!)"
#: editor/project_manager.cpp
msgid "Can't run project"
@@ -11454,25 +11326,22 @@ msgstr ""
"Esplorare i progetti di esempio ufficiali nella libreria dei contenuti?"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Filter projects"
-msgstr "Filtra proprietà"
+msgstr "Filtra progetti"
#: editor/project_manager.cpp
-#, fuzzy
msgid ""
"This field filters projects by name and last path component.\n"
"To filter projects by name and full path, the query must contain at least "
"one `/` character."
msgstr ""
-"La casella di ricerca filtra i progetti per nome e l'ultimo componente del "
-"percorso.\n"
+"Questo campo filtra i progetti per nome e ultimo componente del percorso.\n"
"Per filtrare i progetti per nome e percorso completo, la query deve "
"contenere almeno un carattere `/`."
#: editor/project_settings_editor.cpp
msgid "Physical Key"
-msgstr ""
+msgstr "Tasto Fisico"
#: editor/project_settings_editor.cpp
msgid "Key "
@@ -11500,7 +11369,7 @@ msgstr ""
#: editor/project_settings_editor.cpp
msgid "An action with the name '%s' already exists."
-msgstr "Un'azione col nome \"%s\" è già esistente."
+msgstr "Un'azione con il nome \"%s\" è già esistente."
#: editor/project_settings_editor.cpp
msgid "Rename Input Action Event"
@@ -11524,7 +11393,7 @@ msgstr "Dispositivo"
#: editor/project_settings_editor.cpp
msgid " (Physical)"
-msgstr ""
+msgstr " (Fisico)"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Press a Key..."
@@ -11556,19 +11425,19 @@ msgstr "Pulsante Rotellina Giù"
#: editor/project_settings_editor.cpp
msgid "Wheel Left Button"
-msgstr "Pulsante Sinistro della Rotellina"
+msgstr "Pulsante Rotellina Sinistro"
#: editor/project_settings_editor.cpp
msgid "Wheel Right Button"
-msgstr "Pulsante Destro della Rotellina"
+msgstr "Pulsante Rotellina Destro"
#: editor/project_settings_editor.cpp
msgid "X Button 1"
-msgstr "Tasto X 1"
+msgstr "Pulsante X 1"
#: editor/project_settings_editor.cpp
msgid "X Button 2"
-msgstr "Tasto X 2"
+msgstr "Pulsante X 2"
#: editor/project_settings_editor.cpp
msgid "Joypad Axis Index:"
@@ -11604,15 +11473,15 @@ msgstr "Pulsante Sinistro."
#: editor/project_settings_editor.cpp
msgid "Right Button."
-msgstr "Pulsante DEstro."
+msgstr "Pulsante Destro."
#: editor/project_settings_editor.cpp
msgid "Middle Button."
-msgstr "Pulsante centrale."
+msgstr "Pulsante Centrale."
#: editor/project_settings_editor.cpp
msgid "Wheel Up."
-msgstr "Rotellina su."
+msgstr "Rotellina Su."
#: editor/project_settings_editor.cpp
msgid "Wheel Down."
@@ -11624,7 +11493,7 @@ msgstr "Aggiungi Proprietà Globale"
#: editor/project_settings_editor.cpp
msgid "Select a setting item first!"
-msgstr "Prima seleziona un oggetto di impostazione!"
+msgstr "Seleziona prima un elemento di impostazione!"
#: editor/project_settings_editor.cpp
msgid "No property '%s' exists."
@@ -11648,7 +11517,7 @@ msgstr ""
#: editor/project_settings_editor.cpp
msgid "Add Input Action"
-msgstr "Aggiungi azione di input"
+msgstr "Aggiungi Azione di Input"
#: editor/project_settings_editor.cpp
msgid "Error saving settings."
@@ -11667,27 +11536,25 @@ msgid "Override for Feature"
msgstr "Sovrascrivi per Caratteristica"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Add %d Translations"
-msgstr "Aggiungi Traduzione"
+msgstr "Aggiungi %d Traduzioni"
#: editor/project_settings_editor.cpp
msgid "Remove Translation"
msgstr "Rimuovi Traduzione"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Translation Resource Remap: Add %d Path(s)"
-msgstr "Remap Risorse Aggiungi Remap"
+msgstr "Rimappatura Risorse per la Traduzione: Aggiungi %d Percorso(i)"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Translation Resource Remap: Add %d Remap(s)"
-msgstr "Remap Risorse Aggiungi Remap"
+msgstr "Rimappatura Risorse per la Traduzione: Aggiungi %d Remap"
#: editor/project_settings_editor.cpp
+#, fuzzy
msgid "Change Resource Remap Language"
-msgstr "Cambia Lingua Remap Risorse"
+msgstr "Cambia Lingua per il Remap Risorse"
#: editor/project_settings_editor.cpp
msgid "Remove Resource Remap"
@@ -11759,7 +11626,7 @@ msgstr "Traduzioni:"
#: editor/project_settings_editor.cpp
msgid "Remaps"
-msgstr "Remaps"
+msgstr "Rimappature"
#: editor/project_settings_editor.cpp
msgid "Resources:"
@@ -11767,7 +11634,7 @@ msgstr "Risorse:"
#: editor/project_settings_editor.cpp
msgid "Remaps by Locale:"
-msgstr "Remaps per Locale:"
+msgstr "Rimappature per Locale:"
#: editor/project_settings_editor.cpp
msgid "Locale"
@@ -11855,7 +11722,7 @@ msgstr "Seleziona Proprietà"
#: editor/property_selector.cpp
msgid "Select Virtual Method"
-msgstr "Seleziona il Metodo Virtuale"
+msgstr "Seleziona Metodo Virtuale"
#: editor/property_selector.cpp
msgid "Select Method"
@@ -11883,7 +11750,7 @@ msgstr "Usa Espressioni Regolari"
#: editor/rename_dialog.cpp
msgid "Advanced Options"
-msgstr "Opzioni avanzate"
+msgstr "Opzioni Avanzate"
#: editor/rename_dialog.cpp
msgid "Substitute"
@@ -11936,7 +11803,7 @@ msgstr "Passo"
#: editor/rename_dialog.cpp
msgid "Amount by which counter is incremented for each node"
-msgstr "Importo di cui il contatore viene incrementato per ogni nodo"
+msgstr "Quantità di cui viene incrementato il contatore per ogni nodo"
#: editor/rename_dialog.cpp
msgid "Padding"
@@ -11971,6 +11838,7 @@ msgid "snake_case to PascalCase"
msgstr "snake_case a PascalCase"
#: editor/rename_dialog.cpp
+#, fuzzy
msgid "Case"
msgstr "Caso"
@@ -11984,7 +11852,7 @@ msgstr "In Maiuscolo"
#: editor/rename_dialog.cpp
msgid "Reset"
-msgstr "Reset"
+msgstr "Ripristina"
#: editor/rename_dialog.cpp
msgid "Regular Expression Error:"
@@ -12000,7 +11868,7 @@ msgstr "Reparent Nodo"
#: editor/reparent_dialog.cpp
msgid "Reparent Location (Select new Parent):"
-msgstr "Posizione Reparent (Seleziona nuovo genitore):"
+msgstr "Posizione di Reparent (Seleziona nuovo Genitore):"
#: editor/reparent_dialog.cpp
msgid "Keep Global Transform"
@@ -12052,7 +11920,7 @@ msgstr "Istanzia Scena(e)"
#: editor/scene_tree_dock.cpp
msgid "Replace with Branch Scene"
-msgstr "Sostituisci con la Scena Branch"
+msgstr "Sostituisci con Scena Ramo"
#: editor/scene_tree_dock.cpp
msgid "Instance Child Scene"
@@ -12060,7 +11928,7 @@ msgstr "Istanzia Scena Figlia"
#: editor/scene_tree_dock.cpp
msgid "Can't paste root node into the same scene."
-msgstr "Non si può incollare il noto root nella stessa scena."
+msgstr "Non si può incollare il nodo radice nella stessa scena."
#: editor/scene_tree_dock.cpp
msgid "Paste Node(s)"
@@ -12128,12 +11996,16 @@ msgstr "Elimina il nodo \"%s\"?"
msgid ""
"Saving the branch as a scene requires having a scene open in the editor."
msgstr ""
+"Per salvare un ramo come scena è necessario avere una scene aperta "
+"nell'editor."
#: editor/scene_tree_dock.cpp
msgid ""
"Saving the branch as a scene requires selecting only one node, but you have "
"selected %d nodes."
msgstr ""
+"Per salvare un ramo come scena è necessario selezionare un solo nodo, ma ne "
+"sono stati selezionati %s."
#: editor/scene_tree_dock.cpp
msgid ""
@@ -12142,6 +12014,11 @@ msgid ""
"FileSystem dock context menu\n"
"or create an inherited scene using Scene > New Inherited Scene... instead."
msgstr ""
+"Impossibile salvare il ramo del nodo radice come una scena istanziata.\n"
+"Per creare una copia modificabile della scena corrente, duplicala tramite il "
+"menu contestuale del pannello file system\n"
+"altrimenti crea una scena ereditata attraverso Scena > Nuova Scena "
+"Ereditata... ."
#: editor/scene_tree_dock.cpp
msgid ""
@@ -12149,6 +12026,10 @@ msgid ""
"To create a variation of a scene, you can make an inherited scene based on "
"the instanced scene using Scene > New Inherited Scene... instead."
msgstr ""
+"Impossibile salvare il ramo di una scena già istanziata.\n"
+"Per creare una variazione di una scena, potresti invece creare una scena "
+"ereditata basata sulla scena istanziata attraverso Scena > Nuova Scena "
+"Ereditata... ."
#: editor/scene_tree_dock.cpp
msgid "Save New Scene As..."
@@ -12167,7 +12048,7 @@ msgid ""
"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and "
"cause all properties of the node to be reverted to their default."
msgstr ""
-"Abilitare \"Carica Come Placeholder\" disabiliterà \"Figlio Modificabile\" e "
+"Abilitare \"Carica come Placeholder\" disabiliterà \"Figli Modificabili\" e "
"riporterà tutte le proprietà del nodo ai loro valori predefiniti."
#: editor/scene_tree_dock.cpp
@@ -12200,7 +12081,7 @@ msgstr "Altro nodo"
#: editor/scene_tree_dock.cpp
msgid "Can't operate on nodes from a foreign scene!"
-msgstr "Impossibile operare su nodi da scena esterna!"
+msgstr "Impossibile operare su nodi di una scena esterna!"
#: editor/scene_tree_dock.cpp
msgid "Can't operate on nodes the current scene inherits from!"
@@ -12208,7 +12089,7 @@ msgstr "Impossibile operare su nodi da cui la scena corrente eredita!"
#: editor/scene_tree_dock.cpp
msgid "This operation can't be done on instanced scenes."
-msgstr "Questa operazione no può essere eseguita su scene istanziate."
+msgstr "Questa operazione non può essere eseguita su scene istanziate."
#: editor/scene_tree_dock.cpp
msgid "Attach Script"
@@ -12220,27 +12101,27 @@ msgstr "Taglia Nodo(i)"
#: editor/scene_tree_dock.cpp
msgid "Remove Node(s)"
-msgstr "Rimuovi nodo(i)"
+msgstr "Rimuovi Nodo(i)"
#: editor/scene_tree_dock.cpp
msgid "Change type of node(s)"
-msgstr "Cambia il tipo del/i nodo/i"
+msgstr "Cambia il tipo di nodo(i)"
#: editor/scene_tree_dock.cpp
msgid ""
"Couldn't save new scene. Likely dependencies (instances) couldn't be "
"satisfied."
msgstr ""
-"Impossibile salvare la scena. Probabili dipendenze (istanze) non hanno "
-"potuto essere soddisfatte."
+"Impossibile salvare una nuova scena. È probabile che le dipendenze (istanze) "
+"non siano state soddisfatte."
#: editor/scene_tree_dock.cpp
msgid "Error saving scene."
-msgstr "Errore salvando la scena."
+msgstr "Errore durante il salvataggio della scena."
#: editor/scene_tree_dock.cpp
msgid "Error duplicating scene to save it."
-msgstr "Errore duplicando la scena per salvarla."
+msgstr "Errore nel duplicare la scena per salvarla."
#: editor/scene_tree_dock.cpp
msgid "Sub-Resources"
@@ -12248,15 +12129,15 @@ msgstr "Sotto-Risorse"
#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance"
-msgstr "Liberare ereditarietà"
+msgstr "Libera Ereditarietà"
#: editor/scene_tree_dock.cpp
msgid "Editable Children"
-msgstr "Figlio Modificabile"
+msgstr "Figli Modificabili"
#: editor/scene_tree_dock.cpp
msgid "Load As Placeholder"
-msgstr "Carica come placeholder"
+msgstr "Carica come Placeholder"
#: editor/scene_tree_dock.cpp
msgid ""
@@ -12274,7 +12155,7 @@ msgstr "Aggiungi un nodo figlio"
#: editor/scene_tree_dock.cpp
msgid "Expand/Collapse All"
-msgstr "Espandi/Collassa tutto"
+msgstr "Espandi/Comprimi tutto"
#: editor/scene_tree_dock.cpp
msgid "Change Type"
@@ -12282,7 +12163,7 @@ msgstr "Cambia Tipo"
#: editor/scene_tree_dock.cpp
msgid "Reparent to New Node"
-msgstr "Reparent a Nuovo Nodo"
+msgstr "Riparenta a Nuovo Nodo"
#: editor/scene_tree_dock.cpp
msgid "Make Scene Root"
@@ -12290,7 +12171,7 @@ msgstr "Rendi Scena Radice"
#: editor/scene_tree_dock.cpp
msgid "Merge From Scene"
-msgstr "Unisci Da Scena"
+msgstr "Unisci da Scena"
#: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp
msgid "Save Branch as Scene"
@@ -12314,7 +12195,7 @@ msgid ""
"exists."
msgstr ""
"Istanzia un file scena come Nodo. Crea una scena ereditata se nessun nodo di "
-"root esiste."
+"radice esiste."
#: editor/scene_tree_dock.cpp
msgid "Attach a new or existing script to the selected node."
@@ -12322,7 +12203,7 @@ msgstr "Allega un nuovo script o uno già esistente al nodo selezionato."
#: editor/scene_tree_dock.cpp
msgid "Detach the script from the selected node."
-msgstr "Rimuovi lo script per il nodo selezionato."
+msgstr "Rimuovi lo script dal nodo selezionato."
#: editor/scene_tree_dock.cpp
msgid "Remote"
@@ -12336,7 +12217,7 @@ msgid ""
msgstr ""
"Se selezionato, il pannello della scena remota farà ricaricare il progetto "
"ogni volta che viene aggiornato.\n"
-"Tornare al pannello della scena locale per migliorare le prestazioni."
+"Torna al pannello della scena locale per migliorare le prestazioni."
#: editor/scene_tree_dock.cpp
msgid "Local"
@@ -12344,7 +12225,7 @@ msgstr "Locale"
#: editor/scene_tree_dock.cpp
msgid "Clear Inheritance? (No Undo!)"
-msgstr "Liberare ereditarietà? (No Undo!)"
+msgstr "Liberare Ereditarietà? (Non Annullabile!)"
#: editor/scene_tree_editor.cpp
msgid "Toggle Visible"
@@ -12356,7 +12237,7 @@ msgstr "Sblocca nodo"
#: editor/scene_tree_editor.cpp
msgid "Button Group"
-msgstr "Gruppo pulsanti"
+msgstr "Gruppo Pulsanti"
#: editor/scene_tree_editor.cpp
msgid "(Connecting From)"
@@ -12364,7 +12245,7 @@ msgstr "(Collegamento da)"
#: editor/scene_tree_editor.cpp
msgid "Node configuration warning:"
-msgstr "Avviso confugurazione nodo:"
+msgstr "Avviso configurazione nodo:"
#: editor/scene_tree_editor.cpp
msgid ""
@@ -12372,7 +12253,7 @@ msgid ""
"Click to show signals dock."
msgstr ""
"Il nodo ha %s connessioni e %s gruppi.\n"
-"Cliccare per mostrare il pannello dei segnali."
+"Clicca per mostrare il pannello dei segnali."
#: editor/scene_tree_editor.cpp
msgid ""
@@ -12380,7 +12261,7 @@ msgid ""
"Click to show signals dock."
msgstr ""
"Il nodo ha %s connessioni.\n"
-"Cliccare per mostrare il pannello dei segnali."
+"Clicca per mostrare il pannello dei segnali."
#: editor/scene_tree_editor.cpp
msgid ""
@@ -12392,7 +12273,7 @@ msgstr ""
#: editor/scene_tree_editor.cpp
msgid "Open Script:"
-msgstr "Apri script:"
+msgstr "Apri Script:"
#: editor/scene_tree_editor.cpp
msgid ""
@@ -12420,7 +12301,7 @@ msgid ""
"Click to unpin."
msgstr ""
"AnimationPlayer è bloccato.\n"
-"Fare clic per sbloccare."
+"Fai clic per sbloccare."
#: editor/scene_tree_editor.cpp
msgid "Invalid node name, the following characters are not allowed:"
@@ -12476,7 +12357,7 @@ msgstr "Selezionata estensione errata."
#: editor/script_create_dialog.cpp
msgid "Error loading template '%s'"
-msgstr "Errore caricamento template \"%s\""
+msgstr "Errore di caricamento template \"%s\""
#: editor/script_create_dialog.cpp
msgid "Error - Could not create script in filesystem."
@@ -12484,7 +12365,7 @@ msgstr "Errore - Impossibile creare script in filesystem."
#: editor/script_create_dialog.cpp
msgid "Error loading script from %s"
-msgstr "Errore caricamento script da %s"
+msgstr "Errore di caricamento script da %s"
#: editor/script_create_dialog.cpp
msgid "Overrides"
@@ -12520,7 +12401,7 @@ msgstr "Nome o percorso genitore ereditato non valido."
#: editor/script_create_dialog.cpp
msgid "Script path/name is valid."
-msgstr "Il nome e la path dello script sono validi."
+msgstr "Il nome/percorso dello script sono validi."
#: editor/script_create_dialog.cpp
msgid "Allowed: a-z, A-Z, 0-9, _ and ."
@@ -12528,7 +12409,7 @@ msgstr "Consentiti: a-z, A-Z, 0-9, _ e ."
#: editor/script_create_dialog.cpp
msgid "Built-in script (into scene file)."
-msgstr "Script incorporato (nel file della scena)."
+msgstr "Script integrato (nel file della scena)."
#: editor/script_create_dialog.cpp
msgid "Will create a new script file."
@@ -12547,14 +12428,16 @@ msgid ""
"Note: Built-in scripts have some limitations and can't be edited using an "
"external editor."
msgstr ""
-"Note: Gli script pre-installati hanno alcune limitazioni e non possono "
-"essere modificati utilizzando un editor esterno."
+"Nota: Gli script integrati hanno alcune limitazioni e non possono essere "
+"modificati tramite un editor esterno."
#: editor/script_create_dialog.cpp
msgid ""
"Warning: Having the script name be the same as a built-in type is usually "
"not desired."
msgstr ""
+"Avviso: In genere non è ideale avere il nome dello script uguale a quello di "
+"un tipo predefinito."
#: editor/script_create_dialog.cpp
msgid "Class Name:"
@@ -12566,7 +12449,7 @@ msgstr "Template:"
#: editor/script_create_dialog.cpp
msgid "Built-in Script:"
-msgstr "Script Built-In:"
+msgstr "Script Integrato:"
#: editor/script_create_dialog.cpp
msgid "Attach Node Script"
@@ -12578,7 +12461,7 @@ msgstr "Remoto "
#: editor/script_editor_debugger.cpp
msgid "Bytes:"
-msgstr "Bytes:"
+msgstr "Byte:"
#: editor/script_editor_debugger.cpp
msgid "Warning:"
@@ -12618,7 +12501,7 @@ msgstr "Errori"
#: editor/script_editor_debugger.cpp
msgid "Child process connected."
-msgstr "Processo Figlio Connesso."
+msgstr "Processo figlio connesso."
#: editor/script_editor_debugger.cpp
msgid "Copy Error"
@@ -12626,7 +12509,7 @@ msgstr "Copia Errore"
#: editor/script_editor_debugger.cpp
msgid "Open C++ Source on GitHub"
-msgstr ""
+msgstr "Apri Sorgente C++ su Github"
#: editor/script_editor_debugger.cpp
msgid "Video RAM"
@@ -12634,7 +12517,7 @@ msgstr "RAM Video"
#: editor/script_editor_debugger.cpp
msgid "Skip Breakpoints"
-msgstr "Salta i breakpoint"
+msgstr "Salta i punti di interruzione"
#: editor/script_editor_debugger.cpp
msgid "Inspect Previous Instance"
@@ -12646,7 +12529,7 @@ msgstr "Ispeziona Istanza Successiva"
#: editor/script_editor_debugger.cpp
msgid "Stack Frames"
-msgstr "Impila Frame"
+msgstr "Stack Frame"
#: editor/script_editor_debugger.cpp
msgid "Profiler"
@@ -12670,7 +12553,7 @@ msgstr "Monitor"
#: editor/script_editor_debugger.cpp
msgid "Pick one or more items from the list to display the graph."
-msgstr "Scegli uno o più oggetti dalla lista per mostrare il grafico."
+msgstr "Scegli uno o più elementi dall'elenco per mostrare il grafico."
#: editor/script_editor_debugger.cpp
msgid "List of Video Memory Usage by Resource:"
@@ -12706,11 +12589,11 @@ msgstr "Vari"
#: editor/script_editor_debugger.cpp
msgid "Clicked Control:"
-msgstr "Clicked Control:"
+msgstr "Control Cliccato:"
#: editor/script_editor_debugger.cpp
msgid "Clicked Control Type:"
-msgstr "Tipo Clicked Control:"
+msgstr "Tipo Control Cliccato:"
#: editor/script_editor_debugger.cpp
msgid "Live Edit Root:"
@@ -12738,7 +12621,7 @@ msgstr "Cambia Scorciatoia"
#: editor/settings_config_dialog.cpp
msgid "Editor Settings"
-msgstr "Impostazioni editor"
+msgstr "Impostazioni Editor"
#: editor/settings_config_dialog.cpp
msgid "Shortcuts"
@@ -12805,24 +12688,20 @@ msgid "Change Ray Shape Length"
msgstr "Cambia lunghezza Ray Shape"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Room Point Position"
-msgstr "Imposta Posizione Punto Curva"
+msgstr "Imposta Posizione Punto Stanza"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Portal Point Position"
-msgstr "Imposta Posizione Punto Curva"
+msgstr "Imposta Posizione Punto Portale"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Occluder Sphere Radius"
-msgstr "Modifica Raggio di Forma del Cilindro"
+msgstr "Imposta Raggio della Sfera Occlusore"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Occluder Sphere Position"
-msgstr "Imposta Curva In Posizione"
+msgstr "Imposta Posizione della Sfera Occlusore"
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
@@ -12914,34 +12793,34 @@ msgstr "Non si basa su un file risorsa"
#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
-msgstr "Istanza invalida formato dizionario (manca @path)"
+msgstr "Formato del dizionario dell'istanza non valido (manca @path)"
#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr ""
-"Istanza invalida formato dizionario (impossibile caricare script in @path)"
+"Formato del dizionario dell'istanza non valido (impossibile caricare script "
+"in @path)"
#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
-msgstr "Istanza invalida formato dizionario (script invalido in @path)"
+msgstr ""
+"Formato del dizionario dell'istanza non valido (script invalido in @path)"
#: modules/gdscript/gdscript_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
-msgstr "Istanza invalida formato dizionario (sottoclassi invalide)"
+msgstr "Formato del dizionario dell'istanza non valido (sottoclassi invalide)"
#: modules/gdscript/gdscript_functions.cpp
msgid "Object can't provide a length."
msgstr "L'oggetto non può fornire una lunghezza."
#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp
-#, fuzzy
msgid "Export Mesh GLTF2"
-msgstr "Esporta una libreria di Mesh"
+msgstr "Esporta Mesh GLTF2"
#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp
-#, fuzzy
msgid "Export GLTF..."
-msgstr "Esporta..."
+msgstr "Esporta GLTF..."
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
@@ -12957,11 +12836,11 @@ msgstr "Piano:"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Floor"
-msgstr "Prossimo Piano"
+msgstr "Pavimento Successivo"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Previous Floor"
-msgstr "Piano Precedente"
+msgstr "Pavimento Precedente"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Floor:"
@@ -12976,6 +12855,7 @@ msgid "GridMap Fill Selection"
msgstr "GridMap Riempi Selezione"
#: modules/gridmap/grid_map_editor_plugin.cpp
+#, fuzzy
msgid "GridMap Paste Selection"
msgstr "Sezione GridMap incolla"
@@ -12993,9 +12873,8 @@ msgid "Grid Map"
msgstr "Mappa di Griglia"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "Snap View"
-msgstr "Scatta la vista"
+msgstr "Scatta Visuale"
#: modules/gridmap/grid_map_editor_plugin.cpp
#, fuzzy
@@ -13076,7 +12955,8 @@ msgstr "Filtra mesh"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Give a MeshLibrary resource to this GridMap to use its meshes."
-msgstr "Dai una risorsa MeshLibrary a questa GridMap per usare le sue mesh."
+msgstr ""
+"Assegna una risorsa MeshLibrary a questa GridMap per usare le sue mesh."
#: modules/lightmapper_cpu/lightmapper_cpu.cpp
msgid "Begin Bake"
@@ -13111,17 +12991,17 @@ msgid "Class name can't be a reserved keyword"
msgstr "Il nome della classe non può essere una parola chiave riservata"
#: modules/mono/csharp_script.cpp
-#, fuzzy
msgid "Build Solution"
-msgstr "Riempi Selezione"
+msgstr "Crea Soluzione"
#: modules/mono/mono_gd/gd_mono_utils.cpp
+#, fuzzy
msgid "End of inner exception stack trace"
msgstr "Fine dell'analisi dell’eccezione interna dello stack"
#: modules/recast/navigation_mesh_editor_plugin.cpp
msgid "Bake NavMesh"
-msgstr "Preprocessa NavMesh"
+msgstr "Prepara NavMesh"
#: modules/recast/navigation_mesh_editor_plugin.cpp
msgid "Clear the navigation mesh."
@@ -13184,24 +13064,24 @@ msgid ""
"A node yielded without working memory, please read the docs on how to yield "
"properly!"
msgstr ""
-"Un nodo ha ceduto senza memoria di lavoro, si prega di leggere la "
-"documentazione riguardo a come cedere in maniera corretta!"
+"Un nodo ha reso (yield) senza memoria di lavoro, si prega di leggere la "
+"documentazione su come rendere correttamente!"
#: modules/visual_script/visual_script.cpp
msgid ""
"Node yielded, but did not return a function state in the first working "
"memory."
msgstr ""
-"Il nodo ha ceduto, ma non ha ritornato uno stato di funzione nella prima "
-"memoria di lavoro."
+"Il nodo ha reso (yield), ma non ha ritornato uno stato di funzione nella "
+"prima memoria di lavoro."
#: modules/visual_script/visual_script.cpp
msgid ""
"Return value must be assigned to first element of node working memory! Fix "
"your node please."
msgstr ""
-"Il valore di return deve essere assegnato al primo elemento della memoria di "
-"lavoro del nodo! Si prega di aggiustare il nodo."
+"Il valore restituito (return) deve essere assegnato al primo elemento della "
+"memoria di lavoro del nodo! Si prega di correggere il nodo."
#: modules/visual_script/visual_script.cpp
msgid "Node returned an invalid sequence output: "
@@ -13244,18 +13124,16 @@ msgid "Add Output Port"
msgstr "Aggiungi Porta Output"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Port Type"
-msgstr "Cambia Tipo"
+msgstr "Cambia Tipo Porta"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Port Name"
-msgstr "Cambia Nome porta Input"
+msgstr "Cambia Nome Porta"
#: modules/visual_script/visual_script_editor.cpp
msgid "Override an existing built-in function."
-msgstr "Sovrascrivi una funzione built-in esistente."
+msgstr "Sovrascrivi una funzione integrata esistente."
#: modules/visual_script/visual_script_editor.cpp
msgid "Create a new function."
@@ -13263,7 +13141,7 @@ msgstr "Crea una nuova funzione."
#: modules/visual_script/visual_script_editor.cpp
msgid "Variables:"
-msgstr "Valiabili:"
+msgstr "Variabili:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Create a new variable."
@@ -13303,7 +13181,7 @@ msgstr "Aggiungi Funzione"
#: modules/visual_script/visual_script_editor.cpp
msgid "Delete input port"
-msgstr "Rimuovi Porta Input"
+msgstr "Elimina porta input"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Variable"
@@ -13342,8 +13220,8 @@ msgstr ""
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
-"Mantieni premuto Control per rilasciare un Getter. Mantieni premuto Shift "
-"per rilasciare una firma generica."
+"Mantieni premuto Ctrl per rilasciare un Getter. Mantieni premuto Shift per "
+"rilasciare una firma generica."
#: modules/visual_script/visual_script_editor.cpp
msgid "Hold %s to drop a simple reference to the node."
@@ -13366,9 +13244,8 @@ msgid "Add Preload Node"
msgstr "Aggiungi Nodo Preload"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Node(s)"
-msgstr "Aggiungi Nodo"
+msgstr "Aggiungi Nodo(i)"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Node(s) From Tree"
@@ -13381,7 +13258,7 @@ msgid ""
msgstr ""
"Impossibile lasciare le proprietà perché lo script \"%s\" non è usato nella "
"scena.\n"
-"Lascia andare premendo \"Shift (Maiuscolo)\" per copiare solo la firma."
+"Lascia andare tenendo premuto \"Shift\" per copiare solo la firma."
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Getter Property"
@@ -13441,7 +13318,7 @@ msgstr "Incolla Nodi VisualScript"
#: modules/visual_script/visual_script_editor.cpp
msgid "Can't create function with a function node."
-msgstr "Impossibile creare funzioni con il nodo funzione."
+msgstr "Impossibile creare funzioni con un nodo funzione."
#: modules/visual_script/visual_script_editor.cpp
msgid "Can't create function of nodes from nodes of multiple functions."
@@ -13636,37 +13513,31 @@ msgstr "Seleziona il dispositivo dall'elenco"
#: platform/android/export/export_plugin.cpp
msgid "Running on %s"
-msgstr ""
+msgstr "Esecuzione su %s"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Exporting APK..."
-msgstr "Esportando Tutto"
+msgstr "Esportando APK..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Uninstalling..."
-msgstr "Disinstalla"
+msgstr "Disinstallando..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Installing to device, please wait..."
-msgstr "Caricamento, per favore attendere..."
+msgstr "Installazione sul dispositivo, per favore attendere..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Could not install to device: %s"
-msgstr "Impossibile istanziare la scena!"
+msgstr "Impossibile installare sul dispositivo: %s"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Running on device..."
-msgstr "Eseguendo Script Personalizzato..."
+msgstr "In esecuzione sul dispositivo..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Could not execute on device."
-msgstr "Impossibile creare la cartella."
+msgstr "Impossibile eseguire sul dispositivo."
#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
@@ -13685,6 +13556,8 @@ msgid ""
"Either Debug Keystore, Debug User AND Debug Password settings must be "
"configured OR none of them."
msgstr ""
+"Devono essere configurate le impostazioni Debug Keystore, Debug User E Debug "
+"Password, altrimenti nessuna di esse."
#: platform/android/export/export_plugin.cpp
msgid "Debug keystore not configured in the Editor Settings nor in the preset."
@@ -13696,6 +13569,8 @@ msgid ""
"Either Release Keystore, Release User AND Release Password settings must be "
"configured OR none of them."
msgstr ""
+"Devono essere configurate le impostazioni Release Keystore, Release User E "
+"Release Password, altrimenti nessuna di esse."
#: platform/android/export/export_plugin.cpp
msgid "Release keystore incorrectly configured in the export preset."
@@ -13709,7 +13584,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid "Invalid Android SDK path in Editor Settings."
-msgstr "Un percorso invalido per il SDK Android nelle Impostazioni Editor."
+msgstr "Percorso per il SDK Android non valido nelle Impostazioni Editor."
#: platform/android/export/export_plugin.cpp
msgid "Missing 'platform-tools' directory!"
@@ -13750,7 +13625,7 @@ msgid ""
"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
"project setting (changed in Godot 3.2.2).\n"
msgstr ""
-"Modulo \"GodotPaymentV3\" non valido incluso nelle impostazione del progetto "
+"Modulo \"GodotPaymentV3\" non valido incluso nell'impostazione del progetto "
"\"android/moduli\" (modificato in Godot 3.2.2).\n"
#: platform/android/export/export_plugin.cpp
@@ -13776,35 +13651,34 @@ msgid ""
"directory.\n"
"The resulting %s is unsigned."
msgstr ""
+"Non è stato possibile trovare \"apksigner\".\n"
+"Verificare che il comando sia disponibile nella directory degli strumenti di "
+"compilazione Android SDK.\n"
+"Il %s risultato non è firmato."
#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
msgstr ""
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Signing release %s..."
-msgstr ""
-"Scansione File,\n"
-"Si prega di attendere..."
+msgstr "Firmando rilascio %s..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Could not find keystore, unable to export."
-msgstr "Impossibile aprire il template per l'esportazione:"
+msgstr "Non è stato possibile trovare keystore, impossible esportare."
#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
-msgstr ""
+msgstr "'apksigner' ha restituito con errore #%d"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Verifying %s..."
-msgstr "Aggiungendo %s..."
+msgstr "Verificando %s..."
#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
-msgstr ""
+msgstr "Verifica 'apksigner' di %s non riuscita."
#: platform/android/export/export_plugin.cpp
#, fuzzy
@@ -13813,7 +13687,8 @@ msgstr "Esportazione per Android"
#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
-msgstr "Nome file invalido! Il Bundle Android App richiede l'estensione *.aab."
+msgstr ""
+"Nome file non valido! Il Bundle Android App richiede l'estensione *.aab."
#: platform/android/export/export_plugin.cpp
msgid "APK Expansion not compatible with Android App Bundle."
@@ -13821,19 +13696,19 @@ msgstr "L'estensione APK non è compatibile con il Bundle Android App."
#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android APK requires the *.apk extension."
-msgstr "Nome file invalido! L'APK Android richiede l'estensione *.apk."
+msgstr "Nome file non valido! L'APK Android richiede l'estensione *.apk."
#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
-msgstr ""
+msgstr "Formato d'esportazione non supportato!\n"
#: platform/android/export/export_plugin.cpp
msgid ""
"Trying to build from a custom built template, but no version info for it "
"exists. Please reinstall from the 'Project' menu."
msgstr ""
-"Tentativo di costruire da un template build personalizzato, ma nesuna "
-"informazione sulla sua versione esiste. Perfavore, reinstallalo dal menu "
+"Tentato di costruire da un template build personalizzato, ma nessuna "
+"informazione sulla sua versione esiste. Per favore, reinstallalo dal menu "
"\"Progetto\"."
#: platform/android/export/export_plugin.cpp
@@ -13846,22 +13721,22 @@ msgstr ""
"Versione build di Android non coerente:\n"
" Template installato: %s\n"
" Versione Godot: %s\n"
-"Perfavore, reinstalla il build template di Android dal menu \"Progetto\"."
+"Per favore, reinstalla il build template di Android dal menu \"Progetto\"."
#: platform/android/export/export_plugin.cpp
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
+"Impossibile sovrascrivere i file res://android/build/res/*.xml con il nome "
+"del progetto"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Could not export project files to gradle project\n"
-msgstr "Impossibile creare project.godot nel percorso di progetto."
+msgstr "Impossibile esportare i file del progetto in un progetto gradle\n"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Could not write expansion package file!"
-msgstr "Impossibile scrivere il file:"
+msgstr "Impossibile scrivere il file del pacchetto di espansione!"
#: platform/android/export/export_plugin.cpp
msgid "Building Android Project (gradle)"
@@ -13872,7 +13747,7 @@ msgid ""
"Building of Android project failed, check output for the error.\n"
"Alternatively visit docs.godotengine.org for Android build documentation."
msgstr ""
-"Costruzione del progetto Android fallita, controlla l'output per vedere gli "
+"Compilazione del progetto Android fallita, controlla l'output per vedere gli "
"errori.\n"
"In alternativa, visita docs.godotengine.org per la documentazione della "
"build Android."
@@ -13890,21 +13765,20 @@ msgstr ""
"directory del progetto gradle per gli output."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Package not found: %s"
-msgstr "Animazione non trovata: \"%s\""
+msgstr "Pacchetto non trovato: \"%s\""
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Creating APK..."
-msgstr "Creazione contorni..."
+msgstr "Creazione APK..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid ""
"Could not find template APK to export:\n"
"%s"
-msgstr "Impossibile aprire il template per l'esportazione:"
+msgstr ""
+"Impossibile trovare il template APK per l'esportazione:\n"
+"%s"
#: platform/android/export/export_plugin.cpp
msgid ""
@@ -13913,28 +13787,30 @@ msgid ""
"Please build a template with all required libraries, or uncheck the missing "
"architectures in the export preset."
msgstr ""
+"Mancano librerie nel template di esportazione per le architetture "
+"selezionate: %s.\n"
+"Si prega di costruire un template con tutte le librerie richieste, o "
+"deselezionare le architetture mancanti nel preset di esportazione."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Adding files..."
-msgstr "Aggiungendo %s..."
+msgstr "Aggiungendo file..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Could not export project files"
-msgstr "Impossibile scrivere il file:"
+msgstr "Impossibile esportare i file del progetto"
#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
-msgstr ""
+msgstr "Allineamento APK..."
#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
-msgstr ""
+msgstr "Impossibile decomprimere l'APK temporaneamente non allineato."
#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
msgid "Identifier is missing."
-msgstr "L'identificatore è mancante."
+msgstr "Identificatore mancante."
#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
msgid "The character '%s' is not allowed in Identifier."
@@ -13978,49 +13854,44 @@ msgid "Could not write file:"
msgstr "Impossibile scrivere il file:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not read file:"
-msgstr "Impossibile scrivere il file:"
+msgstr "Impossibile leggere il file:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not read HTML shell:"
-msgstr "Impossibile leggere la shell HTML personalizzata:"
+msgstr "Impossibile leggere la shell HTML:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not create HTTP server directory:"
-msgstr "Impossibile creare la cartella."
+msgstr "Impossibile creare la directory per il server HTTP:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Error starting HTTP server:"
-msgstr "Errore salvando la scena."
+msgstr "Errore all'avvio del server HTTP:"
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Invalid bundle identifier:"
-msgstr "Identificatore non valido:"
+msgstr "Identificatore del bundle non valido:"
#: platform/osx/export/export.cpp
msgid "Notarization: code signing required."
-msgstr ""
+msgstr "Autenticazione: è richiesta la firma del codice."
#: platform/osx/export/export.cpp
msgid "Notarization: hardened runtime required."
-msgstr ""
+msgstr "Autenticazione: è richiesto un runtime rafforzato."
#: platform/osx/export/export.cpp
msgid "Notarization: Apple ID name not specified."
-msgstr ""
+msgstr "Autenticazione: nome Apple ID non specificato."
#: platform/osx/export/export.cpp
msgid "Notarization: Apple ID password not specified."
-msgstr ""
+msgstr "Autenticazione: password Apple ID non specificato."
#: platform/uwp/export/export.cpp
msgid "Invalid package short name."
-msgstr "Nome pacchetto invalido, troppo corto."
+msgstr "Nome breve del pacchetto non valido."
#: platform/uwp/export/export.cpp
msgid "Invalid package unique name."
@@ -14040,9 +13911,10 @@ msgstr "GUID publisher invalido."
#: platform/uwp/export/export.cpp
msgid "Invalid background color."
-msgstr "Colore di background invalido."
+msgstr "Colore di sfondo non valido."
#: platform/uwp/export/export.cpp
+#, fuzzy
msgid "Invalid Store Logo image dimensions (should be 50x50)."
msgstr ""
"Dimensioni dell'immagine dello Store Logo invalide (dovrebbero essere 50x50)."
@@ -14080,7 +13952,7 @@ msgstr ""
#: platform/uwp/export/export.cpp
msgid "Invalid splash screen image dimensions (should be 620x300)."
msgstr ""
-"Dimensioni non valide dell'immagine dello splash screen (dovrebbero essere "
+"Dimensioni per l'immagine dello splash screen non valide (dovrebbero essere "
"620x300)."
#: scene/2d/animated_sprite.cpp
@@ -14089,7 +13961,7 @@ msgid ""
"order for AnimatedSprite to display frames."
msgstr ""
"Una risorsa SpriteFrames deve essere creata o impostata nella proprietà "
-"\"Frames\" in modo da far mostrare i frame dal nodo AnimatedSprite."
+"\"Frames\" per permettere a AnimatedSprite di visualizzare i frame."
#: scene/2d/canvas_modulate.cpp
msgid ""
@@ -14097,7 +13969,7 @@ msgid ""
"scenes). The first created one will work, while the rest will be ignored."
msgstr ""
"Solamente un CanvasModulate visibile è consentito per scena (o insieme di "
-"scene istanziate). Il primo creato funzionerà, mentre i restanti saranno "
+"scene istanziate). Il primo creato funzionerà, mentre gli altri saranno "
"ignorati."
#: scene/2d/collision_object_2d.cpp
@@ -14108,8 +13980,8 @@ msgid ""
msgstr ""
"Questo nodo non ha una forma, non può quindi collidere o interagire con gli "
"altri oggetti.\n"
-"Devi aggiungere come figlio un CollisionShape2D oppure un CollisionPolygon2D "
-"per definire la sua forma."
+"Aggiungi come figlio un CollisionShape2D o un CollisionPolygon2D per "
+"definire la sua forma."
#: scene/2d/collision_polygon_2d.cpp
msgid ""
@@ -14118,7 +13990,7 @@ msgid ""
"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
msgstr ""
"CollisionPolygon2D serve a fornire una forma di collisione a un nodo "
-"derivato di CollisionObject2D. Si prega di utilizzarlo solamente come figlio "
+"derivato da CollisionObject2D. Si prega di utilizzarlo solamente come figlio "
"di Area2D, StaticBody2D, RigidBody2D, KinematicBody2D, etc. in modo da "
"dargli una forma."
@@ -14139,16 +14011,15 @@ msgstr ""
"costruzione \"Segmenti\"."
#: scene/2d/collision_shape_2d.cpp
-#, fuzzy
msgid ""
"CollisionShape2D only serves to provide a collision shape to a "
"CollisionObject2D derived node. Please only use it as a child of Area2D, "
"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
msgstr ""
-"CollisionShape2D serve a fornire una forma di collisione a un nodo derivato "
-"da CollisionObject2D. Si prega di utilizzarlo solamente come figlio di "
-"Area2D, StaticBody2D, RigidBody2D, KinematicBody2D, etc. in modo da dargli "
-"una forma."
+"CollisionShape2D serve solo a fornire una forma di collisione a un nodo "
+"derivato da CollisionObject2D. Si prega di utilizzarlo solamente come figlio "
+"di Area2D, StaticBody2D, RigidBody2D, KinematicBody2D, etc. in modo da "
+"dargli una forma."
#: scene/2d/collision_shape_2d.cpp
msgid ""
@@ -14163,9 +14034,9 @@ msgid ""
"Polygon-based shapes are not meant be used nor edited directly through the "
"CollisionShape2D node. Please use the CollisionPolygon2D node instead."
msgstr ""
-"Le forme basate sui poligoni non sono state fatte per essere usate nè "
-"modificate direttamente tramite il nodo CollisionShape2D. Per piacere usa "
-"invece il nodo CollisionPolygon2D."
+"Le forme basate sui poligoni non sono dovrebbero essere usate né modificate "
+"direttamente tramite il nodo CollisionShape2D. Si prega di usare invece il "
+"nodo CollisionPolygon2D."
#: scene/2d/cpu_particles_2d.cpp
msgid ""
@@ -14193,14 +14064,14 @@ msgstr "Il giunto non è collegato a due PhysicsBody2D"
#: scene/2d/joints_2d.cpp
msgid "Node A and Node B must be different PhysicsBody2Ds"
-msgstr "Il Nodo A e il Nodo B devono essere PhysicsBody2D diversi"
+msgstr "Nodo A e Nodo B devono essere PhysicsBody2D diversi"
#: scene/2d/light_2d.cpp
msgid ""
"A texture with the shape of the light must be supplied to the \"Texture\" "
"property."
msgstr ""
-"Una texture con una forma della luce deve essere fornita alla proprietà "
+"Una texture con la forma della luce deve essere fornita alla proprietà "
"\"Texture\"."
#: scene/2d/light_occluder_2d.cpp
@@ -14213,7 +14084,7 @@ msgstr ""
#: scene/2d/light_occluder_2d.cpp
msgid "The occluder polygon for this occluder is empty. Please draw a polygon."
msgstr ""
-"Il poligono per questo occluder è vuoto. Perfavore, disegna un poligono."
+"Il poligono per questo occluder è vuoto. Si prega di disegnare un poligono."
#: scene/2d/navigation_polygon.cpp
msgid ""
@@ -14230,14 +14101,14 @@ msgid ""
"node. It only provides navigation data."
msgstr ""
"NavigationPolygonInstance deve essere figlio o nipote di un nodo "
-"Navigation2D. Fornisce solamente dati di navigazione."
+"Navigation2D. Esso fornisce solamente dati di navigazione."
#: scene/2d/parallax_layer.cpp
msgid ""
"ParallaxLayer node only works when set as child of a ParallaxBackground node."
msgstr ""
-"Il nodo ParallaxLayer funziona solamente quando impostato come figlio di un "
-"nodo ParallaxBackground."
+"Il nodo ParallaxLayer funziona solamente se impostato come figlio di un nodo "
+"ParallaxBackground."
#: scene/2d/particles_2d.cpp
msgid ""
@@ -14254,8 +14125,8 @@ msgid ""
"A material to process the particles is not assigned, so no behavior is "
"imprinted."
msgstr ""
-"Un materiale per processare le particelle non é assegnato, pertanto nessun "
-"comportamento é impresso."
+"Non è assegnato un materiale per processare le particelle, pertanto nessun "
+"comportamento viene impresso."
#: scene/2d/particles_2d.cpp
msgid ""
@@ -14268,8 +14139,7 @@ msgstr ""
#: scene/2d/path_2d.cpp
msgid "PathFollow2D only works when set as a child of a Path2D node."
msgstr ""
-"PathFollow2D funziona solamente quando impostato come figlio di un nodo "
-"Path2D."
+"PathFollow2D funziona solamente se impostato come figlio di un nodo Path2D."
#: scene/2d/physics_body_2d.cpp
msgid ""
@@ -14278,11 +14148,10 @@ msgid ""
"Change the size in children collision shapes instead."
msgstr ""
"I cambiamenti di dimensione a RigidBody2D (in modalità rigida o carattere) "
-"saranno sovrascritti dal motore fisico quando in esecuzione.\n"
+"saranno sovrascritti dal motore fisico durante l'esecuzione.\n"
"Modifica invece la dimensione nelle forme di collisione figlie."
#: scene/2d/remote_transform_2d.cpp
-#, fuzzy
msgid "Path property must point to a valid Node2D node to work."
msgstr "La proprietà path deve puntare a un nodo Node2D valido per funzionare."
@@ -14310,16 +14179,16 @@ msgid ""
"KinematicBody2D, etc. to give them a shape."
msgstr ""
"TileMap con Use Parent abilitato richiede un genitore CollisionObject2D per "
-"dargli forma. Perfavore, usalo come figlio di Area2D, StaticBody2D, "
-"RigidBody2D, KinematicBody2D, etc. per dargli una forma."
+"dargli forma. Si prega di usalo come figlio di Area2D, StaticBody2D, "
+"RigidBody2D, KinematicBody2D, ecc. per dare loro una forma."
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnabler2D works best when used with the edited scene root directly "
"as parent."
msgstr ""
-"VisibilityEnabler2D funziona meglio quando usato con il nodo principale "
-"della scena ereditata direttamente come genitore."
+"VisibilityEnabler2D funziona meglio se usato con il nodo radice della scena "
+"modificata direttamente come genitore."
#: scene/3d/arvr_nodes.cpp
msgid "ARVRCamera must have an ARVROrigin node as its parent."
@@ -14330,13 +14199,12 @@ msgid "ARVRController must have an ARVROrigin node as its parent."
msgstr "ARVRController deve avere un nodo ARVROrigin come genitore."
#: scene/3d/arvr_nodes.cpp
-#, fuzzy
msgid ""
"The controller ID must not be 0 or this controller won't be bound to an "
"actual controller."
msgstr ""
-"L'id del controller non deve essere 0 o non verrà associato a un controller "
-"attuale."
+"L'ID del controller non deve essere 0 o esso non verrà associato a un vero "
+"controller."
#: scene/3d/arvr_nodes.cpp
msgid "ARVRAnchor must have an ARVROrigin node as its parent."
@@ -14348,8 +14216,8 @@ msgid ""
"The anchor ID must not be 0 or this anchor won't be bound to an actual "
"anchor."
msgstr ""
-"L'ID dell'ancora non deve essere 0 oppure non verrà associato a un'ancora "
-"attuale."
+"L'ID dell'ancora non deve essere 0 oppure essa non verrà associata a "
+"un'ancora vera."
#: scene/3d/arvr_nodes.cpp
msgid "ARVROrigin requires an ARVRCamera child node."
@@ -14369,11 +14237,11 @@ msgstr "Preparazione Ambiente"
#: scene/3d/baked_lightmap.cpp
msgid "Generating capture"
-msgstr "Generando cattura"
+msgstr "Generazione cattura"
#: scene/3d/baked_lightmap.cpp
msgid "Saving lightmaps"
-msgstr "Salvando Lightmap"
+msgstr "Salvataggio Lightmap"
#: scene/3d/baked_lightmap.cpp
msgid "Done"
@@ -14391,7 +14259,6 @@ msgstr ""
"definire la sua forma."
#: scene/3d/collision_polygon.cpp
-#, fuzzy
msgid ""
"CollisionPolygon only serves to provide a collision shape to a "
"CollisionObject derived node. Please only use it as a child of Area, "
@@ -14399,30 +14266,31 @@ msgid ""
msgstr ""
"CollisionPolygon serve solamente a fornire una forma di collisione a un nodo "
"derivato da CollisionObject. Si prega di usarlo solamente come figlio di "
-"Area, StaticBody, RigidBody, KinematicBody, etc. in modo da dargli una forma."
+"Area, StaticBody, RigidBody, KinematicBody, ecc. in modo da dare loro una "
+"forma."
#: scene/3d/collision_polygon.cpp
msgid "An empty CollisionPolygon has no effect on collision."
msgstr "Un CollisionPolygon vuoto non ha effetti in collisione."
#: scene/3d/collision_shape.cpp
-#, fuzzy
msgid ""
"CollisionShape only serves to provide a collision shape to a CollisionObject "
"derived node. Please only use it as a child of Area, StaticBody, RigidBody, "
"KinematicBody, etc. to give them a shape."
msgstr ""
-"CollisionShape serve a fornire una forma di collisione a un nodo derivato da "
-"CollisionObject. Si prega di utilizzarlo solamente come figlio di Area, "
-"StaticBody, RigidBody, KinematicBody, etc. in modo da dargli una forma."
+"CollisionShape serve solamente a fornire una forma di collisione a un nodo "
+"derivato da CollisionObject. Si prega di usarlo solamente come figlio di "
+"Area, StaticBody, RigidBody, KinematicBody, etc. in modo da dare loro una "
+"forma."
#: scene/3d/collision_shape.cpp
msgid ""
"A shape must be provided for CollisionShape to function. Please create a "
"shape resource for it."
msgstr ""
-"Una forma deve essere fornita per il CollisionShape per farlo funzionare. "
-"Perfavore, creali una risorsa \"forma\"."
+"È necessario fornire una forma al CollisionShape per farlo funzionare. "
+"Perciò, si prega di creare una risorsa forma (shape)."
#: scene/3d/collision_shape.cpp
msgid ""
@@ -14472,6 +14340,9 @@ msgid ""
"longer has any effect.\n"
"To remove this warning, disable the GIProbe's Compress property."
msgstr ""
+"La proprietà GIProbe Compress è stata deprecata a causa di bug noti e non ha "
+"più alcun effetto.\n"
+"Per rimuovere questo avviso, disattiva la proprietà Compress di GIProbe."
#: scene/3d/light.cpp
msgid "A SpotLight with an angle wider than 90 degrees cannot cast shadows."
@@ -14481,7 +14352,7 @@ msgstr ""
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
-"Una risorsa NavigationMesh deve essere creata o impostata affinché questo "
+"È necessario creare o impostare una risorsa NavigationMesh affinché questo "
"nodo funzioni."
#: scene/3d/navigation_mesh.cpp
@@ -14494,11 +14365,11 @@ msgstr ""
#: scene/3d/occluder.cpp
msgid "No shape is set."
-msgstr ""
+msgstr "Nessuna forma è impostata."
#: scene/3d/occluder.cpp
msgid "Only uniform scales are supported."
-msgstr ""
+msgstr "Solo scale uniformi sono supportate."
#: scene/3d/particles.cpp
msgid ""
@@ -14520,8 +14391,8 @@ msgid ""
"Particles animation requires the usage of a SpatialMaterial whose Billboard "
"Mode is set to \"Particle Billboard\"."
msgstr ""
-"Le animazioni delle particelle richiedono l'uso di un SpatialMaterial la cui "
-"modalità Billboard è impostata a \"Particle Billboard\"."
+"L'animazione delle particelle richiede l'uso di un SpatialMaterial la cui "
+"Modalità Billboard è impostata a \"Particle Billboard\"."
#: scene/3d/path.cpp
msgid "PathFollow only works when set as a child of a Path node."
@@ -14532,7 +14403,7 @@ msgid ""
"PathFollow's ROTATION_ORIENTED requires \"Up Vector\" to be enabled in its "
"parent Path's Curve resource."
msgstr ""
-"Il flag ROTATION_ORIENTED di un PathFollow richiede \"Up Vector\" di essere "
+"Il flag ROTATION_ORIENTED di PathFollow richiede che \"Up Vector\" sia "
"abilitato nella risorsa Curve del genitore Path."
#: scene/3d/physics_body.cpp
@@ -14541,41 +14412,41 @@ msgid ""
"by the physics engine when running.\n"
"Change the size in children collision shapes instead."
msgstr ""
-"I cambiamenti di dimensione a RigidBody (nel personaggio o nelle modalità "
-"rigide) saranno sovrascritti dal motore fisico quando in esecuzione.\n"
-"Modifica invece la dimensione in sagome di collisione figlie."
+"I cambiamenti di dimensione a RigidBody (in modalità rigida o carattere) "
+"saranno sovrascritti dal motore fisico durante l'esecuzione.\n"
+"Modifica invece la dimensione nelle forme di collisione figlie."
#: scene/3d/physics_joint.cpp
msgid "Node A and Node B must be PhysicsBodies"
-msgstr "Il Nodo A e il Nodo B devono essere PhysicsBodies"
+msgstr "Nodo A e Nodo B devono essere PhysicsBodies"
#: scene/3d/physics_joint.cpp
msgid "Node A must be a PhysicsBody"
-msgstr "Il Nodo A deve essere un PhysicsBody"
+msgstr "Nodo A deve essere un PhysicsBody"
#: scene/3d/physics_joint.cpp
msgid "Node B must be a PhysicsBody"
-msgstr "Il Nodo B deve essere un PhysicsBody"
+msgstr "Nodo B deve essere un PhysicsBody"
#: scene/3d/physics_joint.cpp
msgid "Joint is not connected to any PhysicsBodies"
-msgstr "Il giunto non è collegato a dei PhysicsBodies"
+msgstr "Il giunto non è collegato a nessun PhysicsBody"
#: scene/3d/physics_joint.cpp
msgid "Node A and Node B must be different PhysicsBodies"
-msgstr "Il Nodo A e il Nodo B devono essere PhysicsBodies diversi"
+msgstr "Nodo A e Nodo B devono essere PhysicsBody diversi"
#: scene/3d/portal.cpp
msgid "The RoomManager should not be a child or grandchild of a Portal."
-msgstr ""
+msgstr "Il RoomManager non deve essere figlio o nipote di un Portal."
#: scene/3d/portal.cpp
msgid "A Room should not be a child or grandchild of a Portal."
-msgstr ""
+msgstr "Un nodo Room non dovrebbe essere figlio o nipote di un Portal."
#: scene/3d/portal.cpp
msgid "A RoomGroup should not be a child or grandchild of a Portal."
-msgstr ""
+msgstr "Un RoomGroup non dovrebbe essere figlio o nipote di un Portal."
#: scene/3d/remote_transform.cpp
msgid ""
@@ -14587,83 +14458,108 @@ msgstr ""
#: scene/3d/room.cpp
msgid "A Room cannot have another Room as a child or grandchild."
-msgstr ""
+msgstr "Un Room non può avere un altro Room come figlio o nipote."
#: scene/3d/room.cpp
msgid "The RoomManager should not be placed inside a Room."
-msgstr ""
+msgstr "Il RoomManager non dovrebbe collocato all'interno di un Room."
#: scene/3d/room.cpp
msgid "A RoomGroup should not be placed inside a Room."
-msgstr ""
+msgstr "Un RoomGroup non dovrebbe essere collocato all'interno di un Room."
#: scene/3d/room.cpp
msgid ""
"Room convex hull contains a large number of planes.\n"
"Consider simplifying the room bound in order to increase performance."
msgstr ""
+"L'hull converso del Room contiene un gran numero di piani.\n"
+"Si consiglia di semplificare i vincoli della stanza per aumentare le "
+"prestazioni."
#: scene/3d/room_group.cpp
msgid "The RoomManager should not be placed inside a RoomGroup."
msgstr ""
+"Il RoomManager non dovrebbe essere collocato all'interno di un RoomGroup."
#: scene/3d/room_manager.cpp
msgid "The RoomList has not been assigned."
-msgstr ""
+msgstr "Il RoomList non è stato assegnato."
#: scene/3d/room_manager.cpp
msgid "The RoomList node should be a Spatial (or derived from Spatial)."
msgstr ""
+"Il nodo RoomList dovrebbe essere di tipo Spatial (o derivato da Spatial)."
#: scene/3d/room_manager.cpp
msgid ""
"Portal Depth Limit is set to Zero.\n"
"Only the Room that the Camera is in will render."
msgstr ""
+"Portal Depth Limit è impostato a Zero.\n"
+"Verrà renderizzata soltanto la Stanza in cui si trova la telecamera."
#: scene/3d/room_manager.cpp
msgid "There should only be one RoomManager in the SceneTree."
-msgstr ""
+msgstr "Ci dovrebbe essere un solo RoomManager nello SceneTree."
#: scene/3d/room_manager.cpp
msgid ""
"RoomList path is invalid.\n"
"Please check the RoomList branch has been assigned in the RoomManager."
msgstr ""
+"Percorso per il RoomList non valido.\n"
+"Assicurarsi che il ramo RoomList sia stato assegnato nel RoomManager."
#: scene/3d/room_manager.cpp
+#, fuzzy
msgid "RoomList contains no Rooms, aborting."
-msgstr ""
+msgstr "RoomList non contiene Stanze, interruzione."
#: scene/3d/room_manager.cpp
msgid "Misnamed nodes detected, check output log for details. Aborting."
msgstr ""
+"Rilevati nodi con nomi errati, controlla il registro di output per i "
+"dettagli. Interruzione."
#: scene/3d/room_manager.cpp
+#, fuzzy
msgid "Portal link room not found, check output log for details."
msgstr ""
+"Collegamento stanza del Portale non trovato. Controlla il registro di output "
+"per i dettagli."
#: scene/3d/room_manager.cpp
msgid ""
"Portal autolink failed, check output log for details.\n"
"Check the portal is facing outwards from the source room."
msgstr ""
+"Collegamento automatico portali fallito, controlla il registro di output per "
+"i dettagli.\n"
+"Assicurarsi che il portale sia rivolto verso l'esterno della stanza di "
+"origine."
#: scene/3d/room_manager.cpp
msgid ""
"Room overlap detected, cameras may work incorrectly in overlapping area.\n"
"Check output log for details."
msgstr ""
+"Rilevata sovrapposizione di stanze, le telecamere potrebbero non funzionare "
+"correttamente nell'area sovrapposta.\n"
+"Controlla il registro di output per i dettagli."
#: scene/3d/room_manager.cpp
+#, fuzzy
msgid ""
"Error calculating room bounds.\n"
"Ensure all rooms contain geometry or manual bounds."
msgstr ""
+"Errore durante il calcolo dei confini della stanza.\n"
+"Assicurarsi che tutte le stanze contengano geometria o confini manuali."
#: scene/3d/soft_body.cpp
msgid "This body will be ignored until you set a mesh."
-msgstr "Questo corpo verrà ignorato fino a quando non imposterai una mesh."
+msgstr "Questo corpo verrà ignorato finché non imposterai una mesh."
#: scene/3d/soft_body.cpp
msgid ""
@@ -14673,7 +14569,7 @@ msgid ""
msgstr ""
"Le modifiche alle dimensioni di SoftBody saranno sovrascritte dal motore "
"fisico durante l'esecuzione.\n"
-"Cambiare invece le dimensioni nelle forme di collisioni figlie."
+"Modifica invece la dimensione nelle forme di collisione figlie."
#: scene/3d/sprite_3d.cpp
msgid ""
@@ -14681,7 +14577,7 @@ msgid ""
"order for AnimatedSprite3D to display frames."
msgstr ""
"Una risorsa SpriteFrames deve essere creata o impostata nella proprietà "
-"\"Frames\" in modo da far mostrare i frame dall'AnimatedSprite3D."
+"\"Frames\" per permettere a AnimatedSprite3D di visualizzare i frame."
#: scene/3d/vehicle_body.cpp
msgid ""
@@ -14696,23 +14592,24 @@ msgid ""
"WorldEnvironment requires its \"Environment\" property to contain an "
"Environment to have a visible effect."
msgstr ""
-"WordEnvironment richiede la sua proprietà \"Environment\" di contenere un "
+"WordEnvironment richiede che la sua proprietà \"Environment\" contenga un "
"Environment per avere un effetto visibile."
#: scene/3d/world_environment.cpp
msgid ""
"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)."
msgstr ""
-"Solamente un WorldEnvironment è consentito per scena (o insieme di scene "
-"istanziate)."
+"Solamente un solo WorldEnvironment è consentito per scena (o insieme di "
+"scene istanziate)."
#: scene/3d/world_environment.cpp
msgid ""
"This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set "
"this environment's Background Mode to Canvas (for 2D scenes)."
msgstr ""
-"Questo WorldEnvironment viene ignorato. Aggiungere una Telecamera (per le "
-"scene 3D) o impostare questo ambiente Modalità Canvas (per le scene in 2D)."
+"Questo WorldEnvironment è ignorato. Aggiungi una Telecamera (per le scene "
+"3D) oppure imposta il Background Mode di questo ambiente su Canvas (per le "
+"scene in 2D)."
#: scene/animation/animation_blend_tree.cpp
msgid "On BlendTree node '%s', animation not found: '%s'"
@@ -14723,8 +14620,9 @@ msgid "Animation not found: '%s'"
msgstr "Animazione non trovata: \"%s\""
#: scene/animation/animation_player.cpp
+#, fuzzy
msgid "Anim Apply Reset"
-msgstr ""
+msgstr "Applica Ripristino Anim."
#: scene/animation/animation_tree.cpp
msgid "In node '%s', invalid animation: '%s'."
@@ -14736,7 +14634,7 @@ msgstr "Animazione non valida: \"%s\"."
#: scene/animation/animation_tree.cpp
msgid "Nothing connected to input '%s' of node '%s'."
-msgstr "Nulla collegato all'ingresso \"%s\" del nodo \"%s\"."
+msgstr "Niente collegato all'input \"%s\" del nodo \"%s\"."
#: scene/animation/animation_tree.cpp
msgid "No root AnimationNode for the graph is set."
@@ -14745,7 +14643,7 @@ msgstr "Non è stato impostato alcun AnimationNode root per il grafico."
#: scene/animation/animation_tree.cpp
msgid "Path to an AnimationPlayer node containing animations is not set."
msgstr ""
-"Il Percorso di un nodo AnimationPlayer contenente animazioni non è impostato."
+"Il percorso di un nodo AnimationPlayer contenente animazioni non è impostato."
#: scene/animation/animation_tree.cpp
msgid "Path set for AnimationPlayer does not lead to an AnimationPlayer node."
@@ -14755,11 +14653,11 @@ msgstr ""
#: scene/animation/animation_tree.cpp
msgid "The AnimationPlayer root node is not a valid node."
-msgstr "Il nodo root dell'AnimationPlayer non è valido."
+msgstr "Il nodo radice dell'AnimationPlayer non è valido."
#: scene/animation/animation_tree_player.cpp
msgid "This node has been deprecated. Use AnimationTree instead."
-msgstr "Questo nodo è stato deprecato. In alternativa, usa un AnimationTree."
+msgstr "Questo nodo è stato deprecato. Usa invece un AnimationTree."
#: scene/gui/color_picker.cpp
msgid ""
@@ -14797,17 +14695,19 @@ msgid ""
"children placement behavior.\n"
"If you don't intend to add a script, use a plain Control node instead."
msgstr ""
-"Il Contanier da se non serve alcuna funzione affinché uno script non "
-"configura il comportamento di posizione dei figli.\n"
-"Se non intendi aggiungere uno script, usa un semplice nodo Control."
+"Il Container di per sé non serve a nulla, a meno che uno script non "
+"configuri il suo comportamento di posizionamento figli.\n"
+"Se non intendi aggiungere uno script, utilizza invece un semplice nodo "
+"Control."
#: scene/gui/control.cpp
msgid ""
"The Hint Tooltip won't be displayed as the control's Mouse Filter is set to "
"\"Ignore\". To solve this, set the Mouse Filter to \"Stop\" or \"Pass\"."
msgstr ""
-"Il tooltip non comparirà poiché il Mouse filter del control è impostato a "
-"\"Ignore\". Per risolvere questo, impostalo a \"Stop\" o \"Pass\"."
+"Il Tooltip non apparirà poiché la proprietà Mouse Filter del Control è "
+"impostata su \"Ignore\". Per risolvere questo problema, imposta Mouse Filter "
+"su \"Stop\" o \"Pass\"."
#: scene/gui/dialogs.cpp
msgid "Alert!"
@@ -14832,6 +14732,10 @@ msgid ""
"The GLES2 backend is currently in use, so these modes will act like Stretch "
"instead."
msgstr ""
+"Le opzioni Tile e Tile Fit per le proprietà Axis Stretch hanno effetto solo "
+"se si utilizza il rendering back-end GLES3.\n"
+"Poiché il back-end GLES2 è attualmente in uso, queste modalità si "
+"comporteranno invece come Stretch."
#: scene/gui/popup.cpp
msgid ""
@@ -14839,8 +14743,8 @@ msgid ""
"functions. Making them visible for editing is fine, but they will hide upon "
"running."
msgstr ""
-"I popup saranno nascosti di default finchè non chiami popup(), o una delle "
-"qualsiasi funzioni popup*(). Farli diventare visibili per modificarli va "
+"I popup saranno nascosti di default finché non chiami popup(), o una "
+"qualsiasi delle funzioni popup*(). Renderli visibili per modificarli va "
"bene, ma scompariranno durante l'esecuzione."
#: scene/gui/range.cpp
@@ -14848,15 +14752,15 @@ msgid "If \"Exp Edit\" is enabled, \"Min Value\" must be greater than 0."
msgstr "Se \"Exp Edit\" è abilitato, \"Min Value\" deve essere maggiore di 0."
#: scene/gui/scroll_container.cpp
-#, fuzzy
msgid ""
"ScrollContainer is intended to work with a single child control.\n"
"Use a container as child (VBox, HBox, etc.), or a Control and set the custom "
"minimum size manually."
msgstr ""
-"ScrollContainer è inteso per funzionare con un singolo figlio di controllo.\n"
-"Usa un container come figlio (VBox, HBox, ect.), oppure un nodo Control e "
-"imposta la dimensione minima personalizzata manualmente."
+"ScrollContainer è progettato per funzionare con un singolo figlio di "
+"controllo.\n"
+"Usa un container come figlio (VBox, HBox, ect.), oppure un nodo Control, "
+"impostando la dimensione minima personalizzata manualmente."
#: scene/gui/tree.cpp
msgid "(Other)"
@@ -14868,7 +14772,7 @@ msgid ""
"Environment -> Default Environment) could not be loaded."
msgstr ""
"Non è stato possibile caricare l'Ambiente predefinito come specificato nelle "
-"Impostazioni Progetto (Rendering -> Ambiente -> Ambiente Predefinito)."
+"Impostazioni Progetto (Rendering -> Environment -> Default Environment)."
#: scene/main/timer.cpp
msgid ""
@@ -14877,6 +14781,10 @@ msgid ""
"Consider using a script's process loop instead of relying on a Timer for "
"very low wait times."
msgstr ""
+"I tempi d'attesa dei Timer molto brevi (< 0.05 seconds) potrebbero "
+"comportarsi in modo poco incoerente, a seconda del framerate di rendering o "
+"fisico.\n"
+"Si consiglia invece di affidarsi a un Timer per tempi d'attesa molto brevi."
#: scene/main/viewport.cpp
msgid ""
@@ -14886,34 +14794,35 @@ msgid ""
"texture to some node for display."
msgstr ""
"Questo viewport non è impostato come target di render. Se si vuole che il "
-"suo contenuto venga direttamente mostrato a schermo, renderlo figlio di un "
-"Control, in modo che possa ottenere una dimensione. Altrimenti, renderlo un "
-"RenderTarget e assegnare alla sua texture interna qualche nodo da mostrare."
+"suo contenuto venga direttamente visualizzato sullo schermo, renderlo figlio "
+"di un Control, in modo che possa ottenere una dimensione. Altrimenti, "
+"renderlo un RenderTarget e assegnare la sua texture interna a qualche nodo "
+"per la visualizzazione."
#: scene/main/viewport.cpp
-#, fuzzy
msgid ""
"The Viewport size must be greater than or equal to 2 pixels on both "
"dimensions to render anything."
msgstr ""
-"La dimensione del Viewport deve essere maggiore di 0 affinché qualcosa sia "
-"visibile."
+"La dimensione del Viewport deve essere maggiore o uguale a 2 pixel su "
+"entrambi i lati per visualizzare qualcosa."
#: scene/resources/occluder_shape.cpp
+#, fuzzy
msgid "OccluderShapeSphere Set Spheres"
-msgstr ""
+msgstr "Imposta Sfere OccluderShapeSphere"
#: scene/resources/visual_shader_nodes.cpp
msgid ""
"The sampler port is connected but not used. Consider changing the source to "
"'SamplerPort'."
msgstr ""
-"La porta del sampler è connessa ma mai usata. Considera cambiare la sorgente "
-"a \"SamplerPort\"."
+"La porta del sampler è connessa ma mai usata. Considera di cambiare la "
+"sorgente a \"SamplerPort\"."
#: scene/resources/visual_shader_nodes.cpp
msgid "Invalid source for preview."
-msgstr "Fonte non valida per l'anteprima."
+msgstr "Sorgente non valida per l'anteprima."
#: scene/resources/visual_shader_nodes.cpp
msgid "Invalid source for shader."
@@ -14924,26 +14833,30 @@ msgid "Invalid comparison function for that type."
msgstr "Funzione di confronto non valida per quel tipo."
#: servers/visual/shader_language.cpp
-#, fuzzy
msgid "Varying may not be assigned in the '%s' function."
-msgstr ""
-"Le variabili possono essere assegnate soltanto in funzione del vertice."
+msgstr "Le variabili non possono essere assegnate nella funzione \"%s\"."
#: servers/visual/shader_language.cpp
msgid ""
"Varyings which assigned in 'vertex' function may not be reassigned in "
"'fragment' or 'light'."
msgstr ""
+"Le variabili assegnate nella funzione \"vertex\" non possono essere "
+"riassegnate in \"fragment\" o \"light\"."
#: servers/visual/shader_language.cpp
msgid ""
"Varyings which assigned in 'fragment' function may not be reassigned in "
"'vertex' or 'light'."
msgstr ""
+"Le variabili assegnate nella funzione \"fragment\" non possono essere "
+"riassegnate in \"vertex\" o \"light\"."
#: servers/visual/shader_language.cpp
msgid "Fragment-stage varying could not been accessed in custom function!"
msgstr ""
+"Non è stato possibile accedere a variabile in fase di Fragment nella "
+"funzione personalizzata!"
#: servers/visual/shader_language.cpp
msgid "Assignment to function."
diff --git a/editor/translations/ja.po b/editor/translations/ja.po
index 0f9ea94f57..91af3e6757 100644
--- a/editor/translations/ja.po
+++ b/editor/translations/ja.po
@@ -40,7 +40,7 @@ msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-10-22 06:04+0000\n"
+"PO-Revision-Date: 2021-11-14 11:41+0000\n"
"Last-Translator: nitenook <admin@alterbaum.net>\n"
"Language-Team: Japanese <https://hosted.weblate.org/projects/godot-engine/"
"godot/ja/>\n"
@@ -49,7 +49,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -7743,14 +7743,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "ã“ã®skeletonã«ã¯ãƒœãƒ¼ãƒ³ãŒã‚りã¾ã›ã‚“。å­Bone2Dノードを追加ã—ã¦ãã ã•ã„。"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "ボーンã‹ã‚‰ãƒ¬ã‚¹ãƒˆãƒãƒ¼ã‚ºã‚’作æˆ"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "ボーンã¸ãƒ¬ã‚¹ãƒˆãƒãƒ¼ã‚ºã‚’設定ã™ã‚‹"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "ボーンã‹ã‚‰ãƒ¬ã‚¹ãƒˆãƒãƒ¼ã‚ºã‚’作æˆ"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Skeleton2D"
@@ -14418,7 +14418,7 @@ msgstr "警告ï¼"
#: scene/gui/dialogs.cpp
msgid "Please Confirm..."
-msgstr "確èª..."
+msgstr "確èª"
#: scene/gui/file_dialog.cpp
msgid "Must use a valid extension."
diff --git a/editor/translations/ka.po b/editor/translations/ka.po
index 1ce6deba73..aeb8023ba4 100644
--- a/editor/translations/ka.po
+++ b/editor/translations/ka.po
@@ -7700,11 +7700,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
diff --git a/editor/translations/km.po b/editor/translations/km.po
index e54ab26b7b..4a61c9969d 100644
--- a/editor/translations/km.po
+++ b/editor/translations/km.po
@@ -7418,11 +7418,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
diff --git a/editor/translations/ko.po b/editor/translations/ko.po
index 649e623c63..096d8a3ee8 100644
--- a/editor/translations/ko.po
+++ b/editor/translations/ko.po
@@ -27,12 +27,13 @@
# SteamB23 <steamb23@outlook.com>, 2021.
# Jaemin Park <ppparkje@naver.com>, 2021.
# ì‹ ë™ê·œ <rlsl0422@gmail.com>, 2021.
+# Kiroo <elusive1102@naver.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-11-03 13:15+0000\n"
+"PO-Revision-Date: 2021-11-19 08:43+0000\n"
"Last-Translator: Myeongjin Lee <aranet100@gmail.com>\n"
"Language-Team: Korean <https://hosted.weblate.org/projects/godot-engine/"
"godot/ko/>\n"
@@ -41,7 +42,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -2929,7 +2930,7 @@ msgstr "다시 실행"
#: editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
-msgstr "프로ì íЏ ë˜ëŠ” 씬 관련 여러가지 ë„구들."
+msgstr "프로ì íЏ ë˜ëŠ” 씬 관련 여러가지 툴."
#: editor/editor_node.cpp editor/project_manager.cpp
#: editor/script_create_dialog.cpp
@@ -2966,7 +2967,7 @@ msgstr "프로ì íЏ ë°ì´í„° í´ë” 열기"
#: editor/editor_node.cpp editor/plugins/tile_set_editor_plugin.cpp
msgid "Tools"
-msgstr "ë„구"
+msgstr "툴"
#: editor/editor_node.cpp
msgid "Orphan Resource Explorer..."
@@ -3230,7 +3231,7 @@ msgstr "ì¸ìŠ¤íŽ™í„°"
#: editor/editor_node.cpp
msgid "Expand Bottom Panel"
-msgstr "하단 íŒ¨ë„ í™•ìž¥"
+msgstr "아래쪽 íŒ¨ë„ í™•ìž¥"
#: editor/editor_node.cpp
msgid "Output"
@@ -4383,6 +4384,10 @@ msgid ""
"Selecting another resource in the FileSystem dock without clicking Reimport "
"first will discard changes made in the Import dock."
msgstr ""
+"ì•„ì§ ì ìš©ë˜ì§€ ì•Šì€ ë³´ë¥˜ ì¤‘ì¸ ë³€ê²½ì‚¬í•­ì´ ìžˆìŠµë‹ˆë‹¤. 가져오기 ì˜µì…˜ì— ëŒ€í•œ 변경사"
+"í•­ì„ ì ìš©í•˜ë ¤ë©´ 다시 가져오기를 í´ë¦­í•˜ì„¸ìš”.\n"
+"다시 가져오기를 먼저 í´ë¦­í•˜ì§€ 않고 파ì¼ì‹œìŠ¤í…œ ë…ì—서 다른 리소스를 ì„ íƒí•˜ë©´ "
+"가져오기 ë…ì˜ ë³€ê²½ì‚¬í•­ì€ ë²„ë ¤ì§‘ë‹ˆë‹¤."
#: editor/import_dock.cpp
msgid "Import As:"
@@ -4939,7 +4944,7 @@ msgstr "ë…¸ë“œì˜ ì• ë‹ˆë©”ì´ì…˜ ìž¬ìƒ ìŠ¤ì¼€ì¼ë¥¼ ì „ì²´ì ìœ¼ë¡œ 조절합ë
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Tools"
-msgstr "애니메ì´ì…˜ ë„구"
+msgstr "애니메ì´ì…˜ 툴"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation"
@@ -4964,7 +4969,7 @@ msgstr "애니메ì´ì…˜ 목ë¡ì„ 표시합니다."
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Autoplay on Load"
-msgstr "불러올 시 ìžë™ìœ¼ë¡œ 재ìƒ"
+msgstr "불러오면 ìžë™ 재ìƒ"
#: editor/plugins/animation_player_editor_plugin.cpp
msgid "Enable Onion Skinning"
@@ -5833,7 +5838,7 @@ msgstr "IK ì²´ì¸ ì§€ìš°ê¸°"
msgid ""
"Warning: Children of a container get their position and size determined only "
"by their parent."
-msgstr "경고: 컨테ì´ë„ˆì˜ ìžì† 위치와 í¬ê¸°ëŠ” ë¶€ëª¨ì— ì˜í•´ ê²°ì •ë©ë‹ˆë‹¤."
+msgstr "경고: 컨테ì´ë„ˆì˜ ìžì‹ 위치와 í¬ê¸°ëŠ” ë¶€ëª¨ì— ì˜í•´ ê²°ì •ë©ë‹ˆë‹¤."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/sprite_frames_editor_plugin.cpp
@@ -5988,12 +5993,12 @@ msgstr "ì„ íƒëœ 오브ì íŠ¸ë¥¼ 잠금ì—서 풉니다 (움ì§ì¼ 수 있습ë‹
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Makes sure the object's children are not selectable."
-msgstr "오브ì íŠ¸ì˜ ìžì†ì„ ì„ íƒí•˜ì§€ 않ë„ë¡ í•©ë‹ˆë‹¤."
+msgstr "오브ì íŠ¸ì˜ ìžì‹ì„ ì„ íƒí•˜ì§€ 않ë„ë¡ í•©ë‹ˆë‹¤."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Restores the object's children's ability to be selected."
-msgstr "오브ì íŠ¸ì˜ ìžì†ì„ ì„ íƒí•  수 있ë„ë¡ ë³µì›í•©ë‹ˆë‹¤."
+msgstr "오브ì íŠ¸ì˜ ìžì‹ì„ ì„ íƒí•  수 있ë„ë¡ ë³µì›í•©ë‹ˆë‹¤."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Skeleton Options"
@@ -7691,17 +7696,17 @@ msgstr "ì…°ì´ë”"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "This skeleton has no bones, create some children Bone2D nodes."
-msgstr "ì´ ìŠ¤ì¼ˆë ˆí†¤ì—는 ë³¸ì´ ì—†ìŠµë‹ˆë‹¤. Bone2D노드를 ìžì†ìœ¼ë¡œ 만드세요."
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "ë³¸ì˜ ëŒ€ê¸° ìžì„¸ 만들기"
+msgstr "ì´ ìŠ¤ì¼ˆë ˆí†¤ì—는 ë³¸ì´ ì—†ìŠµë‹ˆë‹¤. Bone2D노드를 ìžì‹ìœ¼ë¡œ 만드세요."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "본ì—게 대기 ìžì„¸ 설정"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "ë³¸ì˜ ëŒ€ê¸° ìžì„¸ 만들기"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "스켈레톤2D"
@@ -7928,7 +7933,7 @@ msgstr "íšŒì „ì„ ë·°ì— ì •ë ¬"
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
msgid "No parent to instance a child at."
-msgstr "ìžì†ì„ ì¸ìŠ¤í„´ìŠ¤í•  부모가 없습니다."
+msgstr "ìžì‹ì„ ì¸ìŠ¤í„´ìŠ¤í™”í•  부모가 없습니다."
#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
msgid "This operation requires a single selected node."
@@ -8091,11 +8096,11 @@ msgstr "í¬í„¸ 컬ë§ì„ 위한 ë£¸ì„ ë³€í™˜í•©ë‹ˆë‹¤."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Bottom View"
-msgstr "하단 뷰"
+msgstr "아래쪽 뷰"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Top View"
-msgstr "ìƒë‹¨ ë·°"
+msgstr "위쪽 뷰"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View"
@@ -8114,27 +8119,22 @@ msgid "Right View"
msgstr "우측 뷰"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Orbit View Down"
msgstr "선회 뷰 아래로"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Orbit View Left"
msgstr "선회 뷰 왼쪽으로"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Orbit View Right"
msgstr "선회 뷰 오른쪽으로"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Orbit View Up"
msgstr "선회 뷰 위로"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Orbit View 180"
msgstr "선회 뷰 180으로"
@@ -11468,7 +11468,7 @@ msgstr "단계별 카운터"
#: editor/rename_dialog.cpp
msgid "If set, the counter restarts for each group of child nodes."
-msgstr "설정하면 ê° ê·¸ë£¹ì˜ ìžì† ë…¸ë“œì˜ ì¹´ìš´í„°ë¥¼ 다시 시작합니다."
+msgstr "설정하면 ê° ê·¸ë£¹ì˜ ìžì‹ ë…¸ë“œì˜ ì¹´ìš´í„°ë¥¼ 다시 시작합니다."
#: editor/rename_dialog.cpp
msgid "Initial value for the counter"
@@ -11598,7 +11598,7 @@ msgstr "가지 씬으로 êµì²´"
#: editor/scene_tree_dock.cpp
msgid "Instance Child Scene"
-msgstr "ìžì† 씬 ì¸ìŠ¤í„´ìŠ¤í™”"
+msgstr "ìžì‹ 씬 ì¸ìŠ¤í„´ìŠ¤í™”"
#: editor/scene_tree_dock.cpp
msgid "Can't paste root node into the same scene."
@@ -11648,7 +11648,7 @@ msgstr "노드를 루트로 만들기"
#: editor/scene_tree_dock.cpp
msgid "Delete %d nodes and any children?"
-msgstr "%d ê°œì˜ ë…¸ë“œì™€ 모든 ìžì† 노드를 삭제할까요?"
+msgstr "%d ê°œì˜ ë…¸ë“œì™€ 모든 ìžì‹ 노드를 삭제할까요?"
#: editor/scene_tree_dock.cpp
msgid "Delete %d nodes?"
@@ -11660,7 +11660,7 @@ msgstr "루트 노드 \"%s\"ì„(를) 삭제할까요?"
#: editor/scene_tree_dock.cpp
msgid "Delete node \"%s\" and its children?"
-msgstr "노드 \"%s\"와(ê³¼) ìžì†ì„ 삭제할까요?"
+msgstr "노드 \"%s\"와(ê³¼) ìžì‹ì„ 삭제할까요?"
#: editor/scene_tree_dock.cpp
msgid "Delete node \"%s\"?"
@@ -11717,7 +11717,7 @@ msgid ""
"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and "
"cause all properties of the node to be reverted to their default."
msgstr ""
-"\"ìžë¦¬ 표시ìžë¡œ 불러오기\"를 활성화하면 \"편집할 수 있는 ìžì†\" ì„¤ì •ì´ ë¹„í™œì„±"
+"\"ìžë¦¬ 표시ìžë¡œ 불러오기\"를 활성화하면 \"편집할 수 있는 ìžì‹\" ì„¤ì •ì´ ë¹„í™œì„±"
"í™”ë˜ê³ , 그러면 ê·¸ ë…¸ë“œì˜ ëª¨ë“  ì†ì„±ì´ ë””í´íŠ¸ë¡œ ë³µì›ë©ë‹ˆë‹¤."
#: editor/scene_tree_dock.cpp
@@ -11801,7 +11801,7 @@ msgstr "ìƒì† 지우기"
#: editor/scene_tree_dock.cpp
msgid "Editable Children"
-msgstr "편집할 수 있는 ìžì†"
+msgstr "편집할 수 있는 ìžì‹"
#: editor/scene_tree_dock.cpp
msgid "Load As Placeholder"
@@ -11818,7 +11818,7 @@ msgstr ""
#: editor/scene_tree_dock.cpp
msgid "Add Child Node"
-msgstr "ìžì† 노드 추가"
+msgstr "ìžì‹ 노드 추가"
#: editor/scene_tree_dock.cpp
msgid "Expand/Collapse All"
@@ -11842,7 +11842,7 @@ msgstr "다른 씬ì—서 병합하기"
#: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp
msgid "Save Branch as Scene"
-msgstr "가지를 씬으로 저장"
+msgstr "가지를 씬으로 저장하기"
#: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp
msgid "Copy Node Path"
@@ -11861,7 +11861,7 @@ msgid ""
"Instance a scene file as a Node. Creates an inherited scene if no root node "
"exists."
msgstr ""
-"씬 파ì¼ì„ 노드로 ì¸ìŠ¤í„´ìŠ¤í•©ë‹ˆë‹¤. 루트 노드가 없으면 ìƒì†ëœ ì”¬ì„ ë§Œë“­ë‹ˆë‹¤."
+"씬 파ì¼ì„ 노드로 ì¸ìŠ¤í„´ìŠ¤í™”í•©ë‹ˆë‹¤. 루트 노드가 없으면 ìƒì†ëœ ì”¬ì„ ë§Œë“­ë‹ˆë‹¤."
#: editor/scene_tree_dock.cpp
msgid "Attach a new or existing script to the selected node."
@@ -11954,7 +11954,7 @@ msgid ""
"Children are not selectable.\n"
"Click to make selectable."
msgstr ""
-"ìžì†ì„ ì„ íƒí•  수 없습니다.\n"
+"ìžì‹ì„ ì„ íƒí•  수 없습니다.\n"
"í´ë¦­í•˜ë©´ ì„ íƒí•  수 있습니다."
#: editor/scene_tree_editor.cpp
@@ -12167,7 +12167,7 @@ msgstr "오류"
#: editor/script_editor_debugger.cpp
msgid "Child process connected."
-msgstr "ìžì† 프로세스 ì—°ê²°ë¨."
+msgstr "ìžì‹ 프로세스 ì—°ê²°ë¨."
#: editor/script_editor_debugger.cpp
msgid "Copy Error"
@@ -13016,7 +13016,7 @@ msgstr "ì‹œê·¸ë„ íŽ¸ì§‘:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Make Tool:"
-msgstr "ë„구 만들기:"
+msgstr "툴 만들기:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Members:"
@@ -13192,7 +13192,7 @@ msgstr "기기ì—서 실행할 수 없었습니다."
#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
-msgstr "'apksigner' ë„구를 ì°¾ì„ ìˆ˜ 없습니다."
+msgstr "'apksigner' íˆ´ì„ ì°¾ì„ ìˆ˜ 없습니다."
#: platform/android/export/export_plugin.cpp
msgid ""
@@ -13596,7 +13596,7 @@ msgid ""
"define its shape."
msgstr ""
"ì´ ë…¸ë“œëŠ” ëª¨ì–‘ì´ ì—†ìŠµë‹ˆë‹¤, 다른 물체와 ì¶©ëŒí•˜ê±°ë‚˜ ìƒí˜¸ 작용할 수 없습니다.\n"
-"CollisionShape2D ë˜ëŠ” CollisionPolygon2D를 ìžì† 노드로 추가하여 ëª¨ì–‘ì„ ì •ì˜í•˜"
+"CollisionShape2D ë˜ëŠ” CollisionPolygon2D를 ìžì‹ 노드로 추가하여 ëª¨ì–‘ì„ ì •ì˜í•˜"
"는 ê²ƒì„ ê³ ë ¤í•˜ì„¸ìš”."
#: scene/2d/collision_polygon_2d.cpp
@@ -13607,7 +13607,7 @@ msgid ""
msgstr ""
"CollisionPolygon2D는 CollisionObject2Dì— ì½œë¦¬ì „ ëª¨ì–‘ì„ ì§€ì •í•˜ëŠ” ìš©ë„로만 사용"
"ë©ë‹ˆë‹¤. ëª¨ì–‘ì„ ì •ì˜í•´ì•¼ 하는 Area2D, StaticBody2D, RigidBody2D, "
-"KinematicBody2D ë“±ì˜ ìžì†ìœ¼ë¡œë§Œ 사용해주세요."
+"KinematicBody2D ë“±ì˜ ìžì‹ìœ¼ë¡œë§Œ 사용해주세요."
#: scene/2d/collision_polygon_2d.cpp
msgid "An empty CollisionPolygon2D has no effect on collision."
@@ -13629,7 +13629,7 @@ msgid ""
msgstr ""
"CollisionShape2D는 CollisionObject2Dì— ì½œë¦¬ì „ ëª¨ì–‘ì„ ì§€ì •í•˜ëŠ” ìš©ë„로만 사용ë©"
"니다. ëª¨ì–‘ì„ ì •ì˜í•´ì•¼ 하는 Area2D, StaticBody2D, RigidBody2D, "
-"KinematicBody2D ë“±ì˜ ìžì†ìœ¼ë¡œë§Œ 사용해주세요."
+"KinematicBody2D ë“±ì˜ ìžì‹ìœ¼ë¡œë§Œ 사용해주세요."
#: scene/2d/collision_shape_2d.cpp
msgid ""
@@ -13704,14 +13704,14 @@ msgid ""
"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
"node. It only provides navigation data."
msgstr ""
-"NavigationPolygonInstance는 Navigation2D ë…¸ë“œì˜ ìžì†ì´ë‚˜ ì†ì£¼ì— 있어야 합니"
+"NavigationPolygonInstance는 Navigation2D ë…¸ë“œì˜ ìžì‹ì´ë‚˜ ì†ì£¼ì— 있어야 합니"
"다. ì´ê²ƒì€ 내비게ì´ì…˜ ë°ì´í„°ë§Œì„ 제공합니다."
#: scene/2d/parallax_layer.cpp
msgid ""
"ParallaxLayer node only works when set as child of a ParallaxBackground node."
msgstr ""
-"ParallaxLayer는 ParallaxBackground ë…¸ë“œì˜ ìžì† 노드로 ìžˆì„ ë•Œë§Œ ìž‘ë™í•©ë‹ˆë‹¤."
+"ParallaxLayer는 ParallaxBackground ë…¸ë“œì˜ ìžì‹ 노드로 ìžˆì„ ë•Œë§Œ ìž‘ë™í•©ë‹ˆë‹¤."
#: scene/2d/particles_2d.cpp
msgid ""
@@ -13741,7 +13741,7 @@ msgstr ""
#: scene/2d/path_2d.cpp
msgid "PathFollow2D only works when set as a child of a Path2D node."
-msgstr "PathFollow2D는 Path2D ë…¸ë“œì˜ ìžì† 노드로 ìžˆì„ ë•Œë§Œ ìž‘ë™í•©ë‹ˆë‹¤."
+msgstr "PathFollow2D는 Path2D ë…¸ë“œì˜ ìžì‹ 노드로 ìžˆì„ ë•Œë§Œ ìž‘ë™í•©ë‹ˆë‹¤."
#: scene/2d/physics_body_2d.cpp
msgid ""
@@ -13751,7 +13751,7 @@ msgid ""
msgstr ""
"(ìºë¦­í„°ë‚˜ 리지드 모드ì—서) RigidBody2Dì˜ í¬ê¸° ë³€ê²½ì€ ë¬¼ë¦¬ ì—”ì§„ì´ ìž‘ë™í•˜ëŠ” ë™"
"안 í° ë¶€ë‹´ì´ ë©ë‹ˆë‹¤.\n"
-"대신 ìžì† 콜리전 ëª¨ì–‘ì˜ í¬ê¸°ë¥¼ 변경해보세요."
+"대신 ìžì‹ 콜리전 ëª¨ì–‘ì˜ í¬ê¸°ë¥¼ 변경해보세요."
#: scene/2d/remote_transform_2d.cpp
msgid "Path property must point to a valid Node2D node to work."
@@ -13780,7 +13780,7 @@ msgid ""
msgstr ""
"Use Parentê°€ 켜진 TileMapì€ ëª¨ì–‘ì„ ì£¼ëŠ” 부모 CollisionObject2Dê°€ 필요합니다. "
"ëª¨ì–‘ì„ ì£¼ê¸° 위해 Area2D, StaticBody2D, RigidBody2D, KinematicBody2D ë“±ì„ ìž"
-"ì† ë…¸ë“œë¡œ 사용해주세요."
+"ì‹ ë…¸ë“œë¡œ 사용해주세요."
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
@@ -13817,7 +13817,7 @@ msgstr "앵커 IDê°€ 0ì´ ë˜ë©´ 앵커가 실제 ì•µì»¤ì— ë°”ì¸ë”©í•˜ì§€ 않ê
#: scene/3d/arvr_nodes.cpp
msgid "ARVROrigin requires an ARVRCamera child node."
-msgstr "ARVROriginì€ ìžì†ìœ¼ë¡œ ARVRCamera 노드가 필요합니다."
+msgstr "ARVROriginì€ ìžì‹ìœ¼ë¡œ ARVRCamera 노드가 필요합니다."
#: scene/3d/baked_lightmap.cpp
msgid "Finding meshes and lights"
@@ -13850,7 +13850,7 @@ msgid ""
"its shape."
msgstr ""
"ì´ ë…¸ë“œëŠ” ëª¨ì–‘ì´ ì—†ìŠµë‹ˆë‹¤. 다른 물체와 ì¶©ëŒí•˜ê±°ë‚˜ ìƒí˜¸ 작용할 수 없습니다.\n"
-"CollisionShape ë˜ëŠ” CollisionPolygonì„ ìžì† 노드로 추가해서 ëª¨ì–‘ì„ ì •ì˜í•˜ëŠ” "
+"CollisionShape ë˜ëŠ” CollisionPolygonì„ ìžì‹ 노드로 추가해서 ëª¨ì–‘ì„ ì •ì˜í•˜ëŠ” "
"ê²ƒì„ ê³ ë ¤í•˜ì„¸ìš”."
#: scene/3d/collision_polygon.cpp
@@ -13860,7 +13860,7 @@ msgid ""
"StaticBody, RigidBody, KinematicBody, etc. to give them a shape."
msgstr ""
"CollisionPolygonì€ CollisionObjectì— ì½œë¦¬ì „ ëª¨ì–‘ì„ ì§€ì •í•˜ëŠ” ìš©ë„로만 사용ë©ë‹ˆ"
-"다. Area, StaticBody, RigidBody, KinematicBody ë“±ì— ìžì† 노드로 추가해서 사용"
+"다. Area, StaticBody, RigidBody, KinematicBody ë“±ì— ìžì‹ 노드로 추가해서 사용"
"해주세요."
#: scene/3d/collision_polygon.cpp
@@ -13874,7 +13874,7 @@ msgid ""
"KinematicBody, etc. to give them a shape."
msgstr ""
"CollisionShapeì€ CollisionObjectì— ì½œë¦¬ì „ ëª¨ì–‘ì„ ì§€ì •í•˜ëŠ” ìš©ë„로만 사용ë©ë‹ˆ"
-"다. Area, StaticBody, RigidBody, KinematicBody ë“±ì— ìžì† 노드로 추가해서 사용"
+"다. Area, StaticBody, RigidBody, KinematicBody ë“±ì— ìžì‹ 노드로 추가해서 사용"
"해주세요."
#: scene/3d/collision_shape.cpp
@@ -13952,7 +13952,7 @@ msgid ""
"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
"It only provides navigation data."
msgstr ""
-"NavigationMeshInstance는 Navigation ë…¸ë“œì˜ ìžì†ì´ë‚˜ ì†ì£¼ì— 있어야 합니다. ì´"
+"NavigationMeshInstance는 Navigation ë…¸ë“œì˜ ìžì‹ì´ë‚˜ ì†ì£¼ì— 있어야 합니다. ì´"
"ê²ƒì€ ë‚´ë¹„ê²Œì´ì…˜ ë°ì´í„°ë§Œ 제공합니다."
#: scene/3d/occluder.cpp
@@ -13988,7 +13988,7 @@ msgstr ""
#: scene/3d/path.cpp
msgid "PathFollow only works when set as a child of a Path node."
-msgstr "PathFollow는 Path ë…¸ë“œì˜ ìžì†ìœ¼ë¡œ ìžˆì„ ë•Œë§Œ ìž‘ë™í•©ë‹ˆë‹¤."
+msgstr "PathFollow는 Path ë…¸ë“œì˜ ìžì‹ìœ¼ë¡œ ìžˆì„ ë•Œë§Œ ìž‘ë™í•©ë‹ˆë‹¤."
#: scene/3d/path.cpp
msgid ""
@@ -14006,7 +14006,7 @@ msgid ""
msgstr ""
"(ìºë¦­í„°ë‚˜ 리지드 모드ì—서) RigidBodyì˜ í¬ê¸° ë³€ê²½ì€ ë¬¼ë¦¬ ì—”ì§„ì´ ìž‘ë™í•˜ëŠ” ë™ì•ˆ "
"í° ë¶€ë‹´ì´ ë©ë‹ˆë‹¤.\n"
-"대신 ìžì† 콜리전 ëª¨ì–‘ì˜ í¬ê¸°ë¥¼ 변경하세요."
+"대신 ìžì‹ 콜리전 ëª¨ì–‘ì˜ í¬ê¸°ë¥¼ 변경하세요."
#: scene/3d/physics_joint.cpp
msgid "Node A and Node B must be PhysicsBodies"
@@ -14030,15 +14030,15 @@ msgstr "노드 A와 노드 B는 서로 다른 PhysicsBody여야 합니다"
#: scene/3d/portal.cpp
msgid "The RoomManager should not be a child or grandchild of a Portal."
-msgstr "RoomManager는 Portalì˜ ìžì†ì´ë‚˜ ì†ì£¼ê°€ 아니어야 합니다."
+msgstr "RoomManager는 Portalì˜ ìžì‹ì´ë‚˜ ì†ì£¼ê°€ 아니어야 합니다."
#: scene/3d/portal.cpp
msgid "A Room should not be a child or grandchild of a Portal."
-msgstr "Roomì€ Portalì˜ ìžì†ì´ë‚˜ ì†ì£¼ê°€ 아니어야 합니다."
+msgstr "Roomì€ Portalì˜ ìžì‹ì´ë‚˜ ì†ì£¼ê°€ 아니어야 합니다."
#: scene/3d/portal.cpp
msgid "A RoomGroup should not be a child or grandchild of a Portal."
-msgstr "RoomGroupì€ Portalì˜ ìžì†ì´ë‚˜ ì†ì£¼ê°€ 아니어야 합니다."
+msgstr "RoomGroupì€ Portalì˜ ìžì‹ì´ë‚˜ ì†ì£¼ê°€ 아니어야 합니다."
#: scene/3d/remote_transform.cpp
msgid ""
@@ -14050,7 +14050,7 @@ msgstr ""
#: scene/3d/room.cpp
msgid "A Room cannot have another Room as a child or grandchild."
-msgstr "Roomì€ ë‹¤ë¥¸ Roomì„ ìžì†ì´ë‚˜ ì†ì£¼ë¡œ 가질 수 없습니다."
+msgstr "Roomì€ ë‹¤ë¥¸ Roomì„ ìžì‹ì´ë‚˜ ì†ì£¼ë¡œ 가질 수 없습니다."
#: scene/3d/room.cpp
msgid "The RoomManager should not be placed inside a Room."
@@ -14165,7 +14165,7 @@ msgid ""
"it as a child of a VehicleBody."
msgstr ""
"VehicleWheelì€ VehicleBody로 바퀴 ì‹œìŠ¤í…œì„ ì œê³µí•˜ëŠ” 역할입니다. VehicleBody"
-"ì˜ ìžì†ìœ¼ë¡œ 사용해주세요."
+"ì˜ ìžì‹ìœ¼ë¡œ 사용해주세요."
#: scene/3d/world_environment.cpp
msgid ""
@@ -14271,7 +14271,7 @@ msgid ""
"children placement behavior.\n"
"If you don't intend to add a script, use a plain Control node instead."
msgstr ""
-"Container ìžì²´ëŠ” ìžì† 배치 ìž‘ì—…ì„ êµ¬ì„±í•˜ëŠ” 스í¬ë¦½íЏ 외ì—는 목ì ì´ 없습니다.\n"
+"Container ìžì²´ëŠ” ìžì‹ 배치 ìž‘ì—…ì„ êµ¬ì„±í•˜ëŠ” 스í¬ë¦½íЏ 외ì—는 목ì ì´ 없습니다.\n"
"스í¬ë¦½íŠ¸ë¥¼ 추가하는 ì˜ë„ê°€ 없으면, 순수한 Control 노드를 사용해주세요."
#: scene/gui/control.cpp
@@ -14330,8 +14330,8 @@ msgid ""
"Use a container as child (VBox, HBox, etc.), or a Control and set the custom "
"minimum size manually."
msgstr ""
-"ScrollContainer는 ë‹¨ì¼ ìžì† Controlì„ ìž‘ì—…í•˜ê¸° 위한 것입니다.\n"
-"(VBox, HBox 등) 컨테ì´ë„ˆë¥¼ ìžì†ìœ¼ë¡œ 사용하거나, Controlì„ ì‚¬ìš©í•˜ê³  ì‚¬ìš©ìž ì§€"
+"ScrollContainer는 ë‹¨ì¼ ìžì‹ Controlì„ ìž‘ì—…í•˜ê¸° 위한 것입니다.\n"
+"(VBox, HBox 등) 컨테ì´ë„ˆë¥¼ ìžì‹ìœ¼ë¡œ 사용하거나, Controlì„ ì‚¬ìš©í•˜ê³  ì‚¬ìš©ìž ì§€"
"ì • 최소 수치를 수ë™ìœ¼ë¡œ 설정하세요."
#: scene/gui/tree.cpp
@@ -14353,6 +14353,10 @@ msgid ""
"Consider using a script's process loop instead of relying on a Timer for "
"very low wait times."
msgstr ""
+"매우 ì§§ì€ íƒ€ì´ë¨¸ 대기 시간(< 0.05ì´ˆ)ì€ ë Œë”ë§ëœ 프레임 ë ˆì´íŠ¸ë‚˜ 물리 프레임 "
+"ë ˆì´íŠ¸ì— ë”°ë¼ ìƒë‹¹ížˆ 다른 ë°©ì‹ìœ¼ë¡œ ìž‘ë™í•  수 있습니다.\n"
+"대기 ì‹œê°„ì´ ë§¤ìš° 짧다면 타ì´ë¨¸ì— ì˜ì¡´í•˜ëŠ” 대신 스í¬ë¦½íŠ¸ì˜ í”„ë¡œì„¸ìŠ¤ 루프를 사"
+"용하는 ê²ƒì´ ì¢‹ìŠµë‹ˆë‹¤."
#: scene/main/viewport.cpp
msgid ""
@@ -14362,16 +14366,16 @@ msgid ""
"texture to some node for display."
msgstr ""
"ë·°í¬íŠ¸ë¥¼ ë Œë” ëŒ€ìƒìœ¼ë¡œ 설정하지 않았습니다. ë·°í¬íŠ¸ì˜ ë‚´ìš©ì„ í™”ë©´ì— ì§ì ‘ 표시"
-"하려면, Controlì˜ ìžì† 노드로 만들어서 í¬ê¸°ë¥¼ 얻어야 합니다. 그렇지 ì•Šì„ ê²½"
+"하려면, Controlì˜ ìžì‹ 노드로 만들어서 í¬ê¸°ë¥¼ 얻어야 합니다. 그렇지 ì•Šì„ ê²½"
"ìš°, í™”ë©´ì— í‘œì‹œí•˜ê¸° 위해서는 ë·°í¬íŠ¸ë¥¼ RenderTarget으로 만들고 ë‚´ë¶€ì ì¸ í…스처"
"를 다른 ë…¸ë“œì— ì§€ì •í•´ì•¼ 합니다."
#: scene/main/viewport.cpp
-#, fuzzy
msgid ""
"The Viewport size must be greater than or equal to 2 pixels on both "
"dimensions to render anything."
-msgstr "무엇ì´ë“  ë Œë”ë§í•˜ë ¤ë©´ ë·°í¬íЏ í¬ê¸°ê°€ 0보다 커야 합니다."
+msgstr ""
+"무엇ì´ë“  ë Œë”ë§í•˜ë ¤ë©´ ë·°í¬íЏ í¬ê¸°ê°€ 양쪽 ì°¨ì›ì—서 2픽셀 ì´ìƒì´ì–´ì•¼ 합니다."
#: scene/resources/occluder_shape.cpp
msgid "OccluderShapeSphere Set Spheres"
diff --git a/editor/translations/lt.po b/editor/translations/lt.po
index a4d205e4b1..f4cdcf8c89 100644
--- a/editor/translations/lt.po
+++ b/editor/translations/lt.po
@@ -7676,11 +7676,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
diff --git a/editor/translations/lv.po b/editor/translations/lv.po
index 91d9e7e3d2..808a13782b 100644
--- a/editor/translations/lv.po
+++ b/editor/translations/lv.po
@@ -14,7 +14,7 @@ msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-11-03 13:53+0000\n"
+"PO-Revision-Date: 2021-11-15 10:49+0000\n"
"Last-Translator: M E <gruffy7932@gmail.com>\n"
"Language-Team: Latvian <https://hosted.weblate.org/projects/godot-engine/"
"godot/lv/>\n"
@@ -24,7 +24,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n % 10 == 0 || n % 100 >= 11 && n % 100 <= "
"19) ? 0 : ((n % 10 == 1 && n % 100 != 11) ? 1 : 2);\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -1027,7 +1027,7 @@ msgstr "Atkarības"
#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
msgid "Resource"
-msgstr "Resurs"
+msgstr "Resurss"
#: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp
#: editor/project_manager.cpp editor/project_settings_editor.cpp
@@ -1048,7 +1048,7 @@ msgstr "Atkarību Redaktors"
#: editor/dependency_editor.cpp
msgid "Search Replacement Resource:"
-msgstr "MeklÄ“t AizstÄjÄ“ja Resursu:"
+msgstr "MeklÄ“t aizstÄjÄ“ja resursu:"
#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
#: editor/editor_help_search.cpp editor/editor_node.cpp
@@ -1142,7 +1142,7 @@ msgstr "Pieder"
#: editor/dependency_editor.cpp
msgid "Resources Without Explicit Ownership:"
-msgstr "Resursi Bez Skaidra Īpašnieka:"
+msgstr "Resursi bez izteiktas piederības:"
#: editor/dictionary_property_edit.cpp
msgid "Change Dictionary Key"
@@ -1367,7 +1367,7 @@ msgstr "Kopnes Iestatījumi"
#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
msgid "Duplicate"
-msgstr "Izveidot DublikÄtu"
+msgstr "Izveidot dublikÄtu"
#: editor/editor_audio_buses.cpp
msgid "Reset Volume"
@@ -2115,7 +2115,7 @@ msgstr "Motīva iestatījumi"
#: editor/editor_help.cpp
msgid "Enumerations"
-msgstr "Uzskaitījumi"
+msgstr "Uzskaites"
#: editor/editor_help.cpp editor/plugins/theme_editor_plugin.cpp
msgid "Constants"
@@ -2445,6 +2445,9 @@ msgid ""
"To restore the Default layout to its base settings, use the Delete Layout "
"option and delete the Default layout."
msgstr ""
+"NoklusÄ“juma redaktora izkÄrtojums pÄrrakstÄ«ts.\n"
+"Lai atjaunotu noklusÄ“juma izkÄrtojumu uz bÄzes iestatÄ«jumiem, izmantojiet "
+"DzÄ“st izkÄrtojumu opciju."
#: editor/editor_node.cpp
msgid "Layout name not found!"
@@ -2480,6 +2483,10 @@ msgid ""
"Please read the documentation relevant to importing scenes to better "
"understand this workflow."
msgstr ""
+"Å Ä« aina ir importÄ“ta, tÄdēļ izmaiņas netiks saglabÄas.\n"
+"Veidojiet no tÄs paraugu, lai ļautu saglabÄt izmaiņas.\n"
+"LÅ«dzu, lasiet dokumentÄciju par ainu importēšanu un labÄkai darbaplÅ«smas "
+"saprašanai."
#: editor/editor_node.cpp
msgid ""
@@ -2537,6 +2544,8 @@ msgid ""
"The current scene has no root node, but %d modified external resource(s) "
"were saved anyway."
msgstr ""
+"PaÅ¡reizÄ“jai ainav nav saknes mezgla, bet %d pÄrveidoti ÄrÄ“jie resursi tika "
+"saglbÄti tÄpat."
#: editor/editor_node.cpp
msgid ""
@@ -2690,7 +2699,7 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Unable to load addon script from path: '%s' Script is not in tool mode."
msgstr ""
-"NevarÄ“ja ielÄdÄ“t spraudÅ†Ä skriptu no mapes: '%s' Skripts nav rÄ«ka režīmÄ."
+"NevarÄ“ja ielÄdÄ“t spraudņa skriptu no mapes: '%s' Skripts nav rÄ«ka režīmÄ."
#: editor/editor_node.cpp
msgid ""
@@ -2837,11 +2846,11 @@ msgstr ""
#: editor/editor_node.cpp
msgid "New Scene"
-msgstr ""
+msgstr "Jauna aina"
#: editor/editor_node.cpp
msgid "New Inherited Scene..."
-msgstr ""
+msgstr "Jauna mantota aina..."
#: editor/editor_node.cpp
msgid "Open Scene..."
@@ -3060,7 +3069,7 @@ msgstr "Atvērt redaktora iestatījumu mapi"
#: editor/editor_node.cpp
msgid "Manage Editor Features..."
-msgstr "PÄrcaldÄ«t redaktora iespÄ“jas..."
+msgstr "PÄrvaldÄ«t redaktora iespÄ“jas..."
#: editor/editor_node.cpp
msgid "Manage Export Templates..."
@@ -3292,7 +3301,7 @@ msgstr "Atvērt skriptu redaktoru"
#: editor/editor_node.cpp editor/project_manager.cpp
msgid "Open Asset Library"
-msgstr ""
+msgstr "Atvērt līdzekļu bibliotēku"
#: editor/editor_node.cpp
msgid "Open the next Editor"
@@ -3519,7 +3528,7 @@ msgstr "Jauns skripts"
#: editor/editor_resource_picker.cpp editor/scene_tree_dock.cpp
msgid "Extend Script"
-msgstr ""
+msgstr "PagarinÄt skriptu"
#: editor/editor_run_native.cpp
msgid ""
@@ -3530,23 +3539,23 @@ msgstr ""
#: editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
-msgstr ""
+msgstr "Raksti savu loģiku _run() metodē."
#: editor/editor_run_script.cpp
msgid "There is an edited scene already."
-msgstr ""
+msgstr "Jau ir rediģēta aina."
#: editor/editor_run_script.cpp
msgid "Couldn't instance script:"
-msgstr ""
+msgstr "Nevar pakļaut skriptu:"
#: editor/editor_run_script.cpp
msgid "Did you forget the 'tool' keyword?"
-msgstr ""
+msgstr "Vai aizmirsi 'tool' atslÄ“gvÄrdu?"
#: editor/editor_run_script.cpp
msgid "Couldn't run script:"
-msgstr ""
+msgstr "Nevar palaist skriptu:"
#: editor/editor_run_script.cpp
msgid "Did you forget the '_run' method?"
@@ -3562,15 +3571,15 @@ msgstr ""
#: editor/editor_sub_scene.cpp editor/project_manager.cpp
msgid "Browse"
-msgstr "PÄlÅ«kot"
+msgstr "PÄrlÅ«kot"
#: editor/editor_sub_scene.cpp
msgid "Scene Path:"
-msgstr ""
+msgstr "Ainas ceļš:"
#: editor/editor_sub_scene.cpp
msgid "Import From Node:"
-msgstr ""
+msgstr "Importēt no mezgla:"
#: editor/export_template_manager.cpp
msgid "Open the folder containing these templates."
@@ -3578,15 +3587,15 @@ msgstr ""
#: editor/export_template_manager.cpp
msgid "Uninstall these templates."
-msgstr ""
+msgstr "Atinstalēt šos šablonus."
#: editor/export_template_manager.cpp
msgid "There are no mirrors available."
-msgstr ""
+msgstr "Spoguļi nav pieejami."
#: editor/export_template_manager.cpp
msgid "Retrieving the mirror list..."
-msgstr ""
+msgstr "Saņem spoguļu sarakstu..."
#: editor/export_template_manager.cpp
msgid "Starting the download..."
@@ -3598,15 +3607,15 @@ msgstr "Kļūda pieprasot URL:"
#: editor/export_template_manager.cpp
msgid "Connecting to the mirror..."
-msgstr ""
+msgstr "Savienojas ar spoguli..."
#: editor/export_template_manager.cpp
msgid "Can't resolve the requested address."
-msgstr ""
+msgstr "Nevar atrisinÄt pieprasÄ«to adresi."
#: editor/export_template_manager.cpp
msgid "Can't connect to the mirror."
-msgstr ""
+msgstr "Nevar pievienoties spogulim."
#: editor/export_template_manager.cpp
msgid "No response from the mirror."
@@ -3765,7 +3774,7 @@ msgstr ""
#: editor/export_template_manager.cpp
msgid "Download from:"
-msgstr ""
+msgstr "LejuplÄdÄ“t no:"
#: editor/export_template_manager.cpp
msgid "Open in Web Browser"
@@ -3773,11 +3782,11 @@ msgstr "AtvÄ“rt interneta pÄrlÅ«kÄ"
#: editor/export_template_manager.cpp
msgid "Copy Mirror URL"
-msgstr ""
+msgstr "Kopēt spoguļa linku"
#: editor/export_template_manager.cpp
msgid "Download and Install"
-msgstr ""
+msgstr "LejuplÄdÄ“t un instalÄ“t"
#: editor/export_template_manager.cpp
msgid ""
@@ -3787,7 +3796,7 @@ msgstr ""
#: editor/export_template_manager.cpp
msgid "Official export templates aren't available for development builds."
-msgstr ""
+msgstr "OficiÄlie eksporta Å¡abloni nav pieejami eksperimentÄlajÄm bÅ«vÄ“m."
#: editor/export_template_manager.cpp
msgid "Install from File"
@@ -3800,15 +3809,15 @@ msgstr ""
#: editor/export_template_manager.cpp editor/find_in_files.cpp
#: editor/progress_dialog.cpp scene/gui/dialogs.cpp
msgid "Cancel"
-msgstr ""
+msgstr "Atcelt"
#: editor/export_template_manager.cpp
msgid "Cancel the download of the templates."
-msgstr ""
+msgstr "Atcelt Å¡ablonu lejuplÄdi."
#: editor/export_template_manager.cpp
msgid "Other Installed Versions:"
-msgstr ""
+msgstr "Citas instalÄ“tÄs versijas:"
#: editor/export_template_manager.cpp
msgid "Uninstall Template"
@@ -4372,15 +4381,15 @@ msgstr ""
#: editor/inspector_dock.cpp
msgid "Open documentation for this object."
-msgstr ""
+msgstr "AtvÄ“rt dokumentÄciju Å¡im objektam."
#: editor/inspector_dock.cpp editor/scene_tree_dock.cpp
msgid "Open Documentation"
-msgstr ""
+msgstr "AtvÄ“rt dokumentÄciju"
#: editor/inspector_dock.cpp
msgid "Filter properties"
-msgstr ""
+msgstr "Filtrēt iestatījumus"
#: editor/inspector_dock.cpp
msgid "Manage object properties."
@@ -4425,7 +4434,7 @@ msgstr "Versija:"
#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp
msgid "Language:"
-msgstr ""
+msgstr "Valoda:"
#: editor/plugin_config_dialog.cpp
msgid "Script Name:"
@@ -4668,7 +4677,7 @@ msgstr "Izdzēst Mezglu"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
#: editor/scene_tree_dock.cpp
msgid "Delete Node(s)"
-msgstr ""
+msgstr "Dzēst mezglu(s)"
#: editor/plugins/animation_blend_tree_editor_plugin.cpp
msgid "Toggle Filter On/Off"
@@ -5624,7 +5633,7 @@ msgstr ""
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Full Rect"
-msgstr ""
+msgstr "Pilns logs"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Keep Ratio"
@@ -7170,7 +7179,7 @@ msgstr "Bīdīt augšup"
#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
#: modules/gdnative/gdnative_library_editor_plugin.cpp
msgid "Move Down"
-msgstr ""
+msgstr "Bīdīt lejup"
#: editor/plugins/script_editor_plugin.cpp
msgid "Next Script"
@@ -7281,7 +7290,7 @@ msgstr "Tiešsaistes Dokumenti"
#: editor/plugins/script_editor_plugin.cpp
msgid "Open Godot online documentation."
-msgstr ""
+msgstr "AtvÄ“rt Godot tieÅ¡saistes dokumentÄciju."
#: editor/plugins/script_editor_plugin.cpp
msgid "Search the reference documentation."
@@ -7524,11 +7533,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
@@ -8705,7 +8714,7 @@ msgstr ""
#: editor/plugins/theme_editor_plugin.cpp
msgid "Cancel Item Rename"
-msgstr ""
+msgstr "Atcelt pÄrsaukÅ¡anu"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Override Item"
@@ -8990,7 +8999,7 @@ msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Merge from Scene"
-msgstr ""
+msgstr "SapludinÄt no ainas"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "New Single Tile"
@@ -9061,9 +9070,8 @@ msgid "Collision Mode"
msgstr "Sadursmes režīms"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Occlusion Mode"
-msgstr "Izveidot"
+msgstr "Oklūzijas režīms"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Navigation Mode"
@@ -9149,7 +9157,7 @@ msgstr ""
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Merge from scene?"
-msgstr ""
+msgstr "sablodinÄt no ainas?"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Remove Texture"
@@ -9227,9 +9235,8 @@ msgid "Edit Collision Polygon"
msgstr "Rediģēt sadursmes daudzstūri"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Edit Occlusion Polygon"
-msgstr "Izveidot"
+msgstr "Rediģēt oklūzijas daudzstūri"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "Edit Navigation Polygon"
@@ -9288,9 +9295,8 @@ msgid "Create Collision Polygon"
msgstr "Izveidot sadursmes daudzstūri"
#: editor/plugins/tile_set_editor_plugin.cpp
-#, fuzzy
msgid "Create Occlusion Polygon"
-msgstr "Izveidot"
+msgstr "Izveidot oklūzijas daudzstūri"
#: editor/plugins/tile_set_editor_plugin.cpp
msgid "This property can't be changed."
@@ -10389,7 +10395,7 @@ msgstr ""
#: editor/project_manager.cpp
msgid "New Game Project"
-msgstr "Jauns Spēles Projekts"
+msgstr "Jauns spēles projekts"
#: editor/project_manager.cpp
msgid "Imported Project"
@@ -10475,11 +10481,11 @@ msgstr ""
#: editor/project_manager.cpp
msgid "Project Path:"
-msgstr ""
+msgstr "Projekta ceļš:"
#: editor/project_manager.cpp
msgid "Project Installation Path:"
-msgstr ""
+msgstr "Projekta instalÄcijas ceļš:"
#: editor/project_manager.cpp
msgid "Renderer:"
@@ -10591,7 +10597,7 @@ msgstr ""
#: editor/project_manager.cpp
msgid "Remove this project from the list?"
-msgstr ""
+msgstr "Noņemt šo projektu no saraksta?"
#: editor/project_manager.cpp
msgid ""
@@ -10650,7 +10656,7 @@ msgstr "NorÄdÄ«t mapi kuru skenÄ“t"
#: editor/project_manager.cpp
msgid "New Project"
-msgstr "Jauns Projekts"
+msgstr "Jauns projekts"
#: editor/project_manager.cpp
msgid "Import Project"
@@ -10670,7 +10676,7 @@ msgstr "Par"
#: editor/project_manager.cpp
msgid "Asset Library Projects"
-msgstr ""
+msgstr "Līdzekļu bibliotēkas projekti"
#: editor/project_manager.cpp
msgid "Restart Now"
@@ -10678,11 +10684,11 @@ msgstr "Restartēt tagad"
#: editor/project_manager.cpp
msgid "Remove All"
-msgstr ""
+msgstr "Noņemt visu"
#: editor/project_manager.cpp
msgid "Also delete project contents (no undo!)"
-msgstr ""
+msgstr "Dzēst projekta saturu (nevar atsaukt)"
#: editor/project_manager.cpp
msgid "Can't run project"
@@ -10693,6 +10699,8 @@ msgid ""
"You currently don't have any projects.\n"
"Would you like to explore official example projects in the Asset Library?"
msgstr ""
+"Jums pašreiz nav neviena projekta.\n"
+"Vai vÄ“laties skatÄ«t oficiÄlos paraugu projektus LÄ«dzekļu bibliotÄ“kÄ ?"
#: editor/project_manager.cpp
msgid "Filter projects"
@@ -10711,7 +10719,7 @@ msgstr ""
#: editor/project_settings_editor.cpp
msgid "Key "
-msgstr "Atslēga "
+msgstr "Taustiņš "
#: editor/project_settings_editor.cpp
msgid "Joy Button"
@@ -10935,7 +10943,7 @@ msgstr ""
#: editor/project_settings_editor.cpp
msgid "Project Settings (project.godot)"
-msgstr ""
+msgstr "Projekta iestatījumi (project.godot)"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "General"
@@ -10951,7 +10959,7 @@ msgstr ""
#: editor/project_settings_editor.cpp
msgid "Input Map"
-msgstr ""
+msgstr "Ievade"
#: editor/project_settings_editor.cpp
msgid "Action:"
@@ -10975,7 +10983,7 @@ msgstr ""
#: editor/project_settings_editor.cpp
msgid "Localization"
-msgstr ""
+msgstr "LokalizÄcija"
#: editor/project_settings_editor.cpp
msgid "Translations"
@@ -11027,7 +11035,7 @@ msgstr ""
#: editor/project_settings_editor.cpp
msgid "Plugins"
-msgstr "Sparudņi"
+msgstr "Spraudņi"
#: editor/project_settings_editor.cpp
msgid "Import Defaults"
@@ -11333,11 +11341,11 @@ msgstr "Izdzēst %d mezglus?"
#: editor/scene_tree_dock.cpp
msgid "Delete the root node \"%s\"?"
-msgstr ""
+msgstr "Dzēst saknes mezglu \"%s\"?"
#: editor/scene_tree_dock.cpp
msgid "Delete node \"%s\" and its children?"
-msgstr ""
+msgstr "DzÄ“st mezglu \"%s\" un tÄ bÄ“rnus?"
#: editor/scene_tree_dock.cpp
msgid "Delete node \"%s\"?"
@@ -11399,15 +11407,15 @@ msgstr "Izveidot Cilmes Mezglu:"
#: editor/scene_tree_dock.cpp
msgid "2D Scene"
-msgstr ""
+msgstr "2D Aina"
#: editor/scene_tree_dock.cpp
msgid "3D Scene"
-msgstr ""
+msgstr "3D Aina"
#: editor/scene_tree_dock.cpp
msgid "User Interface"
-msgstr ""
+msgstr "LietotÄja interfeiss"
#: editor/scene_tree_dock.cpp
msgid "Other Node"
@@ -11427,7 +11435,7 @@ msgstr ""
#: editor/scene_tree_dock.cpp
msgid "Attach Script"
-msgstr ""
+msgstr "Pievienot skriptu"
#: editor/scene_tree_dock.cpp
msgid "Cut Node(s)"
@@ -11439,7 +11447,7 @@ msgstr ""
#: editor/scene_tree_dock.cpp
msgid "Change type of node(s)"
-msgstr ""
+msgstr "Mezgla(-u) tipa maiņa"
#: editor/scene_tree_dock.cpp
msgid ""
@@ -11480,7 +11488,7 @@ msgstr ""
#: editor/scene_tree_dock.cpp
msgid "Add Child Node"
-msgstr ""
+msgstr "Pievienot bērna mezglu"
#: editor/scene_tree_dock.cpp
msgid "Expand/Collapse All"
@@ -11488,7 +11496,7 @@ msgstr ""
#: editor/scene_tree_dock.cpp
msgid "Change Type"
-msgstr ""
+msgstr "Mainīt tipu"
#: editor/scene_tree_dock.cpp
msgid "Reparent to New Node"
@@ -11500,7 +11508,7 @@ msgstr ""
#: editor/scene_tree_dock.cpp
msgid "Merge From Scene"
-msgstr ""
+msgstr "SapludinÄt no ainas"
#: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp
msgid "Save Branch as Scene"
@@ -11508,7 +11516,7 @@ msgstr "SaglabÄt zaru kÄ ainu"
#: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp
msgid "Copy Node Path"
-msgstr ""
+msgstr "Kopēt mezgla ceļu"
#: editor/scene_tree_dock.cpp
msgid "Delete (No Confirm)"
@@ -11609,7 +11617,7 @@ msgstr ""
#: editor/scene_tree_editor.cpp
msgid "Toggle Visibility"
-msgstr ""
+msgstr "PÄrslÄ“gt redzamÄ«bu"
#: editor/scene_tree_editor.cpp
msgid ""
@@ -11715,7 +11723,7 @@ msgstr ""
#: editor/script_create_dialog.cpp
msgid "Script path/name is valid."
-msgstr ""
+msgstr "Skripta ceļš/nosaukums ir derīgs."
#: editor/script_create_dialog.cpp
msgid "Allowed: a-z, A-Z, 0-9, _ and ."
@@ -11751,19 +11759,19 @@ msgstr ""
#: editor/script_create_dialog.cpp
msgid "Class Name:"
-msgstr ""
+msgstr "Klases nosaukums:"
#: editor/script_create_dialog.cpp
msgid "Template:"
-msgstr ""
+msgstr "Å ablons:"
#: editor/script_create_dialog.cpp
msgid "Built-in Script:"
-msgstr "Iebūvēts skripts:"
+msgstr "Iebūvētais skripts:"
#: editor/script_create_dialog.cpp
msgid "Attach Node Script"
-msgstr ""
+msgstr "Pievienot mezgla skriptu"
#: editor/script_editor_debugger.cpp
msgid "Remote "
@@ -11807,7 +11815,7 @@ msgstr ""
#: editor/script_editor_debugger.cpp
msgid "Errors"
-msgstr ""
+msgstr "Kļūdas"
#: editor/script_editor_debugger.cpp
msgid "Child process connected."
@@ -11895,7 +11903,7 @@ msgstr ""
#: editor/script_editor_debugger.cpp
msgid "Misc"
-msgstr ""
+msgstr "Citi"
#: editor/script_editor_debugger.cpp
msgid "Clicked Control:"
@@ -12075,11 +12083,11 @@ msgstr ""
#: modules/gdnative/gdnative_library_singleton_editor.cpp
msgid "Library"
-msgstr ""
+msgstr "Bibliotēka"
#: modules/gdnative/gdnative_library_singleton_editor.cpp
msgid "Libraries: "
-msgstr ""
+msgstr "Bibliotēkas: "
#: modules/gdnative/register_types.cpp
msgid "GDNative"
@@ -13774,7 +13782,7 @@ msgstr "BrÄ«dinÄjums!"
#: scene/gui/dialogs.cpp
msgid "Please Confirm..."
-msgstr "Lūdzu Apstipriniet..."
+msgstr "Lūdzu apstipriniet..."
#: scene/gui/file_dialog.cpp
msgid "Must use a valid extension."
diff --git a/editor/translations/mi.po b/editor/translations/mi.po
index 0ca7a85100..6afda28ec5 100644
--- a/editor/translations/mi.po
+++ b/editor/translations/mi.po
@@ -7406,11 +7406,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
diff --git a/editor/translations/mk.po b/editor/translations/mk.po
index fb20cef0b9..93b4e2afe1 100644
--- a/editor/translations/mk.po
+++ b/editor/translations/mk.po
@@ -4,19 +4,20 @@
# This file is distributed under the same license as the Godot source code.
#
# Kristijan Fremen Velkovski <me@krisfremen.com>, 2021.
+# Denis <densisman@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2021-01-22 10:21+0000\n"
-"Last-Translator: Kristijan Fremen Velkovski <me@krisfremen.com>\n"
+"PO-Revision-Date: 2021-11-18 13:37+0000\n"
+"Last-Translator: Denis <densisman@gmail.com>\n"
"Language-Team: Macedonian <https://hosted.weblate.org/projects/godot-engine/"
"godot/mk/>\n"
"Language: mk\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=2; plural=n==1 || n%10==1 ? 0 : 1;\n"
-"X-Generator: Weblate 4.5-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -39,7 +40,7 @@ msgstr "Ðевалидено внеÑување %i (не додадено) во
#: core/math/expression.cpp
msgid "self can't be used because instance is null (not passed)"
-msgstr "self неможе да Ñе кориÑти зашто инÑтанцата е нула(не дадена)"
+msgstr "Ñелф не може да Ñе кориÑти бидејќи инÑтанцата е нула (не минува)"
#: core/math/expression.cpp
msgid "Invalid operands to operator %s, %s and %s."
@@ -220,7 +221,7 @@ msgstr ""
#: editor/animation_track_editor.cpp
msgid "Add Track"
-msgstr ""
+msgstr "Додади Лента"
#: editor/animation_track_editor.cpp
msgid "Animation Looping"
@@ -1796,7 +1797,7 @@ msgstr ""
#: editor/editor_feature_profile.cpp editor/editor_node.cpp
#: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp
msgid "Import"
-msgstr ""
+msgstr "Импортирај"
#: editor/editor_feature_profile.cpp editor/project_export.cpp
msgid "Export"
@@ -2204,7 +2205,7 @@ msgstr ""
#: editor/editor_network_profiler.cpp editor/editor_node.cpp
msgid "Node"
-msgstr ""
+msgstr "Јазол"
#: editor/editor_network_profiler.cpp
msgid "Incoming RPC"
@@ -7421,11 +7422,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
diff --git a/editor/translations/ml.po b/editor/translations/ml.po
index 8f2b461e34..7fcb0ea508 100644
--- a/editor/translations/ml.po
+++ b/editor/translations/ml.po
@@ -7430,11 +7430,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
diff --git a/editor/translations/mr.po b/editor/translations/mr.po
index f81040488f..8b63ae3338 100644
--- a/editor/translations/mr.po
+++ b/editor/translations/mr.po
@@ -7419,11 +7419,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
diff --git a/editor/translations/ms.po b/editor/translations/ms.po
index ff7488d454..a6c0097736 100644
--- a/editor/translations/ms.po
+++ b/editor/translations/ms.po
@@ -7704,11 +7704,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
diff --git a/editor/translations/nb.po b/editor/translations/nb.po
index 8924971039..0a8064f763 100644
--- a/editor/translations/nb.po
+++ b/editor/translations/nb.po
@@ -8082,15 +8082,15 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Set Rest Pose to Bones"
+msgstr ""
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
msgid "Create Rest Pose from Bones"
msgstr "Fjern Ben"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
-msgstr ""
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
msgid "Skeleton2D"
msgstr "Singleton"
diff --git a/editor/translations/nl.po b/editor/translations/nl.po
index 80c2ab188d..669ed2e73d 100644
--- a/editor/translations/nl.po
+++ b/editor/translations/nl.po
@@ -50,13 +50,14 @@
# Hugo van de Kuilen <hugo.vandekuilen1234567890@gmail.com>, 2021.
# tobeqz <vanveenjorik+tobeqz@gmail.com>, 2021.
# Edgar <Edgar@anotherfoxguy.com>, 2021.
+# Daan van Luijk <daanvl@outlook.be>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-10-24 20:52+0000\n"
-"Last-Translator: Stijn Hinlopen <f.a.hinlopen@gmail.com>\n"
+"PO-Revision-Date: 2021-11-07 22:23+0000\n"
+"Last-Translator: Daan van Luijk <daanvl@outlook.be>\n"
"Language-Team: Dutch <https://hosted.weblate.org/projects/godot-engine/godot/"
"nl/>\n"
"Language: nl\n"
@@ -419,9 +420,8 @@ msgstr "node '%s'"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "animation"
-msgstr "Animatie"
+msgstr "animatie"
#: editor/animation_track_editor.cpp
msgid "AnimationPlayer can't animate itself, only other players."
@@ -1787,6 +1787,8 @@ msgstr "Laat u 3D scenes weergeven en bewerken."
#: editor/editor_feature_profile.cpp
msgid "Allows to edit scripts using the integrated script editor."
msgstr ""
+"Staat toe het script aan te passen door middel van de geïntegreerde script "
+"editor"
#: editor/editor_feature_profile.cpp
msgid "Provides built-in access to the Asset Library."
@@ -2168,7 +2170,7 @@ msgstr "Thema-eigenschappen"
#: editor/editor_help.cpp
msgid "Enumerations"
-msgstr "Enumeratie"
+msgstr "Enumeraties"
#: editor/editor_help.cpp editor/plugins/theme_editor_plugin.cpp
msgid "Constants"
@@ -7838,14 +7840,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "Dit skelet heeft geen botten, maak een aantal Bone2D-knopen als kind."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "CreëerRest Pose vanuit botten"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "Botten in rusthouding zetten"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "CreëerRest Pose vanuit botten"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Skeleton2D"
diff --git a/editor/translations/or.po b/editor/translations/or.po
index eebe304b07..202b73cddc 100644
--- a/editor/translations/or.po
+++ b/editor/translations/or.po
@@ -7412,11 +7412,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
diff --git a/editor/translations/pl.po b/editor/translations/pl.po
index f4e73cb4ba..2ca074c533 100644
--- a/editor/translations/pl.po
+++ b/editor/translations/pl.po
@@ -7760,14 +7760,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "Ten szkielet nie ma kości. Stwórz jakieś węzły potomne Bone2D."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "Utwórz pozę spoczynkową z kości"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "Ustaw kościom pozę spoczynkową"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "Utwórz pozę spoczynkową z kości"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Szkielet 2D"
diff --git a/editor/translations/pr.po b/editor/translations/pr.po
index 363fb8def5..7d84259d58 100644
--- a/editor/translations/pr.po
+++ b/editor/translations/pr.po
@@ -7680,11 +7680,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
diff --git a/editor/translations/pt.po b/editor/translations/pt.po
index 7b6e1eea53..58f22f48ae 100644
--- a/editor/translations/pt.po
+++ b/editor/translations/pt.po
@@ -24,7 +24,7 @@ msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-10-21 10:31+0000\n"
+"PO-Revision-Date: 2021-11-07 09:45+0000\n"
"Last-Translator: João Lopes <linux-man@hotmail.com>\n"
"Language-Team: Portuguese <https://hosted.weblate.org/projects/godot-engine/"
"godot/pt/>\n"
@@ -3058,7 +3058,7 @@ msgstr ""
#: editor/editor_node.cpp
msgid "Synchronize Scene Changes"
-msgstr "Sincronizar Alterações de Cena"
+msgstr "Sincronizar Alterações da Cena"
#: editor/editor_node.cpp
msgid ""
@@ -7733,14 +7733,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "Este esqueleto não tem ossos, crie alguns nós filhos Bone2D."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "Criar Pose de Descanso a partir de Ossos"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "Definir Pose de Descanso para Ossos"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "Criar Pose de Descanso a partir de Ossos"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Esqueleto2D"
diff --git a/editor/translations/pt_BR.po b/editor/translations/pt_BR.po
index e32cf399c8..cf6ec219e1 100644
--- a/editor/translations/pt_BR.po
+++ b/editor/translations/pt_BR.po
@@ -127,13 +127,15 @@
# Mário Victor Ribeiro Silva <mariovictorrs@gmail.com>, 2021.
# jak3z <jose_renato06@outlook.com>, 2021.
# Henrique Darko <henridark00@gmail.com>, 2021.
+# Cearaj <pmoraisleal@gmail.com>, 2021.
+# Alefy San <alefyferreiradeoliveira@outlook.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: 2016-05-30\n"
-"PO-Revision-Date: 2021-11-03 13:15+0000\n"
-"Last-Translator: jak3z <jose_renato06@outlook.com>\n"
+"PO-Revision-Date: 2021-11-15 21:14+0000\n"
+"Last-Translator: Alefy San <alefyferreiradeoliveira@outlook.com>\n"
"Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/"
"godot-engine/godot/pt_BR/>\n"
"Language: pt_BR\n"
@@ -141,7 +143,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -490,7 +492,7 @@ msgstr "Inserir Anim"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
msgid "node '%s'"
-msgstr "nodo '%s'"
+msgstr "nó '%s'"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
@@ -4029,9 +4031,8 @@ msgid "Cancel"
msgstr "Cancelar"
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "Cancel the download of the templates."
-msgstr "Cancelar download dos modelos."
+msgstr "Cancelar o download dos modelos."
#: editor/export_template_manager.cpp
msgid "Other Installed Versions:"
@@ -4490,7 +4491,7 @@ msgstr "Salvando..."
#: editor/import_defaults_editor.cpp
msgid "Select Importer"
-msgstr "Selecione o arquivo para importar"
+msgstr "Selecione Importador"
#: editor/import_defaults_editor.cpp
msgid "Importer:"
@@ -5726,7 +5727,7 @@ msgstr "Configurar o Snap"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Grid Offset:"
-msgstr "Deslocamento da grade:"
+msgstr "Deslocamento da Grade:"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Grid Step:"
@@ -5742,7 +5743,7 @@ msgstr "passos"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Rotation Offset:"
-msgstr "Deslocamento de rotação:"
+msgstr "Deslocamento de Rotação:"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Rotation Step:"
@@ -5981,7 +5982,7 @@ msgstr "Limpar Guias"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Create Custom Bone(s) from Node(s)"
-msgstr "Criar esqueleto(s) customizado(s) do(s) nó(s)"
+msgstr "Criar Esqueleto(s) Customizado(s) a partir do(s) Nó(s)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Clear Bones"
@@ -6032,7 +6033,7 @@ msgstr "V: Define a posição do pivô do nó selecionado."
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Alt+RMB: Show list of all nodes at position clicked, including locked."
msgstr ""
-"Alt+Botão Esquerdo do Mouse: Mostrar a lista de todos os nós na posição "
+"Alt+Botão Direito do Mouse: Mostrar a lista de todos os nós na posição "
"clicada, incluindo os bloqueados."
#: editor/plugins/canvas_item_editor_plugin.cpp
@@ -7124,7 +7125,7 @@ msgid ""
"viewport."
msgstr ""
"Polygon2D tem vértices internos, portanto não pode mais ser editado na "
-"viewport."
+"janela de exibição."
#: editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Create Polygon & UV"
@@ -7868,14 +7869,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "Este esqueleto não tem ossos, crie alguns nós filhos Bone2D."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "Criar postura de descanso para os Ossos"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "Definir a postura de repouso para os Ossos"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "Criar postura de descanso para os Ossos"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Esqueleto2D"
@@ -8292,15 +8293,15 @@ msgstr "Visão Direita"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Orbit View Down"
-msgstr ""
+msgstr "Vista Órbita Baixo"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Orbit View Left"
-msgstr ""
+msgstr "Vista Órbita Esquerda"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Orbit View Right"
-msgstr ""
+msgstr "Vista Órbita Direita"
#: editor/plugins/spatial_editor_plugin.cpp
#, fuzzy
@@ -8309,7 +8310,7 @@ msgstr "Visão Frontal"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Orbit View 180"
-msgstr ""
+msgstr "Vista Órbita 180"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Switch Perspective/Orthogonal View"
@@ -8722,27 +8723,24 @@ msgid "Icons"
msgstr "Ãcones"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Styleboxes"
-msgstr "StyleBox"
+msgstr "Styleboxes"
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} color(s)"
msgstr "{num} cor(es)"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No colors found."
-msgstr "Nenhum sub-recurso encontrado."
+msgstr "Nenhuma cor encontrada."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} constant(s)"
msgstr "{num} constante(s)"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "No constants found."
-msgstr "Cor constante."
+msgstr "Nenhuma constante encontrada."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} font(s)"
@@ -8762,7 +8760,7 @@ msgstr "Ãcones não encontrados."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} stylebox(es)"
-msgstr ""
+msgstr "{num} stylebox(es)"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
@@ -8771,16 +8769,15 @@ msgstr "Nenhum sub-recurso encontrado."
#: editor/plugins/theme_editor_plugin.cpp
msgid "{num} currently selected"
-msgstr ""
+msgstr "{num} selecionado(s)"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Nothing was selected for the import."
-msgstr ""
+msgstr "Nada foi selecionado para a importação."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Importing Theme Items"
-msgstr "Importar Tema"
+msgstr "Importando Tema"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Importing items {n}/{n}"
@@ -8812,11 +8809,11 @@ msgstr "Selecione todos os itens de cor visíveis."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible color items and their data."
-msgstr ""
+msgstr "Selecione todos os itens de cor visíveis e seus dados."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all visible color items."
-msgstr ""
+msgstr "Desmarque todos os itens de cor visíveis."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible constant items."
@@ -8824,11 +8821,11 @@ msgstr "Selecione todos os itens constantes visíveis."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible constant items and their data."
-msgstr ""
+msgstr "Selecione todos os itens constantes visíveis e seus dados."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all visible constant items."
-msgstr ""
+msgstr "Desmarque todos os itens constantes visíveis."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible font items."
@@ -8836,11 +8833,11 @@ msgstr "Selecione todos os itens de fonte visíveis."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible font items and their data."
-msgstr ""
+msgstr "Selecione todos os itens de fonte visíveis e seus dados."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all visible font items."
-msgstr ""
+msgstr "Desmarque todos os itens de fonte visíveis."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all visible icon items."
@@ -8875,33 +8872,28 @@ msgstr ""
"do recurso do Tema."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Collapse types."
-msgstr "Recolher Tudo"
+msgstr "Recolher tudo."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Expand types."
-msgstr "Expandir Tudo"
+msgstr "Expandir tudo."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select all Theme items."
-msgstr "Selecionar o Arquivo de Modelo"
+msgstr "Selecionar todos os itens do Tema."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select With Data"
-msgstr "Selecionar Pontos"
+msgstr "Selecionar Com Dados"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Select all Theme items with item data."
msgstr "Selecionar todos os itens do Tema com dados."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Deselect All"
-msgstr "Selecionar tudo"
+msgstr "Desmarcar Tudo"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Deselect all Theme items."
@@ -8926,122 +8918,108 @@ msgid ""
"Select a theme type from the list to edit its items.\n"
"You can add a custom type or import a type with its items from another theme."
msgstr ""
+"Selecione um modelo de tema da lista para editar seus itens.\n"
+"Você pode adicionar um modelo personalizado ou importar um modelo com itens "
+"de outro tema."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Color Items"
-msgstr "Remover Todos os Itens"
+msgstr "Remover Todos os Itens de Cor"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Rename Item"
msgstr "Renomear Item"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Constant Items"
-msgstr "Remover Todos os Itens"
+msgstr "Remover Todos os Itens de Constante"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Font Items"
-msgstr "Remover Todos os Itens"
+msgstr "Remover Todos os Itens de Fonte"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove All Icon Items"
-msgstr "Remover Todos os Itens"
+msgstr "Remover Todos os Itens de Ãcone"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
msgid "Remove All StyleBox Items"
-msgstr "Remover Todos os Itens"
+msgstr "Remover Todos os Itens de StyleBox"
#: editor/plugins/theme_editor_plugin.cpp
msgid ""
"This theme type is empty.\n"
"Add more items to it manually or by importing from another theme."
msgstr ""
-"Este tipo de tema está vazio.\n"
+"Este modelo de tema está vazio.\n"
"Adicione mais itens manualmente ou importe de outro tema."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Color Item"
-msgstr "Adicionar Itens de Classe"
+msgstr "Adicionar Itens de Cor"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Constant Item"
-msgstr "Adicionar Itens de Classe"
+msgstr "Adicionar Item de Constante"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Font Item"
-msgstr "Adicionar Item"
+msgstr "Adicionar Item de Fonte"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Icon Item"
-msgstr "Adicionar Item"
+msgstr "Adicionar Item de Ãcone"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
msgid "Add Stylebox Item"
-msgstr "Adicionar Todos os Itens"
+msgstr "Adicionar Item de Stylebox"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Color Item"
-msgstr "Remover Itens de Classe"
+msgstr "Renomear Item de Cor"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Constant Item"
-msgstr "Remover Itens de Classe"
+msgstr "Renomear Item de Constante"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Font Item"
-msgstr "Renomear Nó"
+msgstr "Renomear Item de Fonte"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Rename Icon Item"
-msgstr "Renomear Nó"
+msgstr "Renomear Item de Ãcone"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
msgid "Rename Stylebox Item"
-msgstr "Remover Item Selecionado"
+msgstr "Renomear Item de Stylebox"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Invalid file, not a Theme resource."
-msgstr "Arquivo inválido, não é um layout de canais de áudio."
+msgstr "Arquivo inválido, não é um recurso de Tema."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Invalid file, same as the edited Theme resource."
-msgstr ""
+msgstr "Arquivo inválido, é o mesmo recurso de Tema sendo editado."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Manage Theme Items"
-msgstr "Gerenciar Templates"
+msgstr "Gerenciar Itens do Tema"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Edit Items"
-msgstr "Item Editável"
+msgstr "Editar Itens"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Types:"
-msgstr "Tipo:"
+msgstr "Modelos:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Type:"
-msgstr "Tipo:"
+msgstr "Adicionar Modelo:"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add Item:"
@@ -9050,7 +9028,7 @@ msgstr "Adicionar Item:"
#: editor/plugins/theme_editor_plugin.cpp
#, fuzzy
msgid "Add StyleBox Item"
-msgstr "Adicionar Todos os Itens"
+msgstr "Adicionar Item de Stylebox"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove Items:"
@@ -9061,133 +9039,119 @@ msgid "Remove Class Items"
msgstr "Remover Itens de Classe"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Remove Custom Items"
-msgstr "Remover Itens de Classe"
+msgstr "Remover Itens Personalizados"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Remove All Items"
msgstr "Remover Todos os Itens"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Theme Item"
-msgstr "Itens do Tema de GUI"
+msgstr "Adicionar Item de Tema"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Old Name:"
-msgstr "Nome do Nó:"
+msgstr "Nome Antigo:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Import Items"
-msgstr "Importar Tema"
+msgstr "Importar Itens"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Default Theme"
-msgstr "Padrão"
+msgstr "Tema Padrão"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Editor Theme"
-msgstr "Editar Tema"
+msgstr "Tema do Editor"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select Another Theme Resource:"
-msgstr "Excluir Recurso"
+msgstr "Selecionar Outro Recurso de Tema:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Another Theme"
-msgstr "Importar Tema"
+msgstr "Outro Tema"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Confirm Item Rename"
-msgstr "Renomear Trilha na Anim"
+msgstr "Confirmar Renomeação do Item"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Cancel Item Rename"
-msgstr "Renomear em lote"
+msgstr "Cancelar Renomeação do Item"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Override Item"
-msgstr "Sobrescreve"
+msgstr "Sobrescrever Item"
#: editor/plugins/theme_editor_plugin.cpp
+#, fuzzy
msgid "Unpin this StyleBox as a main style."
-msgstr ""
+msgstr "Desafixar essa StyleBox do estilo principal."
#: editor/plugins/theme_editor_plugin.cpp
+#, fuzzy
msgid ""
"Pin this StyleBox as a main style. Editing its properties will update the "
"same properties in all other StyleBoxes of this type."
msgstr ""
+"Fixar essa StyleBox como estilo principal. Editar suas propriedades vai "
+"atualizar as mesmas propriedades em todas as outras StyleBoxes desse modelo."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Type"
-msgstr "Tipo"
+msgstr "Adicionar Modelo"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Item Type"
-msgstr "Adicionar Item"
+msgstr "Adicionar Tipo de Item"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Node Types:"
msgstr "Tipos de Nó:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Show Default"
-msgstr "Carregar Padrão"
+msgstr "Mostrar Padrão"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Show default type items alongside items that have been overridden."
msgstr ""
+"Mostrar itens do modelo padrão ao lado de itens que foram substituídos."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Override All"
-msgstr "Sobrescreve"
+msgstr "Substituir Todos"
#: editor/plugins/theme_editor_plugin.cpp
msgid "Override all default type items."
-msgstr ""
+msgstr "Substituir todos os itens do modelo padrão."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Theme:"
msgstr "Tema:"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Manage Items..."
-msgstr "Gerenciar Modelos de Exportação..."
+msgstr "Gerenciar Itens..."
#: editor/plugins/theme_editor_plugin.cpp
msgid "Add, remove, organize and import Theme items."
-msgstr ""
+msgstr "Adicionar, remover, organizar e importar itens de Tema."
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Add Preview"
-msgstr "Visualização"
+msgstr "Adicionar Prévia"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Default Preview"
-msgstr "Atualizar visualização"
+msgstr "Prévia Padrão"
#: editor/plugins/theme_editor_plugin.cpp
-#, fuzzy
msgid "Select UI Scene:"
-msgstr "Selecione uma Malha de origem:"
+msgstr "Selecione a Cena de UI:"
#: editor/plugins/theme_editor_preview.cpp
msgid ""
@@ -9283,19 +9247,19 @@ msgstr "Tem,Muitas,Opções"
#: editor/plugins/theme_editor_preview.cpp
msgid "Invalid path, the PackedScene resource was probably moved or removed."
msgstr ""
+"Caminho inválido, o recurso PackedScene foi provavelmente movido ou deletado."
#: editor/plugins/theme_editor_preview.cpp
msgid "Invalid PackedScene resource, must have a Control node at its root."
-msgstr ""
+msgstr "Recurso PackedScene inválido, se deve ter um nó Control na sua raíz."
#: editor/plugins/theme_editor_preview.cpp
-#, fuzzy
msgid "Invalid file, not a PackedScene resource."
-msgstr "Arquivo inválido, não é um layout de canais de áudio."
+msgstr "Arquivo inválido, não é um recurso PackedScene."
#: editor/plugins/theme_editor_preview.cpp
msgid "Reload the scene to reflect its most actual state."
-msgstr ""
+msgstr "Recarregue a cena para refletir seu estado mais atual."
#: editor/plugins/tile_map_editor_plugin.cpp
msgid "Erase Selection"
@@ -10820,9 +10784,8 @@ msgid "Script"
msgstr "Roteiro"
#: editor/project_export.cpp
-#, fuzzy
msgid "GDScript Export Mode:"
-msgstr "Modo de Exportação de Scripts:"
+msgstr "Modo de Exportação do GDScript:"
#: editor/project_export.cpp
msgid "Text"
@@ -10830,7 +10793,7 @@ msgstr "Texto"
#: editor/project_export.cpp
msgid "Compiled Bytecode (Faster Loading)"
-msgstr ""
+msgstr "Bytecode Compilado (Carregamento Mais Rápido)"
#: editor/project_export.cpp
msgid "Encrypted (Provide Key Below)"
@@ -11183,9 +11146,8 @@ msgid "Project Manager"
msgstr "Gerenciador de Projetos"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Local Projects"
-msgstr "Projetos"
+msgstr "Projetos Locais"
#: editor/project_manager.cpp
msgid "Loading, please wait..."
@@ -11196,9 +11158,8 @@ msgid "Last Modified"
msgstr "Ultima Modificação"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Edit Project"
-msgstr "Exportar Projeto"
+msgstr "Editar Projeto"
#: editor/project_manager.cpp
#, fuzzy
@@ -11210,9 +11171,8 @@ msgid "Scan"
msgstr "Escanear"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Scan Projects"
-msgstr "Projetos"
+msgstr "Escanear Projetos"
#: editor/project_manager.cpp
msgid "Select a Folder to Scan"
@@ -11223,14 +11183,12 @@ msgid "New Project"
msgstr "Novo Projeto"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Import Project"
-msgstr "Projeto Importado"
+msgstr "Importar Projeto"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Remove Project"
-msgstr "Renomear Projeto"
+msgstr "Remover Projeto"
#: editor/project_manager.cpp
msgid "Remove Missing"
@@ -11241,9 +11199,8 @@ msgid "About"
msgstr "Sobre"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Asset Library Projects"
-msgstr "Biblioteca de Assets"
+msgstr "Projetos da Biblioteca de Recursos"
#: editor/project_manager.cpp
msgid "Restart Now"
@@ -11255,7 +11212,7 @@ msgstr "Remover Tudo"
#: editor/project_manager.cpp
msgid "Also delete project contents (no undo!)"
-msgstr ""
+msgstr "Também deletar os conteúdos do projeto (não se pode desfazer!)"
#: editor/project_manager.cpp
msgid "Can't run project"
@@ -11270,9 +11227,8 @@ msgstr ""
"Gostaria de explorar projetos de exemplo oficiais na Asset Library?"
#: editor/project_manager.cpp
-#, fuzzy
msgid "Filter projects"
-msgstr "Filtrar propriedades"
+msgstr "Filtrar Projetos"
#: editor/project_manager.cpp
#, fuzzy
@@ -11288,7 +11244,7 @@ msgstr ""
#: editor/project_settings_editor.cpp
msgid "Physical Key"
-msgstr ""
+msgstr "Tecla Física"
#: editor/project_settings_editor.cpp
msgid "Key "
@@ -11339,8 +11295,9 @@ msgid "Device"
msgstr "Dispositivo"
#: editor/project_settings_editor.cpp
+#, fuzzy
msgid " (Physical)"
-msgstr ""
+msgstr " Físico"
#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
msgid "Press a Key..."
@@ -11483,9 +11440,8 @@ msgid "Override for Feature"
msgstr "Sobrescrever para Funcionalidade"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Add %d Translations"
-msgstr "Adicionar Tradução"
+msgstr "Adicionar %d Traduções"
#: editor/project_settings_editor.cpp
msgid "Remove Translation"
@@ -11943,12 +11899,15 @@ msgstr "Excluir o nó \"%s\"?"
msgid ""
"Saving the branch as a scene requires having a scene open in the editor."
msgstr ""
+"Para salvar o ramo como cena é necessário ter uma cena aberta no editor."
#: editor/scene_tree_dock.cpp
msgid ""
"Saving the branch as a scene requires selecting only one node, but you have "
"selected %d nodes."
msgstr ""
+"Para salvar o ramo como cena é necessário selecionar apenas um nó, mas você "
+"selecionou %d nós."
#: editor/scene_tree_dock.cpp
msgid ""
@@ -12370,6 +12329,8 @@ msgid ""
"Warning: Having the script name be the same as a built-in type is usually "
"not desired."
msgstr ""
+"Aviso: É geralmente indesejável que o nome do script seja o mesmo que o de "
+"um tipo embutido."
#: editor/script_create_dialog.cpp
msgid "Class Name:"
@@ -12441,7 +12402,7 @@ msgstr "Copiar Erro"
#: editor/script_editor_debugger.cpp
msgid "Open C++ Source on GitHub"
-msgstr ""
+msgstr "Abrir Código C++ no GitHub"
#: editor/script_editor_debugger.cpp
msgid "Video RAM"
@@ -12755,9 +12716,8 @@ msgid "Export Mesh GLTF2"
msgstr "Exportar Biblioteca de Malhas"
#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp
-#, fuzzy
msgid "Export GLTF..."
-msgstr "Exportar..."
+msgstr "Exportar GLTF..."
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
@@ -12925,9 +12885,8 @@ msgid "Class name can't be a reserved keyword"
msgstr "Nome da classe não pode ser uma palavra reservada"
#: modules/mono/csharp_script.cpp
-#, fuzzy
msgid "Build Solution"
-msgstr "Seleção de preenchimento"
+msgstr "Construir Solução"
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
@@ -13593,7 +13552,7 @@ msgstr ""
#: platform/android/export/export_plugin.cpp
msgid "Signing debug %s..."
-msgstr ""
+msgstr "Assinando depuração %s..."
#: platform/android/export/export_plugin.cpp
msgid "Signing release %s..."
@@ -13606,7 +13565,7 @@ msgstr "Não foi possível encontrar a keystore, incapaz de exportar."
#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
-msgstr ""
+msgstr "'apksigner' retornou com o erro #%d"
#: platform/android/export/export_plugin.cpp
msgid "Verifying %s..."
@@ -13614,7 +13573,7 @@ msgstr "Verificando %s..."
#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
-msgstr ""
+msgstr "A verificação de 'apksigner' de %s falhou."
#: platform/android/export/export_plugin.cpp
msgid "Exporting for Android"
@@ -13634,7 +13593,7 @@ msgstr "Nome de arquivo inválido! Android APK requer a extensão *.apk."
#: platform/android/export/export_plugin.cpp
msgid "Unsupported export format!\n"
-msgstr ""
+msgstr "Formato de Exportação Não Suportado\n"
#: platform/android/export/export_plugin.cpp
msgid ""
@@ -13661,6 +13620,8 @@ msgstr ""
msgid ""
"Unable to overwrite res://android/build/res/*.xml files with project name"
msgstr ""
+"Incapaz de sobrescrever os arquivos res://android/build/res/*.xml com o nome "
+"do projeto"
#: platform/android/export/export_plugin.cpp
msgid "Could not export project files to gradle project\n"
@@ -13701,9 +13662,8 @@ msgid "Package not found: %s"
msgstr "Pacote não encontrado: '%s'"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Creating APK..."
-msgstr "Criando contornos..."
+msgstr "Criando APK..."
#: platform/android/export/export_plugin.cpp
msgid ""
@@ -13731,7 +13691,7 @@ msgstr "Não foi possível exportar os arquivos do projeto"
#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
-msgstr ""
+msgstr "Alinhando APK..."
#: platform/android/export/export_plugin.cpp
msgid "Could not unzip temporary unaligned APK."
@@ -13783,9 +13743,8 @@ msgid "Could not write file:"
msgstr "Não foi possível escrever o arquivo:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not read file:"
-msgstr "Não foi possível escrever o arquivo:"
+msgstr "Não foi possível ler o arquivo:"
#: platform/javascript/export/export.cpp
#, fuzzy
@@ -14351,11 +14310,11 @@ msgstr ""
#: scene/3d/portal.cpp
msgid "A Room should not be a child or grandchild of a Portal."
-msgstr ""
+msgstr "Um Room não deve ser filho ou neto de um Portal."
#: scene/3d/portal.cpp
msgid "A RoomGroup should not be a child or grandchild of a Portal."
-msgstr ""
+msgstr "Um RoomGroup não deve ser filho ou neto de um Portal."
#: scene/3d/remote_transform.cpp
msgid ""
@@ -14367,15 +14326,15 @@ msgstr ""
#: scene/3d/room.cpp
msgid "A Room cannot have another Room as a child or grandchild."
-msgstr ""
+msgstr "Um Room não pode ter outro Room como filho ou neto."
#: scene/3d/room.cpp
msgid "The RoomManager should not be placed inside a Room."
-msgstr ""
+msgstr "O RoomManager não deve ser colocado dentro de um Room."
#: scene/3d/room.cpp
msgid "A RoomGroup should not be placed inside a Room."
-msgstr ""
+msgstr "Um RoomGroup não deve ser colocado dentro de um Room."
#: scene/3d/room.cpp
msgid ""
@@ -14385,7 +14344,7 @@ msgstr ""
#: scene/3d/room_group.cpp
msgid "The RoomManager should not be placed inside a RoomGroup."
-msgstr ""
+msgstr "O RoomManager não deve ser colocado dentro de um RoomGroup."
#: scene/3d/room_manager.cpp
msgid "The RoomList has not been assigned."
@@ -14393,7 +14352,7 @@ msgstr ""
#: scene/3d/room_manager.cpp
msgid "The RoomList node should be a Spatial (or derived from Spatial)."
-msgstr ""
+msgstr "O nó RoomList deve ser Spatial(ou derivado de Spatial)."
#: scene/3d/room_manager.cpp
msgid ""
@@ -14403,7 +14362,7 @@ msgstr ""
#: scene/3d/room_manager.cpp
msgid "There should only be one RoomManager in the SceneTree."
-msgstr ""
+msgstr "Só Deve existir um RoomManager na SceneTree."
#: scene/3d/room_manager.cpp
msgid ""
@@ -14413,7 +14372,7 @@ msgstr ""
#: scene/3d/room_manager.cpp
msgid "RoomList contains no Rooms, aborting."
-msgstr ""
+msgstr "A RoomList não contem Rooms, abortando."
#: scene/3d/room_manager.cpp
msgid "Misnamed nodes detected, check output log for details. Aborting."
@@ -14672,12 +14631,12 @@ msgstr ""
"render e atribua sua textura interna a algum nó para exibir."
#: scene/main/viewport.cpp
-#, fuzzy
msgid ""
"The Viewport size must be greater than or equal to 2 pixels on both "
"dimensions to render anything."
msgstr ""
-"O tamanho da Viewport deve ser maior do que 0 para renderizar qualquer coisa."
+"O tamanho do Viewport deve ser maior ou igual a 2 pixels em ambas as "
+"dimensões para renderizar algo."
#: scene/resources/occluder_shape.cpp
msgid "OccluderShapeSphere Set Spheres"
@@ -14722,7 +14681,7 @@ msgstr ""
#: servers/visual/shader_language.cpp
msgid "Fragment-stage varying could not been accessed in custom function!"
-msgstr ""
+msgstr "Variante Fragment-stage não pôde ser acessada na função personalizada!"
#: servers/visual/shader_language.cpp
msgid "Assignment to function."
diff --git a/editor/translations/ro.po b/editor/translations/ro.po
index 1ffd38d5a0..9a45a6ca63 100644
--- a/editor/translations/ro.po
+++ b/editor/translations/ro.po
@@ -15,13 +15,14 @@
# f0roots <f0rootss@gmail.com>, 2020.
# Gigel2 <mihalacher02@gmail.com>, 2020.
# R3ktGamerRO <bluegamermc1@gmail.com>, 2021.
+# FlooferLand <yunaflarf@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-03-20 04:18+0000\n"
-"Last-Translator: R3ktGamerRO <bluegamermc1@gmail.com>\n"
+"PO-Revision-Date: 2021-11-11 16:02+0000\n"
+"Last-Translator: FlooferLand <yunaflarf@gmail.com>\n"
"Language-Team: Romanian <https://hosted.weblate.org/projects/godot-engine/"
"godot/ro/>\n"
"Language: ro\n"
@@ -30,7 +31,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
"20)) ? 1 : 2;\n"
-"X-Generator: Weblate 4.5.2-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -379,15 +380,13 @@ msgstr "Anim Inserați"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "node '%s'"
-msgstr "Mod Snap (%s)"
+msgstr "nodul '%s'"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "animation"
-msgstr "Animație"
+msgstr "animație"
#: editor/animation_track_editor.cpp
msgid "AnimationPlayer can't animate itself, only other players."
@@ -395,9 +394,8 @@ msgstr "AnimationPlayer nu se poate anima singur, doar alți jucători."
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "property '%s'"
-msgstr "Proprietate"
+msgstr "proprietatea '%s'"
#: editor/animation_track_editor.cpp
msgid "Anim Create & Insert"
@@ -486,7 +484,7 @@ msgstr "Anim Mutați Cheie"
#: editor/animation_track_editor.cpp
#: modules/visual_script/visual_script_editor.cpp
msgid "Clipboard is empty!"
-msgstr ""
+msgstr "Clipboardul este gol!"
#: editor/animation_track_editor.cpp
msgid "Paste Tracks"
@@ -608,9 +606,8 @@ msgid "Go to Previous Step"
msgstr "Mergeți la Pasul Anterior"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Apply Reset"
-msgstr "Resetați Zoom-area"
+msgstr "Resetați"
#: editor/animation_track_editor.cpp
msgid "Optimize Animation"
@@ -629,9 +626,8 @@ msgid "Use Bezier Curves"
msgstr "Folosește curbe Bezier"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Create RESET Track(s)"
-msgstr "Lipiţi Piste"
+msgstr "Creați o pista RESET"
#: editor/animation_track_editor.cpp
msgid "Anim. Optimizer"
@@ -973,11 +969,11 @@ msgstr "Creați %s Nou"
#: editor/create_dialog.cpp editor/plugins/asset_library_editor_plugin.cpp
msgid "No results for \"%s\"."
-msgstr ""
+msgstr "Niciun rezultat pentru \"%s\"."
#: editor/create_dialog.cpp editor/property_selector.cpp
msgid "No description available for %s."
-msgstr ""
+msgstr "Nu exista o descriere pentru %s."
#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
#: editor/filesystem_dock.cpp
@@ -1077,14 +1073,14 @@ msgid "Owners Of:"
msgstr "Stăpâni La:"
#: editor/dependency_editor.cpp
-#, fuzzy
msgid ""
"Remove the selected files from the project? (Cannot be undone.)\n"
"Depending on your filesystem configuration, the files will either be moved "
"to the system trash or deleted permanently."
msgstr ""
"Ștergeți fișierele selectate din proiect? (Acțiune ireversibilă)\n"
-"Poți gasi fișierele șterse in coșul de gunoi dacă vrei să le restabilești."
+"Bazat pe configurarea sistemului de fișiere, fișierele vor fi mutate în "
+"coșul de gunoi al sistemului, ori vor fi șterse definitiv."
#: editor/dependency_editor.cpp
#, fuzzy
@@ -1170,7 +1166,7 @@ msgstr "Mulțumesc din partea comunităţii Godot!"
#: editor/editor_about.cpp editor/editor_node.cpp editor/project_manager.cpp
msgid "Click to copy."
-msgstr ""
+msgstr "Apasă click sa copiezi."
#: editor/editor_about.cpp
msgid "Godot Engine contributors"
@@ -1268,41 +1264,38 @@ msgid "Licenses"
msgstr "Licențe"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Error opening asset file for \"%s\" (not in ZIP format)."
-msgstr "Eroare la deschiderea fişierului pachet, nu este în format ZIP."
+msgstr ""
+"Eroare la deschiderea fişierului pachet \"%s\" (nu este în formatul ZIP)."
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "%s (already exists)"
-msgstr "%s (Există deja)"
+msgstr "%s (deja există)"
#: editor/editor_asset_installer.cpp
msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:"
-msgstr ""
+msgstr "Conținutul pachetului \"%s\" - %d fișiere conflictă cu proiectul tău:"
#: editor/editor_asset_installer.cpp
msgid "Contents of asset \"%s\" - No files conflict with your project:"
msgstr ""
+"Conținutul pachetului \"%s\" - Niciun fișier nu conflictă cu proiectul tău:"
#: editor/editor_asset_installer.cpp
msgid "Uncompressing Assets"
msgstr "Decomprimare Asset-uri"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "The following files failed extraction from asset \"%s\":"
-msgstr "Următoarele file au eșuat extragerea din pachet:"
+msgstr "Următoarele fișiere au eșuat extragerea din pachetul \"%s\":"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "(and %s more files)"
-msgstr "și %d alte fișiere."
+msgstr "(și %s alte fișiere)"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Asset \"%s\" installed successfully!"
-msgstr "Pachet instalat cu succes!"
+msgstr "Pachetul \"%s\" sa instalat cu succes!"
#: editor/editor_asset_installer.cpp
#: editor/plugins/asset_library_editor_plugin.cpp
@@ -1551,13 +1544,12 @@ msgid "Can't add autoload:"
msgstr "Nu pot adaugă încărcare automata:"
#: editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "%s is an invalid path. File does not exist."
-msgstr "Fișierul nu există."
+msgstr "%s este o cale invalidă. Fișierul nu există."
#: editor/editor_autoload_settings.cpp
msgid "%s is an invalid path. Not in resource path (res://)."
-msgstr ""
+msgstr "%s este o cale invalida. Nu este în calea resurselor (res://)."
#: editor/editor_autoload_settings.cpp
msgid "Add AutoLoad"
@@ -1582,7 +1574,7 @@ msgstr "Nume"
#: editor/editor_autoload_settings.cpp
msgid "Global Variable"
-msgstr ""
+msgstr "Variabil Global"
#: editor/editor_data.cpp
msgid "Paste Params"
@@ -1761,7 +1753,7 @@ msgstr "Importă Bară"
#: editor/editor_feature_profile.cpp
msgid "Allows to view and edit 3D scenes."
-msgstr ""
+msgstr "Permite vizualizarea și editarea scenelor 3D."
#: editor/editor_feature_profile.cpp
msgid "Allows to edit scripts using the integrated script editor."
@@ -1783,7 +1775,7 @@ msgstr ""
#: editor/editor_feature_profile.cpp
msgid "Allows to browse the local file system via a dedicated dock."
-msgstr ""
+msgstr "Permite navigarea sistemului local de fișiere printr-un dock dedicat."
#: editor/editor_feature_profile.cpp
msgid ""
@@ -1792,17 +1784,16 @@ msgid ""
msgstr ""
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "(current)"
-msgstr "(Curent)"
+msgstr "(actual)"
#: editor/editor_feature_profile.cpp
msgid "(none)"
-msgstr ""
+msgstr "(nici unul)"
#: editor/editor_feature_profile.cpp
msgid "Remove currently selected profile, '%s'? Cannot be undone."
-msgstr ""
+msgstr "Șterge profilul actual selectat, '%s'? Nu poate fi anulat."
#: editor/editor_feature_profile.cpp
msgid "Profile must be a valid filename and must not contain '.'"
@@ -1834,9 +1825,8 @@ msgid "Enable Contextual Editor"
msgstr "Activează Editorul Contextual"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Class Properties:"
-msgstr "Reduceți toate proprietățile"
+msgstr "Proprietățile clasei:"
#: editor/editor_feature_profile.cpp
#, fuzzy
@@ -1844,9 +1834,8 @@ msgid "Main Features:"
msgstr "Caracteristici active:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Nodes and Classes:"
-msgstr "Clase Activate:"
+msgstr "Noduri și Clase:"
#: editor/editor_feature_profile.cpp
msgid "File '%s' format is invalid, import aborted."
@@ -1874,14 +1863,12 @@ msgid "Current Profile:"
msgstr "Profil Curent:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Create Profile"
-msgstr "Ștergere Profil"
+msgstr "Creează un Profil"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Remove Profile"
-msgstr "Elimină Șablon"
+msgstr "Șterge Profil"
#: editor/editor_feature_profile.cpp
msgid "Available Profiles:"
@@ -1901,14 +1888,12 @@ msgid "Export"
msgstr "Exportare"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Configure Selected Profile:"
-msgstr "Profil Curent:"
+msgstr "Configură Profilul Selectat:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Extra Options:"
-msgstr "Opțiuni Clasă:"
+msgstr "Opțiunii Extra:"
#: editor/editor_feature_profile.cpp
msgid "Create or import a profile to edit available classes and properties."
@@ -1939,9 +1924,8 @@ msgid "Select Current Folder"
msgstr "Selectaţi directorul curent"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
-#, fuzzy
msgid "File exists, overwrite?"
-msgstr "Fișierul există, suprascrieţi?"
+msgstr "Fișierul există, înlocuiți?"
#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
msgid "Select This Folder"
@@ -2259,8 +2243,9 @@ msgstr "Proprietate:"
#: editor/editor_inspector.cpp editor/scene_tree_dock.cpp
#: modules/visual_script/visual_script_property_selector.cpp
+#, fuzzy
msgid "Set %s"
-msgstr ""
+msgstr "Setați %s"
#: editor/editor_inspector.cpp
msgid "Set Multiple:"
@@ -2436,9 +2421,8 @@ msgstr ""
"putut fi satisfăcute."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Could not save one or more scenes!"
-msgstr "Nu s-a putut porni subprocesul!"
+msgstr "Nu s-au putut salva una sau mai multe scene!"
#: editor/editor_node.cpp
msgid "Save All Scenes"
@@ -2543,7 +2527,7 @@ msgstr "Nu există nici o scenă definită pentru a execuție."
#: editor/editor_node.cpp
msgid "Save scene before running..."
-msgstr ""
+msgstr "Salvați scena înainte de a rula..."
#: editor/editor_node.cpp
msgid "Could not start subprocess!"
@@ -2579,7 +2563,7 @@ msgstr "Salvează schimbările la ’%s’ înainte de ieșire?"
#: editor/editor_node.cpp
msgid "%s no longer exists! Please specify a new save location."
-msgstr ""
+msgstr "%s nu mai există! Vă rugăm să specificați o nouă locație de salvare."
#: editor/editor_node.cpp
msgid ""
@@ -7879,15 +7863,15 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Set Rest Pose to Bones"
+msgstr ""
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
msgid "Create Rest Pose from Bones"
msgstr "Creează Puncte de Emisie Din Mesh"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
-msgstr ""
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
msgid "Skeleton2D"
msgstr "Singleton (Unicat)"
diff --git a/editor/translations/ru.po b/editor/translations/ru.po
index 668cfb6afa..0d7bd238ed 100644
--- a/editor/translations/ru.po
+++ b/editor/translations/ru.po
@@ -99,13 +99,14 @@
# Олег Довгер <oleg.a.dovger@gmail.com>, 2021.
# Anna Malinovskaia <tacitcoast@gmail.com>, 2021.
# mrvladus <mrvladus@yandex.ru>, 2021.
+# DΞLTΛ <craftercrafter43@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-10-21 10:31+0000\n"
-"Last-Translator: Danil Alexeev <danil@alexeev.xyz>\n"
+"PO-Revision-Date: 2021-11-07 09:45+0000\n"
+"Last-Translator: DΞLTΛ <craftercrafter43@gmail.com>\n"
"Language-Team: Russian <https://hosted.weblate.org/projects/godot-engine/"
"godot/ru/>\n"
"Language: ru\n"
@@ -7817,20 +7818,20 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "У Ñтого Ñкелета нет коÑтей, Ñоздайте дочерние Bone2D узлы."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "Создать позу Ð¿Ð¾ÐºÐ¾Ñ Ð¸Ð· коÑтей"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "Задать позу Ð¿Ð¾ÐºÐ¾Ñ ÐºÐ¾ÑÑ‚Ñм"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "Создать позу Ð¿Ð¾ÐºÐ¾Ñ Ð¸Ð· коÑтей"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "2D Ñкелет"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Reset to Rest Pose"
-msgstr "СброÑить к позе покоÑ"
+msgstr "Создать позу покоÑ"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Overwrite Rest Pose"
diff --git a/editor/translations/si.po b/editor/translations/si.po
index 698dc3040d..a6c6eb5ab3 100644
--- a/editor/translations/si.po
+++ b/editor/translations/si.po
@@ -7480,11 +7480,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
diff --git a/editor/translations/sk.po b/editor/translations/sk.po
index 59ddcb9fc1..70488a8dae 100644
--- a/editor/translations/sk.po
+++ b/editor/translations/sk.po
@@ -7783,11 +7783,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
diff --git a/editor/translations/sl.po b/editor/translations/sl.po
index 0d0acd817d..5fe2168656 100644
--- a/editor/translations/sl.po
+++ b/editor/translations/sl.po
@@ -8055,15 +8055,15 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Set Rest Pose to Bones"
+msgstr ""
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
msgid "Create Rest Pose from Bones"
msgstr "Zaženi Prizor po Meri"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
-msgstr ""
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
msgid "Skeleton2D"
msgstr "Posameznik"
diff --git a/editor/translations/sq.po b/editor/translations/sq.po
index d6e23ddbe6..a68667d741 100644
--- a/editor/translations/sq.po
+++ b/editor/translations/sq.po
@@ -7802,11 +7802,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
diff --git a/editor/translations/sr_Cyrl.po b/editor/translations/sr_Cyrl.po
index 0301c5f380..73448d79ed 100644
--- a/editor/translations/sr_Cyrl.po
+++ b/editor/translations/sr_Cyrl.po
@@ -6,12 +6,13 @@
# ÐлекÑандар Урошевић <nicecubedude@gmail.com>, 2017.
# Младен Габић <cupakabra@protonmail.com>, 2020.
# Anonymous <noreply@weblate.org>, 2020.
+# ÐлекÑић Владица <vlajkousk@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
-"PO-Revision-Date: 2020-05-22 21:01+0000\n"
-"Last-Translator: Младен Габић <cupakabra@protonmail.com>\n"
+"PO-Revision-Date: 2021-11-07 22:23+0000\n"
+"Last-Translator: ÐлекÑић Владица <vlajkousk@gmail.com>\n"
"Language-Team: Serbian (cyrillic) <https://hosted.weblate.org/projects/godot-"
"engine/godot/sr_Cyrl/>\n"
"Language: sr_Cyrl\n"
@@ -19,7 +20,7 @@ msgstr ""
"Content-Transfer-Encoding: 8-bit\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 4.1-dev\n"
+"X-Generator: Weblate 4.9-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -101,7 +102,6 @@ msgid "Balanced"
msgstr "БаланÑирано"
#: editor/animation_bezier_editor.cpp
-#, fuzzy
msgid "Mirror"
msgstr "Огледало"
@@ -110,14 +110,12 @@ msgid "Time:"
msgstr "Време:"
#: editor/animation_bezier_editor.cpp
-#, fuzzy
msgid "Value:"
msgstr "ВредноÑÑ‚:"
#: editor/animation_bezier_editor.cpp
-#, fuzzy
msgid "Insert Key Here"
-msgstr "Убаци кључ"
+msgstr "Овде Убаците Кључ"
#: editor/animation_bezier_editor.cpp
#, fuzzy
@@ -1024,7 +1022,7 @@ msgstr "Сигурно желиш да уклониш Ñве везе Ñа \"%s\
#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp
msgid "Signals"
-msgstr "Сигнали"
+msgstr "Знаци"
#: editor/connections_dialog.cpp
#, fuzzy
@@ -2272,9 +2270,8 @@ msgid "Inherited by:"
msgstr "ÐаÑлеђено од:"
#: editor/editor_help.cpp
-#, fuzzy
msgid "Description"
-msgstr "ОпиÑ:"
+msgstr "ОпиÑ"
#: editor/editor_help.cpp
#, fuzzy
@@ -2297,25 +2294,26 @@ msgstr "Уобичајено"
#: editor/editor_help.cpp
msgid "Methods"
-msgstr "Методе"
+msgstr "ПоÑтупци"
#: editor/editor_help.cpp
#, fuzzy
msgid "Theme Properties"
-msgstr "ОÑобине"
+msgstr "ОÑобине Теме"
#: editor/editor_help.cpp
+#, fuzzy
msgid "Enumerations"
-msgstr "Енумерације"
+msgstr "ПопиÑивање"
#: editor/editor_help.cpp editor/plugins/theme_editor_plugin.cpp
msgid "Constants"
-msgstr "КонÑтанте"
+msgstr "Ðепроменљиве"
#: editor/editor_help.cpp
#, fuzzy
msgid "Property Descriptions"
-msgstr "ÐžÐ¿Ð¸Ñ Ð¾Ñобине:"
+msgstr "ОпиÑи ОÑобина"
#: editor/editor_help.cpp
#, fuzzy
@@ -2333,7 +2331,7 @@ msgstr ""
#: editor/editor_help.cpp
#, fuzzy
msgid "Method Descriptions"
-msgstr "ÐžÐ¿Ð¸Ñ Ð¼ÐµÑ‚Ð¾Ð´Ðµ:"
+msgstr "ОпиÑи Метода"
#: editor/editor_help.cpp
msgid ""
@@ -8467,13 +8465,13 @@ msgstr "Овај коÑтур нема коÑти, креирај му децу
#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
-msgid "Create Rest Pose from Bones"
-msgstr "Ðаправи тачке емиÑије од мреже"
+msgid "Set Rest Pose to Bones"
+msgstr "ПоÑтави Одмор Позу на КоÑке"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
-msgid "Set Rest Pose to Bones"
-msgstr "ПоÑтави Одмор Позу на КоÑке"
+msgid "Create Rest Pose from Bones"
+msgstr "Ðаправи тачке емиÑије од мреже"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
diff --git a/editor/translations/sr_Latn.po b/editor/translations/sr_Latn.po
index 66f5d9574f..d8a6c896f1 100644
--- a/editor/translations/sr_Latn.po
+++ b/editor/translations/sr_Latn.po
@@ -7532,11 +7532,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
diff --git a/editor/translations/sv.po b/editor/translations/sv.po
index 3b674ce0e3..7abece55a6 100644
--- a/editor/translations/sv.po
+++ b/editor/translations/sv.po
@@ -7869,15 +7869,15 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Set Rest Pose to Bones"
+msgstr ""
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
msgid "Create Rest Pose from Bones"
msgstr "Skapa från Scen"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
-msgstr ""
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
msgid "Skeleton2D"
msgstr "Singleton"
diff --git a/editor/translations/ta.po b/editor/translations/ta.po
index ac91117100..137e2a28f9 100644
--- a/editor/translations/ta.po
+++ b/editor/translations/ta.po
@@ -7482,11 +7482,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
diff --git a/editor/translations/te.po b/editor/translations/te.po
index 6735d08c71..fbe2d0dac3 100644
--- a/editor/translations/te.po
+++ b/editor/translations/te.po
@@ -7416,11 +7416,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
diff --git a/editor/translations/th.po b/editor/translations/th.po
index 602f593f13..6fe9af7f1d 100644
--- a/editor/translations/th.po
+++ b/editor/translations/th.po
@@ -7700,14 +7700,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "โครงหลัà¸à¸™à¸µà¹‰à¸¢à¸±à¸‡à¹„ม่มีโครงใดๆ สร้างโหนดลูà¸à¸‚อง Bone2D"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "สร้างท่าโพสจาà¸à¹‚ครง"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "ตั้งท่าโพสจาà¸à¹‚ครง"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "สร้างท่าโพสจาà¸à¹‚ครง"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Skeleton2D"
diff --git a/editor/translations/tl.po b/editor/translations/tl.po
new file mode 100644
index 0000000000..691f0eeeac
--- /dev/null
+++ b/editor/translations/tl.po
@@ -0,0 +1,13819 @@
+# Tagalog translation of the Godot Engine editor.
+# Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur.
+# Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md).
+# This file is distributed under the same license as the Godot source code.
+#
+# Napstaguy04 <brokenscreen3@gmail.com>, 2021.
+msgid ""
+msgstr ""
+"Project-Id-Version: Godot Engine editor\n"
+"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
+"PO-Revision-Date: 2021-11-19 08:44+0000\n"
+"Last-Translator: Napstaguy04 <brokenscreen3@gmail.com>\n"
+"Language-Team: Tagalog <https://hosted.weblate.org/projects/godot-engine/"
+"godot/tl/>\n"
+"Language: tl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1 && n != 2 && n != 3 && (n % 10 == 4 "
+"|| n % 10 == 6 || n % 10 == 9);\n"
+"X-Generator: Weblate 4.9.1-dev\n"
+
+#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
+#: modules/visual_script/visual_script_builtin_funcs.cpp
+msgid "Invalid type argument to convert(), use TYPE_* constants."
+msgstr ""
+"Di-wastong uri ng argumento para sa convert(), gamitin ang TYPE_* constants."
+
+#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
+msgid "Expected a string of length 1 (a character)."
+msgstr "Inaasahang string na may habang 1 (isang karakter)."
+
+#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
+#: modules/mono/glue/gd_glue.cpp
+#: modules/visual_script/visual_script_builtin_funcs.cpp
+msgid "Not enough bytes for decoding bytes, or invalid format."
+msgstr "Kulang na bytes para sa decoding bytes, o di-wastong format."
+
+#: core/math/expression.cpp
+msgid "Invalid input %i (not passed) in expression"
+msgstr "Di-wastong input %i (di naipasa) sa expression"
+
+#: core/math/expression.cpp
+msgid "self can't be used because instance is null (not passed)"
+msgstr ""
+"Hindi magagamit ang self dahil ang instance ay naka-null (hindi ipinasa)"
+
+#: core/math/expression.cpp
+msgid "Invalid operands to operator %s, %s and %s."
+msgstr "Di-wastong mga operands sa mga operator %s, %s at %s."
+
+#: core/math/expression.cpp
+msgid "Invalid index of type %s for base type %s"
+msgstr "Di-wastong index ng uring %s para sa batayang uri %s"
+
+#: core/math/expression.cpp
+msgid "Invalid named index '%s' for base type %s"
+msgstr "Di-wastong pinangalang index '%s' para sa batayang uri na %s"
+
+#: core/math/expression.cpp
+msgid "Invalid arguments to construct '%s'"
+msgstr "Di-wastong mga argument para i-construct ang '%s'"
+
+#: core/math/expression.cpp
+msgid "On call to '%s':"
+msgstr "Sa pagtawag sa '%s':"
+
+#: core/ustring.cpp
+msgid "B"
+msgstr "B"
+
+#: core/ustring.cpp
+msgid "KiB"
+msgstr "KiB"
+
+#: core/ustring.cpp
+msgid "MiB"
+msgstr "MiB"
+
+#: core/ustring.cpp
+msgid "GiB"
+msgstr "GiB"
+
+#: core/ustring.cpp
+msgid "TiB"
+msgstr "TiB"
+
+#: core/ustring.cpp
+msgid "PiB"
+msgstr "PiB"
+
+#: core/ustring.cpp
+msgid "EiB"
+msgstr "EiB"
+
+#: editor/animation_bezier_editor.cpp
+msgid "Free"
+msgstr "Walang Bayad"
+
+#: editor/animation_bezier_editor.cpp
+msgid "Balanced"
+msgstr "Nakabalanse"
+
+#: editor/animation_bezier_editor.cpp
+msgid "Mirror"
+msgstr "Salamin"
+
+#: editor/animation_bezier_editor.cpp editor/editor_profiler.cpp
+msgid "Time:"
+msgstr "Oras:"
+
+#: editor/animation_bezier_editor.cpp
+msgid "Value:"
+msgstr "Halaga:"
+
+#: editor/animation_bezier_editor.cpp
+msgid "Insert Key Here"
+msgstr "Maglagay ng Key dito"
+
+#: editor/animation_bezier_editor.cpp
+msgid "Duplicate Selected Key(s)"
+msgstr "Doblehin ang (mga) Napiling Key"
+
+#: editor/animation_bezier_editor.cpp
+msgid "Delete Selected Key(s)"
+msgstr "Burahin ang (mga) Napiling Key"
+
+#: editor/animation_bezier_editor.cpp
+msgid "Add Bezier Point"
+msgstr "Magdagdag ng Bezier Point"
+
+#: editor/animation_bezier_editor.cpp
+msgid "Move Bezier Points"
+msgstr "Maglipat ng (mga) Bezier Point"
+
+#: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp
+msgid "Anim Duplicate Keys"
+msgstr "Pagdodoble ng mga Animation Key"
+
+#: editor/animation_bezier_editor.cpp editor/animation_track_editor.cpp
+msgid "Anim Delete Keys"
+msgstr "Pagbura ng mga Animation Key"
+
+#: editor/animation_track_editor.cpp
+msgid "Anim Change Keyframe Time"
+msgstr "Pagbago ng Keyframe Time ng Animation"
+
+#: editor/animation_track_editor.cpp
+msgid "Anim Change Transition"
+msgstr "Pagbago ng Transisyon ng Animation"
+
+#: editor/animation_track_editor.cpp
+msgid "Anim Change Transform"
+msgstr "Pagbago ng Transform ng Animation"
+
+#: editor/animation_track_editor.cpp
+msgid "Anim Change Keyframe Value"
+msgstr "Pagbago ng Nilalaman ng Keyframe ng Animation"
+
+#: editor/animation_track_editor.cpp
+msgid "Anim Change Call"
+msgstr "Pagbago ng Pagtawag sa Animation"
+
+#: editor/animation_track_editor.cpp
+msgid "Anim Multi Change Keyframe Time"
+msgstr "Pagbago ng Oras ng Maraming Keyframe ng Animation"
+
+#: editor/animation_track_editor.cpp
+msgid "Anim Multi Change Transition"
+msgstr "Pagbago ng Maraming Transisyon ng Animation"
+
+#: editor/animation_track_editor.cpp
+msgid "Anim Multi Change Transform"
+msgstr "Pagbago ng Maraming Transform ng Animation"
+
+#: editor/animation_track_editor.cpp
+msgid "Anim Multi Change Keyframe Value"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Anim Multi Change Call"
+msgstr "Pagbago ng Maraming Pagtawag ng Animation"
+
+#: editor/animation_track_editor.cpp
+msgid "Change Animation Length"
+msgstr "Pagbago ang Haba ng Animation"
+
+#: editor/animation_track_editor.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation Loop"
+msgstr "Pagbago ng Animation Loop"
+
+#: editor/animation_track_editor.cpp
+msgid "Property Track"
+msgstr "Pangkatangiang Track"
+
+#: editor/animation_track_editor.cpp
+msgid "3D Transform Track"
+msgstr "Track na Pang-3D Transform"
+
+#: editor/animation_track_editor.cpp
+msgid "Call Method Track"
+msgstr "Track na Pantawag ng Method"
+
+#: editor/animation_track_editor.cpp
+msgid "Bezier Curve Track"
+msgstr "Track na Pang-Bezier Curve"
+
+#: editor/animation_track_editor.cpp
+msgid "Audio Playback Track"
+msgstr "Track na Tagapatunog ng Audio"
+
+#: editor/animation_track_editor.cpp
+msgid "Animation Playback Track"
+msgstr "Track na Tagasimula ng Animation"
+
+#: editor/animation_track_editor.cpp
+msgid "Animation length (frames)"
+msgstr "Haba ng Animation (frames)"
+
+#: editor/animation_track_editor.cpp
+msgid "Animation length (seconds)"
+msgstr "Haba ng Animation (Kada segundo)"
+
+#: editor/animation_track_editor.cpp
+msgid "Add Track"
+msgstr "Magdagdag ng Track"
+
+#: editor/animation_track_editor.cpp
+msgid "Animation Looping"
+msgstr "Paguulit ng Animation"
+
+#: editor/animation_track_editor.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Functions:"
+msgstr "Mga Punsyon:"
+
+#: editor/animation_track_editor.cpp
+msgid "Audio Clips:"
+msgstr "Kabahagi ng Audio:"
+
+#: editor/animation_track_editor.cpp
+msgid "Anim Clips:"
+msgstr "Mga Kabahagi ng Anim:"
+
+#: editor/animation_track_editor.cpp
+msgid "Change Track Path"
+msgstr "Ibahin ang Daan ng Track"
+
+#: editor/animation_track_editor.cpp
+msgid "Toggle this track on/off."
+msgstr "Ipalit sa on/off ang track na ito."
+
+#: editor/animation_track_editor.cpp
+msgid "Update Mode (How this property is set)"
+msgstr "Paraang Nag-aapdate (Kung papano inayos ang katangian na ito)"
+
+#: editor/animation_track_editor.cpp
+msgid "Interpolation Mode"
+msgstr "Paraang Interpolasyon"
+
+#: editor/animation_track_editor.cpp
+msgid "Loop Wrap Mode (Interpolate end with beginning on loop)"
+msgstr ""
+"Paraang Paikot na Paghigpit (I-interpolate ang dulo kasama ng pagsimula ng "
+"loop)"
+
+#: editor/animation_track_editor.cpp
+msgid "Remove this track."
+msgstr "Tanggalin ang track na ito."
+
+#: editor/animation_track_editor.cpp
+msgid "Time (s): "
+msgstr "Oras (s): "
+
+#: editor/animation_track_editor.cpp
+msgid "Toggle Track Enabled"
+msgstr "Pinapagana ang Pagpalit ng Track"
+
+#: editor/animation_track_editor.cpp
+msgid "Continuous"
+msgstr "Tuloy-tuloy"
+
+#: editor/animation_track_editor.cpp
+msgid "Discrete"
+msgstr "Magkaiba"
+
+#: editor/animation_track_editor.cpp
+msgid "Trigger"
+msgstr "Trigger"
+
+#: editor/animation_track_editor.cpp
+msgid "Capture"
+msgstr "Pagkuha"
+
+#: editor/animation_track_editor.cpp
+msgid "Nearest"
+msgstr "Pinakamalapit"
+
+#: editor/animation_track_editor.cpp editor/plugins/curve_editor_plugin.cpp
+#: editor/property_editor.cpp
+msgid "Linear"
+msgstr "Pahanay"
+
+#: editor/animation_track_editor.cpp
+msgid "Cubic"
+msgstr "Pakubo"
+
+#: editor/animation_track_editor.cpp
+msgid "Clamp Loop Interp"
+msgstr "Hanggahan ang Loop Interp"
+
+#: editor/animation_track_editor.cpp
+msgid "Wrap Loop Interp"
+msgstr "Ibalot ang Loop Interp"
+
+#: editor/animation_track_editor.cpp
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key"
+msgstr "Maglagay ng Key"
+
+#: editor/animation_track_editor.cpp
+msgid "Duplicate Key(s)"
+msgstr "Doblehin ang (mga) Key"
+
+#: editor/animation_track_editor.cpp
+msgid "Delete Key(s)"
+msgstr "Tanggalin Ang (mga) Key"
+
+#: editor/animation_track_editor.cpp
+msgid "Change Animation Update Mode"
+msgstr "Ibahin ang Paraan ng Pag-update ng Animation"
+
+#: editor/animation_track_editor.cpp
+msgid "Change Animation Interpolation Mode"
+msgstr "Ibahin ang Paraan ng Pag-interpolate ng Animation"
+
+#: editor/animation_track_editor.cpp
+msgid "Change Animation Loop Mode"
+msgstr "Ibahin Ang Paraan ng Pag-loop"
+
+#: editor/animation_track_editor.cpp
+msgid "Remove Anim Track"
+msgstr "Alisin ang Anim Track"
+
+#. TRANSLATORS: %s will be replaced by a phrase describing the target of track.
+#: editor/animation_track_editor.cpp
+msgid "Create NEW track for %s and insert key?"
+msgstr "Gumawa ng BAGONG track para sa %s at ilagay ang key?"
+
+#: editor/animation_track_editor.cpp
+msgid "Create %d NEW tracks and insert keys?"
+msgstr "Gumawa ng %d BAGONG mga track at maglagay ng mga key?"
+
+#: editor/animation_track_editor.cpp editor/create_dialog.cpp
+#: editor/editor_audio_buses.cpp editor/editor_feature_profile.cpp
+#: editor/editor_plugin_settings.cpp editor/plugin_config_dialog.cpp
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp
+#: editor/plugins/visual_shader_editor_plugin.cpp
+#: editor/script_create_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Create"
+msgstr "Lumikha"
+
+#: editor/animation_track_editor.cpp
+msgid "Anim Insert"
+msgstr "Maglagay ng Anim"
+
+#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
+#: editor/animation_track_editor.cpp
+msgid "node '%s'"
+msgstr "node '%s'"
+
+#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
+#: editor/animation_track_editor.cpp
+msgid "animation"
+msgstr "animation"
+
+#: editor/animation_track_editor.cpp
+msgid "AnimationPlayer can't animate itself, only other players."
+msgstr ""
+"Hindi kayang i-animate ng AnimationPlayer ang sarili, sa ibang manlalaro "
+"lang."
+
+#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
+#: editor/animation_track_editor.cpp
+msgid "property '%s'"
+msgstr "katangiang '%s'"
+
+#: editor/animation_track_editor.cpp
+msgid "Anim Create & Insert"
+msgstr "Lumikha at Maglagay ng Anim"
+
+#: editor/animation_track_editor.cpp
+msgid "Anim Insert Track & Key"
+msgstr "Maglagay ng Anim Track & Key"
+
+#: editor/animation_track_editor.cpp
+msgid "Anim Insert Key"
+msgstr "Maglagay ng Anim Key"
+
+#: editor/animation_track_editor.cpp
+msgid "Change Animation Step"
+msgstr "Ibahin ang Baytang ng Animation"
+
+#: editor/animation_track_editor.cpp
+msgid "Rearrange Tracks"
+msgstr "Ayusin ang mga Track"
+
+#: editor/animation_track_editor.cpp
+msgid "Transform tracks only apply to Spatial-based nodes."
+msgstr ""
+"Ang mga transform track ay maari lang ikapit sa mga nakabaseng Spatial node."
+
+#: editor/animation_track_editor.cpp
+msgid ""
+"Audio tracks can only point to nodes of type:\n"
+"-AudioStreamPlayer\n"
+"-AudioStreamPlayer2D\n"
+"-AudioStreamPlayer3D"
+msgstr ""
+"Maari lang tumuro sa mga node na ganitong uri:\n"
+"-AudioStreamPlayer\n"
+"-AudioStreamPlayer2D\n"
+"-AudioStreamPlayer3D"
+
+#: editor/animation_track_editor.cpp
+msgid "Animation tracks can only point to AnimationPlayer nodes."
+msgstr "Maari lang tumuro ang mga Animation tracks sa AnimationPlayer nodes."
+
+#: editor/animation_track_editor.cpp
+msgid "Not possible to add a new track without a root"
+msgstr "Hindi maaring magdagdag ng bagong track na walang ugat"
+
+#: editor/animation_track_editor.cpp
+msgid "Invalid track for Bezier (no suitable sub-properties)"
+msgstr "Hindi kaayong track para sa Bezier (walang kaayong subproperties)"
+
+#: editor/animation_track_editor.cpp
+msgid "Add Bezier Track"
+msgstr "Magdagdag ng Bezier Track"
+
+#: editor/animation_track_editor.cpp
+msgid "Track path is invalid, so can't add a key."
+msgstr "Ang pagdaraanan ng track ay imbalido, kaya hindi makakadagdag ng key."
+
+#: editor/animation_track_editor.cpp
+msgid "Track is not of type Spatial, can't insert key"
+msgstr "Hindi Spatial ang Track, hindi makakalagay ng key"
+
+#: editor/animation_track_editor.cpp
+msgid "Add Transform Track Key"
+msgstr "Magdagdag ng Transform Track Key"
+
+#: editor/animation_track_editor.cpp
+msgid "Add Track Key"
+msgstr "Magdagdag ng Track Key"
+
+#: editor/animation_track_editor.cpp
+msgid "Track path is invalid, so can't add a method key."
+msgstr "Di-wasto ang daan ng Track, kaya di maidaragdag ang method key."
+
+#: editor/animation_track_editor.cpp
+msgid "Add Method Track Key"
+msgstr "Magdagdag ng Method Track Key"
+
+#: editor/animation_track_editor.cpp
+msgid "Method not found in object: "
+msgstr "Hindi mahanap ang Method sa object: "
+
+#: editor/animation_track_editor.cpp
+msgid "Anim Move Keys"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Clipboard is empty!"
+msgstr "Walang laman ang clipboard!"
+
+#: editor/animation_track_editor.cpp
+msgid "Paste Tracks"
+msgstr "Idikit ang mga Track"
+
+#: editor/animation_track_editor.cpp
+msgid "Anim Scale Keys"
+msgstr "Mga Key ng Anim Scale"
+
+#: editor/animation_track_editor.cpp
+msgid ""
+"This option does not work for Bezier editing, as it's only a single track."
+msgstr ""
+"Hindi gumagana ang opsyong ito para sa pag-edit ng Bezier, dahil iisa lang "
+"ito."
+
+#: editor/animation_track_editor.cpp
+msgid ""
+"This animation belongs to an imported scene, so changes to imported tracks "
+"will not be saved.\n"
+"\n"
+"To enable the ability to add custom tracks, navigate to the scene's import "
+"settings and set\n"
+"\"Animation > Storage\" to \"Files\", enable \"Animation > Keep Custom Tracks"
+"\", then re-import.\n"
+"Alternatively, use an import preset that imports animations to separate "
+"files."
+msgstr ""
+"Ang animation na ito ay nabibilang sa na-import na eksena, kaya ang anumang "
+"pagbabago sa imported tracks ay hindi mase-save.\n"
+"\n"
+"Upang magbigay ng kakayahang magdagdag ng mga custom track, mag-navigate sa "
+"import settings ng eksena at itakda ang\n"
+"\"Animation> Stroage\" sa \"File\", i-activate ang \"Animation> Keep Custom "
+"Tracks\", pagkatapos ay muling i-import.\n"
+"Bilang kahalili, gumamit ng import preset na nag-i-import ng mga animation "
+"upang paghiwalayin ang mga file."
+
+#: editor/animation_track_editor.cpp
+msgid "Warning: Editing imported animation"
+msgstr "Babala: Ineedit ang na import na animation"
+
+#: editor/animation_track_editor.cpp
+msgid "Select an AnimationPlayer node to create and edit animations."
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Only show tracks from nodes selected in tree."
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Group tracks by node or display them as plain list."
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Snap:"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Animation step value."
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Seconds"
+msgstr "Mga Segundo"
+
+#: editor/animation_track_editor.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "FPS"
+msgstr "FPS"
+
+#: editor/animation_track_editor.cpp editor/editor_plugin_settings.cpp
+#: editor/editor_resource_picker.cpp
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp editor/project_manager.cpp
+#: editor/project_settings_editor.cpp editor/property_editor.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit"
+msgstr "Ayusin"
+
+#: editor/animation_track_editor.cpp
+msgid "Animation properties."
+msgstr "Mga katangian ng animation."
+
+#: editor/animation_track_editor.cpp
+msgid "Copy Tracks"
+msgstr "Kopyahin ang mga Tracks"
+
+#: editor/animation_track_editor.cpp
+msgid "Scale Selection"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Scale From Cursor"
+msgstr ""
+
+#: editor/animation_track_editor.cpp editor/plugins/script_text_editor.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Duplicate Selection"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Duplicate Transposed"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Delete Selection"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Go to Next Step"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Go to Previous Step"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Apply Reset"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Optimize Animation"
+msgstr "Pabilisin ang takbo ng Animation"
+
+#: editor/animation_track_editor.cpp
+msgid "Clean-Up Animation"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Pick the node that will be animated:"
+msgstr "Piliin ang node na i-aanimate:"
+
+#: editor/animation_track_editor.cpp
+msgid "Use Bezier Curves"
+msgstr "Gumamit ng Bezier Curves"
+
+#: editor/animation_track_editor.cpp
+msgid "Create RESET Track(s)"
+msgstr "Gumawa ng (mga) RESET Track"
+
+#: editor/animation_track_editor.cpp
+msgid "Anim. Optimizer"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Max. Linear Error:"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Max. Angular Error:"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Max Optimizable Angle:"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Optimize"
+msgstr "Pabilisin ang takbo"
+
+#: editor/animation_track_editor.cpp
+msgid "Remove invalid keys"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Remove unresolved and empty tracks"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Clean-up all animations"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Clean-Up Animation(s) (NO UNDO!)"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Clean-Up"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Scale Ratio:"
+msgstr ""
+
+#: editor/animation_track_editor.cpp
+msgid "Select Tracks to Copy"
+msgstr ""
+
+#: editor/animation_track_editor.cpp editor/editor_log.cpp
+#: editor/editor_resource_picker.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
+#: editor/scene_tree_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Copy"
+msgstr "Kopyahin"
+
+#: editor/animation_track_editor.cpp
+msgid "Select All/None"
+msgstr "Piliin Lahat/Wala"
+
+#: editor/animation_track_editor_plugins.cpp
+msgid "Add Audio Track Clip"
+msgstr "Magdagdag ng Audio Track Clip"
+
+#: editor/animation_track_editor_plugins.cpp
+msgid "Change Audio Track Clip Start Offset"
+msgstr ""
+
+#: editor/animation_track_editor_plugins.cpp
+msgid "Change Audio Track Clip End Offset"
+msgstr "Ibahin ang Urong ng hulihan ng Audio Track"
+
+#: editor/array_property_edit.cpp
+msgid "Resize Array"
+msgstr ""
+
+#: editor/array_property_edit.cpp
+msgid "Change Array Value Type"
+msgstr ""
+
+#: editor/array_property_edit.cpp
+msgid "Change Array Value"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Go to Line"
+msgstr "Pumunta sa Line"
+
+#: editor/code_editor.cpp
+msgid "Line Number:"
+msgstr "Bilang ng Linya:"
+
+#: editor/code_editor.cpp
+msgid "%d replaced."
+msgstr "Naalis ang %d."
+
+#: editor/code_editor.cpp editor/editor_help.cpp
+msgid "%d match."
+msgstr "%d na kapares."
+
+#: editor/code_editor.cpp editor/editor_help.cpp
+msgid "%d matches."
+msgstr "%d na mga kapares."
+
+#: editor/code_editor.cpp editor/find_in_files.cpp
+msgid "Match Case"
+msgstr ""
+
+#: editor/code_editor.cpp editor/find_in_files.cpp
+msgid "Whole Words"
+msgstr ""
+
+#: editor/code_editor.cpp
+msgid "Replace"
+msgstr "Palitan"
+
+#: editor/code_editor.cpp
+msgid "Replace All"
+msgstr "Palitan Lahat"
+
+#: editor/code_editor.cpp
+msgid "Selection Only"
+msgstr "Napili lang"
+
+#: editor/code_editor.cpp editor/plugins/script_text_editor.cpp
+#: editor/plugins/text_editor.cpp
+msgid "Standard"
+msgstr "Karaniwan"
+
+#: editor/code_editor.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Toggle Scripts Panel"
+msgstr ""
+
+#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+#: editor/plugins/texture_region_editor_plugin.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp
+msgid "Zoom In"
+msgstr "Palakihin Ang Tanaw"
+
+#: editor/code_editor.cpp editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+#: editor/plugins/texture_region_editor_plugin.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp
+msgid "Zoom Out"
+msgstr "Paliitin Ang Tanaw"
+
+#: editor/code_editor.cpp
+msgid "Reset Zoom"
+msgstr "Ibalik sa Dati Ang Tanaw"
+
+#: editor/code_editor.cpp
+msgid "Warnings"
+msgstr "Mga Babala"
+
+#: editor/code_editor.cpp
+msgid "Line and column numbers."
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Method in target node must be specified."
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Method name must be a valid identifier."
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid ""
+"Target method not found. Specify a valid method or attach a script to the "
+"target node."
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Connect to Node:"
+msgstr "Ikabit sa Node:"
+
+#: editor/connections_dialog.cpp
+msgid "Connect to Script:"
+msgstr "Ikabit sa Script:"
+
+#: editor/connections_dialog.cpp
+msgid "From Signal:"
+msgstr "Galing sa Hudyat:"
+
+#: editor/connections_dialog.cpp
+msgid "Scene does not contain any script."
+msgstr "Walang script ang eksena."
+
+#: editor/connections_dialog.cpp editor/editor_autoload_settings.cpp
+#: editor/groups_editor.cpp editor/plugins/item_list_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp
+msgid "Add"
+msgstr "Maglagay"
+
+#: editor/connections_dialog.cpp editor/dependency_editor.cpp
+#: editor/groups_editor.cpp editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/visual_shader_editor_plugin.cpp editor/project_manager.cpp
+#: editor/project_settings_editor.cpp
+msgid "Remove"
+msgstr "Alisin"
+
+#: editor/connections_dialog.cpp
+msgid "Add Extra Call Argument:"
+msgstr "Magdagdag ng Dagdag na Argumento sa Tawag:"
+
+#: editor/connections_dialog.cpp
+msgid "Extra Call Arguments:"
+msgstr "Mga Dagdag na Argumento ng Tawag:"
+
+#: editor/connections_dialog.cpp
+msgid "Receiver Method:"
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Advanced"
+msgstr ""
+
+#: editor/connections_dialog.cpp
+msgid "Deferred"
+msgstr "Ipinagbaliban"
+
+#: editor/connections_dialog.cpp
+msgid ""
+"Defers the signal, storing it in a queue and only firing it at idle time."
+msgstr ""
+"Ipinagpaliban ang hudyat. Iniistore ito sa isang queue at pinapalitaw lamang "
+"kapag walang ginagawa."
+
+#: editor/connections_dialog.cpp
+msgid "Oneshot"
+msgstr "Isang Beses"
+
+#: editor/connections_dialog.cpp
+msgid "Disconnects the signal after its first emission."
+msgstr "Tinatanggal ang hudyat pagkatapos ng unang pag-trigger."
+
+#: editor/connections_dialog.cpp
+msgid "Cannot connect signal"
+msgstr "Hindi maikabit ang hudyat"
+
+#: editor/connections_dialog.cpp editor/dependency_editor.cpp
+#: editor/export_template_manager.cpp editor/groups_editor.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp
+#: editor/plugins/version_control_editor_plugin.cpp editor/project_export.cpp
+#: editor/project_settings_editor.cpp editor/property_editor.cpp
+#: editor/run_settings_dialog.cpp editor/settings_config_dialog.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Close"
+msgstr "Isara"
+
+#: editor/connections_dialog.cpp
+msgid "Connect"
+msgstr "Ikabit"
+
+#: editor/connections_dialog.cpp
+msgid "Signal:"
+msgstr "Hudyat:"
+
+#: editor/connections_dialog.cpp
+msgid "Connect '%s' to '%s'"
+msgstr "Ikabit ang '%s' sa '%s'"
+
+#: editor/connections_dialog.cpp
+msgid "Disconnect '%s' from '%s'"
+msgstr "Tanggalin ang '%s' sa '%s'"
+
+#: editor/connections_dialog.cpp
+msgid "Disconnect all from signal: '%s'"
+msgstr "Tanggalin lahat sa nakakabit na hudyat: '%s'"
+
+#: editor/connections_dialog.cpp
+msgid "Connect..."
+msgstr "Ikabit..."
+
+#: editor/connections_dialog.cpp
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Disconnect"
+msgstr "Tanggalin"
+
+#: editor/connections_dialog.cpp
+msgid "Connect a Signal to a Method"
+msgstr "Ikabit Ang Hudyat sa Isang Method"
+
+#: editor/connections_dialog.cpp
+msgid "Edit Connection:"
+msgstr "Ayusin Ang Pagkakabit:"
+
+#: editor/connections_dialog.cpp
+msgid "Are you sure you want to remove all connections from the \"%s\" signal?"
+msgstr ""
+"Tiyak ka bang gusto mong alisin lahat ng mga pagkakabit mula sa hudyat \"%s"
+"\"?"
+
+#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp
+msgid "Signals"
+msgstr "Mga Hudyat"
+
+#: editor/connections_dialog.cpp
+msgid "Filter signals"
+msgstr "Salain ang mga hudyat"
+
+#: editor/connections_dialog.cpp
+msgid "Are you sure you want to remove all connections from this signal?"
+msgstr "Gusto mo bang alisin lahat ng pagkakabit sa hudyat na ito?"
+
+#: editor/connections_dialog.cpp
+msgid "Disconnect All"
+msgstr "Tanggalin Lahat"
+
+#: editor/connections_dialog.cpp
+msgid "Edit..."
+msgstr "Ayusin..."
+
+#: editor/connections_dialog.cpp
+msgid "Go to Method"
+msgstr "Pumunta sa Method"
+
+#: editor/create_dialog.cpp
+msgid "Change %s Type"
+msgstr "Ibahin Ang Uri ng %s"
+
+#: editor/create_dialog.cpp editor/project_settings_editor.cpp
+msgid "Change"
+msgstr "Baguhin"
+
+#: editor/create_dialog.cpp
+msgid "Create New %s"
+msgstr "Gumawa ng Bagong %s"
+
+#: editor/create_dialog.cpp editor/plugins/asset_library_editor_plugin.cpp
+msgid "No results for \"%s\"."
+msgstr "Walang resulta para sa \"%s\"."
+
+#: editor/create_dialog.cpp editor/property_selector.cpp
+msgid "No description available for %s."
+msgstr "Walang paglalarawan sa %s."
+
+#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
+#: editor/filesystem_dock.cpp
+msgid "Favorites:"
+msgstr "Mga Paborito:"
+
+#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
+msgid "Recent:"
+msgstr "Kamakailan:"
+
+#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/property_selector.cpp editor/quick_open.cpp editor/rename_dialog.cpp
+#: modules/visual_script/visual_script_property_selector.cpp
+msgid "Search:"
+msgstr "Maghanap:"
+
+#: editor/create_dialog.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/property_selector.cpp editor/quick_open.cpp
+#: modules/visual_script/visual_script_property_selector.cpp
+msgid "Matches:"
+msgstr "Mga Tugma:"
+
+#: editor/create_dialog.cpp editor/editor_feature_profile.cpp
+#: editor/editor_plugin_settings.cpp editor/plugin_config_dialog.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+#: editor/plugins/visual_shader_editor_plugin.cpp editor/property_selector.cpp
+#: modules/visual_script/visual_script_property_selector.cpp
+msgid "Description:"
+msgstr "Paglalarawan:"
+
+#: editor/dependency_editor.cpp
+msgid "Search Replacement For:"
+msgstr "Maghanap ng Kapalit para sa:"
+
+#: editor/dependency_editor.cpp
+msgid "Dependencies For:"
+msgstr "Mga Kaasahan Para Sa:"
+
+#: editor/dependency_editor.cpp
+msgid ""
+"Scene '%s' is currently being edited.\n"
+"Changes will only take effect when reloaded."
+msgstr ""
+"Kasalukuyang binabago ang Eksenang '%s'.\n"
+"Magpapakita lang ang mga pagbabago sa pag-reload."
+
+#: editor/dependency_editor.cpp
+msgid ""
+"Resource '%s' is in use.\n"
+"Changes will only take effect when reloaded."
+msgstr ""
+
+#: editor/dependency_editor.cpp
+#: modules/gdnative/gdnative_library_editor_plugin.cpp
+msgid "Dependencies"
+msgstr "Mga Kaasahan"
+
+#: editor/dependency_editor.cpp editor/editor_resource_picker.cpp
+msgid "Resource"
+msgstr ""
+
+#: editor/dependency_editor.cpp editor/editor_autoload_settings.cpp
+#: editor/project_manager.cpp editor/project_settings_editor.cpp
+msgid "Path"
+msgstr "Kinaroroonan"
+
+#: editor/dependency_editor.cpp
+msgid "Dependencies:"
+msgstr "Mga Kaasahan:"
+
+#: editor/dependency_editor.cpp
+msgid "Fix Broken"
+msgstr "Ayusin Ang Sira"
+
+#: editor/dependency_editor.cpp
+msgid "Dependency Editor"
+msgstr "Editor ng Kaasahan"
+
+#: editor/dependency_editor.cpp
+msgid "Search Replacement Resource:"
+msgstr "Maghanap ng Pangpalit na Resource:"
+
+#: editor/dependency_editor.cpp editor/editor_file_dialog.cpp
+#: editor/editor_help_search.cpp editor/editor_node.cpp
+#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/property_selector.cpp editor/quick_open.cpp
+#: editor/script_create_dialog.cpp
+#: modules/visual_script/visual_script_property_selector.cpp
+#: scene/gui/file_dialog.cpp
+msgid "Open"
+msgstr "Buksan"
+
+#: editor/dependency_editor.cpp
+msgid "Owners Of:"
+msgstr "Mga May-ari ng:"
+
+#: editor/dependency_editor.cpp
+msgid ""
+"Remove the selected files from the project? (Cannot be undone.)\n"
+"Depending on your filesystem configuration, the files will either be moved "
+"to the system trash or deleted permanently."
+msgstr ""
+"Alisin ang mga napiling file sa proyekto? (Bawal nang bawiin.)\n"
+"Depende sa ayos ng filesystem mo, ang mga file ay maaring malipat sa "
+"basurahan ng system o mananatili nang mawala."
+
+#: editor/dependency_editor.cpp
+msgid ""
+"The files being removed are required by other resources in order for them to "
+"work.\n"
+"Remove them anyway? (Cannot be undone.)\n"
+"Depending on your filesystem configuration, the files will either be moved "
+"to the system trash or deleted permanently."
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Cannot remove:"
+msgstr "Hindi matanggal:"
+
+#: editor/dependency_editor.cpp
+msgid "Error loading:"
+msgstr "Nabigong ikarga:"
+
+#: editor/dependency_editor.cpp
+msgid "Load failed due to missing dependencies:"
+msgstr "Nabigo ang pagkakarga dahil sa mga nawawalang kaasahan:"
+
+#: editor/dependency_editor.cpp editor/editor_node.cpp
+msgid "Open Anyway"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Which action should be taken?"
+msgstr "Aling kilos ang dapat tanggapin?"
+
+#: editor/dependency_editor.cpp
+msgid "Fix Dependencies"
+msgstr "Ayusin Ang Mga Kaasahan."
+
+#: editor/dependency_editor.cpp
+msgid "Errors loading!"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Permanently delete %d item(s)? (No undo!)"
+msgstr ""
+
+#: editor/dependency_editor.cpp
+msgid "Show Dependencies"
+msgstr "Ipakita Ang Mga Kaasahan"
+
+#: editor/dependency_editor.cpp
+msgid "Orphan Resource Explorer"
+msgstr ""
+
+#: editor/dependency_editor.cpp editor/editor_audio_buses.cpp
+#: editor/editor_file_dialog.cpp editor/editor_node.cpp
+#: editor/filesystem_dock.cpp editor/plugins/item_list_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/project_export.cpp
+#: editor/project_settings_editor.cpp editor/scene_tree_dock.cpp
+msgid "Delete"
+msgstr "Alisin"
+
+#: editor/dependency_editor.cpp
+msgid "Owns"
+msgstr "Ay Minamayari Ang"
+
+#: editor/dependency_editor.cpp
+msgid "Resources Without Explicit Ownership:"
+msgstr "Mga Resources na Walang Tiyak na Pagmamayari:"
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Key"
+msgstr ""
+
+#: editor/dictionary_property_edit.cpp
+msgid "Change Dictionary Value"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Thanks from the Godot community!"
+msgstr "Salamat mula sa komunidad ng Godot!"
+
+#: editor/editor_about.cpp editor/editor_node.cpp editor/project_manager.cpp
+msgid "Click to copy."
+msgstr "Pindutin para kopyahin."
+
+#: editor/editor_about.cpp
+msgid "Godot Engine contributors"
+msgstr "Mga Tagapagambag ng Godot Engine"
+
+#: editor/editor_about.cpp
+msgid "Project Founders"
+msgstr "Mga Tagapagtatag ng Proyekto"
+
+#: editor/editor_about.cpp
+msgid "Lead Developer"
+msgstr "Pangunahing Developer"
+
+#. TRANSLATORS: This refers to a job title.
+#. The trailing space is used to distinguish with the project list application,
+#. you do not have to keep it in your translation.
+#: editor/editor_about.cpp
+msgid "Project Manager "
+msgstr "Tagapangasiwa ng Proyekto "
+
+#: editor/editor_about.cpp
+msgid "Developers"
+msgstr "Mga Developers"
+
+#: editor/editor_about.cpp
+msgid "Authors"
+msgstr "Mga May-akda"
+
+#: editor/editor_about.cpp
+msgid "Platinum Sponsors"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Gold Sponsors"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Silver Sponsors"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Bronze Sponsors"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Mini Sponsors"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Gold Donors"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Silver Donors"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Bronze Donors"
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "Donors"
+msgstr "Mga Nagabuloy"
+
+#: editor/editor_about.cpp
+msgid "License"
+msgstr "Lisensya"
+
+#: editor/editor_about.cpp
+msgid "Third-party Licenses"
+msgstr "Mga Lisensyang Third-party"
+
+#: editor/editor_about.cpp
+msgid ""
+"Godot Engine relies on a number of third-party free and open source "
+"libraries, all compatible with the terms of its MIT license. The following "
+"is an exhaustive list of all such third-party components with their "
+"respective copyright statements and license terms."
+msgstr ""
+
+#: editor/editor_about.cpp
+msgid "All Components"
+msgstr "Lahat ng Mga Bahagi"
+
+#: editor/editor_about.cpp
+msgid "Components"
+msgstr "Mga Bahagi"
+
+#: editor/editor_about.cpp
+msgid "Licenses"
+msgstr "Mga Lisensya"
+
+#: editor/editor_asset_installer.cpp
+msgid "Error opening asset file for \"%s\" (not in ZIP format)."
+msgstr ""
+
+#: editor/editor_asset_installer.cpp
+msgid "%s (already exists)"
+msgstr "%s (mayroon na)"
+
+#: editor/editor_asset_installer.cpp
+msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:"
+msgstr ""
+
+#: editor/editor_asset_installer.cpp
+msgid "Contents of asset \"%s\" - No files conflict with your project:"
+msgstr ""
+
+#: editor/editor_asset_installer.cpp
+msgid "Uncompressing Assets"
+msgstr ""
+
+#: editor/editor_asset_installer.cpp
+msgid "The following files failed extraction from asset \"%s\":"
+msgstr ""
+
+#: editor/editor_asset_installer.cpp
+msgid "(and %s more files)"
+msgstr "(at %s pang mga file)"
+
+#: editor/editor_asset_installer.cpp
+msgid "Asset \"%s\" installed successfully!"
+msgstr ""
+
+#: editor/editor_asset_installer.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Success!"
+msgstr "Tagumpay!"
+
+#: editor/editor_asset_installer.cpp editor/editor_node.cpp
+msgid "Install"
+msgstr "I-install"
+
+#: editor/editor_asset_installer.cpp
+msgid "Asset Installer"
+msgstr "Taga-install ng mga Asset"
+
+#: editor/editor_audio_buses.cpp
+msgid "Speakers"
+msgstr "Mga Speaker"
+
+#: editor/editor_audio_buses.cpp
+msgid "Add Effect"
+msgstr "Magdagdag ng Effect"
+
+#: editor/editor_audio_buses.cpp
+msgid "Rename Audio Bus"
+msgstr "Palitan ang pangalan ng Audio Bus"
+
+#: editor/editor_audio_buses.cpp
+msgid "Change Audio Bus Volume"
+msgstr "Ibahin ang Kaingayan ng Audio Bus"
+
+#: editor/editor_audio_buses.cpp
+msgid "Toggle Audio Bus Solo"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Toggle Audio Bus Mute"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Toggle Audio Bus Bypass Effects"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Select Audio Bus Send"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Add Audio Bus Effect"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Move Bus Effect"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Delete Bus Effect"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Drag & drop to rearrange."
+msgstr "I-drag & i-hulog para ayusin."
+
+#: editor/editor_audio_buses.cpp
+msgid "Solo"
+msgstr "Naka-solo"
+
+#: editor/editor_audio_buses.cpp
+msgid "Mute"
+msgstr "Nakatahimik"
+
+#: editor/editor_audio_buses.cpp
+msgid "Bypass"
+msgstr "Pasikot-sikot"
+
+#: editor/editor_audio_buses.cpp
+msgid "Bus Options"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp editor/filesystem_dock.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "Duplicate"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Reset Volume"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Delete Effect"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Audio"
+msgstr "Tunog (Audio)"
+
+#: editor/editor_audio_buses.cpp
+msgid "Add Audio Bus"
+msgstr "Magdagdag ng Audio Bus"
+
+#: editor/editor_audio_buses.cpp
+msgid "Master bus can't be deleted!"
+msgstr "Hindi maaring alisin ang master bus!"
+
+#: editor/editor_audio_buses.cpp
+msgid "Delete Audio Bus"
+msgstr "Alisin ang Audio Bus"
+
+#: editor/editor_audio_buses.cpp
+msgid "Duplicate Audio Bus"
+msgstr "Doblehin ang Audio Bus"
+
+#: editor/editor_audio_buses.cpp
+msgid "Reset Bus Volume"
+msgstr "Ibalik sa Dati Ang Kaingayan ng Bus"
+
+#: editor/editor_audio_buses.cpp
+msgid "Move Audio Bus"
+msgstr "Ilipat ang Audio Bus"
+
+#: editor/editor_audio_buses.cpp
+msgid "Save Audio Bus Layout As..."
+msgstr "I-save Ang Ayos ng Audio Bus Bilang..."
+
+#: editor/editor_audio_buses.cpp
+msgid "Location for New Layout..."
+msgstr "Lokasyon para sa Bagong Layout..."
+
+#: editor/editor_audio_buses.cpp
+msgid "Open Audio Bus Layout"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "There is no '%s' file."
+msgstr "Walang file na '%s'."
+
+#: editor/editor_audio_buses.cpp editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Layout"
+msgstr "Kaayusan"
+
+#: editor/editor_audio_buses.cpp
+msgid "Invalid file, not an audio bus layout."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Error saving file: %s"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Add Bus"
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Add a new Audio Bus to this layout."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp editor/editor_resource_picker.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp editor/property_editor.cpp
+#: editor/script_create_dialog.cpp
+msgid "Load"
+msgstr "Kumarga"
+
+#: editor/editor_audio_buses.cpp
+msgid "Load an existing Bus Layout."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Save As"
+msgstr "I-save Bilang"
+
+#: editor/editor_audio_buses.cpp
+msgid "Save this Bus Layout to a file."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp editor/import_dock.cpp
+msgid "Load Default"
+msgstr "I-load ang Karaniwan"
+
+#: editor/editor_audio_buses.cpp
+msgid "Load the default Bus Layout."
+msgstr ""
+
+#: editor/editor_audio_buses.cpp
+msgid "Create a new Bus Layout."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Invalid name."
+msgstr "Di-wastong pangalan."
+
+#: editor/editor_autoload_settings.cpp
+msgid "Valid characters:"
+msgstr "Mga Pinapayagang Karakter:"
+
+#: editor/editor_autoload_settings.cpp
+msgid "Must not collide with an existing engine class name."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Must not collide with an existing built-in type name."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Must not collide with an existing global constant name."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Keyword cannot be used as an autoload name."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Autoload '%s' already exists!"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Rename Autoload"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Toggle AutoLoad Globals"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Move Autoload"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Remove Autoload"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp editor/editor_plugin_settings.cpp
+msgid "Enable"
+msgstr "Paganahin"
+
+#: editor/editor_autoload_settings.cpp
+msgid "Rearrange Autoloads"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Can't add autoload:"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "%s is an invalid path. File does not exist."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "%s is an invalid path. Not in resource path (res://)."
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp
+msgid "Add AutoLoad"
+msgstr ""
+
+#: editor/editor_autoload_settings.cpp editor/editor_file_dialog.cpp
+#: editor/editor_plugin_settings.cpp
+#: editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/script_create_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Path:"
+msgstr "Kinaroroonan:"
+
+#: editor/editor_autoload_settings.cpp
+msgid "Node Name:"
+msgstr "Pangalan ng Node:"
+
+#: editor/editor_autoload_settings.cpp editor/editor_help_search.cpp
+#: editor/editor_plugin_settings.cpp editor/editor_profiler.cpp
+#: editor/project_manager.cpp editor/settings_config_dialog.cpp
+msgid "Name"
+msgstr "Pangalan"
+
+#: editor/editor_autoload_settings.cpp
+msgid "Global Variable"
+msgstr "Pangkalahatang (Global) Variable"
+
+#: editor/editor_data.cpp
+msgid "Paste Params"
+msgstr ""
+
+#: editor/editor_data.cpp
+msgid "Updating Scene"
+msgstr ""
+
+#: editor/editor_data.cpp
+msgid "Storing local changes..."
+msgstr ""
+
+#: editor/editor_data.cpp
+msgid "Updating scene..."
+msgstr ""
+
+#: editor/editor_data.cpp editor/editor_resource_picker.cpp
+msgid "[empty]"
+msgstr "[wala]"
+
+#: editor/editor_data.cpp
+msgid "[unsaved]"
+msgstr "[di-nakasave]"
+
+#: editor/editor_dir_dialog.cpp
+msgid "Please select a base directory first."
+msgstr ""
+
+#: editor/editor_dir_dialog.cpp
+msgid "Choose a Directory"
+msgstr ""
+
+#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
+#: editor/filesystem_dock.cpp editor/project_manager.cpp
+#: scene/gui/file_dialog.cpp
+msgid "Create Folder"
+msgstr ""
+
+#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
+#: editor/editor_plugin_settings.cpp editor/filesystem_dock.cpp
+#: editor/plugins/theme_editor_plugin.cpp editor/project_export.cpp
+#: modules/visual_script/visual_script_editor.cpp scene/gui/file_dialog.cpp
+msgid "Name:"
+msgstr ""
+
+#: editor/editor_dir_dialog.cpp editor/editor_file_dialog.cpp
+#: editor/filesystem_dock.cpp scene/gui/file_dialog.cpp
+msgid "Could not create folder."
+msgstr ""
+
+#: editor/editor_dir_dialog.cpp
+msgid "Choose"
+msgstr "Pumili"
+
+#: editor/editor_export.cpp
+msgid "Storing File:"
+msgstr "Inimpok ang File:"
+
+#: editor/editor_export.cpp
+msgid "No export template found at the expected path:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "Packing"
+msgstr "Iniimpake"
+
+#: editor/editor_export.cpp
+msgid ""
+"Target platform requires 'ETC' texture compression for GLES2. Enable 'Import "
+"Etc' in Project Settings."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid ""
+"Target platform requires 'ETC2' texture compression for GLES3. Enable "
+"'Import Etc 2' in Project Settings."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid ""
+"Target platform requires 'ETC' texture compression for the driver fallback "
+"to GLES2.\n"
+"Enable 'Import Etc' in Project Settings, or disable 'Driver Fallback "
+"Enabled'."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid ""
+"Target platform requires 'PVRTC' texture compression for GLES2. Enable "
+"'Import Pvrtc' in Project Settings."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid ""
+"Target platform requires 'ETC2' or 'PVRTC' texture compression for GLES3. "
+"Enable 'Import Etc 2' or 'Import Pvrtc' in Project Settings."
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid ""
+"Target platform requires 'PVRTC' texture compression for the driver fallback "
+"to GLES2.\n"
+"Enable 'Import Pvrtc' in Project Settings, or disable 'Driver Fallback "
+"Enabled'."
+msgstr ""
+
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
+msgid "Custom debug template not found."
+msgstr ""
+
+#: editor/editor_export.cpp platform/android/export/export_plugin.cpp
+#: platform/iphone/export/export.cpp platform/javascript/export/export.cpp
+#: platform/osx/export/export.cpp platform/uwp/export/export.cpp
+msgid "Custom release template not found."
+msgstr ""
+
+#: editor/editor_export.cpp platform/javascript/export/export.cpp
+msgid "Template file not found:"
+msgstr ""
+
+#: editor/editor_export.cpp
+msgid "On 32-bit exports the embedded PCK cannot be bigger than 4 GiB."
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "3D Editor"
+msgstr "3D Editor"
+
+#: editor/editor_feature_profile.cpp
+msgid "Script Editor"
+msgstr "Editor ng Script"
+
+#: editor/editor_feature_profile.cpp
+msgid "Asset Library"
+msgstr "Silid-Assetan"
+
+#: editor/editor_feature_profile.cpp
+msgid "Scene Tree Editing"
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "Node Dock"
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "FileSystem Dock"
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "Import Dock"
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "Allows to view and edit 3D scenes."
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "Allows to edit scripts using the integrated script editor."
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "Provides built-in access to the Asset Library."
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "Allows editing the node hierarchy in the Scene dock."
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid ""
+"Allows to work with signals and groups of the node selected in the Scene "
+"dock."
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "Allows to browse the local file system via a dedicated dock."
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid ""
+"Allows to configure import settings for individual assets. Requires the "
+"FileSystem dock to function."
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "(current)"
+msgstr "(nakatutok)"
+
+#: editor/editor_feature_profile.cpp
+msgid "(none)"
+msgstr "(wala)"
+
+#: editor/editor_feature_profile.cpp
+msgid "Remove currently selected profile, '%s'? Cannot be undone."
+msgstr "Alisin ang napiling profile na '%s'? Hindi na mababawi."
+
+#: editor/editor_feature_profile.cpp
+msgid "Profile must be a valid filename and must not contain '.'"
+msgstr "Ang profile ay dapat may wastong pangalan at walang '.'"
+
+#: editor/editor_feature_profile.cpp
+msgid "Profile with this name already exists."
+msgstr "Mayroon nang profile na may ganitong pangalan."
+
+#: editor/editor_feature_profile.cpp
+msgid "(Editor Disabled, Properties Disabled)"
+msgstr ""
+"(Hindi pinapagana ang Editor, Ang Tala ng Katangian Ay Hindi Rin Pinapagana)"
+
+#: editor/editor_feature_profile.cpp
+msgid "(Properties Disabled)"
+msgstr "(Hindi Pinapagana Ang Tala ng Mga Katangian)"
+
+#: editor/editor_feature_profile.cpp
+msgid "(Editor Disabled)"
+msgstr "(Hindi Pinapagana Ang Editor)"
+
+#: editor/editor_feature_profile.cpp
+msgid "Class Options:"
+msgstr "Mga Kaayusan ng Class:"
+
+#: editor/editor_feature_profile.cpp
+msgid "Enable Contextual Editor"
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "Class Properties:"
+msgstr "Katangian ng Class:"
+
+#: editor/editor_feature_profile.cpp
+msgid "Main Features:"
+msgstr "Pangunahing Mga Tampok:"
+
+#: editor/editor_feature_profile.cpp
+msgid "Nodes and Classes:"
+msgstr "Mga Node at Class:"
+
+#: editor/editor_feature_profile.cpp
+msgid "File '%s' format is invalid, import aborted."
+msgstr "Hindi wasto ang format ng '%s', Ipinagpaliban ang pag-aangkat."
+
+#: editor/editor_feature_profile.cpp
+msgid ""
+"Profile '%s' already exists. Remove it first before importing, import "
+"aborted."
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "Error saving profile to path: '%s'."
+msgstr "Hindi maisalba ang profile sa kinaroroonang: '%s'."
+
+#: editor/editor_feature_profile.cpp
+msgid "Reset to Default"
+msgstr "Ibalik sa Dati"
+
+#: editor/editor_feature_profile.cpp
+msgid "Current Profile:"
+msgstr "Nakatutok na Profile:"
+
+#: editor/editor_feature_profile.cpp
+msgid "Create Profile"
+msgstr "Gumawa ng Profile"
+
+#: editor/editor_feature_profile.cpp
+msgid "Remove Profile"
+msgstr "Alisin ang Profile"
+
+#: editor/editor_feature_profile.cpp
+msgid "Available Profiles:"
+msgstr "Magagamit na mga Profile:"
+
+#: editor/editor_feature_profile.cpp
+msgid "Make Current"
+msgstr ""
+
+#: editor/editor_feature_profile.cpp editor/editor_node.cpp
+#: editor/plugins/theme_editor_plugin.cpp editor/project_manager.cpp
+msgid "Import"
+msgstr "Magangkat"
+
+#: editor/editor_feature_profile.cpp editor/project_export.cpp
+msgid "Export"
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "Configure Selected Profile:"
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "Extra Options:"
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "Create or import a profile to edit available classes and properties."
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "New profile name:"
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "Godot Feature Profile"
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "Import Profile(s)"
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "Export Profile"
+msgstr ""
+
+#: editor/editor_feature_profile.cpp
+msgid "Manage Editor Feature Profiles"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Select Current Folder"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "File exists, overwrite?"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Select This Folder"
+msgstr "Piliin ang Folder na Ito"
+
+#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp
+msgid "Copy Path"
+msgstr "Kopyahin ang Kinaroroonan"
+
+#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp
+msgid "Open in File Manager"
+msgstr "Buksan sa File Manager"
+
+#: editor/editor_file_dialog.cpp editor/editor_node.cpp
+#: editor/filesystem_dock.cpp editor/project_manager.cpp
+msgid "Show in File Manager"
+msgstr "Ipakita sa File Manager"
+
+#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp
+msgid "New Folder..."
+msgstr "Bagong Folder..."
+
+#: editor/editor_file_dialog.cpp editor/find_in_files.cpp
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "Refresh"
+msgstr "I-refresh"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "All Recognized"
+msgstr "Nakilala Lahat"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "All Files (*)"
+msgstr "Lahat ng Files (*)"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Open a File"
+msgstr "Buksan ang File"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Open File(s)"
+msgstr "Buksan Ang (Mga) File"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Open a Directory"
+msgstr "Bumukas ng Directory"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Open a File or Directory"
+msgstr "Bumukas ng File o Directory"
+
+#: editor/editor_file_dialog.cpp editor/editor_node.cpp
+#: editor/editor_resource_picker.cpp editor/import_defaults_editor.cpp
+#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp scene/gui/file_dialog.cpp
+msgid "Save"
+msgstr "I-save"
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Save a File"
+msgstr "Magsave ng File"
+
+#: editor/editor_file_dialog.cpp
+msgid "Go Back"
+msgstr "Bumalik"
+
+#: editor/editor_file_dialog.cpp
+msgid "Go Forward"
+msgstr "Umusad"
+
+#: editor/editor_file_dialog.cpp
+msgid "Go Up"
+msgstr "Tumaas"
+
+#: editor/editor_file_dialog.cpp
+msgid "Toggle Hidden Files"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Toggle Favorite"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Toggle Mode"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Focus Path"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp
+msgid "Move Favorite Up"
+msgstr "Ilipat Pataas Ang Paborito"
+
+#: editor/editor_file_dialog.cpp
+msgid "Move Favorite Down"
+msgstr "Ilipat Pababa ang Paborito"
+
+#: editor/editor_file_dialog.cpp
+msgid "Go to previous folder."
+msgstr "Pumunta sa Nakaraang Folder."
+
+#: editor/editor_file_dialog.cpp
+msgid "Go to next folder."
+msgstr "Pumunta sa susunod na folder."
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Go to parent folder."
+msgstr "Pumunta sa ugat na folder."
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Refresh files."
+msgstr "I-refresh ang mga file."
+
+#: editor/editor_file_dialog.cpp
+msgid "(Un)favorite current folder."
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Toggle the visibility of hidden files."
+msgstr "I-toggle ang pagkakakita ng mga nakatagong file."
+
+#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp
+msgid "View items as a grid of thumbnails."
+msgstr "Tingnan ang mga items na nakabalaylay ang mga thumbnail."
+
+#: editor/editor_file_dialog.cpp editor/filesystem_dock.cpp
+msgid "View items as a list."
+msgstr "Tingnan ang mga item bilang talaan."
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "Directories & Files:"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp editor/plugins/sprite_editor_plugin.cpp
+#: editor/plugins/style_box_editor_plugin.cpp editor/rename_dialog.cpp
+msgid "Preview:"
+msgstr ""
+
+#: editor/editor_file_dialog.cpp scene/gui/file_dialog.cpp
+msgid "File:"
+msgstr "File:"
+
+#: editor/editor_file_system.cpp
+msgid "ScanSources"
+msgstr ""
+
+#: editor/editor_file_system.cpp
+msgid ""
+"There are multiple importers for different types pointing to file %s, import "
+"aborted"
+msgstr ""
+
+#: editor/editor_file_system.cpp
+msgid "(Re)Importing Assets"
+msgstr "Inaangkat muli ang mga Asset"
+
+#: editor/editor_help.cpp
+msgid "Top"
+msgstr "Nasaitaas"
+
+#: editor/editor_help.cpp
+msgid "Class:"
+msgstr "Class:"
+
+#: editor/editor_help.cpp editor/scene_tree_editor.cpp
+#: editor/script_create_dialog.cpp
+msgid "Inherits:"
+msgstr ""
+
+#: editor/editor_help.cpp
+msgid "Inherited by:"
+msgstr "Pinagmana ng:"
+
+#: editor/editor_help.cpp
+msgid "Description"
+msgstr "Paglalarawan"
+
+#: editor/editor_help.cpp
+msgid "Online Tutorials"
+msgstr "Mga Tutorial sa Online"
+
+#: editor/editor_help.cpp
+msgid "Properties"
+msgstr "Mga Katangian"
+
+#: editor/editor_help.cpp
+msgid "override:"
+msgstr "ipagpalit:"
+
+#: editor/editor_help.cpp
+msgid "default:"
+msgstr "karaniwan:"
+
+#: editor/editor_help.cpp
+msgid "Methods"
+msgstr "Mga Method"
+
+#: editor/editor_help.cpp
+msgid "Theme Properties"
+msgstr "Mga Katangian ng Theme"
+
+#: editor/editor_help.cpp
+msgid "Enumerations"
+msgstr "Mga Enumerasyon"
+
+#: editor/editor_help.cpp editor/plugins/theme_editor_plugin.cpp
+msgid "Constants"
+msgstr "Mga Konstant"
+
+#: editor/editor_help.cpp
+msgid "Property Descriptions"
+msgstr "Mga Paglalarawan ng Katangian"
+
+#: editor/editor_help.cpp
+msgid "(value)"
+msgstr "(halaga)"
+
+#: editor/editor_help.cpp
+msgid ""
+"There is currently no description for this property. Please help us by "
+"[color=$color][url=$url]contributing one[/url][/color]!"
+msgstr ""
+"Kasalukuyang walang panglalarawan sa katangiang ito. Maaring tulungan kami "
+"sa pamamagitan ng [color=$color][url=$url]pag-kokontribyut[/url][/color]!"
+
+#: editor/editor_help.cpp
+msgid "Method Descriptions"
+msgstr "Panglalarawan ng mga Method"
+
+#: editor/editor_help.cpp
+msgid ""
+"There is currently no description for this method. Please help us by [color="
+"$color][url=$url]contributing one[/url][/color]!"
+msgstr ""
+"Kasalukuyang walang paglalarawan sa method na ito. Maaring tulungan kami sa "
+"pamamagitan ng [color=$color][url=$url]pag-kontribyut[/url][/color]!"
+
+#: editor/editor_help_search.cpp editor/editor_node.cpp
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Search Help"
+msgstr "Maghanap sa Sanggunian"
+
+#: editor/editor_help_search.cpp
+msgid "Case Sensitive"
+msgstr ""
+
+#: editor/editor_help_search.cpp
+msgid "Show Hierarchy"
+msgstr "Ipakita ang Halpunuan"
+
+#: editor/editor_help_search.cpp
+msgid "Display All"
+msgstr "Ipakita Lahat"
+
+#: editor/editor_help_search.cpp
+msgid "Classes Only"
+msgstr "Mga Class Lang"
+
+#: editor/editor_help_search.cpp
+msgid "Methods Only"
+msgstr "Mga Method Lang"
+
+#: editor/editor_help_search.cpp
+msgid "Signals Only"
+msgstr "Mga Hudyat Lang"
+
+#: editor/editor_help_search.cpp
+msgid "Constants Only"
+msgstr "Mga Konstant Lang"
+
+#: editor/editor_help_search.cpp
+msgid "Properties Only"
+msgstr "Mga Katangian Lang"
+
+#: editor/editor_help_search.cpp
+msgid "Theme Properties Only"
+msgstr ""
+
+#: editor/editor_help_search.cpp
+msgid "Member Type"
+msgstr "Uri ng Kasapi"
+
+#: editor/editor_help_search.cpp
+msgid "Class"
+msgstr "Class"
+
+#: editor/editor_help_search.cpp
+msgid "Method"
+msgstr "Method"
+
+#: editor/editor_help_search.cpp editor/plugins/script_text_editor.cpp
+msgid "Signal"
+msgstr "Hudyat"
+
+#: editor/editor_help_search.cpp
+msgid "Constant"
+msgstr "Constant"
+
+#: editor/editor_help_search.cpp
+msgid "Property"
+msgstr "Katangian"
+
+#: editor/editor_help_search.cpp
+msgid "Theme Property"
+msgstr ""
+
+#: editor/editor_inspector.cpp editor/project_settings_editor.cpp
+msgid "Property:"
+msgstr ""
+
+#: editor/editor_inspector.cpp editor/scene_tree_dock.cpp
+#: modules/visual_script/visual_script_property_selector.cpp
+msgid "Set %s"
+msgstr "Itakda ang %s"
+
+#: editor/editor_inspector.cpp
+msgid "Set Multiple:"
+msgstr ""
+
+#: editor/editor_log.cpp
+msgid "Output:"
+msgstr "Kalabasan:"
+
+#: editor/editor_log.cpp editor/plugins/tile_map_editor_plugin.cpp
+msgid "Copy Selection"
+msgstr "Kopyahin Ang Pinagpipilian"
+
+#: editor/editor_log.cpp editor/editor_network_profiler.cpp
+#: editor/editor_profiler.cpp editor/editor_resource_picker.cpp
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+#: editor/property_editor.cpp editor/scene_tree_dock.cpp
+#: editor/script_editor_debugger.cpp
+#: modules/gdnative/gdnative_library_editor_plugin.cpp scene/gui/line_edit.cpp
+#: scene/gui/text_edit.cpp
+msgid "Clear"
+msgstr "Linisin"
+
+#: editor/editor_log.cpp
+msgid "Clear Output"
+msgstr "Linisin ang Kalabasan"
+
+#: editor/editor_network_profiler.cpp editor/editor_node.cpp
+#: editor/editor_profiler.cpp
+msgid "Stop"
+msgstr "Huminto"
+
+#: editor/editor_network_profiler.cpp editor/editor_profiler.cpp
+#: editor/plugins/animation_state_machine_editor.cpp editor/rename_dialog.cpp
+msgid "Start"
+msgstr "Magsimula"
+
+#: editor/editor_network_profiler.cpp
+msgid "%s/s"
+msgstr ""
+
+#: editor/editor_network_profiler.cpp
+msgid "Down"
+msgstr "Baba"
+
+#: editor/editor_network_profiler.cpp
+msgid "Up"
+msgstr "Taas"
+
+#: editor/editor_network_profiler.cpp editor/editor_node.cpp
+msgid "Node"
+msgstr "Node"
+
+#: editor/editor_network_profiler.cpp
+msgid "Incoming RPC"
+msgstr "Padating na RPC"
+
+#: editor/editor_network_profiler.cpp
+msgid "Incoming RSET"
+msgstr "Padating na RSET"
+
+#: editor/editor_network_profiler.cpp
+msgid "Outgoing RPC"
+msgstr "Paluwas na RPC"
+
+#: editor/editor_network_profiler.cpp
+msgid "Outgoing RSET"
+msgstr "Paluwas na RSET"
+
+#: editor/editor_node.cpp editor/project_manager.cpp
+msgid "New Window"
+msgstr "Bagong Tabing"
+
+#: editor/editor_node.cpp
+msgid ""
+"Spins when the editor window redraws.\n"
+"Update Continuously is enabled, which can increase power usage. Click to "
+"disable it."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Spins when the editor window redraws."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Imported resources can't be saved."
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp
+#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp scene/gui/dialogs.cpp
+msgid "OK"
+msgstr "OK"
+
+#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
+msgid "Error saving resource!"
+msgstr "Hindi ma-save ang resource!"
+
+#: editor/editor_node.cpp
+msgid ""
+"This resource can't be saved because it does not belong to the edited scene. "
+"Make it unique first."
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save Resource As..."
+msgstr "I-save ang Resource Bilang..."
+
+#: editor/editor_node.cpp
+msgid "Can't open file for writing:"
+msgstr "Hindi mabuksan ang file para sa pagsusulat:"
+
+#: editor/editor_node.cpp
+msgid "Requested file format unknown:"
+msgstr "Hindi ma-tiyak ang porma ng file na hinihiling:"
+
+#: editor/editor_node.cpp
+msgid "Error while saving."
+msgstr "Nabigo habang nagsesave."
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Can't open '%s'. The file could have been moved or deleted."
+msgstr "Hindi mabuksan ang '%s'. Maaring nalipat o nabura ang file."
+
+#: editor/editor_node.cpp
+msgid "Error while parsing '%s'."
+msgstr "Nabigo habang sinisiyasat ang '%s'."
+
+#: editor/editor_node.cpp
+msgid "Unexpected end of file '%s'."
+msgstr "Hindi inaasahang hulihan ng file na '%s'."
+
+#: editor/editor_node.cpp
+msgid "Missing '%s' or its dependencies."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Error while loading '%s'."
+msgstr "Nabigo habang kinakarga ang '%s'."
+
+#: editor/editor_node.cpp
+msgid "Saving Scene"
+msgstr "Sinasalba ang Eksena"
+
+#: editor/editor_node.cpp
+msgid "Analyzing"
+msgstr "Sinusuri"
+
+#: editor/editor_node.cpp
+msgid "Creating Thumbnail"
+msgstr "Ginagawa ang Thumbnail"
+
+#: editor/editor_node.cpp
+msgid "This operation can't be done without a tree root."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This scene can't be saved because there is a cyclic instancing inclusion.\n"
+"Please resolve it and then attempt to save again."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Couldn't save scene. Likely dependencies (instances or inheritance) couldn't "
+"be satisfied."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Could not save one or more scenes!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save All Scenes"
+msgstr ""
+
+#: editor/editor_node.cpp editor/scene_tree_dock.cpp
+msgid "Can't overwrite scene that is still open!"
+msgstr "Hindi ma-overwrite ang mga bukas pa ring eksena!"
+
+#: editor/editor_node.cpp
+msgid "Can't load MeshLibrary for merging!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Error saving MeshLibrary!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't load TileSet for merging!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Error saving TileSet!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"An error occurred while trying to save the editor layout.\n"
+"Make sure the editor's user data path is writable."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Default editor layout overridden.\n"
+"To restore the Default layout to its base settings, use the Delete Layout "
+"option and delete the Default layout."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Layout name not found!"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Restored the Default layout to its base settings."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This resource belongs to a scene that was imported, so it's not editable.\n"
+"Please read the documentation relevant to importing scenes to better "
+"understand this workflow."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This resource belongs to a scene that was instanced or inherited.\n"
+"Changes to it won't be kept when saving the current scene."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This resource was imported, so it's not editable. Change its settings in the "
+"import panel and then re-import."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This scene was imported, so changes to it won't be kept.\n"
+"Instancing it or inheriting will allow making changes to it.\n"
+"Please read the documentation relevant to importing scenes to better "
+"understand this workflow."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This is a remote object, so changes to it won't be kept.\n"
+"Please read the documentation relevant to debugging to better understand "
+"this workflow."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "There is no defined scene to run."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save scene before running..."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Could not start subprocess!"
+msgstr ""
+
+#: editor/editor_node.cpp editor/filesystem_dock.cpp
+msgid "Open Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Base Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Quick Open..."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Quick Open Scene..."
+msgstr "Mabilisang Magbukas ng Eksena..."
+
+#: editor/editor_node.cpp
+msgid "Quick Open Script..."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save & Close"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save changes to '%s' before closing?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "%s no longer exists! Please specify a new save location."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"The current scene has no root node, but %d modified external resource(s) "
+"were saved anyway."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"A root node is required to save the scene. You can add a root node using the "
+"Scene tree dock."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save Scene As..."
+msgstr ""
+
+#: editor/editor_node.cpp modules/gltf/editor_scene_exporter_gltf_plugin.cpp
+msgid "This operation can't be done without a scene."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Export Mesh Library"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "This operation can't be done without a root node."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Export Tile Set"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "This operation can't be done without a selected node."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Current scene not saved. Open anyway?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't undo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to undo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Undo: %s"
+msgstr "Ibalik: %s"
+
+#: editor/editor_node.cpp
+msgid "Can't redo while mouse buttons are pressed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Nothing to redo."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Redo: %s"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Can't reload a scene that was never saved."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Reload Saved Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"The current scene has unsaved changes.\n"
+"Reload the saved scene anyway? This action cannot be undone."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Quick Run Scene..."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Quit"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Yes"
+msgstr "Oo"
+
+#: editor/editor_node.cpp
+msgid "Exit the editor?"
+msgstr "Umalis sa editor?"
+
+#: editor/editor_node.cpp
+msgid "Open Project Manager?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save & Quit"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save changes to the following scene(s) before quitting?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save changes to the following scene(s) before opening Project Manager?"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This option is deprecated. Situations where refresh must be forced are now "
+"considered a bug. Please report."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Pick a Main Scene"
+msgstr "Pumili ng Pangunahing Eksena"
+
+#: editor/editor_node.cpp
+msgid "Close Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Reopen Closed Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Unable to enable addon plugin at: '%s' parsing of config failed."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Unable to find script field for addon plugin at: '%s'."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Unable to load addon script from path: '%s'."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Unable to load addon script from path: '%s'. This might be due to a code "
+"error in that script.\n"
+"Disabling the addon at '%s' to prevent further errors."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Unable to load addon script from path: '%s' Base type is not EditorPlugin."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Unable to load addon script from path: '%s' Script is not in tool mode."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Scene '%s' was automatically imported, so it can't be modified.\n"
+"To make changes to it, a new inherited scene can be created."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Error loading scene, it must be inside the project path. Use 'Import' to "
+"open the scene, then save it inside the project path."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Scene '%s' has broken dependencies:"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Clear Recent Scenes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"No main scene has ever been defined, select one?\n"
+"You can change it later in \"Project Settings\" under the 'application' "
+"category."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Selected scene '%s' does not exist, select a valid one?\n"
+"You can change it later in \"Project Settings\" under the 'application' "
+"category."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"Selected scene '%s' is not a scene file, select a valid one?\n"
+"You can change it later in \"Project Settings\" under the 'application' "
+"category."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save Layout"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Delete Layout"
+msgstr "Alisin Ang Pagkaayos"
+
+#: editor/editor_node.cpp editor/import_dock.cpp
+#: editor/script_create_dialog.cpp
+msgid "Default"
+msgstr "Karaniwan"
+
+#: editor/editor_node.cpp editor/editor_resource_picker.cpp
+#: editor/plugins/script_editor_plugin.cpp editor/property_editor.cpp
+msgid "Show in FileSystem"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play This Scene"
+msgstr "Ipalabas Ang Eksenang Ito"
+
+#: editor/editor_node.cpp
+msgid "Close Tab"
+msgstr "Isara ang Tab"
+
+#: editor/editor_node.cpp
+msgid "Undo Close Tab"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Close Other Tabs"
+msgstr "Isara Ang Ibang Mga Tab"
+
+#: editor/editor_node.cpp
+msgid "Close Tabs to the Right"
+msgstr "Isara Ang Mga Tab Sa Kanan"
+
+#: editor/editor_node.cpp
+msgid "Close All Tabs"
+msgstr "Isara Lahat ng Tabs"
+
+#: editor/editor_node.cpp
+msgid "Switch Scene Tab"
+msgstr "Palitan Ang Tab ng Eksena"
+
+#: editor/editor_node.cpp
+msgid "%d more files or folders"
+msgstr "%d pang mga file o mga folder"
+
+#: editor/editor_node.cpp
+msgid "%d more folders"
+msgstr "%d pang mga folder"
+
+#: editor/editor_node.cpp
+msgid "%d more files"
+msgstr "%d mga file"
+
+#: editor/editor_node.cpp
+msgid "Dock Position"
+msgstr "Idaong Ang Posisyon"
+
+#: editor/editor_node.cpp
+msgid "Distraction Free Mode"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Toggle distraction-free mode."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Add a new scene."
+msgstr "Magdagdag ng panibagong eksena."
+
+#: editor/editor_node.cpp
+msgid "Scene"
+msgstr "Eksena"
+
+#: editor/editor_node.cpp
+msgid "Go to previously opened scene."
+msgstr "Bumalik sa dating binuksang eksena."
+
+#: editor/editor_node.cpp
+msgid "Copy Text"
+msgstr "Kopyahin Ang Nakasulat"
+
+#: editor/editor_node.cpp
+msgid "Next tab"
+msgstr "Susunod na tab"
+
+#: editor/editor_node.cpp
+msgid "Previous tab"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Filter Files..."
+msgstr "Magsala ng mga File..."
+
+#: editor/editor_node.cpp
+msgid "Operations with scene files."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "New Scene"
+msgstr "Panibagong Eksena"
+
+#: editor/editor_node.cpp
+msgid "New Inherited Scene..."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Scene..."
+msgstr "Magbukas ng Eksena..."
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Open Recent"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Save Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Convert To..."
+msgstr "Palitan Sa..."
+
+#: editor/editor_node.cpp
+msgid "MeshLibrary..."
+msgstr "MeshLibrary..."
+
+#: editor/editor_node.cpp
+msgid "TileSet..."
+msgstr "TileSet..."
+
+#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Undo"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_text_editor.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Redo"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Miscellaneous project or scene-wide tools."
+msgstr ""
+
+#: editor/editor_node.cpp editor/project_manager.cpp
+#: editor/script_create_dialog.cpp
+msgid "Project"
+msgstr "Proyekto"
+
+#: editor/editor_node.cpp
+msgid "Project Settings..."
+msgstr "Kaayusan ng Proyekto..."
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control"
+msgstr "Pagmamahala ng Bersyon"
+
+#: editor/editor_node.cpp editor/plugins/version_control_editor_plugin.cpp
+msgid "Set Up Version Control"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Shut Down Version Control"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Export..."
+msgstr "Magluwas..."
+
+#: editor/editor_node.cpp
+msgid "Install Android Build Template..."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Project Data Folder"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/tile_set_editor_plugin.cpp
+msgid "Tools"
+msgstr "Mga Kagamitan"
+
+#: editor/editor_node.cpp
+msgid "Orphan Resource Explorer..."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Reload Current Project"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Quit to Project List"
+msgstr "Umuwi sa Talaproyektuhan"
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/project_export.cpp
+msgid "Debug"
+msgstr "Debug"
+
+#: editor/editor_node.cpp
+msgid "Deploy with Remote Debug"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"When this option is enabled, using one-click deploy will make the executable "
+"attempt to connect to this computer's IP so the running project can be "
+"debugged.\n"
+"This option is intended to be used for remote debugging (typically with a "
+"mobile device).\n"
+"You don't need to enable it to use the GDScript debugger locally."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Small Deploy with Network Filesystem"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"When this option is enabled, using one-click deploy for Android will only "
+"export an executable without the project data.\n"
+"The filesystem will be provided from the project by the editor over the "
+"network.\n"
+"On Android, deploying will use the USB cable for faster performance. This "
+"option speeds up testing for projects with large assets."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Visible Collision Shapes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"When this option is enabled, collision shapes and raycast nodes (for 2D and "
+"3D) will be visible in the running project."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Visible Navigation"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"When this option is enabled, navigation meshes and polygons will be visible "
+"in the running project."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Synchronize Scene Changes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"When this option is enabled, any changes made to the scene in the editor "
+"will be replicated in the running project.\n"
+"When used remotely on a device, this is more efficient when the network "
+"filesystem option is enabled."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Synchronize Script Changes"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"When this option is enabled, any script that is saved will be reloaded in "
+"the running project.\n"
+"When used remotely on a device, this is more efficient when the network "
+"filesystem option is enabled."
+msgstr ""
+
+#: editor/editor_node.cpp editor/script_create_dialog.cpp
+msgid "Editor"
+msgstr "Editor"
+
+#: editor/editor_node.cpp
+msgid "Editor Settings..."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Editor Layout"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Take Screenshot"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Screenshots are stored in the Editor Data/Settings Folder."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Toggle Fullscreen"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Toggle System Console"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Editor Data/Settings Folder"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Editor Data Folder"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Editor Settings Folder"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Manage Editor Features..."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Manage Export Templates..."
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/shader_editor_plugin.cpp
+msgid "Help"
+msgstr "Tulong"
+
+#: editor/editor_node.cpp
+msgid "Online Documentation"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Questions & Answers"
+msgstr "Mga Katanungan at Kasagutan"
+
+#: editor/editor_node.cpp
+msgid "Report a Bug"
+msgstr "Umulat ng Bug"
+
+#: editor/editor_node.cpp
+msgid "Suggest a Feature"
+msgstr "Magmungkahi ng Tampok"
+
+#: editor/editor_node.cpp
+msgid "Send Docs Feedback"
+msgstr "Magpadala ng Puna Ukol sa Docs"
+
+#: editor/editor_node.cpp editor/plugins/asset_library_editor_plugin.cpp
+msgid "Community"
+msgstr "Pamayanan"
+
+#: editor/editor_node.cpp
+msgid "About Godot"
+msgstr "Tungkol sa Godot"
+
+#: editor/editor_node.cpp
+msgid "Support Godot Development"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Play the project."
+msgstr "Ipalabas ang proyekto."
+
+#: editor/editor_node.cpp
+msgid "Play"
+msgstr "Ipalabas"
+
+#: editor/editor_node.cpp
+msgid "Pause the scene execution for debugging."
+msgstr "Ihinto muna ang pagpapalabas ng eksena para sa pagdebug."
+
+#: editor/editor_node.cpp
+msgid "Pause Scene"
+msgstr "Ihinto muna ang Eksena"
+
+#: editor/editor_node.cpp
+msgid "Stop the scene."
+msgstr "Itigil Ang Pagpapalabas ng Eksena."
+
+#: editor/editor_node.cpp
+msgid "Play the edited scene."
+msgstr "Ipalabas ang nabagong eksena."
+
+#: editor/editor_node.cpp
+msgid "Play Scene"
+msgstr "Ipalabas Ang Eksena"
+
+#: editor/editor_node.cpp
+msgid "Play custom scene"
+msgstr "Ipalabas ang pasadyang eksena"
+
+#: editor/editor_node.cpp
+msgid "Play Custom Scene"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Changing the video driver requires restarting the editor."
+msgstr ""
+
+#: editor/editor_node.cpp editor/project_settings_editor.cpp
+#: editor/settings_config_dialog.cpp
+msgid "Save & Restart"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Update Continuously"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Update When Changed"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Hide Update Spinner"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "FileSystem"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Inspector"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Expand Bottom Panel"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Output"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Don't Save"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Android build template is missing, please install relevant templates."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Manage Templates"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Install from file"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Select android sources file"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"This will set up your project for custom Android builds by installing the "
+"source template to \"res://android/build\".\n"
+"You can then apply modifications and build your own custom APK on export "
+"(adding modules, changing the AndroidManifest.xml, etc.).\n"
+"Note that in order to make custom builds instead of using pre-built APKs, "
+"the \"Use Custom Build\" option should be enabled in the Android export "
+"preset."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid ""
+"The Android build template is already installed in this project and it won't "
+"be overwritten.\n"
+"Remove the \"res://android/build\" directory manually before attempting this "
+"operation again."
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Import Templates From ZIP File"
+msgstr "Magankat ng mga Template mula sa ZIP File"
+
+#: editor/editor_node.cpp
+msgid "Template Package"
+msgstr "Pakete ng Template"
+
+#: editor/editor_node.cpp modules/gltf/editor_scene_exporter_gltf_plugin.cpp
+msgid "Export Library"
+msgstr "Iluwas ang Library"
+
+#: editor/editor_node.cpp
+msgid "Merge With Existing"
+msgstr "Ipagsama Sa Mga Umiiral"
+
+#: editor/editor_node.cpp
+msgid "Apply MeshInstance Transforms"
+msgstr "Applayan ng MeshInstance Transform"
+
+#: editor/editor_node.cpp
+msgid "Open & Run a Script"
+msgstr "Magbukas at magpatakbo ng skrip"
+
+#: editor/editor_node.cpp
+msgid ""
+"The following files are newer on disk.\n"
+"What action should be taken?"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/shader_editor_plugin.cpp
+msgid "Reload"
+msgstr ""
+
+#: editor/editor_node.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/shader_editor_plugin.cpp
+msgid "Resave"
+msgstr "Isalba muli"
+
+#: editor/editor_node.cpp
+msgid "New Inherited"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Load Errors"
+msgstr "Mga Kabugian Sa Pagloload"
+
+#: editor/editor_node.cpp editor/plugins/tile_map_editor_plugin.cpp
+msgid "Select"
+msgstr "Magpili"
+
+#: editor/editor_node.cpp
+msgid "Select Current"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open 2D Editor"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open 3D Editor"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open Script Editor"
+msgstr ""
+
+#: editor/editor_node.cpp editor/project_manager.cpp
+msgid "Open Asset Library"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open the next Editor"
+msgstr ""
+
+#: editor/editor_node.cpp
+msgid "Open the previous Editor"
+msgstr ""
+
+#: editor/editor_node.h
+msgid "Warning!"
+msgstr "Babala!"
+
+#: editor/editor_path.cpp
+msgid "No sub-resources found."
+msgstr ""
+
+#: editor/editor_path.cpp
+msgid "Open a list of sub-resources."
+msgstr ""
+
+#: editor/editor_plugin.cpp
+msgid "Creating Mesh Previews"
+msgstr ""
+
+#: editor/editor_plugin.cpp
+msgid "Thumbnail..."
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+msgid "Main Script:"
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+msgid "Edit Plugin"
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+msgid "Installed Plugins:"
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp editor/plugin_config_dialog.cpp
+msgid "Update"
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+msgid "Version"
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+msgid "Author"
+msgstr ""
+
+#: editor/editor_plugin_settings.cpp
+#: editor/plugins/version_control_editor_plugin.cpp
+#: modules/gdnative/gdnative_library_singleton_editor.cpp
+msgid "Status"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Measure:"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Frame Time (ms)"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Average Time (ms)"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Frame %"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Physics Frame %"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Inclusive"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Self"
+msgstr "Sarili"
+
+#: editor/editor_profiler.cpp
+msgid ""
+"Inclusive: Includes time from other functions called by this function.\n"
+"Use this to spot bottlenecks.\n"
+"\n"
+"Self: Only count the time spent in the function itself, not in other "
+"functions called by that function.\n"
+"Use this to find individual functions to optimize."
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Frame #:"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Time"
+msgstr ""
+
+#: editor/editor_profiler.cpp
+msgid "Calls"
+msgstr ""
+
+#: editor/editor_properties.cpp
+msgid "Edit Text:"
+msgstr "Baguhin ang Text:"
+
+#: editor/editor_properties.cpp editor/script_create_dialog.cpp
+msgid "On"
+msgstr "Nakabukas"
+
+#: editor/editor_properties.cpp
+msgid "Layer"
+msgstr ""
+
+#: editor/editor_properties.cpp
+msgid "Bit %d, value %d"
+msgstr ""
+
+#: editor/editor_properties.cpp
+msgid "[Empty]"
+msgstr "[Puwang]"
+
+#: editor/editor_properties.cpp editor/plugins/root_motion_editor_plugin.cpp
+msgid "Assign..."
+msgstr ""
+
+#: editor/editor_properties.cpp
+msgid "Invalid RID"
+msgstr ""
+
+#: editor/editor_properties.cpp
+msgid ""
+"Can't create a ViewportTexture on resources saved as a file.\n"
+"Resource needs to belong to a scene."
+msgstr ""
+
+#: editor/editor_properties.cpp
+msgid ""
+"Can't create a ViewportTexture on this resource because it's not set as "
+"local to scene.\n"
+"Please switch on the 'local to scene' property on it (and all resources "
+"containing it up to a node)."
+msgstr ""
+
+#: editor/editor_properties.cpp editor/property_editor.cpp
+msgid "Pick a Viewport"
+msgstr ""
+
+#: editor/editor_properties.cpp editor/property_editor.cpp
+msgid "Selected node is not a Viewport!"
+msgstr ""
+
+#: editor/editor_properties_array_dict.cpp
+msgid "Size: "
+msgstr "Laki: "
+
+#: editor/editor_properties_array_dict.cpp
+msgid "Page: "
+msgstr "Pahina: "
+
+#: editor/editor_properties_array_dict.cpp
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove Item"
+msgstr "Alisin ang Gamit"
+
+#: editor/editor_properties_array_dict.cpp
+msgid "New Key:"
+msgstr "Bagong Susi:"
+
+#: editor/editor_properties_array_dict.cpp
+msgid "New Value:"
+msgstr "Bagong Halaga:"
+
+#: editor/editor_properties_array_dict.cpp
+msgid "Add Key/Value Pair"
+msgstr ""
+
+#: editor/editor_resource_picker.cpp
+msgid ""
+"The selected resource (%s) does not match any type expected for this "
+"property (%s)."
+msgstr ""
+
+#: editor/editor_resource_picker.cpp
+msgid "Quick Load"
+msgstr ""
+
+#: editor/editor_resource_picker.cpp editor/property_editor.cpp
+msgid "Make Unique"
+msgstr ""
+
+#: editor/editor_resource_picker.cpp
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/animation_state_machine_editor.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+#: editor/plugins/tile_map_editor_plugin.cpp editor/property_editor.cpp
+#: editor/scene_tree_dock.cpp scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Paste"
+msgstr "Idikit"
+
+#: editor/editor_resource_picker.cpp editor/property_editor.cpp
+msgid "Convert to %s"
+msgstr ""
+
+#: editor/editor_resource_picker.cpp editor/property_editor.cpp
+msgid "New %s"
+msgstr ""
+
+#: editor/editor_resource_picker.cpp editor/property_editor.cpp
+msgid "New Script"
+msgstr ""
+
+#: editor/editor_resource_picker.cpp editor/scene_tree_dock.cpp
+msgid "Extend Script"
+msgstr ""
+
+#: editor/editor_run_native.cpp
+msgid ""
+"No runnable export preset found for this platform.\n"
+"Please add a runnable preset in the Export menu or define an existing preset "
+"as runnable."
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "Write your logic in the _run() method."
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "There is an edited scene already."
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "Couldn't instance script:"
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "Did you forget the 'tool' keyword?"
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "Couldn't run script:"
+msgstr ""
+
+#: editor/editor_run_script.cpp
+msgid "Did you forget the '_run' method?"
+msgstr ""
+
+#: editor/editor_spin_slider.cpp
+msgid "Hold %s to round to integers. Hold Shift for more precise changes."
+msgstr ""
+
+#: editor/editor_sub_scene.cpp
+msgid "Select Node(s) to Import"
+msgstr ""
+
+#: editor/editor_sub_scene.cpp editor/project_manager.cpp
+msgid "Browse"
+msgstr ""
+
+#: editor/editor_sub_scene.cpp
+msgid "Scene Path:"
+msgstr ""
+
+#: editor/editor_sub_scene.cpp
+msgid "Import From Node:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Open the folder containing these templates."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Uninstall these templates."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "There are no mirrors available."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Retrieving the mirror list..."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Starting the download..."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Error requesting URL:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connecting to the mirror..."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't resolve the requested address."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't connect to the mirror."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "No response from the mirror."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Request failed."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Request ended up in a redirect loop."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Request failed:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Download complete; extracting templates..."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Cannot remove temporary file:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid ""
+"Templates installation failed.\n"
+"The problematic templates archives can be found at '%s'."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Error getting the list of mirrors."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Error parsing JSON with the list of mirrors. Please report this issue!"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Best available mirror"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid ""
+"No download links found for this version. Direct download is only available "
+"for official releases."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Disconnected"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Resolving"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Resolve"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connecting..."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't Connect"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connected"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Requesting..."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Downloading"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Connection Error"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "SSL Handshake Error"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Can't open the export templates file."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Invalid version.txt format inside the export templates file: %s."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "No version.txt found inside the export templates file."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Error creating path for extracting templates:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Extracting Export Templates"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Importing:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Remove templates for the version '%s'?"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Uncompressing Android Build Sources"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Export Template Manager"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Current Version:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Export templates are missing. Download them or install from a file."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Export templates are installed and ready to be used."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Open Folder"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Open the folder containing installed templates for the current version."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Uninstall"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Uninstall templates for the current version."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Download from:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Open in Web Browser"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Copy Mirror URL"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Download and Install"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid ""
+"Download and install templates for the current version from the best "
+"possible mirror."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Official export templates aren't available for development builds."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Install from File"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Install templates from a local file."
+msgstr ""
+
+#: editor/export_template_manager.cpp editor/find_in_files.cpp
+#: editor/progress_dialog.cpp scene/gui/dialogs.cpp
+msgid "Cancel"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Cancel the download of the templates."
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Other Installed Versions:"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Uninstall Template"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Select Template File"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid "Godot Export Templates"
+msgstr ""
+
+#: editor/export_template_manager.cpp
+msgid ""
+"The templates will continue to download.\n"
+"You may experience a short editor freeze when they finish."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Favorites"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Status: Import of file failed. Please fix file and reimport manually."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
+"Importing has been disabled for this file, so it can't be opened for editing."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Cannot move/rename resources root."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Cannot move a folder into itself."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Error moving:"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Error duplicating:"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Unable to update dependencies:"
+msgstr ""
+
+#: editor/filesystem_dock.cpp editor/scene_tree_editor.cpp
+msgid "No name provided."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Provided name contains invalid characters."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "A file or folder with this name already exists."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Name contains invalid characters."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
+"The following files or folders conflict with items in the target location "
+"'%s':\n"
+"\n"
+"%s\n"
+"\n"
+"Do you wish to overwrite them?"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Renaming file:"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Renaming folder:"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Duplicating file:"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Duplicating folder:"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "New Inherited Scene"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Set As Main Scene"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Open Scenes"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Instance"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Add to Favorites"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Remove from Favorites"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Edit Dependencies..."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "View Owners..."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Move To..."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "New Scene..."
+msgstr ""
+
+#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
+msgid "New Script..."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "New Resource..."
+msgstr ""
+
+#: editor/filesystem_dock.cpp editor/inspector_dock.cpp
+#: editor/plugins/visual_shader_editor_plugin.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Expand All"
+msgstr ""
+
+#: editor/filesystem_dock.cpp editor/inspector_dock.cpp
+#: editor/plugins/visual_shader_editor_plugin.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Collapse All"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Sort files"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Sort by Name (Ascending)"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Sort by Name (Descending)"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Sort by Type (Ascending)"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Sort by Type (Descending)"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Sort by Last Modified"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Sort by First Modified"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Duplicate..."
+msgstr ""
+
+#: editor/filesystem_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
+msgid "Rename..."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Focus the search box"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Previous Folder/File"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Next Folder/File"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Re-Scan Filesystem"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Toggle Split Mode"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Search files"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid ""
+"Scanning Files,\n"
+"Please Wait..."
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Move"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+#: editor/project_manager.cpp editor/rename_dialog.cpp
+#: editor/scene_tree_dock.cpp
+msgid "Rename"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Overwrite"
+msgstr ""
+
+#: editor/filesystem_dock.cpp
+msgid "Create Scene"
+msgstr ""
+
+#: editor/filesystem_dock.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Create Script"
+msgstr ""
+
+#: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp
+msgid "Find in Files"
+msgstr ""
+
+#: editor/find_in_files.cpp
+msgid "Find:"
+msgstr ""
+
+#: editor/find_in_files.cpp
+msgid "Folder:"
+msgstr ""
+
+#: editor/find_in_files.cpp
+msgid "Filters:"
+msgstr ""
+
+#: editor/find_in_files.cpp
+msgid ""
+"Include the files with the following extensions. Add or remove them in "
+"ProjectSettings."
+msgstr ""
+
+#: editor/find_in_files.cpp editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+msgid "Find..."
+msgstr ""
+
+#: editor/find_in_files.cpp editor/plugins/script_text_editor.cpp
+msgid "Replace..."
+msgstr ""
+
+#: editor/find_in_files.cpp
+msgid "Find: "
+msgstr ""
+
+#: editor/find_in_files.cpp
+msgid "Replace: "
+msgstr ""
+
+#: editor/find_in_files.cpp
+msgid "Replace all (no undo)"
+msgstr ""
+
+#: editor/find_in_files.cpp
+msgid "Searching..."
+msgstr ""
+
+#: editor/find_in_files.cpp
+msgid "%d match in %d file."
+msgstr ""
+
+#: editor/find_in_files.cpp
+msgid "%d matches in %d file."
+msgstr ""
+
+#: editor/find_in_files.cpp
+msgid "%d matches in %d files."
+msgstr ""
+
+#: editor/groups_editor.cpp
+msgid "Add to Group"
+msgstr ""
+
+#: editor/groups_editor.cpp
+msgid "Remove from Group"
+msgstr ""
+
+#: editor/groups_editor.cpp
+msgid "Group name already exists."
+msgstr ""
+
+#: editor/groups_editor.cpp
+msgid "Invalid group name."
+msgstr ""
+
+#: editor/groups_editor.cpp
+msgid "Rename Group"
+msgstr ""
+
+#: editor/groups_editor.cpp
+msgid "Delete Group"
+msgstr ""
+
+#: editor/groups_editor.cpp editor/node_dock.cpp
+msgid "Groups"
+msgstr ""
+
+#: editor/groups_editor.cpp
+msgid "Nodes Not in Group"
+msgstr ""
+
+#: editor/groups_editor.cpp editor/scene_tree_dock.cpp
+#: editor/scene_tree_editor.cpp
+msgid "Filter nodes"
+msgstr ""
+
+#: editor/groups_editor.cpp
+msgid "Nodes in Group"
+msgstr ""
+
+#: editor/groups_editor.cpp
+msgid "Empty groups will be automatically removed."
+msgstr ""
+
+#: editor/groups_editor.cpp
+msgid "Group Editor"
+msgstr ""
+
+#: editor/groups_editor.cpp
+msgid "Manage Groups"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import as Single Scene"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Animations"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Materials"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Objects"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Objects+Materials"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Objects+Animations"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Materials+Animations"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import with Separate Objects+Materials+Animations"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import as Multiple Scenes"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Import as Multiple Scenes+Materials"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import Scene"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Importing Scene..."
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Generating Lightmaps"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Generating for Mesh: "
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Running Custom Script..."
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Couldn't load post-import script:"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Invalid/broken script for post-import (check console):"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Error running post-import script:"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Did you return a Node-derived object in the `post_import()` method?"
+msgstr ""
+
+#: editor/import/resource_importer_scene.cpp
+msgid "Saving..."
+msgstr ""
+
+#: editor/import_defaults_editor.cpp
+msgid "Select Importer"
+msgstr ""
+
+#: editor/import_defaults_editor.cpp
+msgid "Importer:"
+msgstr ""
+
+#: editor/import_defaults_editor.cpp
+msgid "Reset to Defaults"
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Keep File (No Import)"
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "%d Files"
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Set as Default for '%s'"
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Clear Default for '%s'"
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Reimport"
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid ""
+"You have pending changes that haven't been applied yet. Click Reimport to "
+"apply changes made to the import options.\n"
+"Selecting another resource in the FileSystem dock without clicking Reimport "
+"first will discard changes made in the Import dock."
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Import As:"
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Preset"
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Save Scenes, Re-Import, and Restart"
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid "Changing the type of an imported file requires editor restart."
+msgstr ""
+
+#: editor/import_dock.cpp
+msgid ""
+"WARNING: Assets exist that use this resource, they may stop loading properly."
+msgstr ""
+
+#: editor/inspector_dock.cpp
+msgid "Failed to load resource."
+msgstr ""
+
+#: editor/inspector_dock.cpp
+msgid "Copy Properties"
+msgstr ""
+
+#: editor/inspector_dock.cpp
+msgid "Paste Properties"
+msgstr ""
+
+#: editor/inspector_dock.cpp
+msgid "Make Sub-Resources Unique"
+msgstr ""
+
+#: editor/inspector_dock.cpp
+msgid "Create a new resource in memory and edit it."
+msgstr ""
+
+#: editor/inspector_dock.cpp
+msgid "Load an existing resource from disk and edit it."
+msgstr ""
+
+#: editor/inspector_dock.cpp
+msgid "Save the currently edited resource."
+msgstr ""
+
+#: editor/inspector_dock.cpp editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Save As..."
+msgstr ""
+
+#: editor/inspector_dock.cpp
+msgid "Extra resource options."
+msgstr ""
+
+#: editor/inspector_dock.cpp
+msgid "Edit Resource from Clipboard"
+msgstr ""
+
+#: editor/inspector_dock.cpp
+msgid "Copy Resource"
+msgstr ""
+
+#: editor/inspector_dock.cpp
+msgid "Make Resource Built-In"
+msgstr ""
+
+#: editor/inspector_dock.cpp
+msgid "Go to the previous edited object in history."
+msgstr ""
+
+#: editor/inspector_dock.cpp
+msgid "Go to the next edited object in history."
+msgstr ""
+
+#: editor/inspector_dock.cpp
+msgid "History of recently edited objects."
+msgstr ""
+
+#: editor/inspector_dock.cpp
+msgid "Open documentation for this object."
+msgstr ""
+
+#: editor/inspector_dock.cpp editor/scene_tree_dock.cpp
+msgid "Open Documentation"
+msgstr ""
+
+#: editor/inspector_dock.cpp
+msgid "Filter properties"
+msgstr ""
+
+#: editor/inspector_dock.cpp
+msgid "Manage object properties."
+msgstr ""
+
+#: editor/inspector_dock.cpp
+msgid "Changes may be lost!"
+msgstr ""
+
+#: editor/multi_node_edit.cpp
+msgid "MultiNode Set"
+msgstr ""
+
+#: editor/node_dock.cpp
+msgid "Select a single node to edit its signals and groups."
+msgstr ""
+
+#: editor/plugin_config_dialog.cpp
+msgid "Edit a Plugin"
+msgstr ""
+
+#: editor/plugin_config_dialog.cpp
+msgid "Create a Plugin"
+msgstr ""
+
+#: editor/plugin_config_dialog.cpp
+msgid "Plugin Name:"
+msgstr ""
+
+#: editor/plugin_config_dialog.cpp
+msgid "Subfolder:"
+msgstr ""
+
+#: editor/plugin_config_dialog.cpp
+msgid "Author:"
+msgstr ""
+
+#: editor/plugin_config_dialog.cpp
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Version:"
+msgstr ""
+
+#: editor/plugin_config_dialog.cpp editor/script_create_dialog.cpp
+msgid "Language:"
+msgstr ""
+
+#: editor/plugin_config_dialog.cpp
+msgid "Script Name:"
+msgstr ""
+
+#: editor/plugin_config_dialog.cpp
+msgid "Activate now?"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create Polygon"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "Create points."
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid ""
+"Edit points.\n"
+"LMB: Move Point\n"
+"RMB: Erase Point"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+msgid "Erase points."
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Edit Polygon"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Insert Point"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Edit Polygon (Remove Point)"
+msgstr ""
+
+#: editor/plugins/abstract_polygon_2d_editor.cpp
+msgid "Remove Polygon And Point"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/animation_state_machine_editor.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Animation"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Load..."
+msgstr ""
+
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "Move Node Point"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+msgid "Change BlendSpace1D Limits"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+msgid "Change BlendSpace1D Labels"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "This type of node can't be used. Only root nodes are allowed."
+msgstr ""
+
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "Add Node Point"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "Add Animation Point"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+msgid "Remove BlendSpace1D Point"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+msgid "Move BlendSpace1D Node Point"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid ""
+"AnimationTree is inactive.\n"
+"Activate to enable playback, check node warnings if activation fails."
+msgstr ""
+
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "Set the blending position within the space"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "Select and move points, create points with RMB."
+msgstr ""
+
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+#: editor/plugins/animation_blend_space_2d_editor.cpp scene/gui/graph_edit.cpp
+msgid "Enable snap and show grid."
+msgstr ""
+
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "Point"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+msgid "Open Editor"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_1d_editor.cpp
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Open Animation Node"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "Triangle already exists."
+msgstr ""
+
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "Add Triangle"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "Change BlendSpace2D Limits"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "Change BlendSpace2D Labels"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "Remove BlendSpace2D Point"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "Remove BlendSpace2D Triangle"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "BlendSpace2D does not belong to an AnimationTree node."
+msgstr ""
+
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "No triangles exist, so no blending can take place."
+msgstr ""
+
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "Toggle Auto Triangles"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "Create triangles by connecting points."
+msgstr ""
+
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "Erase points and triangles."
+msgstr ""
+
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+msgid "Generate blend triangles automatically (instead of manually)"
+msgstr ""
+
+#: editor/plugins/animation_blend_space_2d_editor.cpp
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Blend:"
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+msgid "Parameter Changed:"
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Edit Filters"
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+msgid "Output node can't be added to the blend tree."
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+msgid "Add Node to BlendTree"
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+msgid "Node Moved"
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+msgid "Unable to connect, port may be in use or connection may be invalid."
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Nodes Connected"
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Nodes Disconnected"
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+msgid "Set Animation"
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Delete Node"
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+#: editor/scene_tree_dock.cpp
+msgid "Delete Node(s)"
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+msgid "Toggle Filter On/Off"
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+msgid "Change Filter"
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+msgid "No animation player set, so unable to retrieve track names."
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+msgid "Player path set is invalid, so unable to retrieve track names."
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+#: editor/plugins/root_motion_editor_plugin.cpp
+msgid ""
+"Animation player has no valid root node path, so unable to retrieve track "
+"names."
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+msgid "Anim Clips"
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+msgid "Audio Clips"
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+msgid "Functions"
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Node Renamed"
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Add Node..."
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+#: editor/plugins/root_motion_editor_plugin.cpp
+msgid "Edit Filtered Tracks:"
+msgstr ""
+
+#: editor/plugins/animation_blend_tree_editor_plugin.cpp
+msgid "Enable Filtering"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Toggle Autoplay"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Animation Name:"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Anim"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Animation Name:"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Delete Animation?"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Remove Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Invalid animation name!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation name already exists!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Next Changed"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Blend Time"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "No animation to copy!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "No animation resource on clipboard!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Pasted Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Paste Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "No animation to edit!"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from current pos. (A)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from end. (Shift+A)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Stop animation playback. (S)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from start. (Shift+D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from current pos. (D)"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation position (in seconds)."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Scale animation playback globally for the node."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Tools"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "New"
+msgstr "Bago"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Edit Transitions..."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Open in Inspector"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Display list of animations in player."
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Autoplay on Load"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Enable Onion Skinning"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Onion Skinning Options"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Directions"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Past"
+msgstr "Nakaraan"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Future"
+msgstr "Hinaharap"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Depth"
+msgstr "Lalim"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "1 step"
+msgstr "1 hakbang"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "2 steps"
+msgstr "2 hakbang"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "3 steps"
+msgstr "3 hakbang"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Differences Only"
+msgstr "Mga Pagkakaiba Lang"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Force White Modulate"
+msgstr "Piliting Magmodulate ng Paputi"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Include Gizmos (3D)"
+msgstr "Magsama ng mga Gizmo (3D)"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Pin AnimationPlayer"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr "Gumawa ng Bagong Animasyon"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Name:"
+msgstr "Pangalan ng Animasyon:"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp editor/property_editor.cpp
+msgid "Error!"
+msgstr "Kabiguan!"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Times:"
+msgstr ""
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Next (Auto Queue):"
+msgstr "Sunod (Kusang Pagpila):"
+
+#: editor/plugins/animation_player_editor_plugin.cpp
+msgid "Cross-Animation Blend Times"
+msgstr ""
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Move Node"
+msgstr "Ilipat Ang Node"
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Transition exists!"
+msgstr "Mayroon ng Transisyon!"
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Add Transition"
+msgstr "Magdagdag ng Transisyon"
+
+#: editor/plugins/animation_state_machine_editor.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node"
+msgstr "Magdagdag ng Node"
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "End"
+msgstr "Iwakas"
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Immediate"
+msgstr "Mabilisan"
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Sync"
+msgstr "Ipagsabay"
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "At End"
+msgstr "Sa Huli"
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Travel"
+msgstr ""
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Start and end nodes are needed for a sub-transition."
+msgstr ""
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "No playback resource set at path: %s."
+msgstr ""
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Node Removed"
+msgstr "Naalis ang Node"
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Transition Removed"
+msgstr "Naalis ang Transisyon"
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Set Start Node (Autoplay)"
+msgstr "Itakda ang Umpisa ng Node (Kusang Pagpalabas)"
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid ""
+"Select and move nodes.\n"
+"RMB to add new nodes.\n"
+"Shift+LMB to create connections."
+msgstr ""
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Create new nodes."
+msgstr "Gumawa ng bagong mga node."
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Connect nodes."
+msgstr "Magkabit ng mga node."
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Remove selected node or transition."
+msgstr "Alisin ang napiling node o transisyon."
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Toggle autoplay this animation on start, restart or seek to zero."
+msgstr ""
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Set the end animation. This is useful for sub-transitions."
+msgstr ""
+"Itakda ang hulihan ng animasyon. Magagamit to para sa mga sub-transisyon."
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Transition: "
+msgstr "Transisyon: "
+
+#: editor/plugins/animation_state_machine_editor.cpp
+msgid "Play Mode:"
+msgstr "Paraan sa Pagpapalabas:"
+
+#: editor/plugins/animation_tree_editor_plugin.cpp
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "AnimationTree"
+msgstr "AnimationTree"
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "New name:"
+msgstr "Bagong pangalan:"
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Scale:"
+msgstr "Sukat:"
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Fade In (s):"
+msgstr "(Mga) Palabong Pagpasok:"
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Fade Out (s):"
+msgstr "(Mga) Palabong Paglabas:"
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Blend"
+msgstr "Halo"
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Mix"
+msgstr "Mix"
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Auto Restart:"
+msgstr "Kusa Muling Pagumpisa:"
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Restart (s):"
+msgstr "(Mga) Muling Pagumpisa:"
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Random Restart (s):"
+msgstr "Alinmang (Mga) Kusa Muling-Pagsisimula:"
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Start!"
+msgstr "Simulan!"
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Amount:"
+msgstr "Bilang:"
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Blend 0:"
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Blend 1:"
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "X-Fade Time (s):"
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Current:"
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+#: editor/plugins/visual_shader_editor_plugin.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Input"
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Clear Auto-Advance"
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Set Auto-Advance"
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Delete Input"
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Animation tree is valid."
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Animation tree is invalid."
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Animation Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "OneShot Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Mix Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Blend2 Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Blend3 Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Blend4 Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "TimeScale Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "TimeSeek Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Transition Node"
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Import Animations..."
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Edit Node Filters"
+msgstr ""
+
+#: editor/plugins/animation_tree_player_editor_plugin.cpp
+msgid "Filters..."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Contents:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "View Files"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Download"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Connection error, please try again."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't connect to host:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response from host:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "No response."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve hostname:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Can't resolve."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Request failed, return code:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Cannot save response to:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Write error."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Request failed, too many redirects"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Redirect loop."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Request failed, timeout"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Timeout."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Bad download hash, assuming file has been tampered with."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Expected:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Got:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Failed SHA-256 hash check"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Asset Download Error:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Downloading (%s / %s)..."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Downloading..."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Resolving..."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Error making request"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Idle"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Install..."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Retry"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Download Error"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Download for this asset is already in progress!"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Recently Updated"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Least Recently Updated"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Name (A-Z)"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Name (Z-A)"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "License (A-Z)"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "License (Z-A)"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "First"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Previous"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Next"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Last"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Search templates, projects, and demos"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Search assets (excluding templates, projects, and demos)"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Import..."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Plugins..."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp editor/project_manager.cpp
+msgid "Sort:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Category:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Site:"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Support"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Official"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Testing"
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Loading..."
+msgstr ""
+
+#: editor/plugins/asset_library_editor_plugin.cpp
+msgid "Assets ZIP File"
+msgstr ""
+
+#: editor/plugins/audio_stream_editor_plugin.cpp
+msgid "Audio Preview Play/Pause"
+msgstr ""
+
+#: editor/plugins/baked_lightmap_editor_plugin.cpp
+msgid ""
+"Can't determine a save path for lightmap images.\n"
+"Save your scene and try again."
+msgstr ""
+
+#: editor/plugins/baked_lightmap_editor_plugin.cpp
+msgid ""
+"No meshes to bake. Make sure they contain an UV2 channel and that the 'Use "
+"In Baked Light' and 'Generate Lightmap' flags are on."
+msgstr ""
+
+#: editor/plugins/baked_lightmap_editor_plugin.cpp
+msgid "Failed creating lightmap images, make sure path is writable."
+msgstr ""
+
+#: editor/plugins/baked_lightmap_editor_plugin.cpp
+msgid "Failed determining lightmap size. Maximum lightmap size too small?"
+msgstr ""
+
+#: editor/plugins/baked_lightmap_editor_plugin.cpp
+msgid ""
+"Some mesh is invalid. Make sure the UV2 channel values are contained within "
+"the [0.0,1.0] square region."
+msgstr ""
+
+#: editor/plugins/baked_lightmap_editor_plugin.cpp
+msgid ""
+"Godot editor was built without ray tracing support, lightmaps can't be baked."
+msgstr ""
+
+#: editor/plugins/baked_lightmap_editor_plugin.cpp
+msgid "Bake Lightmaps"
+msgstr ""
+
+#: editor/plugins/baked_lightmap_editor_plugin.cpp
+msgid "Select lightmap bake file:"
+msgstr ""
+
+#: editor/plugins/camera_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Preview"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Configure Snap"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Grid Offset:"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Grid Step:"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Primary Line Every:"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "steps"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Offset:"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Step:"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Scale Step:"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Vertical Guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create Vertical Guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove Vertical Guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Horizontal Guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create Horizontal Guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Remove Horizontal Guide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create Horizontal and Vertical Guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotate %d CanvasItems"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotate CanvasItem \"%s\" to %d degrees"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move CanvasItem \"%s\" Anchor"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Scale Node2D \"%s\" to (%s, %s)"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Resize Control \"%s\" to (%d, %d)"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Scale %d CanvasItems"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Scale CanvasItem \"%s\" to (%s, %s)"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move %d CanvasItems"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move CanvasItem \"%s\" to (%d, %d)"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Locked"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Grouped"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid ""
+"Children of containers have their anchors and margins values overridden by "
+"their parent."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Presets for the anchors and margins values of a Control node."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid ""
+"When active, moving Control nodes changes their anchors instead of their "
+"margins."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Top Left"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Top Right"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Bottom Right"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Bottom Left"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Center Left"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Center Top"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Center Right"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Center Bottom"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Center"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Left Wide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Top Wide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Right Wide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Bottom Wide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "VCenter Wide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "HCenter Wide"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Full Rect"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Keep Ratio"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Anchors only"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change Anchors and Margins"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change Anchors"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid ""
+"Project Camera Override\n"
+"Overrides the running project's camera with the editor viewport camera."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid ""
+"Project Camera Override\n"
+"No project instance running. Run the project from the editor to use this "
+"feature."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Lock Selected"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Unlock Selected"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Group Selected"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Ungroup Selected"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Paste Pose"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Create Custom Bone(s) from Node(s)"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Bones"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make IK Chain"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear IK Chain"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid ""
+"Warning: Children of a container get their position and size determined only "
+"by their parent."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+#: editor/plugins/texture_region_editor_plugin.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp scene/gui/graph_edit.cpp
+msgid "Zoom Reset"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Select Mode"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Drag: Rotate selected node around pivot."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+Drag: Move selected node."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "V: Set selected node's pivot position."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Alt+RMB: Show list of all nodes at position clicked, including locked."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "RMB: Add node at position clicked."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Move Mode"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Mode"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Mode"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid ""
+"Show a list of all objects at the position clicked\n"
+"(same as Alt+RMB in select mode)."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Click to change object's rotation pivot."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Pan Mode"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Ruler Mode"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Toggle smart snapping."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Smart Snap"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Toggle grid snapping."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Grid Snap"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snapping Options"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Rotation Snap"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Scale Snap"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap Relative"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Pixel Snap"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Smart Snapping"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Configure Snap..."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to Parent"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to Node Anchor"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to Node Sides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to Node Center"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to Other Nodes"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap to Guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Lock the selected object in place (can't be moved)."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Unlock the selected object (can be moved)."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Makes sure the object's children are not selectable."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Restores the object's children's ability to be selected."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Skeleton Options"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show Bones"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make Custom Bone(s) from Node(s)"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Custom Bones"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Always Show Grid"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show Helpers"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show Rulers"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show Guides"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show Origin"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show Viewport"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Show Group And Lock Icons"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Center Selection"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Frame Selection"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Preview Canvas Scale"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Translation mask for inserting keys."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation mask for inserting keys."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Scale mask for inserting keys."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert keys (based on mask)."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid ""
+"Auto insert keys when objects are translated, rotated or scaled (based on "
+"mask).\n"
+"Keys are only added to existing tracks, no new tracks will be created.\n"
+"Keys must be inserted manually for the first time."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Auto Insert Key"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Animation Key and Pose Options"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key (Existing Tracks)"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Copy Pose"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Pose"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Add Node Here"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Instance Scene Here"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Multiply grid step by 2"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Divide grid step by 2"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Pan View"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom to 3.125%"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom to 6.25%"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom to 12.5%"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom to 25%"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom to 50%"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom to 100%"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom to 200%"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom to 400%"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom to 800%"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom to 1600%"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Add %s"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Adding %s..."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Cannot instantiate multiple nodes without root."
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "Create Node"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "Error instancing scene from %s"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change Default Type"
+msgstr ""
+
+#: editor/plugins/canvas_item_editor_plugin.cpp
+msgid ""
+"Drag & drop + Shift : Add node as sibling\n"
+"Drag & drop + Alt : Change node type"
+msgstr ""
+
+#: editor/plugins/collision_polygon_editor_plugin.cpp
+msgid "Create Polygon3D"
+msgstr ""
+
+#: editor/plugins/collision_polygon_editor_plugin.cpp
+msgid "Edit Poly"
+msgstr ""
+
+#: editor/plugins/collision_polygon_editor_plugin.cpp
+msgid "Edit Poly (Remove Point)"
+msgstr ""
+
+#: editor/plugins/collision_shape_2d_editor_plugin.cpp
+msgid "Set Handle"
+msgstr ""
+
+#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Load Emission Mask"
+msgstr ""
+
+#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
+#: editor/plugins/cpu_particles_editor_plugin.cpp
+#: editor/plugins/particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Restart"
+msgstr ""
+
+#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Clear Emission Mask"
+msgstr ""
+
+#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Particles"
+msgstr ""
+
+#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Generated Point Count:"
+msgstr ""
+
+#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Emission Mask"
+msgstr ""
+
+#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Solid Pixels"
+msgstr ""
+
+#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Border Pixels"
+msgstr ""
+
+#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Directed Border Pixels"
+msgstr ""
+
+#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Capture from Pixel"
+msgstr ""
+
+#: editor/plugins/cpu_particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Emission Colors"
+msgstr ""
+
+#: editor/plugins/cpu_particles_editor_plugin.cpp
+msgid "CPUParticles"
+msgstr ""
+
+#: editor/plugins/cpu_particles_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emission Points From Mesh"
+msgstr ""
+
+#: editor/plugins/cpu_particles_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emission Points From Node"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Flat 0"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Flat 1"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp editor/property_editor.cpp
+msgid "Ease In"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp editor/property_editor.cpp
+msgid "Ease Out"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Smoothstep"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Modify Curve Point"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Modify Curve Tangent"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Load Curve Preset"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Add Point"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Remove Point"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Left Linear"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Right Linear"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Load Preset"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Remove Curve Point"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Toggle Curve Linear Tangent"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Hold Shift to edit tangents individually"
+msgstr ""
+
+#: editor/plugins/curve_editor_plugin.cpp
+msgid "Right click to add point"
+msgstr ""
+
+#: editor/plugins/gi_probe_editor_plugin.cpp
+msgid "Bake GI Probe"
+msgstr ""
+
+#: editor/plugins/gradient_editor_plugin.cpp
+msgid "Gradient Edited"
+msgstr ""
+
+#: editor/plugins/item_list_editor_plugin.cpp
+msgid "Item %d"
+msgstr ""
+
+#: editor/plugins/item_list_editor_plugin.cpp
+msgid "Items"
+msgstr ""
+
+#: editor/plugins/item_list_editor_plugin.cpp
+msgid "Item List Editor"
+msgstr ""
+
+#: editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create Occluder Polygon"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh is empty!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Couldn't create a Trimesh collision shape."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Trimesh Body"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "This doesn't work on scene root!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Static Shape"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Can't create a single convex collision shape for the scene root."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Couldn't create a single convex collision shape."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Simplified Convex Shape"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Single Convex Shape"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Can't create multiple convex collision shapes for the scene root."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Couldn't create any collision shapes."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Multiple Convex Shapes"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Navigation Mesh"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Contained Mesh is not of type ArrayMesh."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "UV Unwrap failed, mesh may not be manifold?"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "No mesh to debug."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh has no UV in layer %d."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "MeshInstance lacks a Mesh!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh has not surface to create outlines from!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh primitive type is not PRIMITIVE_TRIANGLES!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Could not create outline!"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Static Body"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid ""
+"Creates a StaticBody and assigns a polygon-based collision shape to it "
+"automatically.\n"
+"This is the most accurate (but slowest) option for collision detection."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Collision Sibling"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid ""
+"Creates a polygon-based collision shape.\n"
+"This is the most accurate (but slowest) option for collision detection."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Single Convex Collision Sibling"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid ""
+"Creates a single convex collision shape.\n"
+"This is the fastest (but least accurate) option for collision detection."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Simplified Convex Collision Sibling"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid ""
+"Creates a simplified convex collision shape.\n"
+"This is similar to single collision shape, but can result in a simpler "
+"geometry in some cases, at the cost of accuracy."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Multiple Convex Collision Siblings"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid ""
+"Creates a polygon-based collision shape.\n"
+"This is a performance middle-ground between a single convex collision and a "
+"polygon-based collision."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh..."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid ""
+"Creates a static outline mesh. The outline mesh will have its normals "
+"flipped automatically.\n"
+"This can be used instead of the SpatialMaterial Grow property when using "
+"that property isn't possible."
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "View UV1"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "View UV2"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Unwrap UV2 for Lightmap/AO"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Outline Size:"
+msgstr ""
+
+#: editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "UV Channel Debug"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Remove item %d?"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid ""
+"Update from existing scene?:\n"
+"%s"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Mesh Library"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Add Item"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Remove Selected Item"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Ignore Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Import from Scene (Apply Transforms)"
+msgstr ""
+
+#: editor/plugins/mesh_library_editor_plugin.cpp
+msgid "Update from Scene"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and no MultiMesh set in node)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and MultiMesh contains no Mesh)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (invalid path)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (not a MeshInstance)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (contains no Mesh resource)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "No surface source specified."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (invalid path)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no geometry)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no faces)."
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Source Mesh:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Target Surface:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate Surface"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate MultiMesh"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Target Surface:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Source Mesh:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "X-Axis"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Y-Axis"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Z-Axis"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh Up Axis:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Rotation:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Tilt:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Scale:"
+msgstr ""
+
+#: editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate"
+msgstr ""
+
+#: editor/plugins/navigation_polygon_editor_plugin.cpp
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create Navigation Polygon"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Convert to CPUParticles"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Generating Visibility Rect"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Generate Visibility Rect"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Can only set point into a ParticlesMaterial process material"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Convert to CPUParticles2D"
+msgstr ""
+
+#: editor/plugins/particles_2d_editor_plugin.cpp
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generation Time (sec):"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "The geometry's faces don't contain any area."
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "The geometry doesn't contain any faces."
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "\"%s\" doesn't inherit from Spatial."
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "\"%s\" doesn't contain geometry."
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "\"%s\" doesn't contain face geometry."
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Points:"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Surface Points"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Surface Points+Normal (Directed)"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Volume"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Source: "
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "A processor material of type 'ParticlesMaterial' is required."
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generating AABB"
+msgstr ""
+
+#: editor/plugins/particles_editor_plugin.cpp
+msgid "Generate Visibility AABB"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove Point from Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove Out-Control from Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove In-Control from Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point to Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Split Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Point in Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move In-Control in Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Out-Control in Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Left Click: Split Segment (in curve)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+msgid "Select Control Points (Shift+Drag)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Close Curve"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+#: editor/plugins/theme_editor_preview.cpp
+#: editor/plugins/visual_shader_editor_plugin.cpp editor/project_export.cpp
+msgid "Options"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Mirror Handle Angles"
+msgstr ""
+
+#: editor/plugins/path_2d_editor_plugin.cpp
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Mirror Handle Lengths"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Curve Point #"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Point Position"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve In Position"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Out Position"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Split Path"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Remove Path Point"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Remove Out-Control Point"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Remove In-Control Point"
+msgstr ""
+
+#: editor/plugins/path_editor_plugin.cpp
+msgid "Split Segment (in curve)"
+msgstr ""
+
+#: editor/plugins/physical_bone_plugin.cpp
+msgid "Move Joint"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid ""
+"The skeleton property of the Polygon2D does not point to a Skeleton2D node"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Sync Bones"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid ""
+"No texture in this polygon.\n"
+"Set a texture to be able to edit UV."
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create UV Map"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid ""
+"Polygon 2D has internal vertices, so it can no longer be edited in the "
+"viewport."
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create Polygon & UV"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create Internal Vertex"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Remove Internal Vertex"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Invalid Polygon (need 3 different vertices)"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Add Custom Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Remove Custom Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Transform UV Map"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Transform Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Paint Bone Weights"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Open Polygon 2D UV editor."
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon 2D UV Editor"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "UV"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Points"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygons"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Bones"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Points"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Command: Rotate"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift: Move All"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift+Command: Scale"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Ctrl: Rotate"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift+Ctrl: Scale"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Rotate Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Scale Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create a custom polygon. Enables custom polygon rendering."
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid ""
+"Remove a custom polygon. If none remain, custom polygon rendering is "
+"disabled."
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Paint weights with specified intensity."
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Unpaint weights with specified intensity."
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Radius:"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Copy Polygon to UV"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Copy UV to Polygon"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Clear UV"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid Settings"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Snap"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Enable Snap"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Show Grid"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Configure Grid:"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid Offset X:"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid Offset Y:"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid Step X:"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid Step Y:"
+msgstr ""
+
+#: editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Sync Bones to Polygon"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "ERROR: Couldn't load resource!"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Add Resource"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Rename Resource"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Delete Resource"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Resource clipboard is empty!"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Paste Resource"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/scene_tree_editor.cpp
+msgid "Instance:"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp editor/project_settings_editor.cpp
+#: editor/scene_tree_editor.cpp editor/script_editor_debugger.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Type:"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+#: editor/scene_tree_dock.cpp editor/scene_tree_editor.cpp
+msgid "Open in Editor"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Load Resource"
+msgstr ""
+
+#: editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "ResourcePreloader"
+msgstr ""
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Flip Portals"
+msgstr ""
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Room Generate Points"
+msgstr ""
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Generate Points"
+msgstr ""
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Flip Portal"
+msgstr ""
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Occluder Set Transform"
+msgstr ""
+
+#: editor/plugins/room_manager_editor_plugin.cpp
+msgid "Center Node"
+msgstr ""
+
+#: editor/plugins/root_motion_editor_plugin.cpp
+msgid "AnimationTree has no path set to an AnimationPlayer"
+msgstr ""
+
+#: editor/plugins/root_motion_editor_plugin.cpp
+msgid "Path to AnimationPlayer is invalid"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Clear Recent Files"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close and save changes?"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error writing TextFile:"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Could not load file at:"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error saving file!"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error while saving theme."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error Saving"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error importing theme."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error Importing"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "New Text File..."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Open File"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Save File As..."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Can't obtain the script for running."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Script failed reloading, check console for errors."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Script is not in tool mode, will not be able to run."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid ""
+"To run this script, it must inherit EditorScript and be set to tool mode."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Import Theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error while saving theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Error saving"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As..."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "%s Class Reference"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+msgid "Find Next"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+msgid "Find Previous"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Filter scripts"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Toggle alphabetical sorting of the method list."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Filter methods"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Sort"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+#: modules/gdnative/gdnative_library_editor_plugin.cpp
+msgid "Move Up"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+#: modules/gdnative/gdnative_library_editor_plugin.cpp
+msgid "Move Down"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Next Script"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Previous Script"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "File"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Open..."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Reopen Closed Script"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Save All"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Soft Reload Script"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Copy Script Path"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "History Previous"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "History Next"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Import Theme..."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Reload Theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close All"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Close Docs"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
+msgid "Run"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp
+#: editor/plugins/visual_shader_editor_plugin.cpp
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "Search"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Step Into"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Step Over"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Break"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/project_manager.cpp
+#: editor/script_editor_debugger.cpp
+msgid "Continue"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Keep Debugger Open"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Debug with External Editor"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+#: editor/plugins/shader_editor_plugin.cpp
+msgid "Online Docs"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Open Godot online documentation."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Search the reference documentation."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Go to previous edited document."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Go to next edited document."
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Discard"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid ""
+"The following files are newer on disk.\n"
+"What action should be taken?:"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp editor/script_editor_debugger.cpp
+msgid "Debugger"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Search Results"
+msgstr ""
+
+#: editor/plugins/script_editor_plugin.cpp
+msgid "Clear Recent Scripts"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Connections to method:"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp editor/script_editor_debugger.cpp
+msgid "Source"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Target"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid ""
+"Missing connected method '%s' for signal '%s' from node '%s' to node '%s'."
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "[Ignore]"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Go to Function"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Only resources from filesystem can be dropped."
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Can't drop nodes because script '%s' is not used in this scene."
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Lookup Symbol"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Pick Color"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp
+msgid "Convert Case"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp
+msgid "Uppercase"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp
+msgid "Lowercase"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp
+msgid "Capitalize"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp editor/plugins/text_editor.cpp
+msgid "Syntax Highlighter"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp
+msgid "Bookmarks"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Breakpoints"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+#: editor/plugins/shader_editor_plugin.cpp editor/plugins/text_editor.cpp
+msgid "Go To"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp editor/scene_tree_dock.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Cut"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp editor/plugins/theme_editor_plugin.cpp
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+msgid "Select All"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Delete Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Indent Left"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Indent Right"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Toggle Comment"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold/Unfold Line"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Fold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Unfold All Lines"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Complete Symbol"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Evaluate Selection"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Trim Trailing Whitespace"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent to Spaces"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Convert Indent to Tabs"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Auto Indent"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Find in Files..."
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Contextual Help"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Toggle Bookmark"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Go to Next Bookmark"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Go to Previous Bookmark"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Remove All Bookmarks"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Go to Function..."
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Go to Line..."
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Toggle Breakpoint"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Remove All Breakpoints"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Go to Next Breakpoint"
+msgstr ""
+
+#: editor/plugins/script_text_editor.cpp
+msgid "Go to Previous Breakpoint"
+msgstr ""
+
+#: editor/plugins/shader_editor_plugin.cpp
+msgid ""
+"This shader has been modified on on disk.\n"
+"What action should be taken?"
+msgstr ""
+
+#: editor/plugins/shader_editor_plugin.cpp
+msgid "Shader"
+msgstr ""
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "This skeleton has no bones, create some children Bone2D nodes."
+msgstr ""
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Set Rest Pose to Bones"
+msgstr ""
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr ""
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Skeleton2D"
+msgstr ""
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Reset to Rest Pose"
+msgstr ""
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Overwrite Rest Pose"
+msgstr ""
+
+#: editor/plugins/skeleton_editor_plugin.cpp
+msgid "Create physical bones"
+msgstr ""
+
+#: editor/plugins/skeleton_editor_plugin.cpp
+msgid "Skeleton"
+msgstr ""
+
+#: editor/plugins/skeleton_editor_plugin.cpp
+msgid "Create physical skeleton"
+msgstr ""
+
+#: editor/plugins/skeleton_ik_editor_plugin.cpp
+msgid "Play IK"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front Perspective"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Orthogonal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear Perspective"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [auto]"
+msgstr ""
+
+#. TRANSLATORS: This will be appended to the view name when Portal Occulusion is enabled.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid " [portals active]"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Aborted."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "X-Axis Transform."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Y-Axis Transform."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Z-Axis Transform."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Plane Transform."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#: editor/plugins/texture_region_editor_plugin.cpp
+#: editor/plugins/theme_editor_plugin.cpp scene/resources/visual_shader.cpp
+msgid "None"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate"
+msgstr ""
+
+#. TRANSLATORS: This refers to the movement that changes the position of an object.
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translating: "
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotating %s degrees."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Keying is disabled (no key inserted)."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Animation Key Inserted."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Pitch:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Yaw:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Size:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Objects Drawn:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Material Changes:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Shader Changes:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Surface Changes:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Draw Calls:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Vertices:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "FPS: %d (%s ms)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear View."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Align Transform with View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Align Rotation with View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "No parent to instance a child at."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp editor/scene_tree_dock.cpp
+msgid "This operation requires a single selected node."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Auto Orthogonal Enabled"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Lock View Rotation"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Normal"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Wireframe"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Overdraw"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Unshaded"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Environment"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Gizmos"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Information"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View FPS"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Half Resolution"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Audio Listener"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Enable Doppler"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Cinematic Preview"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Not available when using the GLES2 renderer."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Left"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Right"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Forward"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Backwards"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Up"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Down"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Speed Modifier"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Freelook Slow Modifier"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Toggle Camera Preview"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Rotation Locked"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid ""
+"To zoom further, change the camera's clipping planes (View -> Settings...)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid ""
+"Note: The FPS value displayed is the editor's framerate.\n"
+"It cannot be used as a reliable indication of in-game performance."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Convert Rooms"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "XForm Dialog"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid ""
+"Click to toggle between visibility states.\n"
+"\n"
+"Open eye: Gizmo is visible.\n"
+"Closed eye: Gizmo is hidden.\n"
+"Half-open eye: Gizmo is also visible through opaque surfaces (\"x-ray\")."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Snap Nodes to Floor"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Couldn't find a solid floor to snap the selection to."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Local Space"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Snap"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Converts rooms for portal culling."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Top View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Front View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Left View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Right View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Orbit View Down"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Orbit View Left"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Orbit View Right"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Orbit View Up"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Orbit View 180"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Switch Perspective/Orthogonal View"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Insert Animation Key"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Focus Origin"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Focus Selection"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Toggle Freelook"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Transform"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Snap Object to Floor"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Dialog..."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "1 Viewport"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports (Alt)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports (Alt)"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "4 Viewports"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Gizmos"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Origin"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Grid"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Portal Culling"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Occlusion Culling"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Settings..."
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Snap Settings"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate Snap:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Snap (deg.):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Snap (%):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Viewport Settings"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective FOV (deg.):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Near:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Far:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Change"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate:"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate (deg.):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale (ratio):"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Type"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Pre"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Post"
+msgstr ""
+
+#: editor/plugins/spatial_editor_plugin.cpp
+msgid "Unnamed Gizmo"
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Create Mesh2D"
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Mesh2D Preview"
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Create Polygon2D"
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Polygon2D Preview"
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Create CollisionPolygon2D"
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "CollisionPolygon2D Preview"
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Create LightOccluder2D"
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "LightOccluder2D Preview"
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Sprite is empty!"
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Can't convert a sprite using animation frames to mesh."
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Invalid geometry, can't replace by mesh."
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Convert to Mesh2D"
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Invalid geometry, can't create polygon."
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Convert to Polygon2D"
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Invalid geometry, can't create collision polygon."
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Create CollisionPolygon2D Sibling"
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Invalid geometry, can't create light occluder."
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Create LightOccluder2D Sibling"
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Sprite"
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Simplification: "
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Shrink (Pixels): "
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Grow (Pixels): "
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Update Preview"
+msgstr ""
+
+#: editor/plugins/sprite_editor_plugin.cpp
+msgid "Settings:"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "No Frames Selected"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add %d Frame(s)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Frame"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Unable to load images"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "ERROR: Couldn't load frame resource!"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Resource clipboard is empty or not a texture!"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Paste Frame"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Empty"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation FPS"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "(empty)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Move Frame"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animations:"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "New Animation"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Speed:"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Loop"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animation Frames:"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add a Texture from File"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Frames from a Sprite Sheet"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (Before)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (After)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Move (Before)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Move (After)"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Select Frames"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Horizontal:"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Vertical:"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Select/Clear All Frames"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Create Frames from Sprite Sheet"
+msgstr ""
+
+#: editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "SpriteFrames"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Set Region Rect"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Set Margin"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Snap Mode:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Pixel Snap"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Grid Snap"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Auto Slice"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Offset:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Step:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "Separation:"
+msgstr ""
+
+#: editor/plugins/texture_region_editor_plugin.cpp
+msgid "TextureRegion"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Colors"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Fonts"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Icons"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Styleboxes"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "{num} color(s)"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "No colors found."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "{num} constant(s)"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "No constants found."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "{num} font(s)"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "No fonts found."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "{num} icon(s)"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "No icons found."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "{num} stylebox(es)"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "No styleboxes found."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "{num} currently selected"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Nothing was selected for the import."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Importing Theme Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Importing items {n}/{n}"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Updating the editor"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Finalizing"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Filter:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "With Data"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Select by data type:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Select all visible color items."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Select all visible color items and their data."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Deselect all visible color items."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Select all visible constant items."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Select all visible constant items and their data."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Deselect all visible constant items."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Select all visible font items."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Select all visible font items and their data."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Deselect all visible font items."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Select all visible icon items."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Select all visible icon items and their data."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Deselect all visible icon items."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Select all visible stylebox items."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Select all visible stylebox items and their data."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Deselect all visible stylebox items."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid ""
+"Caution: Adding icon data may considerably increase the size of your Theme "
+"resource."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Collapse types."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Expand types."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Select all Theme items."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Select With Data"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Select all Theme items with item data."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Deselect All"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Deselect all Theme items."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Import Selected"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid ""
+"Import Items tab has some items selected. Selection will be lost upon "
+"closing this window.\n"
+"Close anyway?"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid ""
+"Select a theme type from the list to edit its items.\n"
+"You can add a custom type or import a type with its items from another theme."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove All Color Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Rename Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove All Constant Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove All Font Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove All Icon Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove All StyleBox Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid ""
+"This theme type is empty.\n"
+"Add more items to it manually or by importing from another theme."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add Color Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add Constant Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add Font Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add Icon Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add Stylebox Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Rename Color Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Rename Constant Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Rename Font Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Rename Icon Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Rename Stylebox Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Invalid file, not a Theme resource."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Invalid file, same as the edited Theme resource."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Manage Theme Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Edit Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Types:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add Type:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add Item:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add StyleBox Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove Items:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove Class Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove Custom Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Remove All Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add Theme Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Old Name:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Import Items"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Default Theme"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Editor Theme"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Select Another Theme Resource:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Another Theme"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Confirm Item Rename"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Cancel Item Rename"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Override Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Unpin this StyleBox as a main style."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid ""
+"Pin this StyleBox as a main style. Editing its properties will update the "
+"same properties in all other StyleBoxes of this type."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add Type"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add Item Type"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Node Types:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Show Default"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Show default type items alongside items that have been overridden."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Override All"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Override all default type items."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Theme:"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Manage Items..."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add, remove, organize and import Theme items."
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Add Preview"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Default Preview"
+msgstr ""
+
+#: editor/plugins/theme_editor_plugin.cpp
+msgid "Select UI Scene:"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid ""
+"Toggle the control picker, allowing to visually select control types for "
+"edit."
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Toggle Button"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Disabled Button"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Disabled Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Check Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Checked Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Radio Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Checked Radio Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Named Separator"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Submenu"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Subitem 1"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Subitem 2"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Has"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Many"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Disabled LineEdit"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Tab 1"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Tab 2"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Tab 3"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Editable Item"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Subtree"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Has,Many,Options"
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Invalid path, the PackedScene resource was probably moved or removed."
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Invalid PackedScene resource, must have a Control node at its root."
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Invalid file, not a PackedScene resource."
+msgstr ""
+
+#: editor/plugins/theme_editor_preview.cpp
+msgid "Reload the scene to reflect its most actual state."
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase Selection"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Fix Invalid Tiles"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cut Selection"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Paint TileMap"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Line Draw"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rectangle Paint"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Bucket Fill"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase TileMap"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Find Tile"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Transpose"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Disable Autotile"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Enable Priority"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Filter tiles"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Give a TileSet resource to this TileMap to use its tiles."
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Paint Tile"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid ""
+"Shift+LMB: Line Draw\n"
+"Shift+Command+LMB: Rectangle Paint"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid ""
+"Shift+LMB: Line Draw\n"
+"Shift+Ctrl+LMB: Rectangle Paint"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Pick Tile"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate Left"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate Right"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Flip Horizontally"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Flip Vertically"
+msgstr ""
+
+#: editor/plugins/tile_map_editor_plugin.cpp
+msgid "Clear Transform"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Add Texture(s) to TileSet."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Remove selected Texture from TileSet."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from Scene"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from Scene"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "New Single Tile"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "New Autotile"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "New Atlas"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Next Coordinate"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Select the next shape, subtile, or Tile."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Previous Coordinate"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Select the previous shape, subtile, or Tile."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Region"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Collision"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Occlusion"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Navigation"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Bitmask"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Priority"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Icon"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Z Index"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Region Mode"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Collision Mode"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Occlusion Mode"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Navigation Mode"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Bitmask Mode"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Priority Mode"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Icon Mode"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Z Index Mode"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Copy bitmask."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Paste bitmask."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Erase bitmask."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create a new rectangle."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "New Rectangle"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create a new polygon."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "New Polygon"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Delete Selected Shape"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Keep polygon inside region Rect."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Enable snap and show grid (configurable via the Inspector)."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Display Tile Names (Hold Alt Key)"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid ""
+"Add or select a texture on the left panel to edit the tiles bound to it."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Remove selected texture? This will remove all tiles which use it."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "You haven't selected a texture to remove."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from scene? This will overwrite all current tiles."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from scene?"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Remove Texture"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "%s file(s) were not added because was already on the list."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid ""
+"Drag handles to edit Rect.\n"
+"Click on another Tile to edit it."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Delete selected Rect."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid ""
+"Select current edited sub-tile.\n"
+"Click on another Tile to edit it."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Delete polygon."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid ""
+"LMB: Set bit on.\n"
+"RMB: Set bit off.\n"
+"Shift+LMB: Set wildcard bit.\n"
+"Click on another Tile to edit it."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid ""
+"Select sub-tile to use as icon, this will be also used on invalid autotile "
+"bindings.\n"
+"Click on another Tile to edit it."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid ""
+"Select sub-tile to change its priority.\n"
+"Click on another Tile to edit it."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid ""
+"Select sub-tile to change its z index.\n"
+"Click on another Tile to edit it."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Set Tile Region"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create Tile"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Set Tile Icon"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Edit Tile Bitmask"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Edit Collision Polygon"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Edit Occlusion Polygon"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Edit Navigation Polygon"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Paste Tile Bitmask"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Clear Tile Bitmask"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Make Polygon Concave"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Make Polygon Convex"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Remove Tile"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Remove Collision Polygon"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Remove Occlusion Polygon"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Remove Navigation Polygon"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Edit Tile Priority"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Edit Tile Z Index"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Make Convex"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Make Concave"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create Collision Polygon"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create Occlusion Polygon"
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "This property can't be changed."
+msgstr ""
+
+#: editor/plugins/tile_set_editor_plugin.cpp
+msgid "TileSet"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "No VCS addons are available."
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "Error"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "No files added to stage"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "Commit"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "VCS Addon is not initialized"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "Version Control System"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "Initialize"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "Staging area"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "Detect new changes"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "Changes"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "Modified"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "Renamed"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "Deleted"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "Typechange"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "Stage Selected"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "Stage All"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "Commit Changes"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "View file diffs before committing them to the latest version"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "No file diff is active"
+msgstr ""
+
+#: editor/plugins/version_control_editor_plugin.cpp
+msgid "Detect changes in file diff"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "(GLES3 only)"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Add Output"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Scalar"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Vector"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Boolean"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Sampler"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Add input port"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Add output port"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Change input port type"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Change output port type"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Change input port name"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Change output port name"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Remove input port"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Remove output port"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Set expression"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Resize VisualShader node"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Set Uniform Name"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Set Input Default Port"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Add Node to Visual Shader"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Node(s) Moved"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Duplicate Nodes"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Paste Nodes"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Delete Nodes"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Visual Shader Input Type Changed"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "UniformRef Name Changed"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Vertex"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Fragment"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Light"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Show resulted shader code."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Create Shader Node"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Color function."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Color operator."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Grayscale function."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Converts HSV vector to RGB equivalent."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Converts RGB vector to HSV equivalent."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Sepia function."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Burn operator."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Darken operator."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Difference operator."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Dodge operator."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "HardLight operator."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Lighten operator."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Overlay operator."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Screen operator."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "SoftLight operator."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Color constant."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Color uniform."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the boolean result of the %s comparison between two parameters."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Equal (==)"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Greater Than (>)"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Greater Than or Equal (>=)"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"Returns an associated vector if the provided scalars are equal, greater or "
+"less."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"Returns the boolean result of the comparison between INF and a scalar "
+"parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"Returns the boolean result of the comparison between NaN and a scalar "
+"parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Less Than (<)"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Less Than or Equal (<=)"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Not Equal (!=)"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"Returns an associated vector if the provided boolean value is true or false."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"Returns an associated scalar if the provided boolean value is true or false."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the boolean result of the comparison between two parameters."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"Returns the boolean result of the comparison between INF (or NaN) and a "
+"scalar parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Boolean constant."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Boolean uniform."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "'%s' input parameter for all shader modes."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Input parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "'%s' input parameter for vertex and fragment shader modes."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "'%s' input parameter for fragment and light shader modes."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "'%s' input parameter for fragment shader mode."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "'%s' input parameter for light shader mode."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "'%s' input parameter for vertex shader mode."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "'%s' input parameter for vertex and fragment shader mode."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Scalar function."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Scalar operator."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "E constant (2.718282). Represents the base of the natural logarithm."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Epsilon constant (0.00001). Smallest possible scalar number."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Phi constant (1.618034). Golden ratio."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Pi/4 constant (0.785398) or 45 degrees."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Pi/2 constant (1.570796) or 90 degrees."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Pi constant (3.141593) or 180 degrees."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Tau constant (6.283185) or 360 degrees."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Sqrt2 constant (1.414214). Square root of 2."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the absolute value of the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the arc-cosine of the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the inverse hyperbolic cosine of the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the arc-sine of the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the inverse hyperbolic sine of the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the arc-tangent of the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the arc-tangent of the parameters."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the inverse hyperbolic tangent of the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"Finds the nearest integer that is greater than or equal to the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Constrains a value to lie between two further values."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the cosine of the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the hyperbolic cosine of the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Converts a quantity in radians to degrees."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Base-e Exponential."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Base-2 Exponential."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Finds the nearest integer less than or equal to the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Computes the fractional part of the argument."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the inverse of the square root of the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Natural logarithm."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Base-2 logarithm."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the greater of two values."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the lesser of two values."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Linear interpolation between two scalars."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the opposite value of the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "1.0 - scalar"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"Returns the value of the first parameter raised to the power of the second."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Converts a quantity in degrees to radians."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "1.0 / scalar"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Finds the nearest integer to the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Finds the nearest even integer to the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Clamps the value between 0.0 and 1.0."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Extracts the sign of the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the sine of the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the hyperbolic sine of the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the square root of the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"SmoothStep function( scalar(edge0), scalar(edge1), scalar(x) ).\n"
+"\n"
+"Returns 0.0 if 'x' is smaller than 'edge0' and 1.0 if x is larger than "
+"'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 "
+"using Hermite polynomials."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"Step function( scalar(edge), scalar(x) ).\n"
+"\n"
+"Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the tangent of the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the hyperbolic tangent of the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Finds the truncated value of the parameter."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Adds scalar to scalar."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Divides scalar by scalar."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Multiplies scalar by scalar."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the remainder of the two scalars."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Subtracts scalar from scalar."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Scalar constant."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Scalar uniform."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Perform the cubic texture lookup."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Perform the texture lookup."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Cubic texture uniform lookup."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "2D texture uniform lookup."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "2D texture uniform lookup with triplanar."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Transform function."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"Calculate the outer product of a pair of vectors.\n"
+"\n"
+"OuterProduct treats the first parameter 'c' as a column vector (matrix with "
+"one column) and the second parameter 'r' as a row vector (matrix with one "
+"row) and does a linear algebraic matrix multiply 'c * r', yielding a matrix "
+"whose number of rows is the number of components in 'c' and whose number of "
+"columns is the number of components in 'r'."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Composes transform from four vectors."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Decomposes transform to four vectors."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Calculates the determinant of a transform."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Calculates the inverse of a transform."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Calculates the transpose of a transform."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Multiplies transform by transform."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Multiplies vector by transform."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Transform constant."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Transform uniform."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Vector function."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Vector operator."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Composes vector from three scalars."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Decomposes vector to three scalars."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Calculates the cross product of two vectors."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the distance between two points."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Calculates the dot product of two vectors."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"Returns the vector that points in the same direction as a reference vector. "
+"The function has three vector parameters : N, the vector to orient, I, the "
+"incident vector, and Nref, the reference vector. If the dot product of I and "
+"Nref is smaller than zero the return value is N. Otherwise -N is returned."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Calculates the length of a vector."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Linear interpolation between two vectors."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Linear interpolation between two vectors using scalar."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Calculates the normalize product of vector."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "1.0 - vector"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "1.0 / vector"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"Returns the vector that points in the direction of reflection ( a : incident "
+"vector, b : normal vector )."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the vector that points in the direction of refraction."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"SmoothStep function( vector(edge0), vector(edge1), vector(x) ).\n"
+"\n"
+"Returns 0.0 if 'x' is smaller than 'edge0' and 1.0 if 'x' is larger than "
+"'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 "
+"using Hermite polynomials."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"SmoothStep function( scalar(edge0), scalar(edge1), vector(x) ).\n"
+"\n"
+"Returns 0.0 if 'x' is smaller than 'edge0' and 1.0 if 'x' is larger than "
+"'edge1'. Otherwise the return value is interpolated between 0.0 and 1.0 "
+"using Hermite polynomials."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"Step function( vector(edge), vector(x) ).\n"
+"\n"
+"Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"Step function( scalar(edge), vector(x) ).\n"
+"\n"
+"Returns 0.0 if 'x' is smaller than 'edge' and otherwise 1.0."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Adds vector to vector."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Divides vector by vector."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Multiplies vector by vector."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Returns the remainder of the two vectors."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Subtracts vector from vector."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Vector constant."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Vector uniform."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"Custom Godot Shader Language expression, with custom amount of input and "
+"output ports. This is a direct injection of code into the vertex/fragment/"
+"light function, do not use it to write the function declarations inside."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"Returns falloff based on the dot product of surface normal and view "
+"direction of camera (pass associated inputs to it)."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"Custom Godot Shader Language expression, which is placed on top of the "
+"resulted shader. You can place various function definitions inside and call "
+"it later in the Expressions. You can also declare varyings, uniforms and "
+"constants."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "A reference to an existing uniform."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "(Fragment/Light mode only) Scalar derivative function."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "(Fragment/Light mode only) Vector derivative function."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"(Fragment/Light mode only) (Vector) Derivative in 'x' using local "
+"differencing."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"(Fragment/Light mode only) (Scalar) Derivative in 'x' using local "
+"differencing."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"(Fragment/Light mode only) (Vector) Derivative in 'y' using local "
+"differencing."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"(Fragment/Light mode only) (Scalar) Derivative in 'y' using local "
+"differencing."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"(Fragment/Light mode only) (Vector) Sum of absolute derivative in 'x' and "
+"'y'."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid ""
+"(Fragment/Light mode only) (Scalar) Sum of absolute derivative in 'x' and "
+"'y'."
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "VisualShader"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Edit Visual Property:"
+msgstr ""
+
+#: editor/plugins/visual_shader_editor_plugin.cpp
+msgid "Visual Shader Mode Changed"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Runnable"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Delete preset '%s'?"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid ""
+"Failed to export the project for platform '%s'.\n"
+"Export templates seem to be missing or invalid."
+msgstr ""
+
+#: editor/project_export.cpp
+msgid ""
+"Failed to export the project for platform '%s'.\n"
+"This might be due to a configuration issue in the export preset or your "
+"export settings."
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Release"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Exporting All"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "The given export path doesn't exist:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export templates for this platform are missing/corrupted:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Presets"
+msgstr ""
+
+#: editor/project_export.cpp editor/project_settings_editor.cpp
+msgid "Add..."
+msgstr ""
+
+#: editor/project_export.cpp
+msgid ""
+"If checked, the preset will be available for use in one-click deploy.\n"
+"Only one preset per platform may be marked as runnable."
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export Path"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Resources"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export all resources in the project"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export selected scenes (and dependencies)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export selected resources (and dependencies)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export Mode:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Resources to export:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid ""
+"Filters to export non-resource files/folders\n"
+"(comma-separated, e.g: *.json, *.txt, docs/*)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid ""
+"Filters to exclude files/folders from project\n"
+"(comma-separated, e.g: *.json, *.txt, docs/*)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Features"
+msgstr "Mga Tampok"
+
+#: editor/project_export.cpp
+msgid "Custom (comma-separated):"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Feature List:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Script"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "GDScript Export Mode:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Text"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Compiled Bytecode (Faster Loading)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Encrypted (Provide Key Below)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Invalid Encryption Key (must be 64 hexadecimal characters long)"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "GDScript Encryption Key (256-bits as hexadecimal):"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export PCK/Zip"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export Project"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export mode?"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export All"
+msgstr ""
+
+#: editor/project_export.cpp editor/project_manager.cpp
+msgid "ZIP File"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Godot Game Pack"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export templates for this platform are missing:"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Manage Export Templates"
+msgstr ""
+
+#: editor/project_export.cpp
+msgid "Export With Debug"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "The path specified doesn't exist."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Error opening package file (it's not in ZIP format)."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Invalid \".zip\" project file; it doesn't contain a \"project.godot\" file."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Please choose an empty folder."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Please choose a \"project.godot\" or \".zip\" file."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "This directory already contains a Godot project."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "New Game Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Imported Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Invalid project name."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Couldn't create folder."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "There is already a folder in this path with the specified name."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "It would be a good idea to name your project."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Invalid project path (changed anything?)."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Couldn't load project.godot in project path (error %d). It may be missing or "
+"corrupted."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Couldn't edit project.godot in project path."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Couldn't create project.godot in project path."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Error opening package file, not in ZIP format."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "The following files failed extraction from package:"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Package installed successfully!"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Rename Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Import Existing Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Import & Edit"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Create New Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Create & Edit"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Install Project:"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Install & Edit"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Project Name:"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Project Path:"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Project Installation Path:"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Renderer:"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "OpenGL ES 3.0"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Not supported by your GPU drivers."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Higher visual quality\n"
+"All features available\n"
+"Incompatible with older hardware\n"
+"Not recommended for web games"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "OpenGL ES 2.0"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Lower visual quality\n"
+"Some features not available\n"
+"Works on most hardware\n"
+"Recommended for web games"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Renderer can be changed later, but scenes may need to be adjusted."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Unnamed Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Missing Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Error: Project is missing on the filesystem."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Can't open project at '%s'."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Are you sure to open more than one project?"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"The following project settings file does not specify the version of Godot "
+"through which it was created.\n"
+"\n"
+"%s\n"
+"\n"
+"If you proceed with opening it, it will be converted to Godot's current "
+"configuration file format.\n"
+"Warning: You won't be able to open the project with previous versions of the "
+"engine anymore."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"The following project settings file was generated by an older engine "
+"version, and needs to be converted for this version:\n"
+"\n"
+"%s\n"
+"\n"
+"Do you want to convert it?\n"
+"Warning: You won't be able to open the project with previous versions of the "
+"engine anymore."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"The project settings were created by a newer engine version, whose settings "
+"are not compatible with this version."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Can't run project: no main scene defined.\n"
+"Please edit the project and set the main scene in the Project Settings under "
+"the \"Application\" category."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Can't run project: Assets need to be imported.\n"
+"Please edit the project to trigger the initial import."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Are you sure to run %d projects at once?"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Remove %d projects from the list?"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Remove this project from the list?"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Remove all missing projects from the list?\n"
+"The project folders' contents won't be modified."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Language changed.\n"
+"The interface will update after restarting the editor or project manager."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"Are you sure to scan %s folders for existing Godot projects?\n"
+"This could take a while."
+msgstr ""
+
+#. TRANSLATORS: This refers to the application where users manage their Godot projects.
+#: editor/project_manager.cpp
+msgid "Project Manager"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Local Projects"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Loading, please wait..."
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Last Modified"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Edit Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Run Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Scan"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Scan Projects"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Select a Folder to Scan"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "New Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Import Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Remove Project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Remove Missing"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "About"
+msgstr "Tungkol sa Godot"
+
+#: editor/project_manager.cpp
+msgid "Asset Library Projects"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Restart Now"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Remove All"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Also delete project contents (no undo!)"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Can't run project"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"You currently don't have any projects.\n"
+"Would you like to explore official example projects in the Asset Library?"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid "Filter projects"
+msgstr ""
+
+#: editor/project_manager.cpp
+msgid ""
+"This field filters projects by name and last path component.\n"
+"To filter projects by name and full path, the query must contain at least "
+"one `/` character."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Physical Key"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Key "
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Joy Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Joy Axis"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Mouse Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid ""
+"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or "
+"'\"'"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "An action with the name '%s' already exists."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Rename Input Action Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Change Action deadzone"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Input Action Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "All Devices"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Device"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid " (Physical)"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "Press a Key..."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Mouse Button Index:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Left Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Right Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Middle Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Up Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Down Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Left Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Right Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "X Button 1"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "X Button 2"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Joypad Axis Index:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Axis"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Joypad Button Index:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Erase Input Action"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Erase Input Action Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Button"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Left Button."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Right Button."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Middle Button."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Up."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Wheel Down."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Global Property"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Select a setting item first!"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "No property '%s' exists."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Setting '%s' is internal, and it can't be deleted."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Delete Item"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid ""
+"Invalid action name. It cannot be empty nor contain '/', ':', '=', '\\' or "
+"'\"'."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add Input Action"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Error saving settings."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Settings saved OK."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Moved Input Action Event"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Override for Feature"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Add %d Translations"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remove Translation"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Translation Resource Remap: Add %d Path(s)"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Translation Resource Remap: Add %d Remap(s)"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Change Resource Remap Language"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remove Resource Remap"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remove Resource Remap Option"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Changed Locale Filter"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Changed Locale Filter Mode"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Project Settings (project.godot)"
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "General"
+msgstr "Pangkalahatan"
+
+#: editor/project_settings_editor.cpp
+msgid "Override For..."
+msgstr ""
+
+#: editor/project_settings_editor.cpp editor/settings_config_dialog.cpp
+msgid "The editor must be restarted for changes to take effect."
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Input Map"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Action:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Action"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Deadzone"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Device:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Index:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Localization"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Translations"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Translations:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remaps"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Resources:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Remaps by Locale:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Locale"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Locales Filter"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Show All Locales"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Show Selected Locales Only"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Filter mode:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Locales:"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "AutoLoad"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Plugins"
+msgstr ""
+
+#: editor/project_settings_editor.cpp
+msgid "Import Defaults"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Preset..."
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Zero"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Easing In-Out"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Easing Out-In"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "File..."
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Dir..."
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Assign"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Select Node"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Error loading file: Not a resource!"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Pick a Node"
+msgstr ""
+
+#: editor/property_editor.cpp
+msgid "Bit %d, val %d."
+msgstr ""
+
+#: editor/property_selector.cpp
+msgid "Select Property"
+msgstr ""
+
+#: editor/property_selector.cpp
+msgid "Select Virtual Method"
+msgstr ""
+
+#: editor/property_selector.cpp
+msgid "Select Method"
+msgstr ""
+
+#: editor/rename_dialog.cpp editor/scene_tree_dock.cpp
+msgid "Batch Rename"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Replace:"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Prefix:"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Suffix:"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Use Regular Expressions"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Advanced Options"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Substitute"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Node name"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Node's parent name, if available"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Node type"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Current scene name"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Root node name"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid ""
+"Sequential integer counter.\n"
+"Compare counter options."
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Per-level Counter"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "If set, the counter restarts for each group of child nodes."
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Initial value for the counter"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Step"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Amount by which counter is incremented for each node"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Padding"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid ""
+"Minimum number of digits for the counter.\n"
+"Missing digits are padded with leading zeros."
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Post-Process"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Style"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Keep"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "PascalCase to snake_case"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "snake_case to PascalCase"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Case"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "To Lowercase"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "To Uppercase"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Reset"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "Regular Expression Error:"
+msgstr ""
+
+#: editor/rename_dialog.cpp
+msgid "At character %s"
+msgstr ""
+
+#: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp
+msgid "Reparent Node"
+msgstr ""
+
+#: editor/reparent_dialog.cpp
+msgid "Reparent Location (Select new Parent):"
+msgstr ""
+
+#: editor/reparent_dialog.cpp
+msgid "Keep Global Transform"
+msgstr ""
+
+#: editor/reparent_dialog.cpp editor/scene_tree_dock.cpp
+msgid "Reparent"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Run Mode:"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Current Scene"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Main Scene"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Main Scene Arguments:"
+msgstr ""
+
+#: editor/run_settings_dialog.cpp
+msgid "Scene Run Settings"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "No parent to instance the scenes at."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Error loading scene from %s"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Cannot instance the scene '%s' because the current scene exists within one "
+"of its nodes."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Instance Scene(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Replace with Branch Scene"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Instance Child Scene"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Can't paste root node into the same scene."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Paste Node(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Detach Script"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "This operation can't be done on the tree root."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Move Node In Parent"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Move Nodes In Parent"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Duplicate Node(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Can't reparent nodes in inherited scenes, order of nodes can't change."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Node must belong to the edited scene to become root."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Instantiated scenes can't become root"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Make node as Root"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Delete %d nodes and any children?"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Delete %d nodes?"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Delete the root node \"%s\"?"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Delete node \"%s\" and its children?"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Delete node \"%s\"?"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Saving the branch as a scene requires having a scene open in the editor."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Saving the branch as a scene requires selecting only one node, but you have "
+"selected %d nodes."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Can't save the root node branch as an instanced scene.\n"
+"To create an editable copy of the current scene, duplicate it using the "
+"FileSystem dock context menu\n"
+"or create an inherited scene using Scene > New Inherited Scene... instead."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Can't save the branch of an already instanced scene.\n"
+"To create a variation of a scene, you can make an inherited scene based on "
+"the instanced scene using Scene > New Inherited Scene... instead."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Save New Scene As..."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Disabling \"editable_instance\" will cause all properties of the node to be "
+"reverted to their default."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Enabling \"Load As Placeholder\" will disable \"Editable Children\" and "
+"cause all properties of the node to be reverted to their default."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Make Local"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "New Scene Root"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Create Root Node:"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "2D Scene"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "3D Scene"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "User Interface"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Other Node"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes from a foreign scene!"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes the current scene inherits from!"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "This operation can't be done on instanced scenes."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Attach Script"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Cut Node(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Remove Node(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Change type of node(s)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Couldn't save new scene. Likely dependencies (instances) couldn't be "
+"satisfied."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Error saving scene."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Error duplicating scene to save it."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Sub-Resources"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear Inheritance"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Editable Children"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Load As Placeholder"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Cannot attach a script: there are no languages registered.\n"
+"This is probably because this editor was built with all language modules "
+"disabled."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Add Child Node"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Expand/Collapse All"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Change Type"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Reparent to New Node"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Make Scene Root"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Merge From Scene"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp
+msgid "Save Branch as Scene"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp editor/script_editor_debugger.cpp
+msgid "Copy Node Path"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Delete (No Confirm)"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Add/Create a New Node."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"Instance a scene file as a Node. Creates an inherited scene if no root node "
+"exists."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Attach a new or existing script to the selected node."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Detach the script from the selected node."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Remote"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid ""
+"If selected, the Remote scene tree dock will cause the project to stutter "
+"every time it updates.\n"
+"Switch back to the Local scene tree dock to improve performance."
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Local"
+msgstr ""
+
+#: editor/scene_tree_dock.cpp
+msgid "Clear Inheritance? (No Undo!)"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Toggle Visible"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Unlock Node"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Button Group"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "(Connecting From)"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Node configuration warning:"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Node has %s connection(s) and %s group(s).\n"
+"Click to show signals dock."
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Node has %s connection(s).\n"
+"Click to show signals dock."
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Node is in %s group(s).\n"
+"Click to show groups dock."
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Open Script:"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Node is locked.\n"
+"Click to unlock it."
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"Children are not selectable.\n"
+"Click to make selectable."
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Toggle Visibility"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid ""
+"AnimationPlayer is pinned.\n"
+"Click to unpin."
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Invalid node name, the following characters are not allowed:"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Rename Node"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Scene Tree (Nodes):"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Node Configuration Warning!"
+msgstr ""
+
+#: editor/scene_tree_editor.cpp
+msgid "Select a Node"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Path is empty."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Filename is empty."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Path is not local."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid base path."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "A directory with the same name exists."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "File does not exist."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid extension."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Wrong extension chosen."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Error loading template '%s'"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Error - Could not create script in filesystem."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Error loading script from %s"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Overrides"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "N/A"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Open Script / Choose Location"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Open Script"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "File exists, it will be reused."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid path."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid class name."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Invalid inherited parent name or path."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Script path/name is valid."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Allowed: a-z, A-Z, 0-9, _ and ."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Built-in script (into scene file)."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Will create a new script file."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Will load an existing script file."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Script file already exists."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid ""
+"Note: Built-in scripts have some limitations and can't be edited using an "
+"external editor."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid ""
+"Warning: Having the script name be the same as a built-in type is usually "
+"not desired."
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Class Name:"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Template:"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Built-in Script:"
+msgstr ""
+
+#: editor/script_create_dialog.cpp
+msgid "Attach Node Script"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Remote "
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Bytes:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Warning:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Error:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "C++ Error"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "C++ Error:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "C++ Source"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Source:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "C++ Source:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Stack Trace"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Errors"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Child process connected."
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Copy Error"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Open C++ Source on GitHub"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Video RAM"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Skip Breakpoints"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Inspect Previous Instance"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Inspect Next Instance"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Stack Frames"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Profiler"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Network Profiler"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Monitor"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Value"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Monitors"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Pick one or more items from the list to display the graph."
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "List of Video Memory Usage by Resource:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Total:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Export list to a CSV file"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Resource Path"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Type"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Format"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Usage"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Misc"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Clicked Control:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Clicked Control Type:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Live Edit Root:"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Set From Tree"
+msgstr ""
+
+#: editor/script_editor_debugger.cpp
+msgid "Export measures as CSV"
+msgstr ""
+
+#: editor/settings_config_dialog.cpp
+msgid "Erase Shortcut"
+msgstr ""
+
+#: editor/settings_config_dialog.cpp
+msgid "Restore Shortcut"
+msgstr ""
+
+#: editor/settings_config_dialog.cpp
+msgid "Change Shortcut"
+msgstr ""
+
+#: editor/settings_config_dialog.cpp
+msgid "Editor Settings"
+msgstr ""
+
+#: editor/settings_config_dialog.cpp
+msgid "Shortcuts"
+msgstr ""
+
+#: editor/settings_config_dialog.cpp
+msgid "Binding"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Light Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change AudioStreamPlayer3D Emission Angle"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Camera FOV"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Camera Size"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Notifier AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Particles AABB"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Probe Extents"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp
+msgid "Change Sphere Shape Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp modules/csg/csg_gizmos.cpp
+msgid "Change Box Shape Extents"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Height"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Cylinder Shape Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Cylinder Shape Height"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Change Ray Shape Length"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Room Point Position"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Portal Point Position"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Radius"
+msgstr ""
+
+#: editor/spatial_editor_gizmos.cpp
+msgid "Set Occluder Sphere Position"
+msgstr ""
+
+#: modules/csg/csg_gizmos.cpp
+msgid "Change Cylinder Radius"
+msgstr ""
+
+#: modules/csg/csg_gizmos.cpp
+msgid "Change Cylinder Height"
+msgstr ""
+
+#: modules/csg/csg_gizmos.cpp
+msgid "Change Torus Inner Radius"
+msgstr ""
+
+#: modules/csg/csg_gizmos.cpp
+msgid "Change Torus Outer Radius"
+msgstr ""
+
+#: modules/gdnative/gdnative_library_editor_plugin.cpp
+msgid "Select the dynamic library for this entry"
+msgstr ""
+
+#: modules/gdnative/gdnative_library_editor_plugin.cpp
+msgid "Select dependencies of the library for this entry"
+msgstr ""
+
+#: modules/gdnative/gdnative_library_editor_plugin.cpp
+msgid "Remove current entry"
+msgstr ""
+
+#: modules/gdnative/gdnative_library_editor_plugin.cpp
+msgid "Double click to create a new entry"
+msgstr ""
+
+#: modules/gdnative/gdnative_library_editor_plugin.cpp
+msgid "Platform:"
+msgstr ""
+
+#: modules/gdnative/gdnative_library_editor_plugin.cpp
+msgid "Platform"
+msgstr ""
+
+#: modules/gdnative/gdnative_library_editor_plugin.cpp
+msgid "Dynamic Library"
+msgstr ""
+
+#: modules/gdnative/gdnative_library_editor_plugin.cpp
+msgid "Add an architecture entry"
+msgstr ""
+
+#: modules/gdnative/gdnative_library_editor_plugin.cpp
+msgid "GDNativeLibrary"
+msgstr ""
+
+#: modules/gdnative/gdnative_library_singleton_editor.cpp
+msgid "Enabled GDNative Singleton"
+msgstr ""
+
+#: modules/gdnative/gdnative_library_singleton_editor.cpp
+msgid "Disabled GDNative Singleton"
+msgstr ""
+
+#: modules/gdnative/gdnative_library_singleton_editor.cpp
+msgid "Library"
+msgstr ""
+
+#: modules/gdnative/gdnative_library_singleton_editor.cpp
+msgid "Libraries: "
+msgstr ""
+
+#: modules/gdnative/register_types.cpp
+msgid "GDNative"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Step argument is zero!"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Not a script with an instance"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Not based on a script"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Not based on a resource file"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Invalid instance dictionary format (missing @path)"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Invalid instance dictionary format (can't load script at @path)"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Invalid instance dictionary format (invalid script at @path)"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Invalid instance dictionary (invalid subclasses)"
+msgstr ""
+
+#: modules/gdscript/gdscript_functions.cpp
+msgid "Object can't provide a length."
+msgstr ""
+
+#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp
+msgid "Export Mesh GLTF2"
+msgstr ""
+
+#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp
+msgid "Export GLTF..."
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Next Plane"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Previous Plane"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Plane:"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Next Floor"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Previous Floor"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Floor:"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "GridMap Delete Selection"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "GridMap Fill Selection"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "GridMap Paste Selection"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "GridMap Paint"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "GridMap Selection"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Grid Map"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Snap View"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Clip Disabled"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Clip Above"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Clip Below"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Edit X Axis"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Edit Y Axis"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Edit Z Axis"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Rotate X"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Rotate Y"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Rotate Z"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Back Rotate X"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Back Rotate Y"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Back Rotate Z"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Cursor Clear Rotation"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Paste Selects"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Clear Selection"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Fill Selection"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "GridMap Settings"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Pick Distance:"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Filter meshes"
+msgstr ""
+
+#: modules/gridmap/grid_map_editor_plugin.cpp
+msgid "Give a MeshLibrary resource to this GridMap to use its meshes."
+msgstr ""
+
+#: modules/lightmapper_cpu/lightmapper_cpu.cpp
+msgid "Begin Bake"
+msgstr ""
+
+#: modules/lightmapper_cpu/lightmapper_cpu.cpp
+msgid "Preparing data structures"
+msgstr ""
+
+#: modules/lightmapper_cpu/lightmapper_cpu.cpp
+msgid "Generate buffers"
+msgstr ""
+
+#: modules/lightmapper_cpu/lightmapper_cpu.cpp
+msgid "Direct lighting"
+msgstr ""
+
+#: modules/lightmapper_cpu/lightmapper_cpu.cpp
+msgid "Indirect lighting"
+msgstr ""
+
+#: modules/lightmapper_cpu/lightmapper_cpu.cpp
+msgid "Post processing"
+msgstr ""
+
+#: modules/lightmapper_cpu/lightmapper_cpu.cpp
+msgid "Plotting lightmaps"
+msgstr ""
+
+#: modules/mono/csharp_script.cpp
+msgid "Class name can't be a reserved keyword"
+msgstr ""
+
+#: modules/mono/csharp_script.cpp
+msgid "Build Solution"
+msgstr ""
+
+#: modules/mono/mono_gd/gd_mono_utils.cpp
+msgid "End of inner exception stack trace"
+msgstr ""
+
+#: modules/recast/navigation_mesh_editor_plugin.cpp
+msgid "Bake NavMesh"
+msgstr ""
+
+#: modules/recast/navigation_mesh_editor_plugin.cpp
+msgid "Clear the navigation mesh."
+msgstr ""
+
+#: modules/recast/navigation_mesh_generator.cpp
+msgid "Setting up Configuration..."
+msgstr ""
+
+#: modules/recast/navigation_mesh_generator.cpp
+msgid "Calculating grid size..."
+msgstr ""
+
+#: modules/recast/navigation_mesh_generator.cpp
+msgid "Creating heightfield..."
+msgstr ""
+
+#: modules/recast/navigation_mesh_generator.cpp
+msgid "Marking walkable triangles..."
+msgstr ""
+
+#: modules/recast/navigation_mesh_generator.cpp
+msgid "Constructing compact heightfield..."
+msgstr ""
+
+#: modules/recast/navigation_mesh_generator.cpp
+msgid "Eroding walkable area..."
+msgstr ""
+
+#: modules/recast/navigation_mesh_generator.cpp
+msgid "Partitioning..."
+msgstr ""
+
+#: modules/recast/navigation_mesh_generator.cpp
+msgid "Creating contours..."
+msgstr ""
+
+#: modules/recast/navigation_mesh_generator.cpp
+msgid "Creating polymesh..."
+msgstr ""
+
+#: modules/recast/navigation_mesh_generator.cpp
+msgid "Converting to native navigation mesh..."
+msgstr ""
+
+#: modules/recast/navigation_mesh_generator.cpp
+msgid "Navigation Mesh Generator Setup:"
+msgstr ""
+
+#: modules/recast/navigation_mesh_generator.cpp
+msgid "Parsing Geometry..."
+msgstr ""
+
+#: modules/recast/navigation_mesh_generator.cpp
+msgid "Done!"
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid ""
+"A node yielded without working memory, please read the docs on how to yield "
+"properly!"
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid ""
+"Node yielded, but did not return a function state in the first working "
+"memory."
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid ""
+"Return value must be assigned to first element of node working memory! Fix "
+"your node please."
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid "Node returned an invalid sequence output: "
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid "Found sequence bit but not the node in the stack, report bug!"
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid "Stack overflow with stack depth: "
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Signal Arguments"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Argument Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Argument name"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Set Variable Default Value"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Set Variable Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Input Port"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Output Port"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Port Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Port Name"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Override an existing built-in function."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Create a new function."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Variables:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Create a new variable."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Signals:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Create a new signal."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Name is not a valid identifier:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Name already in use by another func/var/signal:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Rename Function"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Rename Variable"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Rename Signal"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Function"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Delete input port"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Variable"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Signal"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Input Port"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Output Port"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Expression"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove VisualScript Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Duplicate VisualScript Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold %s to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold %s to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold %s to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Preload Node"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node(s)"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node(s) From Tree"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid ""
+"Can't drop properties because script '%s' is not used in this scene.\n"
+"Drop holding 'Shift' to just copy the signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Getter Property"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Setter Property"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Base Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Move Node(s)"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove VisualScript Node"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Connect Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Disconnect Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Connect Node Data"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Connect Node Sequence"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Script already has function '%s'"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Input Value"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Resize Comment"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Can't copy the function node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Paste VisualScript Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Can't create function with a function node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Can't create function of nodes from nodes of multiple functions."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Select at least one node with sequence port."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Try to only have one sequence input in selection."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Create Function"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Function"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Variable"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Editing Variable:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Signal"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Editing Signal:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Make Tool:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Members:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change Base Type:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Nodes..."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Function..."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "function_name"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Select or create a function to edit its graph."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Delete Selected"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Find Node Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Copy Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Cut Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Make Function"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Refresh Graph"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit Member"
+msgstr ""
+
+#: modules/visual_script/visual_script_flow_control.cpp
+msgid "Input type not iterable: "
+msgstr ""
+
+#: modules/visual_script/visual_script_flow_control.cpp
+msgid "Iterator became invalid"
+msgstr ""
+
+#: modules/visual_script/visual_script_flow_control.cpp
+msgid "Iterator became invalid: "
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Invalid index property name."
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Base object is not a Node!"
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Path does not lead Node!"
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Invalid index property name '%s' in node %s."
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid ": Invalid argument of type: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid ": Invalid arguments: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid "VariableGet not found in script: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid "VariableSet not found in script: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid "Custom node has no _step() method, can't process graph."
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid ""
+"Invalid return value from _step(), must be integer (seq out), or string "
+"(error)."
+msgstr ""
+
+#: modules/visual_script/visual_script_property_selector.cpp
+msgid "Search VisualScript"
+msgstr ""
+
+#: modules/visual_script/visual_script_property_selector.cpp
+msgid "Get %s"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Package name is missing."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Package segments must be of non-zero length."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "The character '%s' is not allowed in Android application package names."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "A digit cannot be the first character in a package segment."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "The character '%s' cannot be the first character in a package segment."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "The package must have at least one '.' separator."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Select device from the list"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Running on %s"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Exporting APK..."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Uninstalling..."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Installing to device, please wait..."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Could not install to device: %s"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Running on device..."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Could not execute on device."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Unable to find the 'apksigner' tool."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid ""
+"Android build template not installed in the project. Install it from the "
+"Project menu."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid ""
+"Either Debug Keystore, Debug User AND Debug Password settings must be "
+"configured OR none of them."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Debug keystore not configured in the Editor Settings nor in the preset."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid ""
+"Either Release Keystore, Release User AND Release Password settings must be "
+"configured OR none of them."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Release keystore incorrectly configured in the export preset."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "A valid Android SDK path is required in Editor Settings."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Invalid Android SDK path in Editor Settings."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Missing 'platform-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Unable to find Android SDK platform-tools' adb command."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Please check in the Android SDK directory specified in Editor Settings."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Missing 'build-tools' directory!"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Unable to find Android SDK build-tools' apksigner command."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Invalid public key for APK expansion."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Invalid package name:"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid ""
+"Invalid \"GodotPaymentV3\" module included in the \"android/modules\" "
+"project setting (changed in Godot 3.2.2).\n"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "\"Use Custom Build\" must be enabled to use the plugins."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid ""
+"\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\"."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "\"Export AAB\" is only valid when \"Use Custom Build\" is enabled."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid ""
+"'apksigner' could not be found.\n"
+"Please check the command is available in the Android SDK build-tools "
+"directory.\n"
+"The resulting %s is unsigned."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Signing debug %s..."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Signing release %s..."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Could not find keystore, unable to export."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "'apksigner' returned with error #%d"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Verifying %s..."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "'apksigner' verification of %s failed."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Exporting for Android"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Invalid filename! Android App Bundle requires the *.aab extension."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "APK Expansion not compatible with Android App Bundle."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Invalid filename! Android APK requires the *.apk extension."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Unsupported export format!\n"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid ""
+"Trying to build from a custom built template, but no version info for it "
+"exists. Please reinstall from the 'Project' menu."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid ""
+"Android build version mismatch:\n"
+" Template installed: %s\n"
+" Godot Version: %s\n"
+"Please reinstall Android build template from 'Project' menu."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid ""
+"Unable to overwrite res://android/build/res/*.xml files with project name"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Could not export project files to gradle project\n"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Could not write expansion package file!"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Building Android Project (gradle)"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid ""
+"Building of Android project failed, check output for the error.\n"
+"Alternatively visit docs.godotengine.org for Android build documentation."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Moving output"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid ""
+"Unable to copy and rename export file, check gradle project directory for "
+"outputs."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Package not found: %s"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Creating APK..."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid ""
+"Could not find template APK to export:\n"
+"%s"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid ""
+"Missing libraries in the export template for the selected architectures: "
+"%s.\n"
+"Please build a template with all required libraries, or uncheck the missing "
+"architectures in the export preset."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Adding files..."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Could not export project files"
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Aligning APK..."
+msgstr ""
+
+#: platform/android/export/export_plugin.cpp
+msgid "Could not unzip temporary unaligned APK."
+msgstr ""
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+msgid "Identifier is missing."
+msgstr ""
+
+#: platform/iphone/export/export.cpp platform/osx/export/export.cpp
+msgid "The character '%s' is not allowed in Identifier."
+msgstr ""
+
+#: platform/iphone/export/export.cpp
+msgid "App Store Team ID not specified - cannot configure the project."
+msgstr ""
+
+#: platform/iphone/export/export.cpp
+msgid "Invalid Identifier:"
+msgstr ""
+
+#: platform/iphone/export/export.cpp
+msgid "Required icon is not specified in the preset."
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Stop HTTP Server"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Run in Browser"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Run exported HTML in the system's default browser."
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not open template for export:"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Invalid export template:"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not write file:"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read file:"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not read HTML shell:"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Could not create HTTP server directory:"
+msgstr ""
+
+#: platform/javascript/export/export.cpp
+msgid "Error starting HTTP server:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Invalid bundle identifier:"
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: code signing required."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: hardened runtime required."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Apple ID name not specified."
+msgstr ""
+
+#: platform/osx/export/export.cpp
+msgid "Notarization: Apple ID password not specified."
+msgstr ""
+
+#: platform/uwp/export/export.cpp
+msgid "Invalid package short name."
+msgstr ""
+
+#: platform/uwp/export/export.cpp
+msgid "Invalid package unique name."
+msgstr ""
+
+#: platform/uwp/export/export.cpp
+msgid "Invalid package publisher display name."
+msgstr ""
+
+#: platform/uwp/export/export.cpp
+msgid "Invalid product GUID."
+msgstr ""
+
+#: platform/uwp/export/export.cpp
+msgid "Invalid publisher GUID."
+msgstr ""
+
+#: platform/uwp/export/export.cpp
+msgid "Invalid background color."
+msgstr ""
+
+#: platform/uwp/export/export.cpp
+msgid "Invalid Store Logo image dimensions (should be 50x50)."
+msgstr ""
+
+#: platform/uwp/export/export.cpp
+msgid "Invalid square 44x44 logo image dimensions (should be 44x44)."
+msgstr ""
+
+#: platform/uwp/export/export.cpp
+msgid "Invalid square 71x71 logo image dimensions (should be 71x71)."
+msgstr ""
+
+#: platform/uwp/export/export.cpp
+msgid "Invalid square 150x150 logo image dimensions (should be 150x150)."
+msgstr ""
+
+#: platform/uwp/export/export.cpp
+msgid "Invalid square 310x310 logo image dimensions (should be 310x310)."
+msgstr ""
+
+#: platform/uwp/export/export.cpp
+msgid "Invalid wide 310x150 logo image dimensions (should be 310x150)."
+msgstr ""
+
+#: platform/uwp/export/export.cpp
+msgid "Invalid splash screen image dimensions (should be 620x300)."
+msgstr ""
+
+#: scene/2d/animated_sprite.cpp
+msgid ""
+"A SpriteFrames resource must be created or set in the \"Frames\" property in "
+"order for AnimatedSprite to display frames."
+msgstr ""
+
+#: scene/2d/canvas_modulate.cpp
+msgid ""
+"Only one visible CanvasModulate is allowed per scene (or set of instanced "
+"scenes). The first created one will work, while the rest will be ignored."
+msgstr ""
+
+#: scene/2d/collision_object_2d.cpp
+msgid ""
+"This node has no shape, so it can't collide or interact with other objects.\n"
+"Consider adding a CollisionShape2D or CollisionPolygon2D as a child to "
+"define its shape."
+msgstr ""
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid ""
+"CollisionPolygon2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid "An empty CollisionPolygon2D has no effect on collision."
+msgstr ""
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid "Invalid polygon. At least 3 points are needed in 'Solids' build mode."
+msgstr ""
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid "Invalid polygon. At least 2 points are needed in 'Segments' build mode."
+msgstr ""
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"CollisionShape2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"A shape must be provided for CollisionShape2D to function. Please create a "
+"shape resource for it!"
+msgstr ""
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"Polygon-based shapes are not meant be used nor edited directly through the "
+"CollisionShape2D node. Please use the CollisionPolygon2D node instead."
+msgstr ""
+
+#: scene/2d/cpu_particles_2d.cpp
+msgid ""
+"CPUParticles2D animation requires the usage of a CanvasItemMaterial with "
+"\"Particles Animation\" enabled."
+msgstr ""
+
+#: scene/2d/joints_2d.cpp
+msgid "Node A and Node B must be PhysicsBody2Ds"
+msgstr ""
+
+#: scene/2d/joints_2d.cpp
+msgid "Node A must be a PhysicsBody2D"
+msgstr ""
+
+#: scene/2d/joints_2d.cpp
+msgid "Node B must be a PhysicsBody2D"
+msgstr ""
+
+#: scene/2d/joints_2d.cpp
+msgid "Joint is not connected to two PhysicsBody2Ds"
+msgstr ""
+
+#: scene/2d/joints_2d.cpp
+msgid "Node A and Node B must be different PhysicsBody2Ds"
+msgstr ""
+
+#: scene/2d/light_2d.cpp
+msgid ""
+"A texture with the shape of the light must be supplied to the \"Texture\" "
+"property."
+msgstr ""
+
+#: scene/2d/light_occluder_2d.cpp
+msgid ""
+"An occluder polygon must be set (or drawn) for this occluder to take effect."
+msgstr ""
+
+#: scene/2d/light_occluder_2d.cpp
+msgid "The occluder polygon for this occluder is empty. Please draw a polygon."
+msgstr ""
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"A NavigationPolygon resource must be set or created for this node to work. "
+"Please set a property or draw a polygon."
+msgstr ""
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
+"node. It only provides navigation data."
+msgstr ""
+
+#: scene/2d/parallax_layer.cpp
+msgid ""
+"ParallaxLayer node only works when set as child of a ParallaxBackground node."
+msgstr ""
+
+#: scene/2d/particles_2d.cpp
+msgid ""
+"GPU-based particles are not supported by the GLES2 video driver.\n"
+"Use the CPUParticles2D node instead. You can use the \"Convert to "
+"CPUParticles\" option for this purpose."
+msgstr ""
+
+#: scene/2d/particles_2d.cpp scene/3d/particles.cpp
+msgid ""
+"A material to process the particles is not assigned, so no behavior is "
+"imprinted."
+msgstr ""
+
+#: scene/2d/particles_2d.cpp
+msgid ""
+"Particles2D animation requires the usage of a CanvasItemMaterial with "
+"\"Particles Animation\" enabled."
+msgstr ""
+
+#: scene/2d/path_2d.cpp
+msgid "PathFollow2D only works when set as a child of a Path2D node."
+msgstr ""
+
+#: scene/2d/physics_body_2d.cpp
+msgid ""
+"Size changes to RigidBody2D (in character or rigid modes) will be overridden "
+"by the physics engine when running.\n"
+"Change the size in children collision shapes instead."
+msgstr ""
+
+#: scene/2d/remote_transform_2d.cpp
+msgid "Path property must point to a valid Node2D node to work."
+msgstr ""
+
+#: scene/2d/skeleton_2d.cpp
+msgid "This Bone2D chain should end at a Skeleton2D node."
+msgstr ""
+
+#: scene/2d/skeleton_2d.cpp
+msgid "A Bone2D only works with a Skeleton2D or another Bone2D as parent node."
+msgstr ""
+
+#: scene/2d/skeleton_2d.cpp
+msgid ""
+"This bone lacks a proper REST pose. Go to the Skeleton2D node and set one."
+msgstr ""
+
+#: scene/2d/tile_map.cpp
+msgid ""
+"TileMap with Use Parent on needs a parent CollisionObject2D to give shapes "
+"to. Please use it as a child of Area2D, StaticBody2D, RigidBody2D, "
+"KinematicBody2D, etc. to give them a shape."
+msgstr ""
+
+#: scene/2d/visibility_notifier_2d.cpp
+msgid ""
+"VisibilityEnabler2D works best when used with the edited scene root directly "
+"as parent."
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid "ARVRCamera must have an ARVROrigin node as its parent."
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid "ARVRController must have an ARVROrigin node as its parent."
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid ""
+"The controller ID must not be 0 or this controller won't be bound to an "
+"actual controller."
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid "ARVRAnchor must have an ARVROrigin node as its parent."
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid ""
+"The anchor ID must not be 0 or this anchor won't be bound to an actual "
+"anchor."
+msgstr ""
+
+#: scene/3d/arvr_nodes.cpp
+msgid "ARVROrigin requires an ARVRCamera child node."
+msgstr ""
+
+#: scene/3d/baked_lightmap.cpp
+msgid "Finding meshes and lights"
+msgstr ""
+
+#: scene/3d/baked_lightmap.cpp
+msgid "Preparing geometry (%d/%d)"
+msgstr ""
+
+#: scene/3d/baked_lightmap.cpp
+msgid "Preparing environment"
+msgstr ""
+
+#: scene/3d/baked_lightmap.cpp
+msgid "Generating capture"
+msgstr ""
+
+#: scene/3d/baked_lightmap.cpp
+msgid "Saving lightmaps"
+msgstr ""
+
+#: scene/3d/baked_lightmap.cpp
+msgid "Done"
+msgstr ""
+
+#: scene/3d/collision_object.cpp
+msgid ""
+"This node has no shape, so it can't collide or interact with other objects.\n"
+"Consider adding a CollisionShape or CollisionPolygon as a child to define "
+"its shape."
+msgstr ""
+
+#: scene/3d/collision_polygon.cpp
+msgid ""
+"CollisionPolygon only serves to provide a collision shape to a "
+"CollisionObject derived node. Please only use it as a child of Area, "
+"StaticBody, RigidBody, KinematicBody, etc. to give them a shape."
+msgstr ""
+
+#: scene/3d/collision_polygon.cpp
+msgid "An empty CollisionPolygon has no effect on collision."
+msgstr ""
+
+#: scene/3d/collision_shape.cpp
+msgid ""
+"CollisionShape only serves to provide a collision shape to a CollisionObject "
+"derived node. Please only use it as a child of Area, StaticBody, RigidBody, "
+"KinematicBody, etc. to give them a shape."
+msgstr ""
+
+#: scene/3d/collision_shape.cpp
+msgid ""
+"A shape must be provided for CollisionShape to function. Please create a "
+"shape resource for it."
+msgstr ""
+
+#: scene/3d/collision_shape.cpp
+msgid ""
+"Plane shapes don't work well and will be removed in future versions. Please "
+"don't use them."
+msgstr ""
+
+#: scene/3d/collision_shape.cpp
+msgid ""
+"ConcavePolygonShape doesn't support RigidBody in another mode than static."
+msgstr ""
+
+#: scene/3d/cpu_particles.cpp
+msgid "Nothing is visible because no mesh has been assigned."
+msgstr ""
+
+#: scene/3d/cpu_particles.cpp
+msgid ""
+"CPUParticles animation requires the usage of a SpatialMaterial whose "
+"Billboard Mode is set to \"Particle Billboard\"."
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Plotting Meshes"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid "Finishing Plot"
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid ""
+"GIProbes are not supported by the GLES2 video driver.\n"
+"Use a BakedLightmap instead."
+msgstr ""
+
+#: scene/3d/gi_probe.cpp
+msgid ""
+"The GIProbe Compress property has been deprecated due to known bugs and no "
+"longer has any effect.\n"
+"To remove this warning, disable the GIProbe's Compress property."
+msgstr ""
+
+#: scene/3d/light.cpp
+msgid "A SpotLight with an angle wider than 90 degrees cannot cast shadows."
+msgstr ""
+
+#: scene/3d/navigation_mesh.cpp
+msgid "A NavigationMesh resource must be set or created for this node to work."
+msgstr ""
+
+#: scene/3d/navigation_mesh.cpp
+msgid ""
+"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
+"It only provides navigation data."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "No shape is set."
+msgstr ""
+
+#: scene/3d/occluder.cpp
+msgid "Only uniform scales are supported."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"GPU-based particles are not supported by the GLES2 video driver.\n"
+"Use the CPUParticles node instead. You can use the \"Convert to CPUParticles"
+"\" option for this purpose."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"Nothing is visible because meshes have not been assigned to draw passes."
+msgstr ""
+
+#: scene/3d/particles.cpp
+msgid ""
+"Particles animation requires the usage of a SpatialMaterial whose Billboard "
+"Mode is set to \"Particle Billboard\"."
+msgstr ""
+
+#: scene/3d/path.cpp
+msgid "PathFollow only works when set as a child of a Path node."
+msgstr ""
+
+#: scene/3d/path.cpp
+msgid ""
+"PathFollow's ROTATION_ORIENTED requires \"Up Vector\" to be enabled in its "
+"parent Path's Curve resource."
+msgstr ""
+
+#: scene/3d/physics_body.cpp
+msgid ""
+"Size changes to RigidBody (in character or rigid modes) will be overridden "
+"by the physics engine when running.\n"
+"Change the size in children collision shapes instead."
+msgstr ""
+
+#: scene/3d/physics_joint.cpp
+msgid "Node A and Node B must be PhysicsBodies"
+msgstr ""
+
+#: scene/3d/physics_joint.cpp
+msgid "Node A must be a PhysicsBody"
+msgstr ""
+
+#: scene/3d/physics_joint.cpp
+msgid "Node B must be a PhysicsBody"
+msgstr ""
+
+#: scene/3d/physics_joint.cpp
+msgid "Joint is not connected to any PhysicsBodies"
+msgstr ""
+
+#: scene/3d/physics_joint.cpp
+msgid "Node A and Node B must be different PhysicsBodies"
+msgstr ""
+
+#: scene/3d/portal.cpp
+msgid "The RoomManager should not be a child or grandchild of a Portal."
+msgstr ""
+
+#: scene/3d/portal.cpp
+msgid "A Room should not be a child or grandchild of a Portal."
+msgstr ""
+
+#: scene/3d/portal.cpp
+msgid "A RoomGroup should not be a child or grandchild of a Portal."
+msgstr ""
+
+#: scene/3d/remote_transform.cpp
+msgid ""
+"The \"Remote Path\" property must point to a valid Spatial or Spatial-"
+"derived node to work."
+msgstr ""
+
+#: scene/3d/room.cpp
+msgid "A Room cannot have another Room as a child or grandchild."
+msgstr ""
+
+#: scene/3d/room.cpp
+msgid "The RoomManager should not be placed inside a Room."
+msgstr ""
+
+#: scene/3d/room.cpp
+msgid "A RoomGroup should not be placed inside a Room."
+msgstr ""
+
+#: scene/3d/room.cpp
+msgid ""
+"Room convex hull contains a large number of planes.\n"
+"Consider simplifying the room bound in order to increase performance."
+msgstr ""
+
+#: scene/3d/room_group.cpp
+msgid "The RoomManager should not be placed inside a RoomGroup."
+msgstr ""
+
+#: scene/3d/room_manager.cpp
+msgid "The RoomList has not been assigned."
+msgstr ""
+
+#: scene/3d/room_manager.cpp
+msgid "The RoomList node should be a Spatial (or derived from Spatial)."
+msgstr ""
+
+#: scene/3d/room_manager.cpp
+msgid ""
+"Portal Depth Limit is set to Zero.\n"
+"Only the Room that the Camera is in will render."
+msgstr ""
+
+#: scene/3d/room_manager.cpp
+msgid "There should only be one RoomManager in the SceneTree."
+msgstr ""
+
+#: scene/3d/room_manager.cpp
+msgid ""
+"RoomList path is invalid.\n"
+"Please check the RoomList branch has been assigned in the RoomManager."
+msgstr ""
+
+#: scene/3d/room_manager.cpp
+msgid "RoomList contains no Rooms, aborting."
+msgstr ""
+
+#: scene/3d/room_manager.cpp
+msgid "Misnamed nodes detected, check output log for details. Aborting."
+msgstr ""
+
+#: scene/3d/room_manager.cpp
+msgid "Portal link room not found, check output log for details."
+msgstr ""
+
+#: scene/3d/room_manager.cpp
+msgid ""
+"Portal autolink failed, check output log for details.\n"
+"Check the portal is facing outwards from the source room."
+msgstr ""
+
+#: scene/3d/room_manager.cpp
+msgid ""
+"Room overlap detected, cameras may work incorrectly in overlapping area.\n"
+"Check output log for details."
+msgstr ""
+
+#: scene/3d/room_manager.cpp
+msgid ""
+"Error calculating room bounds.\n"
+"Ensure all rooms contain geometry or manual bounds."
+msgstr ""
+
+#: scene/3d/soft_body.cpp
+msgid "This body will be ignored until you set a mesh."
+msgstr ""
+
+#: scene/3d/soft_body.cpp
+msgid ""
+"Size changes to SoftBody will be overridden by the physics engine when "
+"running.\n"
+"Change the size in children collision shapes instead."
+msgstr ""
+
+#: scene/3d/sprite_3d.cpp
+msgid ""
+"A SpriteFrames resource must be created or set in the \"Frames\" property in "
+"order for AnimatedSprite3D to display frames."
+msgstr ""
+
+#: scene/3d/vehicle_body.cpp
+msgid ""
+"VehicleWheel serves to provide a wheel system to a VehicleBody. Please use "
+"it as a child of a VehicleBody."
+msgstr ""
+
+#: scene/3d/world_environment.cpp
+msgid ""
+"WorldEnvironment requires its \"Environment\" property to contain an "
+"Environment to have a visible effect."
+msgstr ""
+
+#: scene/3d/world_environment.cpp
+msgid ""
+"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)."
+msgstr ""
+
+#: scene/3d/world_environment.cpp
+msgid ""
+"This WorldEnvironment is ignored. Either add a Camera (for 3D scenes) or set "
+"this environment's Background Mode to Canvas (for 2D scenes)."
+msgstr ""
+
+#: scene/animation/animation_blend_tree.cpp
+msgid "On BlendTree node '%s', animation not found: '%s'"
+msgstr ""
+
+#: scene/animation/animation_blend_tree.cpp
+msgid "Animation not found: '%s'"
+msgstr ""
+
+#: scene/animation/animation_player.cpp
+msgid "Anim Apply Reset"
+msgstr ""
+
+#: scene/animation/animation_tree.cpp
+msgid "In node '%s', invalid animation: '%s'."
+msgstr ""
+
+#: scene/animation/animation_tree.cpp
+msgid "Invalid animation: '%s'."
+msgstr ""
+
+#: scene/animation/animation_tree.cpp
+msgid "Nothing connected to input '%s' of node '%s'."
+msgstr ""
+
+#: scene/animation/animation_tree.cpp
+msgid "No root AnimationNode for the graph is set."
+msgstr ""
+
+#: scene/animation/animation_tree.cpp
+msgid "Path to an AnimationPlayer node containing animations is not set."
+msgstr ""
+
+#: scene/animation/animation_tree.cpp
+msgid "Path set for AnimationPlayer does not lead to an AnimationPlayer node."
+msgstr ""
+
+#: scene/animation/animation_tree.cpp
+msgid "The AnimationPlayer root node is not a valid node."
+msgstr ""
+
+#: scene/animation/animation_tree_player.cpp
+msgid "This node has been deprecated. Use AnimationTree instead."
+msgstr ""
+
+#: scene/gui/color_picker.cpp
+msgid ""
+"Color: #%s\n"
+"LMB: Set color\n"
+"RMB: Remove preset"
+msgstr ""
+
+#: scene/gui/color_picker.cpp
+msgid "Pick a color from the editor window."
+msgstr ""
+
+#: scene/gui/color_picker.cpp
+msgid "HSV"
+msgstr ""
+
+#: scene/gui/color_picker.cpp
+msgid "Raw"
+msgstr ""
+
+#: scene/gui/color_picker.cpp
+msgid "Switch between hexadecimal and code values."
+msgstr ""
+
+#: scene/gui/color_picker.cpp
+msgid "Add current color as a preset."
+msgstr ""
+
+#: scene/gui/container.cpp
+msgid ""
+"Container by itself serves no purpose unless a script configures its "
+"children placement behavior.\n"
+"If you don't intend to add a script, use a plain Control node instead."
+msgstr ""
+
+#: scene/gui/control.cpp
+msgid ""
+"The Hint Tooltip won't be displayed as the control's Mouse Filter is set to "
+"\"Ignore\". To solve this, set the Mouse Filter to \"Stop\" or \"Pass\"."
+msgstr ""
+
+#: scene/gui/dialogs.cpp
+msgid "Alert!"
+msgstr ""
+
+#: scene/gui/dialogs.cpp
+msgid "Please Confirm..."
+msgstr ""
+
+#: scene/gui/file_dialog.cpp
+msgid "Must use a valid extension."
+msgstr ""
+
+#: scene/gui/graph_edit.cpp
+msgid "Enable grid minimap."
+msgstr ""
+
+#: scene/gui/nine_patch_rect.cpp
+msgid ""
+"The Tile and Tile Fit options for Axis Stretch properties are only effective "
+"when using the GLES3 rendering backend.\n"
+"The GLES2 backend is currently in use, so these modes will act like Stretch "
+"instead."
+msgstr ""
+
+#: scene/gui/popup.cpp
+msgid ""
+"Popups will hide by default unless you call popup() or any of the popup*() "
+"functions. Making them visible for editing is fine, but they will hide upon "
+"running."
+msgstr ""
+
+#: scene/gui/range.cpp
+msgid "If \"Exp Edit\" is enabled, \"Min Value\" must be greater than 0."
+msgstr ""
+
+#: scene/gui/scroll_container.cpp
+msgid ""
+"ScrollContainer is intended to work with a single child control.\n"
+"Use a container as child (VBox, HBox, etc.), or a Control and set the custom "
+"minimum size manually."
+msgstr ""
+
+#: scene/gui/tree.cpp
+msgid "(Other)"
+msgstr ""
+
+#: scene/main/scene_tree.cpp
+msgid ""
+"Default Environment as specified in Project Settings (Rendering -> "
+"Environment -> Default Environment) could not be loaded."
+msgstr ""
+
+#: scene/main/timer.cpp
+msgid ""
+"Very low timer wait times (< 0.05 seconds) may behave in significantly "
+"different ways depending on the rendered or physics frame rate.\n"
+"Consider using a script's process loop instead of relying on a Timer for "
+"very low wait times."
+msgstr ""
+
+#: scene/main/viewport.cpp
+msgid ""
+"This viewport is not set as render target. If you intend for it to display "
+"its contents directly to the screen, make it a child of a Control so it can "
+"obtain a size. Otherwise, make it a RenderTarget and assign its internal "
+"texture to some node for display."
+msgstr ""
+
+#: scene/main/viewport.cpp
+msgid ""
+"The Viewport size must be greater than or equal to 2 pixels on both "
+"dimensions to render anything."
+msgstr ""
+
+#: scene/resources/occluder_shape.cpp
+msgid "OccluderShapeSphere Set Spheres"
+msgstr ""
+
+#: scene/resources/visual_shader_nodes.cpp
+msgid ""
+"The sampler port is connected but not used. Consider changing the source to "
+"'SamplerPort'."
+msgstr ""
+
+#: scene/resources/visual_shader_nodes.cpp
+msgid "Invalid source for preview."
+msgstr ""
+
+#: scene/resources/visual_shader_nodes.cpp
+msgid "Invalid source for shader."
+msgstr ""
+
+#: scene/resources/visual_shader_nodes.cpp
+msgid "Invalid comparison function for that type."
+msgstr ""
+
+#: servers/visual/shader_language.cpp
+msgid "Varying may not be assigned in the '%s' function."
+msgstr ""
+
+#: servers/visual/shader_language.cpp
+msgid ""
+"Varyings which assigned in 'vertex' function may not be reassigned in "
+"'fragment' or 'light'."
+msgstr ""
+
+#: servers/visual/shader_language.cpp
+msgid ""
+"Varyings which assigned in 'fragment' function may not be reassigned in "
+"'vertex' or 'light'."
+msgstr ""
+
+#: servers/visual/shader_language.cpp
+msgid "Fragment-stage varying could not been accessed in custom function!"
+msgstr ""
+
+#: servers/visual/shader_language.cpp
+msgid "Assignment to function."
+msgstr ""
+
+#: servers/visual/shader_language.cpp
+msgid "Assignment to uniform."
+msgstr ""
+
+#: servers/visual/shader_language.cpp
+msgid "Constants cannot be modified."
+msgstr "Hindi maaring maibago ang mga Constant."
diff --git a/editor/translations/tr.po b/editor/translations/tr.po
index 73896955e3..6cab155c7e 100644
--- a/editor/translations/tr.po
+++ b/editor/translations/tr.po
@@ -63,13 +63,15 @@
# kahveciderin <kahveciderin@gmail.com>, 2021.
# Lucifer25x <umudyt2006@gmail.com>, 2021.
# Kadir Berk YaÄŸar <ykadirberk2@gmail.com>, 2021.
+# Aysu Toprak <moonwater99@hotmail.com>, 2021.
+# Yusuf Yavuzyigit <yusufyavuzyigit25@gmail.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-10-01 03:16+0000\n"
-"Last-Translator: Kadir Berk YaÄŸar <ykadirberk2@gmail.com>\n"
+"PO-Revision-Date: 2021-11-18 13:37+0000\n"
+"Last-Translator: Yusuf Yavuzyigit <yusufyavuzyigit25@gmail.com>\n"
"Language-Team: Turkish <https://hosted.weblate.org/projects/godot-engine/"
"godot/tr/>\n"
"Language: tr\n"
@@ -77,7 +79,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -86,7 +88,7 @@ msgstr "convert() için geçersiz türde argüman, TYPE_* sabitlerini kullanın.
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
msgid "Expected a string of length 1 (a character)."
-msgstr "1 uzunluÄŸunda bir metin (bir karakter) bekleniyor."
+msgstr "1 uzunluÄŸunda bir metin bekleniyor (bir karakter)."
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/mono/glue/gd_glue.cpp
@@ -96,11 +98,11 @@ msgstr "Baytları çözümlemek için yetersiz miktarda bayt ya da geçersiz for
#: core/math/expression.cpp
msgid "Invalid input %i (not passed) in expression"
-msgstr "İfade de geçersiz giriş %i (geçersiz)"
+msgstr "İfadede geçersiz giriş %i (geçersiz)"
#: core/math/expression.cpp
msgid "self can't be used because instance is null (not passed)"
-msgstr "\"self\" kullanılamaz çünkü \"null\" değerini almış(geçersiz)"
+msgstr "self kullanılamaz çünkü örnek boş (geçilmedi)"
#: core/math/expression.cpp
msgid "Invalid operands to operator %s, %s and %s."
@@ -128,7 +130,7 @@ msgstr "B"
#: core/ustring.cpp
msgid "KiB"
-msgstr "KB"
+msgstr "KiB"
#: core/ustring.cpp
msgid "MiB"
@@ -977,7 +979,7 @@ msgstr ""
#: editor/connections_dialog.cpp editor/editor_help.cpp editor/node_dock.cpp
msgid "Signals"
-msgstr "Sinyaller"
+msgstr "sinyaller"
#: editor/connections_dialog.cpp
msgid "Filter signals"
@@ -1321,7 +1323,6 @@ msgid "Contents of asset \"%s\" - %d file(s) conflict with your project:"
msgstr "\"%s\" öğesinin içeriği - %d dosya(lar) projenizle çakışıyor:"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Contents of asset \"%s\" - No files conflict with your project:"
msgstr "\"%s\" öğesinin içeriği - Projenizle çakışan dosya yok:"
@@ -1334,9 +1335,8 @@ msgid "The following files failed extraction from asset \"%s\":"
msgstr "Aşağıdaki dosyaların \"%s\" kaynağından ayıklanmasında hata oluştu:"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "(and %s more files)"
-msgstr "Ve %s kadar dosya daha."
+msgstr "(ve %s dosya daha)"
#: editor/editor_asset_installer.cpp
msgid "Asset \"%s\" installed successfully!"
@@ -1352,7 +1352,6 @@ msgid "Install"
msgstr "Kur"
#: editor/editor_asset_installer.cpp
-#, fuzzy
msgid "Asset Installer"
msgstr "Paket Yükleyici"
@@ -1417,7 +1416,6 @@ msgid "Bypass"
msgstr "Baypas"
#: editor/editor_audio_buses.cpp
-#, fuzzy
msgid "Bus Options"
msgstr "Bus ayarları"
@@ -1806,7 +1804,6 @@ msgid "Allows editing the node hierarchy in the Scene dock."
msgstr "Scene dock'ta düğüm hiyerarşisini düzenlemeye izin verir."
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid ""
"Allows to work with signals and groups of the node selected in the Scene "
"dock."
@@ -1836,7 +1833,7 @@ msgstr "(hiç)"
#: editor/editor_feature_profile.cpp
msgid "Remove currently selected profile, '%s'? Cannot be undone."
-msgstr "Seçili olan '%s' profili kaldırılsın mı? (Geri alınamaz.)"
+msgstr "Seçili olan '%s' profili kaldırılsın mı? Geri alınamaz."
#: editor/editor_feature_profile.cpp
msgid "Profile must be a valid filename and must not contain '.'"
@@ -1875,9 +1872,8 @@ msgid "Main Features:"
msgstr "Ana Özellikler:"
#: editor/editor_feature_profile.cpp
-#, fuzzy
msgid "Nodes and Classes:"
-msgstr "Aktif Sınıflar:"
+msgstr "Düğümler ve Sınıflar:"
#: editor/editor_feature_profile.cpp
msgid "File '%s' format is invalid, import aborted."
@@ -2167,7 +2163,7 @@ msgstr "varsayılan:"
#: editor/editor_help.cpp
msgid "Methods"
-msgstr "Metotlar"
+msgstr "Metodlar"
#: editor/editor_help.cpp
msgid "Theme Properties"
@@ -2464,9 +2460,8 @@ msgstr ""
"karşılanamadı."
#: editor/editor_node.cpp
-#, fuzzy
msgid "Could not save one or more scenes!"
-msgstr "Dönüştürülmüş doku kaydedilemedi:"
+msgstr "Bir veya birden fazla sahne kaydedilemedi!"
#: editor/editor_node.cpp
msgid "Save All Scenes"
@@ -2609,10 +2604,9 @@ msgstr "Kapatmadan önce değişklikler buraya '%s' kaydedilsin mi?"
#: editor/editor_node.cpp
msgid "%s no longer exists! Please specify a new save location."
-msgstr ""
+msgstr "%s artık mevcut değil! Lütfen yeni bir kaydetme konumu belirtin."
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"The current scene has no root node, but %d modified external resource(s) "
"were saved anyway."
@@ -2621,11 +2615,12 @@ msgstr ""
"yine de kaydedildi."
#: editor/editor_node.cpp
-#, fuzzy
msgid ""
"A root node is required to save the scene. You can add a root node using the "
"Scene tree dock."
-msgstr "Sahneyi kaydedilmesi için kök düğüm gerekiyor."
+msgstr ""
+"Sahneyi kaydedilmesi için kök düğüm gerekiyor. Sahne ağacını kullanarak bir "
+"kök düğüm ekleyebilirsin."
#: editor/editor_node.cpp
msgid "Save Scene As..."
@@ -3362,9 +3357,8 @@ msgid "Merge With Existing"
msgstr "Var Olanla BirleÅŸtir"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Apply MeshInstance Transforms"
-msgstr "Animasyon Değişikliği Dönüşümü"
+msgstr "MeshInstance dönüşümlerini uygula"
#: editor/editor_node.cpp
msgid "Open & Run a Script"
@@ -3401,7 +3395,6 @@ msgid "Select"
msgstr "Seç"
#: editor/editor_node.cpp
-#, fuzzy
msgid "Select Current"
msgstr "Geçerli Klasörü Seç"
@@ -3728,9 +3721,8 @@ msgid "Uninstall these templates."
msgstr "Bu şablonları kaldırın."
#: editor/export_template_manager.cpp
-#, fuzzy
msgid "There are no mirrors available."
-msgstr "'%s' dosyası bulunamadı."
+msgstr "Hiç mevcut ayna bulunamadı."
#: editor/export_template_manager.cpp
msgid "Retrieving the mirror list..."
@@ -4460,6 +4452,10 @@ msgid ""
"Selecting another resource in the FileSystem dock without clicking Reimport "
"first will discard changes made in the Import dock."
msgstr ""
+"Daha uygulanmamış değişiklere sahipsiniz. İçe aktarma seçeneklerinde yapılan "
+"değişiklikleri uygulamak için Yeniden İçe Aktar'a tıklayın.\n"
+"Önce Yeniden İçe Aktar'ı tıklatmadan Dosya Sisteminden başka bir kaynak "
+"seçmek, İçe Aktarma yuvasında yapılan değişiklikleri yok sayacaktır."
#: editor/import_dock.cpp
msgid "Import As:"
@@ -5595,13 +5591,13 @@ msgstr ""
"Sahneyi kaydedip tekrar deneyin."
#: editor/plugins/baked_lightmap_editor_plugin.cpp
-#, fuzzy
msgid ""
"No meshes to bake. Make sure they contain an UV2 channel and that the 'Use "
"In Baked Light' and 'Generate Lightmap' flags are on."
msgstr ""
-"Pişirilecek örüntüler yok. Örüntülerin UV2 kanalı içerdiğinden ve 'Bake "
-"Light' bayrağınının açık olduğundan emin olun."
+"Pişirilecek örüntüler yok. Örüntülerin UV2 kanalı içerdiğinden, 'Pişirilmiş "
+"Işık Kullan' ve 'Işık Haritası Oluştur' bayrağınının açık olduğundan emin "
+"olun."
#: editor/plugins/baked_lightmap_editor_plugin.cpp
msgid "Failed creating lightmap images, make sure path is writable."
@@ -5937,18 +5933,16 @@ msgstr "Kip Seç"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Drag: Rotate selected node around pivot."
-msgstr "Seçilen düğüm ya da geçişi sil."
+msgstr "Sürükle: Seçili düğümü pivot etrafında döndürün."
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Alt+Drag: Move selected node."
msgstr "Alt+Sürükle: Seçili düğümü taşıyın."
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "V: Set selected node's pivot position."
-msgstr "Seçilen düğüm ya da geçişi sil."
+msgstr "V: Seçili düğümün pivot konumunu ayarlayın."
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -6196,14 +6190,12 @@ msgid "Clear Pose"
msgstr "DuruÅŸu Temizle"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Add Node Here"
-msgstr "Düğüm Ekle"
+msgstr "Buraya Düğüm Ekle"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Instance Scene Here"
-msgstr "Sahne(leri) Örnekle"
+msgstr "Buraya Sahne Örnekle"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Multiply grid step by 2"
@@ -6218,49 +6210,40 @@ msgid "Pan View"
msgstr "Yatay Kaydırma Görünümü"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 3.125%"
msgstr "%3.125'e yakınlaştır"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 6.25%"
msgstr "%6,25'e yakınlaştır"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 12.5%"
msgstr "%12,5'e yakınlaştır"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 25%"
-msgstr "Uzaklaştır"
+msgstr "%25'e yakınlaştır"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 50%"
-msgstr "Uzaklaştır"
+msgstr "%50'ye yakınlaştır"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 100%"
-msgstr "Uzaklaştır"
+msgstr "%100'e yakınlaştır"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 200%"
-msgstr "Uzaklaştır"
+msgstr "%200'e yakınlaştır"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 400%"
-msgstr "Uzaklaştır"
+msgstr "%400'e yakınlaştır"
#: editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Zoom to 800%"
-msgstr "Uzaklaştır"
+msgstr "%800'e yakınlaştır"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom to 1600%"
@@ -6394,7 +6377,7 @@ msgstr "Sade 0"
#: editor/plugins/curve_editor_plugin.cpp
msgid "Flat 1"
-msgstr "Sade 1"
+msgstr "Düz 1"
#: editor/plugins/curve_editor_plugin.cpp editor/property_editor.cpp
msgid "Ease In"
@@ -6611,9 +6594,8 @@ msgstr ""
"Bu, çarpışma tespiti için en hızlı (ancak en az doğru) seçenektir."
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Create Simplified Convex Collision Sibling"
-msgstr "Dışbükey Çarpışma Komşusu Oluştur"
+msgstr "Basitleştirilmiş Dışbükey Çarpışma Kardeşi Oluştur"
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid ""
@@ -6630,14 +6612,14 @@ msgid "Create Multiple Convex Collision Siblings"
msgstr "Dışbükey Çarpışma Komşuları Oluştur"
#: editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid ""
"Creates a polygon-based collision shape.\n"
"This is a performance middle-ground between a single convex collision and a "
"polygon-based collision."
msgstr ""
-"Poligon bazlı bir çarpışma şekli oluştur.\n"
-"Bu performans açısından üstteki iki seçeneğin arasındadır."
+"Poligon tabanlı bir çarpışma şekli oluştur.\n"
+"Bu, tek bir dışbükey çarpışma ile poligon tabanlı bir çarpışma arasındaki "
+"performans orta noktasıdır."
#: editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Outline Mesh..."
@@ -7283,29 +7265,24 @@ msgid "ResourcePreloader"
msgstr "KaynakÖnyükleyici"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Flip Portals"
-msgstr "Yatay Yansıt"
+msgstr "Portalları Çevir"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Room Generate Points"
-msgstr "Üretilen Nokta Sayısı:"
+msgstr "Oda Noktalar OluÅŸtur"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Generate Points"
-msgstr "Üretilen Nokta Sayısı:"
+msgstr "Noktalar OluÅŸtur"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Flip Portal"
-msgstr "Yatay Yansıt"
+msgstr "Portalı Çevir"
#: editor/plugins/room_manager_editor_plugin.cpp
-#, fuzzy
msgid "Occluder Set Transform"
-msgstr "Dönüşümü Temizle"
+msgstr "Engelleyici Dönüşümü Ayarla"
#: editor/plugins/room_manager_editor_plugin.cpp
msgid "Center Node"
@@ -7445,12 +7422,10 @@ msgid "Move Down"
msgstr "Aşağı Taşı"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Next Script"
msgstr "Sonraki betik"
#: editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Previous Script"
msgstr "Önceki betik"
@@ -7803,26 +7778,24 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "Bu iskelette hiç kemik yok, alt öge olarak Kemik2D düğümleri oluştur."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "Kemiklerle dinlenme duruÅŸu OluÅŸtur"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "Dinlenme duruÅŸunu Kemiklere ata"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "Kemiklerle dinlenme duruÅŸu OluÅŸtur"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "İskelet2D"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-#, fuzzy
msgid "Reset to Rest Pose"
-msgstr "Kemikleri Dinlenme DuruÅŸuna ata"
+msgstr "Dinlenme Duruşuna Sıfırla"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-#, fuzzy
msgid "Overwrite Rest Pose"
-msgstr "Üzerine Yaz"
+msgstr "Dinlenme Duruşunun Üstüne Yaz"
#: editor/plugins/skeleton_editor_plugin.cpp
msgid "Create physical bones"
@@ -7849,64 +7822,52 @@ msgid "Perspective"
msgstr "Derinlik"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Top Orthogonal"
-msgstr "Dikey"
+msgstr "Üst Dikaçılı"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Top Perspective"
-msgstr "Derinlik"
+msgstr "Üst Perspektif"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Bottom Orthogonal"
-msgstr "Dikey"
+msgstr "Alt Dikaçılı"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Bottom Perspective"
-msgstr "Derinlik"
+msgstr "Alt Perspektif"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Left Orthogonal"
-msgstr "Dikey"
+msgstr "Sol Dikaçılı"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Left Perspective"
-msgstr "Derinlik"
+msgstr "Sol Perspektif"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Right Orthogonal"
-msgstr "Dikey"
+msgstr "Sağ Dikaçılı"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Right Perspective"
-msgstr "Derinlik"
+msgstr "SaÄŸ Perspektif"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Front Orthogonal"
-msgstr "Dikey"
+msgstr "Ön Dikaçılı"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Front Perspective"
-msgstr "Derinlik"
+msgstr "Ön Perspektif"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Rear Orthogonal"
-msgstr "Dikey"
+msgstr "Arka Dikaçılı"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Rear Perspective"
-msgstr "Derinlik"
+msgstr "Arka Perspektif"
#. TRANSLATORS: This will be appended to the view name when Auto Orthogonal is enabled.
#: editor/plugins/spatial_editor_plugin.cpp
@@ -8173,9 +8134,8 @@ msgstr ""
"Oyun içi performansın gösteri olarak ele alınamaz."
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Convert Rooms"
-msgstr "Şuna Dönüştür %s"
+msgstr "Odaları Dönüştür"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "XForm Dialog"
@@ -8196,9 +8156,8 @@ msgstr ""
"Yarı-açık göz: Gizmo aynı zamanda saydam yüzeylerden görünür (\"x-ray\")."
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Snap Nodes to Floor"
-msgstr "Düğümleri zemine hizala"
+msgstr "Düğümleri Zemine Yapıştır"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Couldn't find a solid floor to snap the selection to."
@@ -8213,7 +8172,6 @@ msgid "Use Snap"
msgstr "Yapışma Kullan"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Converts rooms for portal culling."
msgstr "Odaları portal ayıklama için dönüştürür."
@@ -8243,24 +8201,23 @@ msgstr "Sağdan Görünüm"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Orbit View Down"
-msgstr ""
+msgstr "Yörünge Görünümü Alt"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Orbit View Left"
-msgstr ""
+msgstr "Yörünge Görünümü Sol"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Orbit View Right"
-msgstr ""
+msgstr "Yörünge Görünümü Sağ"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "Orbit View Up"
-msgstr "Önden Görünüm"
+msgstr "Yörünge Görünümü Yukarı"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Orbit View 180"
-msgstr ""
+msgstr "Yörünge Görünümü 180"
#: editor/plugins/spatial_editor_plugin.cpp
msgid "Switch Perspective/Orthogonal View"
@@ -8332,14 +8289,12 @@ msgid "View Grid"
msgstr "Izgara Görünümü"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "View Portal Culling"
-msgstr "Görüntükapısı Ayarları"
+msgstr "Portal Ayırmayı Görüntüle"
#: editor/plugins/spatial_editor_plugin.cpp
-#, fuzzy
msgid "View Occlusion Culling"
-msgstr "Görüntükapısı Ayarları"
+msgstr "Emilme Ayırmayı Görüntüle"
#: editor/plugins/spatial_editor_plugin.cpp
#: modules/gridmap/grid_map_editor_plugin.cpp
@@ -11379,14 +11334,12 @@ msgid "Remove Translation"
msgstr "Çeviriyi Kaldır"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Translation Resource Remap: Add %d Path(s)"
-msgstr "Kaynak Yeniden EÅŸleme Ekle EÅŸle"
+msgstr "Çeviri Kaynağı Yeniden Eşlemesi: %d Yol(lar) Ekle"
#: editor/project_settings_editor.cpp
-#, fuzzy
msgid "Translation Resource Remap: Add %d Remap(s)"
-msgstr "Kaynak Yeniden EÅŸleme Ekle EÅŸle"
+msgstr "Çeviri Kaynağı Yeniden Eşlemesi: %d Yeniden Haritalama Ekle"
#: editor/project_settings_editor.cpp
msgid "Change Resource Remap Language"
@@ -12522,24 +12475,20 @@ msgid "Change Ray Shape Length"
msgstr "Işın Şeklinin Uzunluğunu Değiştir"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Room Point Position"
-msgstr "Eğri Noktası Konumu Ayarla"
+msgstr "Oda Noktası Konumunu Ayarla"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Portal Point Position"
-msgstr "Eğri Noktası Konumu Ayarla"
+msgstr "Portal Noktası Konumunu Ayarla"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Occluder Sphere Radius"
-msgstr "Silindir Şekli Yarıçapını Değiştir"
+msgstr "Engelleyici Silindir Yarıçapını Ayarla"
#: editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Set Occluder Sphere Position"
-msgstr "EÄŸriyi Konumda Ayarla"
+msgstr "Engelleyici Küre Konumunu Ayarla"
#: modules/csg/csg_gizmos.cpp
msgid "Change Cylinder Radius"
@@ -12650,14 +12599,12 @@ msgid "Object can't provide a length."
msgstr "Nesne bir uzunluk saÄŸlayamaz."
#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp
-#, fuzzy
msgid "Export Mesh GLTF2"
-msgstr "Örüntü Kütüphanesini Dışa Aktar"
+msgstr "Örüntüyü GLTF2 Olarak Dışa Aktar"
#: modules/gltf/editor_scene_exporter_gltf_plugin.cpp
-#, fuzzy
msgid "Export GLTF..."
-msgstr "Dışa Aktar..."
+msgstr "GLTF Dışa Aktar..."
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Next Plane"
@@ -12700,9 +12647,8 @@ msgid "GridMap Paint"
msgstr "IzgaraHaritası Boyama"
#: modules/gridmap/grid_map_editor_plugin.cpp
-#, fuzzy
msgid "GridMap Selection"
-msgstr "IzgaraHaritası Seçimi Doldur"
+msgstr "GridMap Seçimi"
#: modules/gridmap/grid_map_editor_plugin.cpp
msgid "Grid Map"
@@ -12825,9 +12771,8 @@ msgid "Class name can't be a reserved keyword"
msgstr "Sınıf ismi ayrılmış anahtar kelime olamaz"
#: modules/mono/csharp_script.cpp
-#, fuzzy
msgid "Build Solution"
-msgstr "Seçimi Doldur"
+msgstr "Solüsyonu İnşa Et"
#: modules/mono/mono_gd/gd_mono_utils.cpp
msgid "End of inner exception stack trace"
@@ -12958,14 +12903,12 @@ msgid "Add Output Port"
msgstr "Çıkış Portu Ekle"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Port Type"
-msgstr "Türü Değiştir"
+msgstr "Bağlantı Noktası Türünü Değiştir"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change Port Name"
-msgstr "Giriş noktası adını değiştir"
+msgstr "Bağlantı Noktası Adını Değiştir"
#: modules/visual_script/visual_script_editor.cpp
msgid "Override an existing built-in function."
@@ -13080,9 +13023,8 @@ msgid "Add Preload Node"
msgstr "Önyüklenen Düğüm Ekle"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Node(s)"
-msgstr "Düğüm Ekle"
+msgstr "Düğüm(ler) Ekle"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Node(s) From Tree"
@@ -13346,33 +13288,28 @@ msgid "Running on %s"
msgstr "%s üzerinde çalışıyor"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Exporting APK..."
-msgstr "Tümünü Dışa Aktarma"
+msgstr "APK dışarı aktarılıyor..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Uninstalling..."
-msgstr "Kaldır"
+msgstr "Kaldırılıyor..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Installing to device, please wait..."
-msgstr "Yükleniyor, lütfen bekleyin..."
+msgstr "Cihaza yükleniyor, lütfen bekleyin..."
#: platform/android/export/export_plugin.cpp
msgid "Could not install to device: %s"
msgstr "Cihaza yüklenemedi: %s"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Running on device..."
-msgstr "Çalışan Özel Betik..."
+msgstr "Cihazda çalışıyor..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Could not execute on device."
-msgstr "Klasör oluşturulamadı."
+msgstr "Cihazda yürütülemedi."
#: platform/android/export/export_plugin.cpp
msgid "Unable to find the 'apksigner' tool."
@@ -13497,27 +13434,24 @@ msgid "Signing release %s..."
msgstr "%s sürümü imzalanıyor..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Could not find keystore, unable to export."
-msgstr "Dışa aktarma için şablon açılamadı:"
+msgstr "Anahtar deposu bulunamadı, dışa aktarılamadı."
#: platform/android/export/export_plugin.cpp
msgid "'apksigner' returned with error #%d"
msgstr "'apksigner', #%d hatasıyla döndürüldü"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Verifying %s..."
-msgstr "Ekliyor %s..."
+msgstr "Doğrulanıyor %s..."
#: platform/android/export/export_plugin.cpp
msgid "'apksigner' verification of %s failed."
msgstr "%s için 'apksigner' doğrulaması başarısız oldu."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Exporting for Android"
-msgstr "Tümünü Dışa Aktarma"
+msgstr "Android için dışa aktarılıyor"
#: platform/android/export/export_plugin.cpp
msgid "Invalid filename! Android App Bundle requires the *.aab extension."
@@ -13596,14 +13530,12 @@ msgstr ""
"için gradle proje dizinini kontrol edin."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Package not found: %s"
-msgstr "Animasyon bulunamadı: '%s'"
+msgstr "Paket bulunamadı: %s"
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Creating APK..."
-msgstr "Konturlar oluÅŸturuluyor..."
+msgstr "APK oluÅŸturuluyor..."
#: platform/android/export/export_plugin.cpp
msgid ""
@@ -13625,14 +13557,12 @@ msgstr ""
"aktarma ön ayarındaki eksik mimarilerin işaretini kaldırın."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Adding files..."
-msgstr "Ekliyor %s..."
+msgstr "Dosyalar ekleniyor..."
#: platform/android/export/export_plugin.cpp
-#, fuzzy
msgid "Could not export project files"
-msgstr "Dosya yazılamadı:"
+msgstr "Proje dosyaları dışa aktarılamadı"
#: platform/android/export/export_plugin.cpp
msgid "Aligning APK..."
@@ -13687,29 +13617,24 @@ msgid "Could not write file:"
msgstr "Dosya yazılamadı:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not read file:"
-msgstr "Dosya yazılamadı:"
+msgstr "Dosya okunamadı:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not read HTML shell:"
-msgstr "Özel HTML çekirdeği okunamadı:"
+msgstr "HTML kabuğu okunamadı:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Could not create HTTP server directory:"
-msgstr "Klasör oluşturulamadı."
+msgstr "HTTP sunucu klasörü oluşturulamadı:"
#: platform/javascript/export/export.cpp
-#, fuzzy
msgid "Error starting HTTP server:"
-msgstr "Sahne kaydedilirken hata."
+msgstr "HTTP sunucusu başlatılırken hata:"
#: platform/osx/export/export.cpp
-#, fuzzy
msgid "Invalid bundle identifier:"
-msgstr "Geçersiz Tanımlayıcı:"
+msgstr "Geçersiz paket tanımlayıcısı:"
#: platform/osx/export/export.cpp
msgid "Notarization: code signing required."
@@ -14429,9 +14354,8 @@ msgid "Animation not found: '%s'"
msgstr "Animasyon bulunamadı: '%s'"
#: scene/animation/animation_player.cpp
-#, fuzzy
msgid "Anim Apply Reset"
-msgstr "Animasyonu Sıfırla"
+msgstr "Animasyon Sıfırlamayı Uygula"
#: scene/animation/animation_tree.cpp
msgid "In node '%s', invalid animation: '%s'."
@@ -14588,6 +14512,10 @@ msgid ""
"Consider using a script's process loop instead of relying on a Timer for "
"very low wait times."
msgstr ""
+"Çok düşük zamanlayıcı bekleme süreleri (< 0.05 saniye) kare hızına bağlı "
+"olarak, olması gerekenden farklı çalışabilir.\n"
+"Çok düşük bekleme süreleri için Timer'a güvenmektense, bir betiğin process "
+"döngüsünü kullanmayı tercih edin."
#: scene/main/viewport.cpp
msgid ""
@@ -14602,12 +14530,12 @@ msgstr ""
"bir RenderTarget yap ve dahili dokusunu herhangi bir düğüme ata."
#: scene/main/viewport.cpp
-#, fuzzy
msgid ""
"The Viewport size must be greater than or equal to 2 pixels on both "
"dimensions to render anything."
msgstr ""
-"Herhangi bir şeyi işlemek için görüntükapısı boyutu 0'dan büyük olmalıdır."
+"Herhangi bir şeyi işlemek için her iki boyutta da görüntükapısı boyutu 2 "
+"pikselden büyük ya da buna eşit olmalıdır."
#: scene/resources/occluder_shape.cpp
msgid "OccluderShapeSphere Set Spheres"
@@ -14634,9 +14562,8 @@ msgid "Invalid comparison function for that type."
msgstr "Bu tür için geçersiz karşılaştırma işlevi."
#: servers/visual/shader_language.cpp
-#, fuzzy
msgid "Varying may not be assigned in the '%s' function."
-msgstr "varyings yalnızca vertex işlevinde atanabilir."
+msgstr "'%s' işlevinde farklılıklar atanamayabilir."
#: servers/visual/shader_language.cpp
msgid ""
diff --git a/editor/translations/tt.po b/editor/translations/tt.po
index 0f92208d1e..b9631ca8b4 100644
--- a/editor/translations/tt.po
+++ b/editor/translations/tt.po
@@ -7415,11 +7415,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
diff --git a/editor/translations/tzm.po b/editor/translations/tzm.po
index 1b9404a393..b75bb26463 100644
--- a/editor/translations/tzm.po
+++ b/editor/translations/tzm.po
@@ -7413,11 +7413,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
diff --git a/editor/translations/uk.po b/editor/translations/uk.po
index 215937ed55..401f0fa006 100644
--- a/editor/translations/uk.po
+++ b/editor/translations/uk.po
@@ -7762,14 +7762,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "У цього каркаÑа немає кіÑток, Ñтворіть хоч ÑкіÑÑŒ дочірні вузли Bone2D."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "Створити вільну позу з кіÑток"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "Створити вільну позу Ð´Ð»Ñ ÐºÑ–Ñток"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "Створити вільну позу з кіÑток"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "ПлоÑкий каркаÑ"
diff --git a/editor/translations/ur_PK.po b/editor/translations/ur_PK.po
index 7918638d9c..c557fa7dfc 100644
--- a/editor/translations/ur_PK.po
+++ b/editor/translations/ur_PK.po
@@ -7604,11 +7604,11 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
+msgid "Set Rest Pose to Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
+msgid "Create Rest Pose from Bones"
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
diff --git a/editor/translations/vi.po b/editor/translations/vi.po
index ceb4d7948e..4e1718101e 100644
--- a/editor/translations/vi.po
+++ b/editor/translations/vi.po
@@ -7716,14 +7716,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "Bộ xương không có xương, tạo một số nút Bone2D."
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "Tạo tư thế nghỉ từ Xương"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "Äặt tư thế nghỉ cho Xương"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "Tạo tư thế nghỉ từ Xương"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Skeleton2D"
diff --git a/editor/translations/zh_CN.po b/editor/translations/zh_CN.po
index 6fef2d2f01..51e1b6212b 100644
--- a/editor/translations/zh_CN.po
+++ b/editor/translations/zh_CN.po
@@ -87,7 +87,7 @@ msgstr ""
"Project-Id-Version: Chinese (Simplified) (Godot Engine)\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: 2018-01-20 12:15+0200\n"
-"PO-Revision-Date: 2021-10-21 10:31+0000\n"
+"PO-Revision-Date: 2021-11-11 16:02+0000\n"
"Last-Translator: Haoyu Qiu <timothyqiu32@gmail.com>\n"
"Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/"
"godot-engine/godot/zh_Hans/>\n"
@@ -96,7 +96,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.9-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -5591,7 +5591,7 @@ msgstr "创建垂直水平å‚考线"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Set CanvasItem \"%s\" Pivot Offset to (%d, %d)"
-msgstr "å°† CanvasItem “%sâ€çš„ Pivot Offset 设为 (%d, %d)"
+msgstr "å°† CanvasItem“%sâ€çš„ Pivot Offset 设为 (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Rotate %d CanvasItems"
@@ -5599,19 +5599,19 @@ msgstr "旋转 %d 个 CanvasItem"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Rotate CanvasItem \"%s\" to %d degrees"
-msgstr "旋转 CanvasItem “%s†为 %d 度"
+msgstr "å°† CanvasItem“%sâ€çš„æ—‹è½¬è®¾ä¸º %d 度"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Move CanvasItem \"%s\" Anchor"
-msgstr "移动 CanvasItem “%s†的锚点"
+msgstr "移动 CanvasItem“%sâ€çš„锚点"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Scale Node2D \"%s\" to (%s, %s)"
-msgstr "缩放 Node2D “%s†为 (%s, %s)"
+msgstr "å°† Node2D“%sâ€ç¼©æ”¾ä¸º (%s, %s)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Resize Control \"%s\" to (%d, %d)"
-msgstr "缩放 Control “%s†为 (%d, %d)"
+msgstr "å°† Control“%sâ€çš„大尿›´æ”¹ä¸º (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Scale %d CanvasItems"
@@ -5619,7 +5619,7 @@ msgstr "缩放 %d 个 CanvasItem"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Scale CanvasItem \"%s\" to (%s, %s)"
-msgstr "缩放 CanvasItem “%s†为 (%s, %s)"
+msgstr "å°† CanvasItem“%sâ€ç¼©æ”¾ä¸º (%s, %s)"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Move %d CanvasItems"
@@ -5627,7 +5627,7 @@ msgstr "移动 %s 个 CanvasItem"
#: editor/plugins/canvas_item_editor_plugin.cpp
msgid "Move CanvasItem \"%s\" to (%d, %d)"
-msgstr "移动 CanvasItem “%s†至 (%d, %d)"
+msgstr "移动 CanvasItem“%sâ€è‡³ (%d, %d)"
#: editor/plugins/canvas_item_editor_plugin.cpp
#: editor/plugins/spatial_editor_plugin.cpp
@@ -7647,14 +7647,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "该骨架没有骨骼绑定,请创建一些 Bone2D 骨骼å­èŠ‚ç‚¹ã€‚"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "从骨骼创建放æ¾å§¿åŠ¿"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "将放æ¾å§¿åŠ¿è®¾ç½®åˆ°éª¨éª¼"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "从骨骼创建放æ¾å§¿åŠ¿"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "2D 骨骼节点"
diff --git a/editor/translations/zh_HK.po b/editor/translations/zh_HK.po
index c04f392c13..a3c6a8fa3d 100644
--- a/editor/translations/zh_HK.po
+++ b/editor/translations/zh_HK.po
@@ -7976,15 +7976,15 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr ""
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Set Rest Pose to Bones"
+msgstr ""
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
#, fuzzy
msgid "Create Rest Pose from Bones"
msgstr "é‹è¡Œå ´æ™¯"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Set Rest Pose to Bones"
-msgstr ""
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr ""
diff --git a/editor/translations/zh_TW.po b/editor/translations/zh_TW.po
index c699fc48fb..a251712cb1 100644
--- a/editor/translations/zh_TW.po
+++ b/editor/translations/zh_TW.po
@@ -26,13 +26,14 @@
# BinotaLIU <me@binota.org>, 2020, 2021.
# MintSoda <lionlxh@qq.com>, 2020.
# meowmeowmeowcat <meowmeowcat1211@gmail.com>, 2021.
+# anthonychen <anton1554970211@126.com>, 2021.
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"Report-Msgid-Bugs-To: https://github.com/godotengine/godot\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2021-07-13 06:13+0000\n"
-"Last-Translator: meowmeowmeowcat <meowmeowcat1211@gmail.com>\n"
+"PO-Revision-Date: 2021-11-11 16:02+0000\n"
+"Last-Translator: anthonychen <anton1554970211@126.com>\n"
"Language-Team: Chinese (Traditional) <https://hosted.weblate.org/projects/"
"godot-engine/godot/zh_Hant/>\n"
"Language: zh_TW\n"
@@ -40,7 +41,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 4.7.2-dev\n"
+"X-Generator: Weblate 4.9.1-dev\n"
#: core/math/expression.cpp modules/gdscript/gdscript_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -388,13 +389,11 @@ msgstr "æ’入動畫"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "node '%s'"
-msgstr "無法開啟 \"%s\"。"
+msgstr "無法開啟 \"%s\""
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "animation"
msgstr "å‹•ç•«"
@@ -404,7 +403,6 @@ msgstr "AnimationPlayer ä¸èƒ½æ’­æ”¾è‡ªå·±ï¼Œåªå¯æ’­æ”¾å…¶ä»– Player。"
#. TRANSLATORS: This describes the target of new animation track, will be inserted into another string.
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "property '%s'"
msgstr "屬性「%sã€ä¸å­˜åœ¨ã€‚"
@@ -632,7 +630,6 @@ msgid "Use Bezier Curves"
msgstr "使用è²èŒ²æ›²ç·š"
#: editor/animation_track_editor.cpp
-#, fuzzy
msgid "Create RESET Track(s)"
msgstr "貼上關éµç•«æ ¼"
@@ -977,7 +974,7 @@ msgstr "找ä¸åˆ°èˆ‡ã€Œ%sã€ç›¸é—œçš„çµæžœã€‚"
#: editor/create_dialog.cpp editor/property_selector.cpp
msgid "No description available for %s."
-msgstr ""
+msgstr "缺少å°%sçš„å¯ç”¨è§£é‡‹ã€‚"
#: editor/create_dialog.cpp editor/editor_file_dialog.cpp
#: editor/filesystem_dock.cpp
@@ -7689,14 +7686,14 @@ msgid "This skeleton has no bones, create some children Bone2D nodes."
msgstr "此骨架未包å«éª¨éª¼ï¼Œè«‹å»ºç«‹ä¸€äº›å­ Bone2D 節點。"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
-msgid "Create Rest Pose from Bones"
-msgstr "è‡ªéª¨éª¼å»ºç«‹éœæ­¢å§¿å‹¢"
-
-#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Set Rest Pose to Bones"
msgstr "è¨­å®šéœæ­¢å§¿å‹¢è‡³éª¨éª¼"
#: editor/plugins/skeleton_2d_editor_plugin.cpp
+msgid "Create Rest Pose from Bones"
+msgstr "è‡ªéª¨éª¼å»ºç«‹éœæ­¢å§¿å‹¢"
+
+#: editor/plugins/skeleton_2d_editor_plugin.cpp
msgid "Skeleton2D"
msgstr "Sekeleton2D"
diff --git a/main/main.cpp b/main/main.cpp
index f0f8c01592..ab44149988 100644
--- a/main/main.cpp
+++ b/main/main.cpp
@@ -1136,7 +1136,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
FileAccess::make_default<FileAccessNetwork>(FileAccess::ACCESS_RESOURCES);
}
- if (globals->setup(project_path, main_pack, upwards) == OK) {
+ if (globals->setup(project_path, main_pack, upwards, editor) == OK) {
#ifdef TOOLS_ENABLED
found_project = true;
#endif
@@ -1700,9 +1700,10 @@ Error Main::setup2(Thread::ID p_main_tid_override) {
RenderingServer::get_singleton()->set_default_clear_color(clear);
if (show_logo) { //boot logo!
- String boot_logo_path = GLOBAL_DEF("application/boot_splash/image", String());
- bool boot_logo_scale = GLOBAL_DEF("application/boot_splash/fullsize", true);
- bool boot_logo_filter = GLOBAL_DEF("application/boot_splash/use_filter", true);
+ const bool boot_logo_image = GLOBAL_DEF("application/boot_splash/show_image", true);
+ const String boot_logo_path = GLOBAL_DEF("application/boot_splash/image", String());
+ const bool boot_logo_scale = GLOBAL_DEF("application/boot_splash/fullsize", true);
+ const bool boot_logo_filter = GLOBAL_DEF("application/boot_splash/use_filter", true);
ProjectSettings::get_singleton()->set_custom_property_info("application/boot_splash/image",
PropertyInfo(Variant::STRING,
"application/boot_splash/image",
@@ -1710,14 +1711,19 @@ Error Main::setup2(Thread::ID p_main_tid_override) {
Ref<Image> boot_logo;
- boot_logo_path = boot_logo_path.strip_edges();
-
- if (boot_logo_path != String()) {
- boot_logo.instantiate();
- Error load_err = ImageLoader::load_image(boot_logo_path, boot_logo);
- if (load_err) {
- ERR_PRINT("Non-existing or invalid boot splash at '" + boot_logo_path + "'. Loading default splash.");
+ if (boot_logo_image) {
+ if (boot_logo_path != String()) {
+ boot_logo.instantiate();
+ Error load_err = ImageLoader::load_image(boot_logo_path, boot_logo);
+ if (load_err) {
+ ERR_PRINT("Non-existing or invalid boot splash at '" + boot_logo_path + "'. Loading default splash.");
+ }
}
+ } else {
+ // Create a 1×1 transparent image. This will effectively hide the splash image.
+ boot_logo.instantiate();
+ boot_logo->create(1, 1, false, Image::FORMAT_RGBA8);
+ boot_logo->set_pixel(0, 0, Color(0, 0, 0, 0));
}
#if defined(TOOLS_ENABLED) && !defined(NO_EDITOR_SPLASH)
diff --git a/methods.py b/methods.py
index b2eb7b7c77..3331e159c7 100644
--- a/methods.py
+++ b/methods.py
@@ -105,6 +105,8 @@ def update_version(module_version_string=""):
f.write('#define VERSION_MODULE_CONFIG "' + str(version.module_config) + module_version_string + '"\n')
f.write("#define VERSION_YEAR " + str(version.year) + "\n")
f.write('#define VERSION_WEBSITE "' + str(version.website) + '"\n')
+ f.write('#define VERSION_DOCS_BRANCH "' + str(version.docs) + '"\n')
+ f.write('#define VERSION_DOCS_URL "https://docs.godotengine.org/en/" VERSION_DOCS_BRANCH\n')
f.write("#endif // VERSION_GENERATED_GEN_H\n")
f.close()
diff --git a/misc/dist/html/editor.html b/misc/dist/html/editor.html
index 69e267f665..8b077a5725 100644
--- a/misc/dist/html/editor.html
+++ b/misc/dist/html/editor.html
@@ -281,8 +281,7 @@
<label for="videoMode" style="margin-right: 1rem">Video driver:</label>
<select id="videoMode">
<option value="" selected="selected">Auto</option>
- <option value="GLES2">WebGL</option>
- <option value="GLES3">WebGL 2</option>
+ <option value="opengl3">WebGL 2</option>
</select>
<br />
<br />
@@ -562,8 +561,9 @@
const is_project_manager = args.filter(function(v) { return v == '--project-manager' }).length != 0;
const is_game = !is_editor && !is_project_manager;
if (video_driver) {
- args.push('--video-driver', video_driver);
+ args.push('--rendering-driver', video_driver);
}
+
if (is_game) {
if (game) {
console.error("A game is already running. Close it first");
@@ -651,9 +651,9 @@
selectVideoMode();
showTab('editor');
setLoaderEnabled(false);
- const args = ['--project-manager'];
+ const args = ['--project-manager', '--single-window'];
if (video_driver) {
- args.push('--video-driver', video_driver);
+ args.push('--rendering-driver', video_driver);
}
editor.start({'args': args, 'persistentDrops': true}).then(function() {
setStatusMode('hidden');
diff --git a/misc/hooks/README.md b/misc/hooks/README.md
index e420c6cb5c..8732237244 100644
--- a/misc/hooks/README.md
+++ b/misc/hooks/README.md
@@ -28,7 +28,7 @@ so they should work out of the box on Linux/macOS.
#### Windows
##### clang-format
-- Download LLVM for Windows (version 8 or later) from
+- Download LLVM for Windows (version 13 or later) from
<https://releases.llvm.org/download.html>
- Make sure LLVM is added to the `PATH` during installation
diff --git a/misc/hooks/pre-commit-black b/misc/hooks/pre-commit-black
index 76d97294da..8e22e6068e 100755
--- a/misc/hooks/pre-commit-black
+++ b/misc/hooks/pre-commit-black
@@ -14,7 +14,7 @@ DELETE_OLD_PATCHES=false
# File types to parse.
FILE_NAMES="SConstruct SCsub"
-FILE_EXTS="py"
+FILE_EXTS=".py"
# Use pygmentize instead of cat to parse diff with highlighting.
# Install it with `pip install pygments` (Linux) or `easy_install Pygments` (Mac)
diff --git a/modules/bullet/area_bullet.cpp b/modules/bullet/area_bullet.cpp
index b5a7da0c38..435069e25c 100644
--- a/modules/bullet/area_bullet.cpp
+++ b/modules/bullet/area_bullet.cpp
@@ -59,8 +59,8 @@ AreaBullet::AreaBullet() :
AreaBullet::~AreaBullet() {
// signal are handled by godot, so just clear without notify
- for (int i = overlappingObjects.size() - 1; 0 <= i; --i) {
- overlappingObjects[i].object->on_exit_area(this);
+ for (int i = 0; i < overlapping_shapes.size(); i++) {
+ overlapping_shapes[i].other_object->on_exit_area(this);
}
}
@@ -70,30 +70,42 @@ void AreaBullet::dispatch_callbacks() {
}
isScratched = false;
- // Reverse order because I've to remove EXIT objects
- for (int i = overlappingObjects.size() - 1; 0 <= i; --i) {
- OverlappingObjectData &otherObj = overlappingObjects.write[i];
+ // Reverse order so items can be removed.
+ for (int i = overlapping_shapes.size() - 1; i >= 0; i--) {
+ OverlappingShapeData &overlapping_shape = overlapping_shapes.write[i];
- switch (otherObj.state) {
+ switch (overlapping_shape.state) {
case OVERLAP_STATE_ENTER:
- otherObj.state = OVERLAP_STATE_INSIDE;
- call_event(otherObj.object, PhysicsServer3D::AREA_BODY_ADDED);
- otherObj.object->on_enter_area(this);
+ overlapping_shape.state = OVERLAP_STATE_INSIDE;
+ call_event(overlapping_shape, PhysicsServer3D::AREA_BODY_ADDED);
+ if (_overlapping_shape_count(overlapping_shape.other_object) == 1) {
+ // This object's first shape being added.
+ overlapping_shape.other_object->on_enter_area(this);
+ }
break;
case OVERLAP_STATE_EXIT:
- call_event(otherObj.object, PhysicsServer3D::AREA_BODY_REMOVED);
- otherObj.object->on_exit_area(this);
- overlappingObjects.remove(i); // Remove after callback
+ call_event(overlapping_shape, PhysicsServer3D::AREA_BODY_REMOVED);
+ if (_overlapping_shape_count(overlapping_shape.other_object) == 1) {
+ // This object's last shape being removed.
+ overlapping_shape.other_object->on_exit_area(this);
+ }
+ overlapping_shapes.remove(i); // Remove after callback
break;
+ case OVERLAP_STATE_INSIDE: {
+ if (overlapping_shape.other_object->getType() == TYPE_RIGID_BODY) {
+ RigidBodyBullet *body = static_cast<RigidBodyBullet *>(overlapping_shape.other_object);
+ body->scratch_space_override_modificator();
+ }
+ break;
+ }
case OVERLAP_STATE_DIRTY:
- case OVERLAP_STATE_INSIDE:
break;
}
}
}
-void AreaBullet::call_event(CollisionObjectBullet *p_otherObject, PhysicsServer3D::AreaBodyStatus p_status) {
- InOutEventCallback &event = eventsCallbacks[static_cast<int>(p_otherObject->getType())];
+void AreaBullet::call_event(const OverlappingShapeData &p_overlapping_shape, PhysicsServer3D::AreaBodyStatus p_status) {
+ InOutEventCallback &event = eventsCallbacks[static_cast<int>(p_overlapping_shape.other_object->getType())];
if (!event.event_callback.is_valid()) {
event.event_callback = Callable();
@@ -101,58 +113,97 @@ void AreaBullet::call_event(CollisionObjectBullet *p_otherObject, PhysicsServer3
}
call_event_res[0] = p_status;
- call_event_res[1] = p_otherObject->get_self(); // Other body
- call_event_res[2] = p_otherObject->get_instance_id(); // instance ID
- call_event_res[3] = 0; // other_body_shape ID
- call_event_res[4] = 0; // self_shape ID
+ call_event_res[1] = p_overlapping_shape.other_object->get_self(); // RID
+ call_event_res[2] = p_overlapping_shape.other_object->get_instance_id(); // Object ID
+ call_event_res[3] = p_overlapping_shape.other_shape_id; // Other object's shape ID
+ call_event_res[4] = p_overlapping_shape.our_shape_id; // This area's shape ID
Callable::CallError outResp;
Variant ret;
event.event_callback.call((const Variant **)call_event_res, 5, ret, outResp);
}
-void AreaBullet::scratch() {
- if (isScratched) {
- return;
+int AreaBullet::_overlapping_shape_count(CollisionObjectBullet *p_other_object) {
+ int count = 0;
+ for (int i = 0; i < overlapping_shapes.size(); i++) {
+ if (overlapping_shapes[i].other_object == p_other_object) {
+ count++;
+ }
}
- isScratched = true;
+ return count;
}
-void AreaBullet::clear_overlaps(bool p_notify) {
- for (int i = overlappingObjects.size() - 1; 0 <= i; --i) {
- if (p_notify) {
- call_event(overlappingObjects[i].object, PhysicsServer3D::AREA_BODY_REMOVED);
+int AreaBullet::_find_overlapping_shape(CollisionObjectBullet *p_other_object, uint32_t p_other_shape_id, uint32_t p_our_shape_id) {
+ for (int i = 0; i < overlapping_shapes.size(); i++) {
+ const OverlappingShapeData &overlapping_shape = overlapping_shapes[i];
+ if (overlapping_shape.other_object == p_other_object && overlapping_shape.other_shape_id == p_other_shape_id && overlapping_shape.our_shape_id == p_our_shape_id) {
+ return i;
}
- overlappingObjects[i].object->on_exit_area(this);
}
- overlappingObjects.clear();
+ return -1;
}
-void AreaBullet::remove_overlap(CollisionObjectBullet *p_object, bool p_notify) {
- for (int i = overlappingObjects.size() - 1; 0 <= i; --i) {
- if (overlappingObjects[i].object == p_object) {
- if (p_notify) {
- call_event(overlappingObjects[i].object, PhysicsServer3D::AREA_BODY_REMOVED);
- }
- overlappingObjects[i].object->on_exit_area(this);
- overlappingObjects.remove(i);
- break;
+void AreaBullet::mark_all_overlaps_dirty() {
+ OverlappingShapeData *overlapping_shapes_w = overlapping_shapes.ptrw();
+ for (int i = 0; i < overlapping_shapes.size(); i++) {
+ // Don't overwrite OVERLAP_STATE_ENTER state.
+ if (overlapping_shapes_w[i].state != OVERLAP_STATE_ENTER) {
+ overlapping_shapes_w[i].state = OVERLAP_STATE_DIRTY;
}
}
}
-int AreaBullet::find_overlapping_object(CollisionObjectBullet *p_colObj) {
- const int size = overlappingObjects.size();
- for (int i = 0; i < size; ++i) {
- if (overlappingObjects[i].object == p_colObj) {
- return i;
+void AreaBullet::mark_object_overlaps_inside(CollisionObjectBullet *p_other_object) {
+ OverlappingShapeData *overlapping_shapes_w = overlapping_shapes.ptrw();
+ for (int i = 0; i < overlapping_shapes.size(); i++) {
+ if (overlapping_shapes_w[i].other_object == p_other_object && overlapping_shapes_w[i].state == OVERLAP_STATE_DIRTY) {
+ overlapping_shapes_w[i].state = OVERLAP_STATE_INSIDE;
}
}
- return -1;
+}
+
+void AreaBullet::set_overlap(CollisionObjectBullet *p_other_object, uint32_t p_other_shape_id, uint32_t p_our_shape_id) {
+ int i = _find_overlapping_shape(p_other_object, p_other_shape_id, p_our_shape_id);
+ if (i == -1) { // Not found, create new one.
+ OverlappingShapeData overlapping_shape(p_other_object, OVERLAP_STATE_ENTER, p_other_shape_id, p_our_shape_id);
+ overlapping_shapes.push_back(overlapping_shape);
+ p_other_object->notify_new_overlap(this);
+ isScratched = true;
+ } else {
+ overlapping_shapes.ptrw()[i].state = OVERLAP_STATE_INSIDE;
+ }
+}
+
+void AreaBullet::mark_all_dirty_overlaps_as_exit() {
+ OverlappingShapeData *overlapping_shapes_w = overlapping_shapes.ptrw();
+ for (int i = 0; i < overlapping_shapes.size(); i++) {
+ if (overlapping_shapes[i].state == OVERLAP_STATE_DIRTY) {
+ overlapping_shapes_w[i].state = OVERLAP_STATE_EXIT;
+ isScratched = true;
+ }
+ }
+}
+
+void AreaBullet::remove_object_overlaps(CollisionObjectBullet *p_object) {
+ // Reverse order so items can be removed.
+ for (int i = overlapping_shapes.size() - 1; i >= 0; i--) {
+ if (overlapping_shapes[i].other_object == p_object) {
+ overlapping_shapes.remove(i);
+ }
+ }
+}
+
+void AreaBullet::clear_overlaps() {
+ for (int i = 0; i < overlapping_shapes.size(); i++) {
+ call_event(overlapping_shapes[i], PhysicsServer3D::AREA_BODY_REMOVED);
+ overlapping_shapes[i].other_object->on_exit_area(this);
+ }
+ overlapping_shapes.clear();
}
void AreaBullet::set_monitorable(bool p_monitorable) {
monitorable = p_monitorable;
+ updated = true;
}
bool AreaBullet::is_monitoring() const {
@@ -162,6 +213,7 @@ bool AreaBullet::is_monitoring() const {
void AreaBullet::main_shape_changed() {
CRASH_COND(!get_main_shape());
btGhost->setCollisionShape(get_main_shape());
+ updated = true;
}
void AreaBullet::reload_body() {
@@ -174,7 +226,7 @@ void AreaBullet::reload_body() {
void AreaBullet::set_space(SpaceBullet *p_space) {
// Clear the old space if there is one
if (space) {
- clear_overlaps(false);
+ clear_overlaps();
isScratched = false;
// Remove this object form the physics world
@@ -192,24 +244,7 @@ void AreaBullet::on_collision_filters_change() {
if (space) {
space->reload_collision_filters(this);
}
-}
-
-void AreaBullet::add_overlap(CollisionObjectBullet *p_otherObject) {
- scratch();
- overlappingObjects.push_back(OverlappingObjectData(p_otherObject, OVERLAP_STATE_ENTER));
- p_otherObject->notify_new_overlap(this);
-}
-
-void AreaBullet::put_overlap_as_exit(int p_index) {
- scratch();
- overlappingObjects.write[p_index].state = OVERLAP_STATE_EXIT;
-}
-
-void AreaBullet::put_overlap_as_inside(int p_index) {
- // This check is required to be sure this body was inside
- if (OVERLAP_STATE_DIRTY == overlappingObjects[p_index].state) {
- overlappingObjects.write[p_index].state = OVERLAP_STATE_INSIDE;
- }
+ updated = true;
}
void AreaBullet::set_param(PhysicsServer3D::AreaParameter p_param, const Variant &p_value) {
@@ -241,6 +276,7 @@ void AreaBullet::set_param(PhysicsServer3D::AreaParameter p_param, const Variant
default:
WARN_PRINT("Area doesn't support this parameter in the Bullet backend: " + itos(p_param));
}
+ isScratched = true;
}
Variant AreaBullet::get_param(PhysicsServer3D::AreaParameter p_param) const {
@@ -276,6 +312,7 @@ void AreaBullet::set_event_callback(Type p_callbackObjectType, const Callable &p
set_godot_object_flags(get_godot_object_flags() | GOF_IS_MONITORING_AREA);
} else {
set_godot_object_flags(get_godot_object_flags() & (~GOF_IS_MONITORING_AREA));
+ clear_overlaps();
}
}
diff --git a/modules/bullet/area_bullet.h b/modules/bullet/area_bullet.h
index d96c550082..3bff364cc1 100644
--- a/modules/bullet/area_bullet.h
+++ b/modules/bullet/area_bullet.h
@@ -43,8 +43,6 @@
class btGhostObject;
class AreaBullet : public RigidCollisionObjectBullet {
- friend void SpaceBullet::check_ghost_overlaps();
-
public:
struct InOutEventCallback {
Callable event_callback;
@@ -59,21 +57,19 @@ public:
OVERLAP_STATE_EXIT // Mark ended overlaps
};
- struct OverlappingObjectData {
- CollisionObjectBullet *object = nullptr;
- OverlapState state = OVERLAP_STATE_ENTER;
-
- OverlappingObjectData() {}
- OverlappingObjectData(CollisionObjectBullet *p_object, OverlapState p_state) :
- object(p_object),
- state(p_state) {}
- OverlappingObjectData(const OverlappingObjectData &other) {
- operator=(other);
- }
- void operator=(const OverlappingObjectData &other) {
- object = other.object;
- state = other.state;
- }
+ struct OverlappingShapeData {
+ CollisionObjectBullet *other_object = nullptr;
+ OverlapState state = OVERLAP_STATE_DIRTY;
+ uint32_t other_shape_id = 0;
+ uint32_t our_shape_id = 0;
+
+ OverlappingShapeData() {}
+
+ OverlappingShapeData(CollisionObjectBullet *p_other_object, OverlapState p_state, uint32_t p_other_shape_id, uint32_t p_our_shape_id) :
+ other_object(p_other_object),
+ state(p_state),
+ other_shape_id(p_other_shape_id),
+ our_shape_id(p_our_shape_id) {}
};
private:
@@ -82,7 +78,9 @@ private:
Variant *call_event_res_ptr[5] = {};
btGhostObject *btGhost = nullptr;
- Vector<OverlappingObjectData> overlappingObjects;
+ Vector<OverlappingShapeData> overlapping_shapes;
+ int _overlapping_shape_count(CollisionObjectBullet *p_other_object);
+ int _find_overlapping_shape(CollisionObjectBullet *p_other_object, uint32_t p_other_shape_id, uint32_t p_our_shape_id);
bool monitorable = true;
PhysicsServer3D::AreaSpaceOverrideMode spOv_mode = PhysicsServer3D::AREA_SPACE_OVERRIDE_DISABLED;
@@ -104,7 +102,6 @@ public:
~AreaBullet();
_FORCE_INLINE_ btGhostObject *get_bt_ghost() const { return btGhost; }
- int find_overlapping_object(CollisionObjectBullet *p_colObj);
void set_monitorable(bool p_monitorable);
_FORCE_INLINE_ bool is_monitorable() const { return monitorable; }
@@ -143,20 +140,18 @@ public:
virtual void set_space(SpaceBullet *p_space);
virtual void dispatch_callbacks();
- void call_event(CollisionObjectBullet *p_otherObject, PhysicsServer3D::AreaBodyStatus p_status);
- void scratch();
-
- void clear_overlaps(bool p_notify);
- // Dispatch the callbacks and removes from overlapping list
- void remove_overlap(CollisionObjectBullet *p_object, bool p_notify);
+ void call_event(const OverlappingShapeData &p_overlapping_shape, PhysicsServer3D::AreaBodyStatus p_status);
virtual void on_collision_filters_change();
virtual void on_collision_checker_start() {}
- virtual void on_collision_checker_end() { isTransformChanged = false; }
-
- void add_overlap(CollisionObjectBullet *p_otherObject);
- void put_overlap_as_exit(int p_index);
- void put_overlap_as_inside(int p_index);
+ virtual void on_collision_checker_end() { updated = false; }
+
+ void mark_all_overlaps_dirty();
+ void mark_object_overlaps_inside(CollisionObjectBullet *p_other_object);
+ void set_overlap(CollisionObjectBullet *p_other_object, uint32_t p_other_shape_id, uint32_t p_our_shape_id);
+ void mark_all_dirty_overlaps_as_exit();
+ void remove_object_overlaps(CollisionObjectBullet *p_object);
+ void clear_overlaps();
void set_param(PhysicsServer3D::AreaParameter p_param, const Variant &p_value);
Variant get_param(PhysicsServer3D::AreaParameter p_param) const;
diff --git a/modules/bullet/collision_object_bullet.cpp b/modules/bullet/collision_object_bullet.cpp
index c45bd5bbc0..987a45ad5f 100644
--- a/modules/bullet/collision_object_bullet.cpp
+++ b/modules/bullet/collision_object_bullet.cpp
@@ -93,11 +93,9 @@ CollisionObjectBullet::CollisionObjectBullet(Type p_type) :
type(p_type) {}
CollisionObjectBullet::~CollisionObjectBullet() {
- // Remove all overlapping, notify is not required since godot take care of it
- for (int i = areasOverlapped.size() - 1; 0 <= i; --i) {
- areasOverlapped[i]->remove_overlap(this, /*Notify*/ false);
+ for (int i = 0; i < areasOverlapped.size(); i++) {
+ areasOverlapped[i]->remove_object_overlaps(this);
}
-
destroyBulletCollisionObject();
}
@@ -178,7 +176,9 @@ bool CollisionObjectBullet::is_collisions_response_enabled() {
}
void CollisionObjectBullet::notify_new_overlap(AreaBullet *p_area) {
- areasOverlapped.push_back(p_area);
+ if (areasOverlapped.find(p_area) == -1) {
+ areasOverlapped.push_back(p_area);
+ }
}
void CollisionObjectBullet::on_exit_area(AreaBullet *p_area) {
@@ -187,6 +187,7 @@ void CollisionObjectBullet::on_exit_area(AreaBullet *p_area) {
void CollisionObjectBullet::set_godot_object_flags(int flags) {
bt_collision_object->setUserIndex2(flags);
+ updated = true;
}
int CollisionObjectBullet::get_godot_object_flags() const {
@@ -220,7 +221,7 @@ const btTransform &CollisionObjectBullet::get_transform__bullet() const {
}
void CollisionObjectBullet::notify_transform_changed() {
- isTransformChanged = true;
+ updated = true;
}
RigidCollisionObjectBullet::~RigidCollisionObjectBullet() {
diff --git a/modules/bullet/collision_object_bullet.h b/modules/bullet/collision_object_bullet.h
index 944ab89b87..6d2c564e44 100644
--- a/modules/bullet/collision_object_bullet.h
+++ b/modules/bullet/collision_object_bullet.h
@@ -128,7 +128,7 @@ protected:
/// New area is added when overlap with new area (AreaBullet::addOverlap), then is removed when it exit (CollisionObjectBullet::onExitArea)
/// This array is used mainly to know which area hold the pointer of this object
Vector<AreaBullet *> areasOverlapped;
- bool isTransformChanged = false;
+ bool updated = false;
public:
CollisionObjectBullet(Type p_type);
@@ -206,9 +206,9 @@ public:
Transform3D get_transform() const;
virtual void set_transform__bullet(const btTransform &p_global_transform);
virtual const btTransform &get_transform__bullet() const;
-
- bool is_transform_changed() const { return isTransformChanged; }
virtual void notify_transform_changed();
+
+ bool is_updated() const { return updated; }
};
class RigidCollisionObjectBullet : public CollisionObjectBullet, public ShapeOwnerBullet {
diff --git a/modules/bullet/rigid_body_bullet.cpp b/modules/bullet/rigid_body_bullet.cpp
index 7b20fad28c..4faab19539 100644
--- a/modules/bullet/rigid_body_bullet.cpp
+++ b/modules/bullet/rigid_body_bullet.cpp
@@ -420,7 +420,7 @@ void RigidBodyBullet::on_collision_checker_start() {
void RigidBodyBullet::on_collision_checker_end() {
// Always true if active and not a static or kinematic body
- isTransformChanged = btBody->isActive() && !btBody->isStaticOrKinematicObject();
+ updated = btBody->isActive() && !btBody->isStaticOrKinematicObject();
}
bool RigidBodyBullet::add_collision_object(RigidBodyBullet *p_otherObject, const Vector3 &p_hitWorldLocation, const Vector3 &p_hitLocalLocation, const Vector3 &p_hitNormal, const real_t &p_appliedImpulse, int p_other_shape_index, int p_local_shape_index) {
diff --git a/modules/bullet/space_bullet.cpp b/modules/bullet/space_bullet.cpp
index 66d7370bd7..7aa3815c94 100644
--- a/modules/bullet/space_bullet.cpp
+++ b/modules/bullet/space_bullet.cpp
@@ -662,101 +662,77 @@ void SpaceBullet::destroy_world() {
}
void SpaceBullet::check_ghost_overlaps() {
- /// Algorithm support variables
- btCollisionShape *other_body_shape;
- btConvexShape *area_shape;
- btGjkPairDetector::ClosestPointInput gjk_input;
- AreaBullet *area;
- int x(-1), i(-1), y(-1), z(-1), indexOverlap(-1);
-
- /// For each areas
- for (x = areas.size() - 1; 0 <= x; --x) {
- area = areas[x];
-
- btVector3 area_scale(area->get_bt_body_scale());
-
+ // For each area
+ for (int area_idx = 0; area_idx < areas.size(); area_idx++) {
+ AreaBullet *area = areas[area_idx];
if (!area->is_monitoring()) {
continue;
}
- /// 1. Reset all states
- for (i = area->overlappingObjects.size() - 1; 0 <= i; --i) {
- AreaBullet::OverlappingObjectData &otherObj = area->overlappingObjects.write[i];
- // This check prevent the overwrite of ENTER state
- // if this function is called more times before dispatchCallbacks
- if (otherObj.state != AreaBullet::OVERLAP_STATE_ENTER) {
- otherObj.state = AreaBullet::OVERLAP_STATE_DIRTY;
- }
- }
+ btGhostObject *bt_ghost = area->get_bt_ghost();
+ const btTransform &area_transform = area->get_transform__bullet();
+ const btVector3 &area_scale(area->get_bt_body_scale());
- /// 2. Check all overlapping objects using GJK
+ // Mark all current overlapping shapes dirty.
+ area->mark_all_overlaps_dirty();
- const btAlignedObjectArray<btCollisionObject *> ghostOverlaps = area->get_bt_ghost()->getOverlappingPairs();
+ // Broadphase
+ const btAlignedObjectArray<btCollisionObject *> overlapping_pairs = bt_ghost->getOverlappingPairs();
+ // Narrowphase
+ for (int pair_idx = 0; pair_idx < overlapping_pairs.size(); pair_idx++) {
+ btCollisionObject *other_bt_collision_object = overlapping_pairs[pair_idx];
+ RigidCollisionObjectBullet *other_object = static_cast<RigidCollisionObjectBullet *>(other_bt_collision_object->getUserPointer());
+ const btTransform &other_transform = other_object->get_transform__bullet();
+ const btVector3 &other_scale(other_object->get_bt_body_scale());
- // For each overlapping
- for (i = ghostOverlaps.size() - 1; 0 <= i; --i) {
- bool hasOverlap = false;
- btCollisionObject *overlapped_bt_co = ghostOverlaps[i];
- RigidCollisionObjectBullet *otherObject = static_cast<RigidCollisionObjectBullet *>(overlapped_bt_co->getUserPointer());
- btVector3 other_body_scale(otherObject->get_bt_body_scale());
-
- if (!area->is_transform_changed() && !otherObject->is_transform_changed()) {
- hasOverlap = -1 != area->find_overlapping_object(otherObject);
- goto collision_found;
+ if (!area->is_updated() && !other_object->is_updated()) {
+ area->mark_object_overlaps_inside(other_object);
+ continue;
}
- if (overlapped_bt_co->getUserIndex() == CollisionObjectBullet::TYPE_AREA) {
- if (!static_cast<AreaBullet *>(overlapped_bt_co->getUserPointer())->is_monitorable()) {
+ if (other_bt_collision_object->getUserIndex() == CollisionObjectBullet::TYPE_AREA) {
+ if (!static_cast<AreaBullet *>(other_bt_collision_object->getUserPointer())->is_monitorable()) {
continue;
}
- } else if (overlapped_bt_co->getUserIndex() != CollisionObjectBullet::TYPE_RIGID_BODY) {
+ } else if (other_bt_collision_object->getUserIndex() != CollisionObjectBullet::TYPE_RIGID_BODY) {
continue;
}
// For each area shape
- for (y = area->get_shape_count() - 1; 0 <= y; --y) {
- if (!area->get_bt_shape(y)->isConvex()) {
+ for (int our_shape_id = 0; our_shape_id < area->get_shape_count(); our_shape_id++) {
+ btCollisionShape *area_shape = area->get_bt_shape(our_shape_id);
+ if (!area_shape->isConvex()) {
continue;
}
+ btConvexShape *area_convex_shape = static_cast<btConvexShape *>(area_shape);
- btTransform area_shape_treansform(area->get_bt_shape_transform(y));
- area_shape_treansform.getOrigin() *= area_scale;
-
- gjk_input.m_transformA =
- area->get_transform__bullet() *
- area_shape_treansform;
-
- area_shape = static_cast<btConvexShape *>(area->get_bt_shape(y));
+ btTransform area_shape_transform(area->get_bt_shape_transform(our_shape_id));
+ area_shape_transform.getOrigin() *= area_scale;
+ btGjkPairDetector::ClosestPointInput gjk_input;
+ gjk_input.m_transformA = area_transform * area_shape_transform;
// For each other object shape
- for (z = otherObject->get_shape_count() - 1; 0 <= z; --z) {
- other_body_shape = static_cast<btCollisionShape *>(otherObject->get_bt_shape(z));
-
- btTransform other_shape_transform(otherObject->get_bt_shape_transform(z));
- other_shape_transform.getOrigin() *= other_body_scale;
-
- gjk_input.m_transformB =
- otherObject->get_transform__bullet() *
- other_shape_transform;
+ for (int other_shape_id = 0; other_shape_id < other_object->get_shape_count(); other_shape_id++) {
+ btCollisionShape *other_shape = other_object->get_bt_shape(other_shape_id);
+ btTransform other_shape_transform(other_object->get_bt_shape_transform(other_shape_id));
+ other_shape_transform.getOrigin() *= other_scale;
+ gjk_input.m_transformB = other_transform * other_shape_transform;
- if (other_body_shape->isConvex()) {
+ if (other_shape->isConvex()) {
btPointCollector result;
btGjkPairDetector gjk_pair_detector(
- area_shape,
- static_cast<btConvexShape *>(other_body_shape),
+ area_convex_shape,
+ static_cast<btConvexShape *>(other_shape),
gjk_simplex_solver,
gjk_epa_pen_solver);
- gjk_pair_detector.getClosestPoints(gjk_input, result, nullptr);
- if (0 >= result.m_distance) {
- hasOverlap = true;
- goto collision_found;
+ gjk_pair_detector.getClosestPoints(gjk_input, result, nullptr);
+ if (result.m_distance <= 0) {
+ area->set_overlap(other_object, other_shape_id, our_shape_id);
}
-
- } else {
- btCollisionObjectWrapper obA(nullptr, area_shape, area->get_bt_ghost(), gjk_input.m_transformA, -1, y);
- btCollisionObjectWrapper obB(nullptr, other_body_shape, otherObject->get_bt_collision_object(), gjk_input.m_transformB, -1, z);
-
+ } else { // Other shape is not convex.
+ btCollisionObjectWrapper obA(nullptr, area_convex_shape, bt_ghost, gjk_input.m_transformA, -1, our_shape_id);
+ btCollisionObjectWrapper obB(nullptr, other_shape, other_bt_collision_object, gjk_input.m_transformB, -1, other_shape_id);
btCollisionAlgorithm *algorithm = dispatcher->findAlgorithm(&obA, &obB, nullptr, BT_CONTACT_POINT_ALGORITHMS);
if (!algorithm) {
@@ -765,42 +741,20 @@ void SpaceBullet::check_ghost_overlaps() {
GodotDeepPenetrationContactResultCallback contactPointResult(&obA, &obB);
algorithm->processCollision(&obA, &obB, dynamicsWorld->getDispatchInfo(), &contactPointResult);
-
algorithm->~btCollisionAlgorithm();
dispatcher->freeCollisionAlgorithm(algorithm);
if (contactPointResult.hasHit()) {
- hasOverlap = true;
- goto collision_found;
+ area->set_overlap(other_object, our_shape_id, other_shape_id);
}
}
+ } // End for each other object shape
+ } // End for each area shape
+ } // End for each overlapping pair
- } // ~For each other object shape
- } // ~For each area shape
-
- collision_found:
- if (!hasOverlap) {
- continue;
- }
-
- indexOverlap = area->find_overlapping_object(otherObject);
- if (-1 == indexOverlap) {
- // Not found
- area->add_overlap(otherObject);
- } else {
- // Found
- area->put_overlap_as_inside(indexOverlap);
- }
- }
-
- /// 3. Remove not overlapping
- for (i = area->overlappingObjects.size() - 1; 0 <= i; --i) {
- // If the overlap has DIRTY state it means that it's no more overlapping
- if (area->overlappingObjects[i].state == AreaBullet::OVERLAP_STATE_DIRTY) {
- area->put_overlap_as_exit(i);
- }
- }
- }
+ // All overlapping shapes still marked dirty must have exited.
+ area->mark_all_dirty_overlaps_as_exit();
+ } // End for each area
}
void SpaceBullet::check_body_collision() {
@@ -835,7 +789,7 @@ void SpaceBullet::check_body_collision() {
btManifoldPoint &pt = contactManifold->getContactPoint(0);
#endif
if (
- pt.getDistance() <= 0.0 ||
+ pt.getDistance() < 0.0 ||
bodyA->was_colliding(bodyB) ||
bodyB->was_colliding(bodyA)) {
Vector3 collisionWorldPosition;
diff --git a/modules/csg/doc_classes/CSGShape3D.xml b/modules/csg/doc_classes/CSGShape3D.xml
index 446269f3f0..f5031064d6 100644
--- a/modules/csg/doc_classes/CSGShape3D.xml
+++ b/modules/csg/doc_classes/CSGShape3D.xml
@@ -59,10 +59,10 @@
<member name="collision_layer" type="int" setter="set_collision_layer" getter="get_collision_layer" default="1">
The physics layers this area is in.
Collidable objects can exist in any of 32 different layers. These layers work like a tagging system, and are not visual. A collidable can use these layers to select with which objects it can collide, using the collision_mask property.
- A contact is detected if object A is in any of the layers that object B scans, or object B is in any layer scanned by object A. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
+ A contact is detected if object A is in any of the layers that object B scans, or object B is in any layer scanned by object A. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
</member>
<member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="1">
- The physics layers this CSG shape scans for collisions. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
+ The physics layers this CSG shape scans for collisions. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
</member>
<member name="operation" type="int" setter="set_operation" getter="get_operation" enum="CSGShape3D.Operation" default="0">
The operation that is performed on this shape. This is ignored for the first CSG child node as the operation is between this node and the previous child of this nodes parent.
diff --git a/modules/enet/doc_classes/ENetMultiplayerPeer.xml b/modules/enet/doc_classes/ENetMultiplayerPeer.xml
index 22136c3944..d2456d3360 100644
--- a/modules/enet/doc_classes/ENetMultiplayerPeer.xml
+++ b/modules/enet/doc_classes/ENetMultiplayerPeer.xml
@@ -8,7 +8,7 @@
[b]Note:[/b] ENet only uses UDP, not TCP. When forwarding the server port to make your server accessible on the public Internet, you only need to forward the server port in UDP. You can use the [UPNP] class to try to forward the server port automatically when starting the server.
</description>
<tutorials>
- <link title="High-level multiplayer">https://docs.godotengine.org/en/latest/tutorials/networking/high_level_multiplayer.html</link>
+ <link title="High-level multiplayer">$DOCS_URL/tutorials/networking/high_level_multiplayer.html</link>
<link title="API documentation on the ENet website">http://enet.bespin.org/usergroup0.html</link>
</tutorials>
<methods>
diff --git a/modules/gdnative/doc_classes/GDNativeLibrary.xml b/modules/gdnative/doc_classes/GDNativeLibrary.xml
index 6b3bd714b9..21df640ebc 100644
--- a/modules/gdnative/doc_classes/GDNativeLibrary.xml
+++ b/modules/gdnative/doc_classes/GDNativeLibrary.xml
@@ -7,8 +7,8 @@
A GDNative library can implement [NativeScript]s, global functions to call with the [GDNative] class, or low-level engine extensions through interfaces such as XRInterfaceGDNative. The library must be compiled for each platform and architecture that the project will run on.
</description>
<tutorials>
- <link title="GDNative C example">https://docs.godotengine.org/en/latest/tutorials/scripting/gdnative/gdnative_c_example.html</link>
- <link title="GDNative C++ example">https://docs.godotengine.org/en/latest/tutorials/scripting/gdnative/gdnative_cpp_example.html</link>
+ <link title="GDNative C example">$DOCS_URL/tutorials/scripting/gdnative/gdnative_c_example.html</link>
+ <link title="GDNative C++ example">$DOCS_URL/tutorials/scripting/gdnative/gdnative_cpp_example.html</link>
</tutorials>
<methods>
<method name="get_current_dependencies" qualifiers="const">
diff --git a/modules/gdscript/doc_classes/@GDScript.xml b/modules/gdscript/doc_classes/@GDScript.xml
index 5b476cda01..9c8adb4cf1 100644
--- a/modules/gdscript/doc_classes/@GDScript.xml
+++ b/modules/gdscript/doc_classes/@GDScript.xml
@@ -7,7 +7,7 @@
List of core built-in GDScript functions. Math functions and other utilities. Everything else is provided by objects. (Keywords: builtin, built in, global functions.)
</description>
<tutorials>
- <link title="Random number generation">https://docs.godotengine.org/en/latest/tutorials/math/random_number_generation.html</link>
+ <link title="Random number generation">$DOCS_URL/tutorials/math/random_number_generation.html</link>
</tutorials>
<methods>
<method name="Color8">
diff --git a/modules/gdscript/doc_classes/GDScript.xml b/modules/gdscript/doc_classes/GDScript.xml
index 0a448ed88c..5acb29e748 100644
--- a/modules/gdscript/doc_classes/GDScript.xml
+++ b/modules/gdscript/doc_classes/GDScript.xml
@@ -8,7 +8,7 @@
[method new] creates a new instance of the script. [method Object.set_script] extends an existing object, if that object's class matches one of the script's base classes.
</description>
<tutorials>
- <link title="GDScript documentation index">https://docs.godotengine.org/en/latest/tutorials/scripting/gdscript/index.html</link>
+ <link title="GDScript documentation index">$DOCS_URL/tutorials/scripting/gdscript/index.html</link>
</tutorials>
<methods>
<method name="get_as_byte_code" qualifiers="const">
diff --git a/modules/gdscript/gdscript_analyzer.cpp b/modules/gdscript/gdscript_analyzer.cpp
index cd8fd361c5..1ecde53dd0 100644
--- a/modules/gdscript/gdscript_analyzer.cpp
+++ b/modules/gdscript/gdscript_analyzer.cpp
@@ -3001,7 +3001,7 @@ void GDScriptAnalyzer::reduce_preload(GDScriptParser::PreloadNode *p_preload) {
// TODO: Don't load if validating: use completion cache.
p_preload->resource = ResourceLoader::load(p_preload->resolved_path);
if (p_preload->resource.is_null()) {
- push_error(vformat(R"(Could not p_preload resource file "%s".)", p_preload->resolved_path), p_preload->path);
+ push_error(vformat(R"(Could not preload resource file "%s".)", p_preload->resolved_path), p_preload->path);
}
}
}
diff --git a/modules/gltf/gltf_document.cpp b/modules/gltf/gltf_document.cpp
index fac1e61b18..f3317aeada 100644
--- a/modules/gltf/gltf_document.cpp
+++ b/modules/gltf/gltf_document.cpp
@@ -6115,7 +6115,10 @@ void GLTFDocument::_convert_mesh_instances(Ref<GLTFState> state) {
int bone_cnt = skeleton->get_bone_count();
ERR_FAIL_COND(bone_cnt != gltf_skeleton->joints.size());
- ObjectID gltf_skin_key = skin->get_instance_id();
+ ObjectID gltf_skin_key;
+ if (skin.is_valid()) {
+ gltf_skin_key = skin->get_instance_id();
+ }
ObjectID gltf_skel_key = godot_skeleton->get_instance_id();
GLTFSkinIndex skin_gltf_i = -1;
GLTFNodeIndex root_gltf_i = -1;
diff --git a/modules/gridmap/doc_classes/GridMap.xml b/modules/gridmap/doc_classes/GridMap.xml
index c1dbe63628..73315350ff 100644
--- a/modules/gridmap/doc_classes/GridMap.xml
+++ b/modules/gridmap/doc_classes/GridMap.xml
@@ -11,7 +11,7 @@
[b]Note:[/b] GridMap doesn't extend [VisualInstance3D] and therefore can't be hidden or cull masked based on [member VisualInstance3D.layers]. If you make a light not affect the first layer, the whole GridMap won't be lit by the light in question.
</description>
<tutorials>
- <link title="Using gridmaps">https://docs.godotengine.org/en/latest/tutorials/3d/using_gridmaps.html</link>
+ <link title="Using gridmaps">$DOCS_URL/tutorials/3d/using_gridmaps.html</link>
<link title="3D Platformer Demo">https://godotengine.org/asset-library/asset/125</link>
<link title="3D Kinematic Character Demo">https://godotengine.org/asset-library/asset/126</link>
</tutorials>
@@ -173,7 +173,7 @@
GridMaps act as static bodies, meaning they aren't affected by gravity or other forces. They only affect other physics bodies that collide with them.
</member>
<member name="collision_mask" type="int" setter="set_collision_mask" getter="get_collision_mask" default="1">
- The physics layers this GridMap detects collisions in. See [url=https://docs.godotengine.org/en/latest/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
+ The physics layers this GridMap detects collisions in. See [url=$DOCS_URL/tutorials/physics/physics_introduction.html#collision-layers-and-masks]Collision layers and masks[/url] in the documentation for more information.
</member>
<member name="mesh_library" type="MeshLibrary" setter="set_mesh_library" getter="get_mesh_library">
The assigned [MeshLibrary].
diff --git a/modules/gridmap/grid_map_editor_plugin.cpp b/modules/gridmap/grid_map_editor_plugin.cpp
index ccd2b0d473..d827ce2fb0 100644
--- a/modules/gridmap/grid_map_editor_plugin.cpp
+++ b/modules/gridmap/grid_map_editor_plugin.cpp
@@ -759,7 +759,7 @@ EditorPlugin::AfterGUIInput GridMapEditor::forward_spatial_input_event(Camera3D
accumulated_floor_delta += delta;
int step = 0;
if (ABS(accumulated_floor_delta) > 1.0) {
- step = SGN(accumulated_floor_delta);
+ step = SIGN(accumulated_floor_delta);
accumulated_floor_delta -= step;
}
if (step) {
diff --git a/modules/lightmapper_rd/lm_compute.glsl b/modules/lightmapper_rd/lm_compute.glsl
index 158cd960c4..7bb8346c47 100644
--- a/modules/lightmapper_rd/lm_compute.glsl
+++ b/modules/lightmapper_rd/lm_compute.glsl
@@ -235,19 +235,39 @@ uint trace_ray(vec3 p_from, vec3 p_to
return RAY_MISS;
}
+// https://www.reedbeta.com/blog/hash-functions-for-gpu-rendering/
+uint hash(uint value) {
+ uint state = value * 747796405u + 2891336453u;
+ uint word = ((state >> ((state >> 28u) + 4u)) ^ state) * 277803737u;
+ return (word >> 22u) ^ word;
+}
+
+uint random_seed(ivec3 seed) {
+ return hash(seed.x ^ hash(seed.y ^ hash(seed.z)));
+}
+
+// generates a random value in range [0.0, 1.0)
+float randomize(inout uint value) {
+ value = hash(value);
+ return float(value / 4294967296.0);
+}
+
const float PI = 3.14159265f;
-const float GOLDEN_ANGLE = PI * (3.0 - sqrt(5.0));
-
-vec3 vogel_hemisphere(uint p_index, uint p_count, float p_offset) {
- float r = sqrt(float(p_index) + 0.5f) / sqrt(float(p_count));
- float theta = float(p_index) * GOLDEN_ANGLE + p_offset;
- float y = cos(r * PI * 0.5);
- float l = sin(r * PI * 0.5);
- return vec3(l * cos(theta), l * sin(theta), y);
+
+// http://www.realtimerendering.com/raytracinggems/unofficial_RayTracingGems_v1.4.pdf (chapter 15)
+vec3 generate_hemisphere_uniform_direction(inout uint noise) {
+ float noise1 = randomize(noise);
+ float noise2 = randomize(noise) * 2.0 * PI;
+
+ float factor = sqrt(1 - (noise1 * noise1));
+ return vec3(factor * cos(noise2), factor * sin(noise2), noise1);
}
-float quick_hash(vec2 pos) {
- return fract(sin(dot(pos * 19.19, vec2(49.5791, 97.413))) * 49831.189237);
+vec3 generate_hemisphere_cosine_weighted_direction(inout uint noise) {
+ float noise1 = randomize(noise);
+ float noise2 = randomize(noise) * 2.0 * PI;
+
+ return vec3(sqrt(noise1) * cos(noise2), sqrt(noise1) * sin(noise2), sqrt(1.0 - noise1));
}
float get_omni_attenuation(float distance, float inv_range, float decay) {
@@ -404,8 +424,9 @@ void main() {
#endif
vec3 light_average = vec3(0.0);
float active_rays = 0.0;
+ uint noise = random_seed(ivec3(params.ray_from, atlas_pos));
for (uint i = params.ray_from; i < params.ray_to; i++) {
- vec3 ray_dir = normal_mat * vogel_hemisphere(i, params.ray_count, quick_hash(vec2(atlas_pos)));
+ vec3 ray_dir = normal_mat * generate_hemisphere_cosine_weighted_direction(noise);
uint tidx;
vec3 barycentric;
@@ -550,8 +571,9 @@ void main() {
vec4(0.0),
vec4(0.0));
+ uint noise = random_seed(ivec3(params.ray_from, probe_index, 49502741 /* some prime */));
for (uint i = params.ray_from; i < params.ray_to; i++) {
- vec3 ray_dir = vogel_hemisphere(i, params.ray_count, quick_hash(vec2(float(probe_index), 0.0)));
+ vec3 ray_dir = generate_hemisphere_uniform_direction(noise);
if (bool(i & 1)) {
//throw to both sides, so alternate them
ray_dir.z *= -1.0;
diff --git a/modules/minimp3/resource_importer_mp3.cpp b/modules/minimp3/resource_importer_mp3.cpp
index dc360c12ba..b2a755e23b 100644
--- a/modules/minimp3/resource_importer_mp3.cpp
+++ b/modules/minimp3/resource_importer_mp3.cpp
@@ -54,7 +54,7 @@ String ResourceImporterMP3::get_resource_type() const {
return "AudioStreamMP3";
}
-bool ResourceImporterMP3::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
+bool ResourceImporterMP3::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const {
return true;
}
@@ -66,7 +66,7 @@ String ResourceImporterMP3::get_preset_name(int p_idx) const {
return String();
}
-void ResourceImporterMP3::get_import_options(List<ImportOption> *r_options, int p_preset) const {
+void ResourceImporterMP3::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const {
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "loop"), true));
r_options->push_back(ImportOption(PropertyInfo(Variant::FLOAT, "loop_offset"), 0));
}
diff --git a/modules/minimp3/resource_importer_mp3.h b/modules/minimp3/resource_importer_mp3.h
index 71b51887a2..356ec77d22 100644
--- a/modules/minimp3/resource_importer_mp3.h
+++ b/modules/minimp3/resource_importer_mp3.h
@@ -47,8 +47,8 @@ public:
virtual int get_preset_count() const override;
virtual String get_preset_name(int p_idx) const override;
- virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override;
- virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override;
+ virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override;
+ virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override;
virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
diff --git a/modules/mono/doc_classes/CSharpScript.xml b/modules/mono/doc_classes/CSharpScript.xml
index 2bca8bc24e..14c62b4bb0 100644
--- a/modules/mono/doc_classes/CSharpScript.xml
+++ b/modules/mono/doc_classes/CSharpScript.xml
@@ -8,7 +8,7 @@
See also [GodotSharp].
</description>
<tutorials>
- <link title="C# documentation index">https://docs.godotengine.org/en/latest/tutorials/scripting/c_sharp/index.html</link>
+ <link title="C# documentation index">$DOCS_URL/tutorials/scripting/c_sharp/index.html</link>
</tutorials>
<methods>
<method name="new" qualifiers="vararg">
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/AABB.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/AABB.cs
index 70a2cf5695..850ae7fc3b 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/AABB.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/AABB.cs
@@ -666,21 +666,40 @@ namespace Godot
_size = new Vector3(width, height, depth);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the AABBs are exactly equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left AABB.</param>
+ /// <param name="right">The right AABB.</param>
+ /// <returns>Whether or not the AABBs are exactly equal.</returns>
public static bool operator ==(AABB left, AABB right)
{
return left.Equals(right);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the AABBs are not equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left AABB.</param>
+ /// <param name="right">The right AABB.</param>
+ /// <returns>Whether or not the AABBs are not equal.</returns>
public static bool operator !=(AABB left, AABB right)
{
return !left.Equals(right);
}
/// <summary>
- /// Returns <see langword="true"/> if this AABB and <paramref name="obj"/> are equal.
+ /// Returns <see langword="true"/> if the AABB is exactly equal
+ /// to the given object (<see paramref="obj"/>).
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
/// </summary>
- /// <param name="obj">The other object to compare.</param>
- /// <returns>Whether or not the AABB structure and the other object are equal.</returns>
+ /// <param name="obj">The object to compare with.</param>
+ /// <returns>Whether or not the AABB and the object are equal.</returns>
public override bool Equals(object obj)
{
if (obj is AABB)
@@ -692,10 +711,12 @@ namespace Godot
}
/// <summary>
- /// Returns <see langword="true"/> if this AABB and <paramref name="other"/> are equal
+ /// Returns <see langword="true"/> if the AABBs are exactly equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
/// </summary>
- /// <param name="other">The other AABB to compare.</param>
- /// <returns>Whether or not the AABBs are equal.</returns>
+ /// <param name="other">The other AABB.</param>
+ /// <returns>Whether or not the AABBs are exactly equal.</returns>
public bool Equals(AABB other)
{
return _position == other._position && _size == other._size;
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Basis.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Basis.cs
index 0fb1df6c2f..bfbf1a097e 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Basis.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Basis.cs
@@ -827,6 +827,14 @@ namespace Godot
Row2 = new Vector3(xz, yz, zz);
}
+ /// <summary>
+ /// Composes these two basis matrices by multiplying them
+ /// together. This has the effect of transforming the second basis
+ /// (the child) by the first basis (the parent).
+ /// </summary>
+ /// <param name="left">The parent basis.</param>
+ /// <param name="right">The child basis.</param>
+ /// <returns>The composed basis.</returns>
public static Basis operator *(Basis left, Basis right)
{
return new Basis
@@ -837,21 +845,40 @@ namespace Godot
);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the basis matrices are exactly
+ /// equal. Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left basis.</param>
+ /// <param name="right">The right basis.</param>
+ /// <returns>Whether or not the basis matrices are exactly equal.</returns>
public static bool operator ==(Basis left, Basis right)
{
return left.Equals(right);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the basis matrices are not equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left basis.</param>
+ /// <param name="right">The right basis.</param>
+ /// <returns>Whether or not the basis matrices are not equal.</returns>
public static bool operator !=(Basis left, Basis right)
{
return !left.Equals(right);
}
/// <summary>
- /// Returns <see langword="true"/> if this basis and <paramref name="obj"/> are equal.
+ /// Returns <see langword="true"/> if the <see cref="Basis"/> is
+ /// exactly equal to the given object (<see paramref="obj"/>).
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
/// </summary>
- /// <param name="obj">The other object to compare.</param>
- /// <returns>Whether or not the basis and the other object are equal.</returns>
+ /// <param name="obj">The object to compare with.</param>
+ /// <returns>Whether or not the basis matrix and the object are exactly equal.</returns>
public override bool Equals(object obj)
{
if (obj is Basis)
@@ -863,10 +890,12 @@ namespace Godot
}
/// <summary>
- /// Returns <see langword="true"/> if this basis and <paramref name="other"/> are equal
+ /// Returns <see langword="true"/> if the basis matrices are exactly
+ /// equal. Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
/// </summary>
- /// <param name="other">The other basis to compare.</param>
- /// <returns>Whether or not the bases are equal.</returns>
+ /// <param name="other">The other basis.</param>
+ /// <returns>Whether or not the basis matrices are exactly equal.</returns>
public bool Equals(Basis other)
{
return Row0.Equals(other.Row0) && Row1.Equals(other.Row1) && Row2.Equals(other.Row2);
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Color.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Color.cs
index 2a869bc335..fc9d40ca48 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Color.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Color.cs
@@ -878,6 +878,13 @@ namespace Godot
return true;
}
+ /// <summary>
+ /// Adds each component of the <see cref="Color"/>
+ /// with the components of the given <see cref="Color"/>.
+ /// </summary>
+ /// <param name="left">The left color.</param>
+ /// <param name="right">The right color.</param>
+ /// <returns>The added color.</returns>
public static Color operator +(Color left, Color right)
{
left.r += right.r;
@@ -887,6 +894,13 @@ namespace Godot
return left;
}
+ /// <summary>
+ /// Subtracts each component of the <see cref="Color"/>
+ /// by the components of the given <see cref="Color"/>.
+ /// </summary>
+ /// <param name="left">The left color.</param>
+ /// <param name="right">The right color.</param>
+ /// <returns>The subtracted color.</returns>
public static Color operator -(Color left, Color right)
{
left.r -= right.r;
@@ -896,11 +910,25 @@ namespace Godot
return left;
}
+ /// <summary>
+ /// Inverts the given color. This is equivalent to
+ /// <c>Colors.White - c</c> or
+ /// <c>new Color(1 - c.r, 1 - c.g, 1 - c.b, 1 - c.a)</c>.
+ /// </summary>
+ /// <param name="color">The color to invert.</param>
+ /// <returns>The inverted color</returns>
public static Color operator -(Color color)
{
return Colors.White - color;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Color"/>
+ /// by the given <see langword="float"/>.
+ /// </summary>
+ /// <param name="color">The color to multiply.</param>
+ /// <param name="scale">The value to multiply by.</param>
+ /// <returns>The multiplied color.</returns>
public static Color operator *(Color color, float scale)
{
color.r *= scale;
@@ -910,6 +938,13 @@ namespace Godot
return color;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Color"/>
+ /// by the given <see langword="float"/>.
+ /// </summary>
+ /// <param name="scale">The value to multiply by.</param>
+ /// <param name="color">The color to multiply.</param>
+ /// <returns>The multiplied color.</returns>
public static Color operator *(float scale, Color color)
{
color.r *= scale;
@@ -919,6 +954,13 @@ namespace Godot
return color;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Color"/>
+ /// by the components of the given <see cref="Color"/>.
+ /// </summary>
+ /// <param name="left">The left color.</param>
+ /// <param name="right">The right color.</param>
+ /// <returns>The multiplied color.</returns>
public static Color operator *(Color left, Color right)
{
left.r *= right.r;
@@ -928,6 +970,13 @@ namespace Godot
return left;
}
+ /// <summary>
+ /// Divides each component of the <see cref="Color"/>
+ /// by the given <see langword="float"/>.
+ /// </summary>
+ /// <param name="color">The dividend vector.</param>
+ /// <param name="scale">The divisor value.</param>
+ /// <returns>The divided color.</returns>
public static Color operator /(Color color, float scale)
{
color.r /= scale;
@@ -937,6 +986,13 @@ namespace Godot
return color;
}
+ /// <summary>
+ /// Divides each component of the <see cref="Color"/>
+ /// by the components of the given <see cref="Color"/>.
+ /// </summary>
+ /// <param name="left">The dividend color.</param>
+ /// <param name="right">The divisor color.</param>
+ /// <returns>The divided color.</returns>
public static Color operator /(Color left, Color right)
{
left.r /= right.r;
@@ -946,23 +1002,51 @@ namespace Godot
return left;
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the colors are exactly equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left color.</param>
+ /// <param name="right">The right color.</param>
+ /// <returns>Whether or not the colors are equal.</returns>
public static bool operator ==(Color left, Color right)
{
return left.Equals(right);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the colors are not equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left color.</param>
+ /// <param name="right">The right color.</param>
+ /// <returns>Whether or not the colors are equal.</returns>
public static bool operator !=(Color left, Color right)
{
return !left.Equals(right);
}
+ /// <summary>
+ /// Compares two <see cref="Color"/>s by first checking if
+ /// the red value of the <paramref name="left"/> color is less than
+ /// the red value of the <paramref name="right"/> color.
+ /// If the red values are exactly equal, then it repeats this check
+ /// with the green values of the two colors, then with the blue values,
+ /// and then with the alpha value.
+ /// This operator is useful for sorting colors.
+ /// </summary>
+ /// <param name="left">The left color.</param>
+ /// <param name="right">The right color.</param>
+ /// <returns>Whether or not the left is less than the right.</returns>
public static bool operator <(Color left, Color right)
{
- if (Mathf.IsEqualApprox(left.r, right.r))
+ if (left.r == right.r)
{
- if (Mathf.IsEqualApprox(left.g, right.g))
+ if (left.g == right.g)
{
- if (Mathf.IsEqualApprox(left.b, right.b))
+ if (left.b == right.b)
{
return left.a < right.a;
}
@@ -973,13 +1057,25 @@ namespace Godot
return left.r < right.r;
}
+ /// <summary>
+ /// Compares two <see cref="Color"/>s by first checking if
+ /// the red value of the <paramref name="left"/> color is greater than
+ /// the red value of the <paramref name="right"/> color.
+ /// If the red values are exactly equal, then it repeats this check
+ /// with the green values of the two colors, then with the blue values,
+ /// and then with the alpha value.
+ /// This operator is useful for sorting colors.
+ /// </summary>
+ /// <param name="left">The left color.</param>
+ /// <param name="right">The right color.</param>
+ /// <returns>Whether or not the left is greater than the right.</returns>
public static bool operator >(Color left, Color right)
{
- if (Mathf.IsEqualApprox(left.r, right.r))
+ if (left.r == right.r)
{
- if (Mathf.IsEqualApprox(left.g, right.g))
+ if (left.g == right.g)
{
- if (Mathf.IsEqualApprox(left.b, right.b))
+ if (left.b == right.b)
{
return left.a > right.a;
}
@@ -991,6 +1087,64 @@ namespace Godot
}
/// <summary>
+ /// Compares two <see cref="Color"/>s by first checking if
+ /// the red value of the <paramref name="left"/> color is less than
+ /// or equal to the red value of the <paramref name="right"/> color.
+ /// If the red values are exactly equal, then it repeats this check
+ /// with the green values of the two colors, then with the blue values,
+ /// and then with the alpha value.
+ /// This operator is useful for sorting colors.
+ /// </summary>
+ /// <param name="left">The left color.</param>
+ /// <param name="right">The right color.</param>
+ /// <returns>Whether or not the left is less than or equal to the right.</returns>
+ public static bool operator <=(Color left, Color right)
+ {
+ if (left.r == right.r)
+ {
+ if (left.g == right.g)
+ {
+ if (left.b == right.b)
+ {
+ return left.a <= right.a;
+ }
+ return left.b < right.b;
+ }
+ return left.g < right.g;
+ }
+ return left.r < right.r;
+ }
+
+ /// <summary>
+ /// Compares two <see cref="Color"/>s by first checking if
+ /// the red value of the <paramref name="left"/> color is greater than
+ /// or equal to the red value of the <paramref name="right"/> color.
+ /// If the red values are exactly equal, then it repeats this check
+ /// with the green values of the two colors, then with the blue values,
+ /// and then with the alpha value.
+ /// This operator is useful for sorting colors.
+ /// </summary>
+ /// <param name="left">The left color.</param>
+ /// <param name="right">The right color.</param>
+ /// <returns>Whether or not the left is greater than or equal to the right.</returns>
+ public static bool operator >=(Color left, Color right)
+ {
+ if (left.r == right.r)
+ {
+ if (left.g == right.g)
+ {
+ if (left.b == right.b)
+ {
+ return left.a >= right.a;
+ }
+ return left.b > right.b;
+ }
+ return left.g > right.g;
+ }
+ return left.r > right.r;
+ }
+
+ /// <summary>
/// Returns <see langword="true"/> if this color and <paramref name="obj"/> are equal.
/// </summary>
/// <param name="obj">The other object to compare.</param>
@@ -1006,9 +1160,11 @@ namespace Godot
}
/// <summary>
- /// Returns <see langword="true"/> if this color and <paramref name="other"/> are equal
+ /// Returns <see langword="true"/> if the colors are exactly equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
/// </summary>
- /// <param name="other">The other color to compare.</param>
+ /// <param name="other">The other color.</param>
/// <returns>Whether or not the colors are equal.</returns>
public bool Equals(Color other)
{
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Colors.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Colors.cs
index d64c8b563e..68c821b447 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Colors.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Colors.cs
@@ -158,6 +158,7 @@ namespace Godot
{"YELLOWGREEN", new Color(0.60f, 0.80f, 0.20f)},
};
+#pragma warning disable CS1591 // Disable warning: "Missing XML comment for publicly visible type or member"
public static Color AliceBlue { get { return namedColors["ALICEBLUE"]; } }
public static Color AntiqueWhite { get { return namedColors["ANTIQUEWHITE"]; } }
public static Color Aqua { get { return namedColors["AQUA"]; } }
@@ -304,5 +305,6 @@ namespace Godot
public static Color WhiteSmoke { get { return namedColors["WHITESMOKE"]; } }
public static Color Yellow { get { return namedColors["YELLOW"]; } }
public static Color YellowGreen { get { return namedColors["YELLOWGREEN"]; } }
+#pragma warning restore CS1591
}
}
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Dictionary.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Dictionary.cs
index 2dfe304aaa..75240b0c09 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Dictionary.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Dictionary.cs
@@ -314,13 +314,13 @@ namespace Godot.Collections
internal static extern int godot_icall_Dictionary_Count(IntPtr ptr);
[MethodImpl(MethodImplOptions.InternalCall)]
- internal extern static int godot_icall_Dictionary_KeyValuePairs(IntPtr ptr, out IntPtr keys, out IntPtr values);
+ internal static extern int godot_icall_Dictionary_KeyValuePairs(IntPtr ptr, out IntPtr keys, out IntPtr values);
[MethodImpl(MethodImplOptions.InternalCall)]
- internal extern static void godot_icall_Dictionary_KeyValuePairAt(IntPtr ptr, int index, out object key, out object value);
+ internal static extern void godot_icall_Dictionary_KeyValuePairAt(IntPtr ptr, int index, out object key, out object value);
[MethodImpl(MethodImplOptions.InternalCall)]
- internal extern static void godot_icall_Dictionary_Add(IntPtr ptr, object key, object value);
+ internal static extern void godot_icall_Dictionary_Add(IntPtr ptr, object key, object value);
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern void godot_icall_Dictionary_Clear(IntPtr ptr);
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/GD.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/GD.cs
index ef42374041..a3afc83222 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/GD.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/GD.cs
@@ -323,6 +323,16 @@ namespace Godot
}
/// <summary>
+ /// Returns a normally-distributed pseudo-random number, using Box-Muller transform with the specified <c>mean</c> and a standard <c>deviation</c>.
+ /// This is also called Gaussian distribution.
+ /// </summary>
+ /// <returns>A random normally-distributed <see langword="float"/> number.</returns>
+ public static double Randfn(double mean, double deviation)
+ {
+ return godot_icall_GD_randfn(mean, deviation);
+ }
+
+ /// <summary>
/// Returns a random unsigned 32-bit integer.
/// Use remainder to obtain a random value in the interval <c>[0, N - 1]</c> (where N is smaller than 2^32).
/// </summary>
@@ -564,19 +574,22 @@ namespace Godot
internal static extern void godot_icall_GD_printt(object[] what);
[MethodImpl(MethodImplOptions.InternalCall)]
- internal static extern float godot_icall_GD_randf();
+ internal static extern void godot_icall_GD_randomize();
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern uint godot_icall_GD_randi();
[MethodImpl(MethodImplOptions.InternalCall)]
- internal static extern void godot_icall_GD_randomize();
+ internal static extern float godot_icall_GD_randf();
+
+ [MethodImpl(MethodImplOptions.InternalCall)]
+ internal static extern int godot_icall_GD_randi_range(int from, int to);
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern double godot_icall_GD_randf_range(double from, double to);
[MethodImpl(MethodImplOptions.InternalCall)]
- internal static extern int godot_icall_GD_randi_range(int from, int to);
+ internal static extern double godot_icall_GD_randfn(double mean, double deviation);
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern uint godot_icall_GD_rand_seed(ulong seed, out ulong newSeed);
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Plane.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Plane.cs
index 66f7b745f7..63af1c5892 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Plane.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Plane.cs
@@ -309,16 +309,43 @@ namespace Godot
D = _normal.Dot(v1);
}
+ /// <summary>
+ /// Returns the negative value of the <see cref="Plane"/>.
+ /// This is the same as writing <c>new Plane(-p.Normal, -p.D)</c>.
+ /// This operation flips the direction of the normal vector and
+ /// also flips the distance value, resulting in a Plane that is
+ /// in the same place, but facing the opposite direction.
+ /// </summary>
+ /// <param name="plane">The plane to negate/flip.</param>
+ /// <returns>The negated/flipped plane.</returns>
public static Plane operator -(Plane plane)
{
return new Plane(-plane._normal, -plane.D);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the
+ /// <see cref="Plane"/>s are exactly equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left rect.</param>
+ /// <param name="right">The right rect.</param>
+ /// <returns>Whether or not the planes are exactly equal.</returns>
public static bool operator ==(Plane left, Plane right)
{
return left.Equals(right);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the
+ /// <see cref="Plane"/>s are not equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left rect.</param>
+ /// <param name="right">The right rect.</param>
+ /// <returns>Whether or not the planes are not equal.</returns>
public static bool operator !=(Plane left, Plane right)
{
return !left.Equals(right);
@@ -328,7 +355,7 @@ namespace Godot
/// Returns <see langword="true"/> if this plane and <paramref name="obj"/> are equal.
/// </summary>
/// <param name="obj">The other object to compare.</param>
- /// <returns>Whether or not the plane and the other object are equal.</returns>
+ /// <returns>Whether or not the plane and the other object are exactly equal.</returns>
public override bool Equals(object obj)
{
if (obj is Plane)
@@ -343,7 +370,7 @@ namespace Godot
/// Returns <see langword="true"/> if this plane and <paramref name="other"/> are equal.
/// </summary>
/// <param name="other">The other plane to compare.</param>
- /// <returns>Whether or not the planes are equal.</returns>
+ /// <returns>Whether or not the planes are exactly equal.</returns>
public bool Equals(Plane other)
{
return _normal == other._normal && D == other.D;
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Quaternion.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Quaternion.cs
index c18f818ed2..dfb8e87bce 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Quaternion.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Quaternion.cs
@@ -446,6 +446,14 @@ namespace Godot
}
}
+ /// <summary>
+ /// Composes these two quaternions by multiplying them together.
+ /// This has the effect of rotating the second quaternion
+ /// (the child) by the first quaternion (the parent).
+ /// </summary>
+ /// <param name="left">The parent quaternion.</param>
+ /// <param name="right">The child quaternion.</param>
+ /// <returns>The composed quaternion.</returns>
public static Quaternion operator *(Quaternion left, Quaternion right)
{
return new Quaternion
@@ -457,21 +465,55 @@ namespace Godot
);
}
+ /// <summary>
+ /// Adds each component of the left <see cref="Quaternion"/>
+ /// to the right <see cref="Quaternion"/>. This operation is not
+ /// meaningful on its own, but it can be used as a part of a
+ /// larger expression, such as approximating an intermediate
+ /// rotation between two nearby rotations.
+ /// </summary>
+ /// <param name="left">The left quaternion to add.</param>
+ /// <param name="right">The right quaternion to add.</param>
+ /// <returns>The added quaternion.</returns>
public static Quaternion operator +(Quaternion left, Quaternion right)
{
return new Quaternion(left.x + right.x, left.y + right.y, left.z + right.z, left.w + right.w);
}
+ /// <summary>
+ /// Subtracts each component of the left <see cref="Quaternion"/>
+ /// by the right <see cref="Quaternion"/>. This operation is not
+ /// meaningful on its own, but it can be used as a part of a
+ /// larger expression.
+ /// </summary>
+ /// <param name="left">The left quaternion to subtract.</param>
+ /// <param name="right">The right quaternion to subtract.</param>
+ /// <returns>The subtracted quaternion.</returns>
public static Quaternion operator -(Quaternion left, Quaternion right)
{
return new Quaternion(left.x - right.x, left.y - right.y, left.z - right.z, left.w - right.w);
}
- public static Quaternion operator -(Quaternion left)
+ /// <summary>
+ /// Returns the negative value of the <see cref="Quaternion"/>.
+ /// This is the same as writing
+ /// <c>new Quaternion(-q.x, -q.y, -q.z, -q.w)</c>. This operation
+ /// results in a quaternion that represents the same rotation.
+ /// </summary>
+ /// <param name="quat">The quaternion to negate.</param>
+ /// <returns>The negated quaternion.</returns>
+ public static Quaternion operator -(Quaternion quat)
{
- return new Quaternion(-left.x, -left.y, -left.z, -left.w);
+ return new Quaternion(-quat.x, -quat.y, -quat.z, -quat.w);
}
+ /// <summary>
+ /// Rotates (multiplies) the <see cref="Vector3"/>
+ /// by the given <see cref="Quaternion"/>.
+ /// </summary>
+ /// <param name="quat">The quaternion to rotate by.</param>
+ /// <param name="vec">The vector to rotate.</param>
+ /// <returns>The rotated vector.</returns>
public static Vector3 operator *(Quaternion quat, Vector3 vec)
{
#if DEBUG
@@ -485,31 +527,81 @@ namespace Godot
return vec + (((uv * quat.w) + u.Cross(uv)) * 2);
}
+ /// <summary>
+ /// Inversely rotates (multiplies) the <see cref="Vector3"/>
+ /// by the given <see cref="Quaternion"/>.
+ /// </summary>
+ /// <param name="vec">The vector to rotate.</param>
+ /// <param name="quat">The quaternion to rotate by.</param>
+ /// <returns>The inversely rotated vector.</returns>
public static Vector3 operator *(Vector3 vec, Quaternion quat)
{
return quat.Inverse() * vec;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Quaternion"/>
+ /// by the given <see cref="real_t"/>. This operation is not
+ /// meaningful on its own, but it can be used as a part of a
+ /// larger expression.
+ /// </summary>
+ /// <param name="left">The quaternion to multiply.</param>
+ /// <param name="right">The value to multiply by.</param>
+ /// <returns>The multiplied quaternion.</returns>
public static Quaternion operator *(Quaternion left, real_t right)
{
return new Quaternion(left.x * right, left.y * right, left.z * right, left.w * right);
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Quaternion"/>
+ /// by the given <see cref="real_t"/>. This operation is not
+ /// meaningful on its own, but it can be used as a part of a
+ /// larger expression.
+ /// </summary>
+ /// <param name="left">The value to multiply by.</param>
+ /// <param name="right">The quaternion to multiply.</param>
+ /// <returns>The multiplied quaternion.</returns>
public static Quaternion operator *(real_t left, Quaternion right)
{
return new Quaternion(right.x * left, right.y * left, right.z * left, right.w * left);
}
+ /// <summary>
+ /// Divides each component of the <see cref="Quaternion"/>
+ /// by the given <see cref="real_t"/>. This operation is not
+ /// meaningful on its own, but it can be used as a part of a
+ /// larger expression.
+ /// </summary>
+ /// <param name="left">The quaternion to divide.</param>
+ /// <param name="right">The value to divide by.</param>
+ /// <returns>The divided quaternion.</returns>
public static Quaternion operator /(Quaternion left, real_t right)
{
return left * (1.0f / right);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the quaternions are exactly equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left quaternion.</param>
+ /// <param name="right">The right quaternion.</param>
+ /// <returns>Whether or not the quaternions are exactly equal.</returns>
public static bool operator ==(Quaternion left, Quaternion right)
{
return left.Equals(right);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the quaternions are not equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left quaternion.</param>
+ /// <param name="right">The right quaternion.</param>
+ /// <returns>Whether or not the quaternions are not equal.</returns>
public static bool operator !=(Quaternion left, Quaternion right)
{
return !left.Equals(right);
@@ -519,7 +611,7 @@ namespace Godot
/// Returns <see langword="true"/> if this quaternion and <paramref name="obj"/> are equal.
/// </summary>
/// <param name="obj">The other object to compare.</param>
- /// <returns>Whether or not the quaternion and the other object are equal.</returns>
+ /// <returns>Whether or not the quaternion and the other object are exactly equal.</returns>
public override bool Equals(object obj)
{
if (obj is Quaternion)
@@ -534,7 +626,7 @@ namespace Godot
/// Returns <see langword="true"/> if this quaternion and <paramref name="other"/> are equal.
/// </summary>
/// <param name="other">The other quaternion to compare.</param>
- /// <returns>Whether or not the quaternions are equal.</returns>
+ /// <returns>Whether or not the quaternions are exactly equal.</returns>
public bool Equals(Quaternion other)
{
return x == other.x && y == other.y && z == other.z && w == other.w;
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2.cs
index af94484577..ec16920fed 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2.cs
@@ -396,11 +396,29 @@ namespace Godot
_size = new Vector2(width, height);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the
+ /// <see cref="Rect2"/>s are exactly equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left rect.</param>
+ /// <param name="right">The right rect.</param>
+ /// <returns>Whether or not the rects are exactly equal.</returns>
public static bool operator ==(Rect2 left, Rect2 right)
{
return left.Equals(right);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the
+ /// <see cref="Rect2"/>s are not equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left rect.</param>
+ /// <param name="right">The right rect.</param>
+ /// <returns>Whether or not the rects are not equal.</returns>
public static bool operator !=(Rect2 left, Rect2 right)
{
return !left.Equals(right);
@@ -410,7 +428,7 @@ namespace Godot
/// Returns <see langword="true"/> if this rect and <paramref name="obj"/> are equal.
/// </summary>
/// <param name="obj">The other object to compare.</param>
- /// <returns>Whether or not the rect and the other object are equal.</returns>
+ /// <returns>Whether or not the rect and the other object are exactly equal.</returns>
public override bool Equals(object obj)
{
if (obj is Rect2)
@@ -425,7 +443,7 @@ namespace Godot
/// Returns <see langword="true"/> if this rect and <paramref name="other"/> are equal.
/// </summary>
/// <param name="other">The other rect to compare.</param>
- /// <returns>Whether or not the rects are equal.</returns>
+ /// <returns>Whether or not the rects are exactly equal.</returns>
public bool Equals(Rect2 other)
{
return _position.Equals(other._position) && _size.Equals(other._size);
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2i.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2i.cs
index 03f406a910..5d53b8330e 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2i.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Rect2i.cs
@@ -377,11 +377,25 @@ namespace Godot
_size = new Vector2i(width, height);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the
+ /// <see cref="Rect2i"/>s are exactly equal.
+ /// </summary>
+ /// <param name="left">The left rect.</param>
+ /// <param name="right">The right rect.</param>
+ /// <returns>Whether or not the rects are equal.</returns>
public static bool operator ==(Rect2i left, Rect2i right)
{
return left.Equals(right);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the
+ /// <see cref="Rect2i"/>s are not equal.
+ /// </summary>
+ /// <param name="left">The left rect.</param>
+ /// <param name="right">The right rect.</param>
+ /// <returns>Whether or not the rects are not equal.</returns>
public static bool operator !=(Rect2i left, Rect2i right)
{
return !left.Equals(right);
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/StringExtensions.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/StringExtensions.cs
index 6b3eb09581..d9ee684c5b 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/StringExtensions.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/StringExtensions.cs
@@ -1345,7 +1345,7 @@ namespace Godot
}
[MethodImpl(MethodImplOptions.InternalCall)]
- internal extern static string godot_icall_String_simplify_path(string str);
+ internal static extern string godot_icall_String_simplify_path(string str);
/// <summary>
/// Split the string by a divisor string, return an array of the substrings.
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform2D.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform2D.cs
index c82c5f4588..6f1d9574a8 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform2D.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform2D.cs
@@ -447,6 +447,14 @@ namespace Godot
this.origin = origin;
}
+ /// <summary>
+ /// Composes these two transformation matrices by multiplying them
+ /// together. This has the effect of transforming the second transform
+ /// (the child) by the first transform (the parent).
+ /// </summary>
+ /// <param name="left">The parent transform.</param>
+ /// <param name="right">The child transform.</param>
+ /// <returns>The composed transform.</returns>
public static Transform2D operator *(Transform2D left, Transform2D right)
{
left.origin = left * right.origin;
@@ -554,31 +562,52 @@ namespace Godot
return newArray;
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the transforms are exactly equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left transform.</param>
+ /// <param name="right">The right transform.</param>
+ /// <returns>Whether or not the transforms are exactly equal.</returns>
public static bool operator ==(Transform2D left, Transform2D right)
{
return left.Equals(right);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the transforms are not equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left transform.</param>
+ /// <param name="right">The right transform.</param>
+ /// <returns>Whether or not the transforms are not equal.</returns>
public static bool operator !=(Transform2D left, Transform2D right)
{
return !left.Equals(right);
}
/// <summary>
- /// Returns <see langword="true"/> if this transform and <paramref name="obj"/> are equal.
+ /// Returns <see langword="true"/> if the transform is exactly equal
+ /// to the given object (<see paramref="obj"/>).
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
/// </summary>
- /// <param name="obj">The other object to compare.</param>
- /// <returns>Whether or not the transform and the other object are equal.</returns>
+ /// <param name="obj">The object to compare with.</param>
+ /// <returns>Whether or not the transform and the object are exactly equal.</returns>
public override bool Equals(object obj)
{
return obj is Transform2D transform2D && Equals(transform2D);
}
/// <summary>
- /// Returns <see langword="true"/> if this transform and <paramref name="other"/> are equal.
+ /// Returns <see langword="true"/> if the transforms are exactly equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
/// </summary>
/// <param name="other">The other transform to compare.</param>
- /// <returns>Whether or not the matrices are equal.</returns>
+ /// <returns>Whether or not the matrices are exactly equal.</returns>
public bool Equals(Transform2D other)
{
return x.Equals(other.x) && y.Equals(other.y) && origin.Equals(other.origin);
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform3D.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform3D.cs
index 7176cd60dc..4bb8308c12 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform3D.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Transform3D.cs
@@ -352,6 +352,14 @@ namespace Godot
this.origin = origin;
}
+ /// <summary>
+ /// Composes these two transformation matrices by multiplying them
+ /// together. This has the effect of transforming the second transform
+ /// (the child) by the first transform (the parent).
+ /// </summary>
+ /// <param name="left">The parent transform.</param>
+ /// <param name="right">The child transform.</param>
+ /// <returns>The composed transform.</returns>
public static Transform3D operator *(Transform3D left, Transform3D right)
{
left.origin = left.Xform(right.origin);
@@ -359,21 +367,40 @@ namespace Godot
return left;
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the transforms are exactly equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left transform.</param>
+ /// <param name="right">The right transform.</param>
+ /// <returns>Whether or not the transforms are exactly equal.</returns>
public static bool operator ==(Transform3D left, Transform3D right)
{
return left.Equals(right);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the transforms are not equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left transform.</param>
+ /// <param name="right">The right transform.</param>
+ /// <returns>Whether or not the transforms are not equal.</returns>
public static bool operator !=(Transform3D left, Transform3D right)
{
return !left.Equals(right);
}
/// <summary>
- /// Returns <see langword="true"/> if this transform and <paramref name="obj"/> are equal.
+ /// Returns <see langword="true"/> if the transform is exactly equal
+ /// to the given object (<see paramref="obj"/>).
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
/// </summary>
- /// <param name="obj">The other object to compare.</param>
- /// <returns>Whether or not the transform and the other object are equal.</returns>
+ /// <param name="obj">The object to compare with.</param>
+ /// <returns>Whether or not the transform and the object are exactly equal.</returns>
public override bool Equals(object obj)
{
if (obj is Transform3D)
@@ -385,10 +412,12 @@ namespace Godot
}
/// <summary>
- /// Returns <see langword="true"/> if this transform and <paramref name="other"/> are equal.
+ /// Returns <see langword="true"/> if the transforms are exactly equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
/// </summary>
/// <param name="other">The other transform to compare.</param>
- /// <returns>Whether or not the matrices are equal.</returns>
+ /// <returns>Whether or not the matrices are exactly equal.</returns>
public bool Equals(Transform3D other)
{
return basis.Equals(other.basis) && origin.Equals(other.origin);
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2.cs
index fe70d71cce..0c3331900a 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2.cs
@@ -642,6 +642,13 @@ namespace Godot
return new Vector2(Mathf.Cos(angle), Mathf.Sin(angle));
}
+ /// <summary>
+ /// Adds each component of the <see cref="Vector2"/>
+ /// with the components of the given <see cref="Vector2"/>.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>The added vector.</returns>
public static Vector2 operator +(Vector2 left, Vector2 right)
{
left.x += right.x;
@@ -649,6 +656,13 @@ namespace Godot
return left;
}
+ /// <summary>
+ /// Subtracts each component of the <see cref="Vector2"/>
+ /// by the components of the given <see cref="Vector2"/>.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>The subtracted vector.</returns>
public static Vector2 operator -(Vector2 left, Vector2 right)
{
left.x -= right.x;
@@ -656,6 +670,15 @@ namespace Godot
return left;
}
+ /// <summary>
+ /// Returns the negative value of the <see cref="Vector2"/>.
+ /// This is the same as writing <c>new Vector2(-v.x, -v.y)</c>.
+ /// This operation flips the direction of the vector while
+ /// keeping the same magnitude.
+ /// With floats, the number zero can be either positive or negative.
+ /// </summary>
+ /// <param name="vec">The vector to negate/flip.</param>
+ /// <returns>The negated/flipped vector.</returns>
public static Vector2 operator -(Vector2 vec)
{
vec.x = -vec.x;
@@ -663,6 +686,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Vector2"/>
+ /// by the given <see cref="real_t"/>.
+ /// </summary>
+ /// <param name="vec">The vector to multiply.</param>
+ /// <param name="scale">The scale to multiply by.</param>
+ /// <returns>The multiplied vector.</returns>
public static Vector2 operator *(Vector2 vec, real_t scale)
{
vec.x *= scale;
@@ -670,6 +700,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Vector2"/>
+ /// by the given <see cref="real_t"/>.
+ /// </summary>
+ /// <param name="scale">The scale to multiply by.</param>
+ /// <param name="vec">The vector to multiply.</param>
+ /// <returns>The multiplied vector.</returns>
public static Vector2 operator *(real_t scale, Vector2 vec)
{
vec.x *= scale;
@@ -677,6 +714,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Vector2"/>
+ /// by the components of the given <see cref="Vector2"/>.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>The multiplied vector.</returns>
public static Vector2 operator *(Vector2 left, Vector2 right)
{
left.x *= right.x;
@@ -684,6 +728,13 @@ namespace Godot
return left;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Vector2"/>
+ /// by the given <see cref="real_t"/>.
+ /// </summary>
+ /// <param name="vec">The dividend vector.</param>
+ /// <param name="divisor">The divisor value.</param>
+ /// <returns>The divided vector.</returns>
public static Vector2 operator /(Vector2 vec, real_t divisor)
{
vec.x /= divisor;
@@ -691,6 +742,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Divides each component of the <see cref="Vector2"/>
+ /// by the components of the given <see cref="Vector2"/>.
+ /// </summary>
+ /// <param name="vec">The dividend vector.</param>
+ /// <param name="divisorv">The divisor vector.</param>
+ /// <returns>The divided vector.</returns>
public static Vector2 operator /(Vector2 vec, Vector2 divisorv)
{
vec.x /= divisorv.x;
@@ -698,6 +756,22 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Gets the remainder of each component of the <see cref="Vector2"/>
+ /// with the components of the given <see cref="real_t"/>.
+ /// This operation uses truncated division, which is often not desired
+ /// as it does not work well with negative numbers.
+ /// Consider using <see cref="PosMod(real_t)"/> instead
+ /// if you want to handle negative numbers.
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// GD.Print(new Vector2(10, -20) % 7); // Prints "(3, -6)"
+ /// </code>
+ /// </example>
+ /// <param name="vec">The dividend vector.</param>
+ /// <param name="divisor">The divisor value.</param>
+ /// <returns>The remainder vector.</returns>
public static Vector2 operator %(Vector2 vec, real_t divisor)
{
vec.x %= divisor;
@@ -705,6 +779,22 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Gets the remainder of each component of the <see cref="Vector2"/>
+ /// with the components of the given <see cref="Vector2"/>.
+ /// This operation uses truncated division, which is often not desired
+ /// as it does not work well with negative numbers.
+ /// Consider using <see cref="PosMod(Vector2)"/> instead
+ /// if you want to handle negative numbers.
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// GD.Print(new Vector2(10, -20) % new Vector2(7, 8)); // Prints "(3, -4)"
+ /// </code>
+ /// </example>
+ /// <param name="vec">The dividend vector.</param>
+ /// <param name="divisorv">The divisor vector.</param>
+ /// <returns>The remainder vector.</returns>
public static Vector2 operator %(Vector2 vec, Vector2 divisorv)
{
vec.x %= divisorv.x;
@@ -712,16 +802,43 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the vectors are exactly equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the vectors are exactly equal.</returns>
public static bool operator ==(Vector2 left, Vector2 right)
{
return left.Equals(right);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the vectors are not equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the vectors are not equal.</returns>
public static bool operator !=(Vector2 left, Vector2 right)
{
return !left.Equals(right);
}
+ /// <summary>
+ /// Compares two <see cref="Vector2"/> vectors by first checking if
+ /// the X value of the <paramref name="left"/> vector is less than
+ /// the X value of the <paramref name="right"/> vector.
+ /// If the X values are exactly equal, then it repeats this check
+ /// with the Y values of the two vectors.
+ /// This operator is useful for sorting vectors.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the left is less than the right.</returns>
public static bool operator <(Vector2 left, Vector2 right)
{
if (left.x == right.x)
@@ -731,6 +848,17 @@ namespace Godot
return left.x < right.x;
}
+ /// <summary>
+ /// Compares two <see cref="Vector2"/> vectors by first checking if
+ /// the X value of the <paramref name="left"/> vector is greater than
+ /// the X value of the <paramref name="right"/> vector.
+ /// If the X values are exactly equal, then it repeats this check
+ /// with the Y values of the two vectors.
+ /// This operator is useful for sorting vectors.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the left is greater than the right.</returns>
public static bool operator >(Vector2 left, Vector2 right)
{
if (left.x == right.x)
@@ -740,29 +868,54 @@ namespace Godot
return left.x > right.x;
}
+ /// <summary>
+ /// Compares two <see cref="Vector2"/> vectors by first checking if
+ /// the X value of the <paramref name="left"/> vector is less than
+ /// or equal to the X value of the <paramref name="right"/> vector.
+ /// If the X values are exactly equal, then it repeats this check
+ /// with the Y values of the two vectors.
+ /// This operator is useful for sorting vectors.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the left is less than or equal to the right.</returns>
public static bool operator <=(Vector2 left, Vector2 right)
{
if (left.x == right.x)
{
return left.y <= right.y;
}
- return left.x <= right.x;
+ return left.x < right.x;
}
+ /// <summary>
+ /// Compares two <see cref="Vector2"/> vectors by first checking if
+ /// the X value of the <paramref name="left"/> vector is greater than
+ /// or equal to the X value of the <paramref name="right"/> vector.
+ /// If the X values are exactly equal, then it repeats this check
+ /// with the Y values of the two vectors.
+ /// This operator is useful for sorting vectors.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the left is greater than or equal to the right.</returns>
public static bool operator >=(Vector2 left, Vector2 right)
{
if (left.x == right.x)
{
return left.y >= right.y;
}
- return left.x >= right.x;
+ return left.x > right.x;
}
/// <summary>
- /// Returns <see langword="true"/> if this vector and <paramref name="obj"/> are equal.
+ /// Returns <see langword="true"/> if the vector is exactly equal
+ /// to the given object (<see paramref="obj"/>).
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
/// </summary>
- /// <param name="obj">The other object to compare.</param>
- /// <returns>Whether or not the vector and the other object are equal.</returns>
+ /// <param name="obj">The object to compare with.</param>
+ /// <returns>Whether or not the vector and the object are equal.</returns>
public override bool Equals(object obj)
{
if (obj is Vector2)
@@ -773,10 +926,12 @@ namespace Godot
}
/// <summary>
- /// Returns <see langword="true"/> if this vector and <paramref name="other"/> are equal.
+ /// Returns <see langword="true"/> if the vectors are exactly equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
/// </summary>
- /// <param name="other">The other vector to compare.</param>
- /// <returns>Whether or not the vectors are equal.</returns>
+ /// <param name="other">The other vector.</param>
+ /// <returns>Whether or not the vectors are exactly equal.</returns>
public bool Equals(Vector2 other)
{
return x == other.x && y == other.y;
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2i.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2i.cs
index ca4531d885..6cac16d53b 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2i.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector2i.cs
@@ -366,6 +366,13 @@ namespace Godot
this.y = Mathf.RoundToInt(v.y);
}
+ /// <summary>
+ /// Adds each component of the <see cref="Vector2i"/>
+ /// with the components of the given <see cref="Vector2i"/>.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>The added vector.</returns>
public static Vector2i operator +(Vector2i left, Vector2i right)
{
left.x += right.x;
@@ -373,6 +380,13 @@ namespace Godot
return left;
}
+ /// <summary>
+ /// Subtracts each component of the <see cref="Vector2i"/>
+ /// by the components of the given <see cref="Vector2i"/>.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>The subtracted vector.</returns>
public static Vector2i operator -(Vector2i left, Vector2i right)
{
left.x -= right.x;
@@ -380,6 +394,14 @@ namespace Godot
return left;
}
+ /// <summary>
+ /// Returns the negative value of the <see cref="Vector2i"/>.
+ /// This is the same as writing <c>new Vector2i(-v.x, -v.y)</c>.
+ /// This operation flips the direction of the vector while
+ /// keeping the same magnitude.
+ /// </summary>
+ /// <param name="vec">The vector to negate/flip.</param>
+ /// <returns>The negated/flipped vector.</returns>
public static Vector2i operator -(Vector2i vec)
{
vec.x = -vec.x;
@@ -387,6 +409,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Vector2i"/>
+ /// by the given <see langword="int"/>.
+ /// </summary>
+ /// <param name="vec">The vector to multiply.</param>
+ /// <param name="scale">The scale to multiply by.</param>
+ /// <returns>The multiplied vector.</returns>
public static Vector2i operator *(Vector2i vec, int scale)
{
vec.x *= scale;
@@ -394,6 +423,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Vector2i"/>
+ /// by the given <see langword="int"/>.
+ /// </summary>
+ /// <param name="scale">The scale to multiply by.</param>
+ /// <param name="vec">The vector to multiply.</param>
+ /// <returns>The multiplied vector.</returns>
public static Vector2i operator *(int scale, Vector2i vec)
{
vec.x *= scale;
@@ -401,6 +437,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Vector2i"/>
+ /// by the components of the given <see cref="Vector2i"/>.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>The multiplied vector.</returns>
public static Vector2i operator *(Vector2i left, Vector2i right)
{
left.x *= right.x;
@@ -408,6 +451,13 @@ namespace Godot
return left;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Vector2i"/>
+ /// by the given <see langword="int"/>.
+ /// </summary>
+ /// <param name="vec">The dividend vector.</param>
+ /// <param name="divisor">The divisor value.</param>
+ /// <returns>The divided vector.</returns>
public static Vector2i operator /(Vector2i vec, int divisor)
{
vec.x /= divisor;
@@ -415,6 +465,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Divides each component of the <see cref="Vector2i"/>
+ /// by the components of the given <see cref="Vector2i"/>.
+ /// </summary>
+ /// <param name="vec">The dividend vector.</param>
+ /// <param name="divisorv">The divisor vector.</param>
+ /// <returns>The divided vector.</returns>
public static Vector2i operator /(Vector2i vec, Vector2i divisorv)
{
vec.x /= divisorv.x;
@@ -422,6 +479,22 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Gets the remainder of each component of the <see cref="Vector2i"/>
+ /// with the components of the given <see langword="int"/>.
+ /// This operation uses truncated division, which is often not desired
+ /// as it does not work well with negative numbers.
+ /// Consider using <see cref="PosMod(int)"/> instead
+ /// if you want to handle negative numbers.
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// GD.Print(new Vector2i(10, -20) % 7); // Prints "(3, -6)"
+ /// </code>
+ /// </example>
+ /// <param name="vec">The dividend vector.</param>
+ /// <param name="divisor">The divisor value.</param>
+ /// <returns>The remainder vector.</returns>
public static Vector2i operator %(Vector2i vec, int divisor)
{
vec.x %= divisor;
@@ -429,6 +502,22 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Gets the remainder of each component of the <see cref="Vector2i"/>
+ /// with the components of the given <see cref="Vector2i"/>.
+ /// This operation uses truncated division, which is often not desired
+ /// as it does not work well with negative numbers.
+ /// Consider using <see cref="PosMod(Vector2i)"/> instead
+ /// if you want to handle negative numbers.
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// GD.Print(new Vector2i(10, -20) % new Vector2i(7, 8)); // Prints "(3, -4)"
+ /// </code>
+ /// </example>
+ /// <param name="vec">The dividend vector.</param>
+ /// <param name="divisorv">The divisor vector.</param>
+ /// <returns>The remainder vector.</returns>
public static Vector2i operator %(Vector2i vec, Vector2i divisorv)
{
vec.x %= divisorv.x;
@@ -436,6 +525,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Performs a bitwise AND operation with this <see cref="Vector2i"/>
+ /// and the given <see langword="int"/>.
+ /// </summary>
+ /// <param name="vec">The vector to AND with.</param>
+ /// <param name="and">The integer to AND with.</param>
+ /// <returns>The result of the bitwise AND.</returns>
public static Vector2i operator &(Vector2i vec, int and)
{
vec.x &= and;
@@ -443,6 +539,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Performs a bitwise AND operation with this <see cref="Vector2i"/>
+ /// and the given <see cref="Vector2i"/>.
+ /// </summary>
+ /// <param name="vec">The left vector to AND with.</param>
+ /// <param name="andv">The right vector to AND with.</param>
+ /// <returns>The result of the bitwise AND.</returns>
public static Vector2i operator &(Vector2i vec, Vector2i andv)
{
vec.x &= andv.x;
@@ -450,50 +553,106 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the vectors are equal.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the vectors are equal.</returns>
public static bool operator ==(Vector2i left, Vector2i right)
{
return left.Equals(right);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the vectors are not equal.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the vectors are not equal.</returns>
public static bool operator !=(Vector2i left, Vector2i right)
{
return !left.Equals(right);
}
+ /// <summary>
+ /// Compares two <see cref="Vector2i"/> vectors by first checking if
+ /// the X value of the <paramref name="left"/> vector is less than
+ /// the X value of the <paramref name="right"/> vector.
+ /// If the X values are exactly equal, then it repeats this check
+ /// with the Y values of the two vectors.
+ /// This operator is useful for sorting vectors.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the left is less than the right.</returns>
public static bool operator <(Vector2i left, Vector2i right)
{
- if (left.x.Equals(right.x))
+ if (left.x == right.x)
{
return left.y < right.y;
}
return left.x < right.x;
}
+ /// <summary>
+ /// Compares two <see cref="Vector2i"/> vectors by first checking if
+ /// the X value of the <paramref name="left"/> vector is greater than
+ /// the X value of the <paramref name="right"/> vector.
+ /// If the X values are exactly equal, then it repeats this check
+ /// with the Y values of the two vectors.
+ /// This operator is useful for sorting vectors.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the left is greater than the right.</returns>
public static bool operator >(Vector2i left, Vector2i right)
{
- if (left.x.Equals(right.x))
+ if (left.x == right.x)
{
return left.y > right.y;
}
return left.x > right.x;
}
+ /// <summary>
+ /// Compares two <see cref="Vector2i"/> vectors by first checking if
+ /// the X value of the <paramref name="left"/> vector is less than
+ /// or equal to the X value of the <paramref name="right"/> vector.
+ /// If the X values are exactly equal, then it repeats this check
+ /// with the Y values of the two vectors.
+ /// This operator is useful for sorting vectors.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the left is less than or equal to the right.</returns>
public static bool operator <=(Vector2i left, Vector2i right)
{
- if (left.x.Equals(right.x))
+ if (left.x == right.x)
{
return left.y <= right.y;
}
- return left.x <= right.x;
+ return left.x < right.x;
}
+ /// <summary>
+ /// Compares two <see cref="Vector2i"/> vectors by first checking if
+ /// the X value of the <paramref name="left"/> vector is greater than
+ /// or equal to the X value of the <paramref name="right"/> vector.
+ /// If the X values are exactly equal, then it repeats this check
+ /// with the Y values of the two vectors.
+ /// This operator is useful for sorting vectors.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the left is greater than or equal to the right.</returns>
public static bool operator >=(Vector2i left, Vector2i right)
{
- if (left.x.Equals(right.x))
+ if (left.x == right.x)
{
return left.y >= right.y;
}
- return left.x >= right.x;
+ return left.x > right.x;
}
/// <summary>
@@ -515,10 +674,11 @@ namespace Godot
}
/// <summary>
- /// Returns <see langword="true"/> if this vector and <paramref name="obj"/> are equal.
+ /// Returns <see langword="true"/> if the vector is equal
+ /// to the given object (<see paramref="obj"/>).
/// </summary>
- /// <param name="obj">The other object to compare.</param>
- /// <returns>Whether or not the vector and the other object are equal.</returns>
+ /// <param name="obj">The object to compare with.</param>
+ /// <returns>Whether or not the vector and the object are equal.</returns>
public override bool Equals(object obj)
{
if (obj is Vector2i)
@@ -530,9 +690,9 @@ namespace Godot
}
/// <summary>
- /// Returns <see langword="true"/> if this vector and <paramref name="other"/> are equal.
+ /// Returns <see langword="true"/> if the vectors are equal.
/// </summary>
- /// <param name="other">The other vector to compare.</param>
+ /// <param name="other">The other vector.</param>
/// <returns>Whether or not the vectors are equal.</returns>
public bool Equals(Vector2i other)
{
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3.cs
index 01e3a71bcb..63d9be0a6d 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3.cs
@@ -699,6 +699,13 @@ namespace Godot
z = v.z;
}
+ /// <summary>
+ /// Adds each component of the <see cref="Vector3"/>
+ /// with the components of the given <see cref="Vector3"/>.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>The added vector.</returns>
public static Vector3 operator +(Vector3 left, Vector3 right)
{
left.x += right.x;
@@ -707,6 +714,13 @@ namespace Godot
return left;
}
+ /// <summary>
+ /// Subtracts each component of the <see cref="Vector3"/>
+ /// by the components of the given <see cref="Vector3"/>.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>The subtracted vector.</returns>
public static Vector3 operator -(Vector3 left, Vector3 right)
{
left.x -= right.x;
@@ -715,6 +729,15 @@ namespace Godot
return left;
}
+ /// <summary>
+ /// Returns the negative value of the <see cref="Vector3"/>.
+ /// This is the same as writing <c>new Vector3(-v.x, -v.y, -v.z)</c>.
+ /// This operation flips the direction of the vector while
+ /// keeping the same magnitude.
+ /// With floats, the number zero can be either positive or negative.
+ /// </summary>
+ /// <param name="vec">The vector to negate/flip.</param>
+ /// <returns>The negated/flipped vector.</returns>
public static Vector3 operator -(Vector3 vec)
{
vec.x = -vec.x;
@@ -723,6 +746,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Vector3"/>
+ /// by the given <see cref="real_t"/>.
+ /// </summary>
+ /// <param name="vec">The vector to multiply.</param>
+ /// <param name="scale">The scale to multiply by.</param>
+ /// <returns>The multiplied vector.</returns>
public static Vector3 operator *(Vector3 vec, real_t scale)
{
vec.x *= scale;
@@ -731,6 +761,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Vector3"/>
+ /// by the given <see cref="real_t"/>.
+ /// </summary>
+ /// <param name="scale">The scale to multiply by.</param>
+ /// <param name="vec">The vector to multiply.</param>
+ /// <returns>The multiplied vector.</returns>
public static Vector3 operator *(real_t scale, Vector3 vec)
{
vec.x *= scale;
@@ -739,6 +776,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Vector3"/>
+ /// by the components of the given <see cref="Vector3"/>.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>The multiplied vector.</returns>
public static Vector3 operator *(Vector3 left, Vector3 right)
{
left.x *= right.x;
@@ -747,6 +791,13 @@ namespace Godot
return left;
}
+ /// <summary>
+ /// Divides each component of the <see cref="Vector3"/>
+ /// by the given <see cref="real_t"/>.
+ /// </summary>
+ /// <param name="vec">The dividend vector.</param>
+ /// <param name="divisor">The divisor value.</param>
+ /// <returns>The divided vector.</returns>
public static Vector3 operator /(Vector3 vec, real_t divisor)
{
vec.x /= divisor;
@@ -755,6 +806,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Divides each component of the <see cref="Vector3"/>
+ /// by the components of the given <see cref="Vector3"/>.
+ /// </summary>
+ /// <param name="vec">The dividend vector.</param>
+ /// <param name="divisorv">The divisor vector.</param>
+ /// <returns>The divided vector.</returns>
public static Vector3 operator /(Vector3 vec, Vector3 divisorv)
{
vec.x /= divisorv.x;
@@ -763,6 +821,22 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Gets the remainder of each component of the <see cref="Vector3"/>
+ /// with the components of the given <see cref="real_t"/>.
+ /// This operation uses truncated division, which is often not desired
+ /// as it does not work well with negative numbers.
+ /// Consider using <see cref="PosMod(real_t)"/> instead
+ /// if you want to handle negative numbers.
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// GD.Print(new Vector3(10, -20, 30) % 7); // Prints "(3, -6, 2)"
+ /// </code>
+ /// </example>
+ /// <param name="vec">The dividend vector.</param>
+ /// <param name="divisor">The divisor value.</param>
+ /// <returns>The remainder vector.</returns>
public static Vector3 operator %(Vector3 vec, real_t divisor)
{
vec.x %= divisor;
@@ -771,6 +845,22 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Gets the remainder of each component of the <see cref="Vector3"/>
+ /// with the components of the given <see cref="Vector3"/>.
+ /// This operation uses truncated division, which is often not desired
+ /// as it does not work well with negative numbers.
+ /// Consider using <see cref="PosMod(Vector3)"/> instead
+ /// if you want to handle negative numbers.
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// GD.Print(new Vector3(10, -20, 30) % new Vector3(7, 8, 9)); // Prints "(3, -4, 3)"
+ /// </code>
+ /// </example>
+ /// <param name="vec">The dividend vector.</param>
+ /// <param name="divisorv">The divisor vector.</param>
+ /// <returns>The remainder vector.</returns>
public static Vector3 operator %(Vector3 vec, Vector3 divisorv)
{
vec.x %= divisorv.x;
@@ -779,16 +869,43 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the vectors are exactly equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the vectors are exactly equal.</returns>
public static bool operator ==(Vector3 left, Vector3 right)
{
return left.Equals(right);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the vectors are not equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the vectors are not equal.</returns>
public static bool operator !=(Vector3 left, Vector3 right)
{
return !left.Equals(right);
}
+ /// <summary>
+ /// Compares two <see cref="Vector3"/> vectors by first checking if
+ /// the X value of the <paramref name="left"/> vector is less than
+ /// the X value of the <paramref name="right"/> vector.
+ /// If the X values are exactly equal, then it repeats this check
+ /// with the Y values of the two vectors, and then with the Z values.
+ /// This operator is useful for sorting vectors.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the left is less than the right.</returns>
public static bool operator <(Vector3 left, Vector3 right)
{
if (left.x == right.x)
@@ -802,6 +919,17 @@ namespace Godot
return left.x < right.x;
}
+ /// <summary>
+ /// Compares two <see cref="Vector3"/> vectors by first checking if
+ /// the X value of the <paramref name="left"/> vector is greater than
+ /// the X value of the <paramref name="right"/> vector.
+ /// If the X values are exactly equal, then it repeats this check
+ /// with the Y values of the two vectors, and then with the Z values.
+ /// This operator is useful for sorting vectors.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the left is greater than the right.</returns>
public static bool operator >(Vector3 left, Vector3 right)
{
if (left.x == right.x)
@@ -815,6 +943,17 @@ namespace Godot
return left.x > right.x;
}
+ /// <summary>
+ /// Compares two <see cref="Vector3"/> vectors by first checking if
+ /// the X value of the <paramref name="left"/> vector is less than
+ /// or equal to the X value of the <paramref name="right"/> vector.
+ /// If the X values are exactly equal, then it repeats this check
+ /// with the Y values of the two vectors, and then with the Z values.
+ /// This operator is useful for sorting vectors.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the left is less than or equal to the right.</returns>
public static bool operator <=(Vector3 left, Vector3 right)
{
if (left.x == right.x)
@@ -828,6 +967,17 @@ namespace Godot
return left.x < right.x;
}
+ /// <summary>
+ /// Compares two <see cref="Vector3"/> vectors by first checking if
+ /// the X value of the <paramref name="left"/> vector is greater than
+ /// or equal to the X value of the <paramref name="right"/> vector.
+ /// If the X values are exactly equal, then it repeats this check
+ /// with the Y values of the two vectors, and then with the Z values.
+ /// This operator is useful for sorting vectors.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the left is greater than or equal to the right.</returns>
public static bool operator >=(Vector3 left, Vector3 right)
{
if (left.x == right.x)
@@ -842,10 +992,13 @@ namespace Godot
}
/// <summary>
- /// Returns <see langword="true"/> if this vector and <paramref name="obj"/> are equal.
+ /// Returns <see langword="true"/> if the vector is exactly equal
+ /// to the given object (<see paramref="obj"/>).
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
/// </summary>
- /// <param name="obj">The other object to compare.</param>
- /// <returns>Whether or not the vector and the other object are equal.</returns>
+ /// <param name="obj">The object to compare with.</param>
+ /// <returns>Whether or not the vector and the object are equal.</returns>
public override bool Equals(object obj)
{
if (obj is Vector3)
@@ -857,10 +1010,12 @@ namespace Godot
}
/// <summary>
- /// Returns <see langword="true"/> if this vector and <paramref name="other"/> are equal
+ /// Returns <see langword="true"/> if the vectors are exactly equal.
+ /// Note: Due to floating-point precision errors, consider using
+ /// <see cref="IsEqualApprox"/> instead, which is more reliable.
/// </summary>
- /// <param name="other">The other vector to compare.</param>
- /// <returns>Whether or not the vectors are equal.</returns>
+ /// <param name="other">The other vector.</param>
+ /// <returns>Whether or not the vectors are exactly equal.</returns>
public bool Equals(Vector3 other)
{
return x == other.x && y == other.y && z == other.z;
diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3i.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3i.cs
index 2a7771cdfc..474876fc91 100644
--- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3i.cs
+++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Vector3i.cs
@@ -347,6 +347,13 @@ namespace Godot
this.z = Mathf.RoundToInt(v.z);
}
+ /// <summary>
+ /// Adds each component of the <see cref="Vector3i"/>
+ /// with the components of the given <see cref="Vector3i"/>.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>The added vector.</returns>
public static Vector3i operator +(Vector3i left, Vector3i right)
{
left.x += right.x;
@@ -355,6 +362,13 @@ namespace Godot
return left;
}
+ /// <summary>
+ /// Subtracts each component of the <see cref="Vector3i"/>
+ /// by the components of the given <see cref="Vector3i"/>.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>The subtracted vector.</returns>
public static Vector3i operator -(Vector3i left, Vector3i right)
{
left.x -= right.x;
@@ -363,6 +377,14 @@ namespace Godot
return left;
}
+ /// <summary>
+ /// Returns the negative value of the <see cref="Vector3i"/>.
+ /// This is the same as writing <c>new Vector3i(-v.x, -v.y, -v.z)</c>.
+ /// This operation flips the direction of the vector while
+ /// keeping the same magnitude.
+ /// </summary>
+ /// <param name="vec">The vector to negate/flip.</param>
+ /// <returns>The negated/flipped vector.</returns>
public static Vector3i operator -(Vector3i vec)
{
vec.x = -vec.x;
@@ -371,6 +393,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Vector3i"/>
+ /// by the given <see langword="int"/>.
+ /// </summary>
+ /// <param name="vec">The vector to multiply.</param>
+ /// <param name="scale">The scale to multiply by.</param>
+ /// <returns>The multiplied vector.</returns>
public static Vector3i operator *(Vector3i vec, int scale)
{
vec.x *= scale;
@@ -379,6 +408,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Vector3i"/>
+ /// by the given <see langword="int"/>.
+ /// </summary>
+ /// <param name="scale">The scale to multiply by.</param>
+ /// <param name="vec">The vector to multiply.</param>
+ /// <returns>The multiplied vector.</returns>
public static Vector3i operator *(int scale, Vector3i vec)
{
vec.x *= scale;
@@ -387,6 +423,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Vector3i"/>
+ /// by the components of the given <see cref="Vector3i"/>.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>The multiplied vector.</returns>
public static Vector3i operator *(Vector3i left, Vector3i right)
{
left.x *= right.x;
@@ -395,6 +438,13 @@ namespace Godot
return left;
}
+ /// <summary>
+ /// Multiplies each component of the <see cref="Vector3i"/>
+ /// by the given <see langword="int"/>.
+ /// </summary>
+ /// <param name="vec">The dividend vector.</param>
+ /// <param name="divisor">The divisor value.</param>
+ /// <returns>The divided vector.</returns>
public static Vector3i operator /(Vector3i vec, int divisor)
{
vec.x /= divisor;
@@ -403,6 +453,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Divides each component of the <see cref="Vector3i"/>
+ /// by the components of the given <see cref="Vector3i"/>.
+ /// </summary>
+ /// <param name="vec">The dividend vector.</param>
+ /// <param name="divisorv">The divisor vector.</param>
+ /// <returns>The divided vector.</returns>
public static Vector3i operator /(Vector3i vec, Vector3i divisorv)
{
vec.x /= divisorv.x;
@@ -411,6 +468,22 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Gets the remainder of each component of the <see cref="Vector3i"/>
+ /// with the components of the given <see langword="int"/>.
+ /// This operation uses truncated division, which is often not desired
+ /// as it does not work well with negative numbers.
+ /// Consider using <see cref="PosMod(int)"/> instead
+ /// if you want to handle negative numbers.
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// GD.Print(new Vector3i(10, -20, 30) % 7); // Prints "(3, -6, 2)"
+ /// </code>
+ /// </example>
+ /// <param name="vec">The dividend vector.</param>
+ /// <param name="divisor">The divisor value.</param>
+ /// <returns>The remainder vector.</returns>
public static Vector3i operator %(Vector3i vec, int divisor)
{
vec.x %= divisor;
@@ -419,6 +492,22 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Gets the remainder of each component of the <see cref="Vector3i"/>
+ /// with the components of the given <see cref="Vector3i"/>.
+ /// This operation uses truncated division, which is often not desired
+ /// as it does not work well with negative numbers.
+ /// Consider using <see cref="PosMod(Vector3i)"/> instead
+ /// if you want to handle negative numbers.
+ /// </summary>
+ /// <example>
+ /// <code>
+ /// GD.Print(new Vector3i(10, -20, 30) % new Vector3i(7, 8, 9)); // Prints "(3, -4, 3)"
+ /// </code>
+ /// </example>
+ /// <param name="vec">The dividend vector.</param>
+ /// <param name="divisorv">The divisor vector.</param>
+ /// <returns>The remainder vector.</returns>
public static Vector3i operator %(Vector3i vec, Vector3i divisorv)
{
vec.x %= divisorv.x;
@@ -427,6 +516,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Performs a bitwise AND operation with this <see cref="Vector3i"/>
+ /// and the given <see langword="int"/>.
+ /// </summary>
+ /// <param name="vec">The vector to AND with.</param>
+ /// <param name="and">The integer to AND with.</param>
+ /// <returns>The result of the bitwise AND.</returns>
public static Vector3i operator &(Vector3i vec, int and)
{
vec.x &= and;
@@ -435,6 +531,13 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Performs a bitwise AND operation with this <see cref="Vector3i"/>
+ /// and the given <see cref="Vector3i"/>.
+ /// </summary>
+ /// <param name="vec">The left vector to AND with.</param>
+ /// <param name="andv">The right vector to AND with.</param>
+ /// <returns>The result of the bitwise AND.</returns>
public static Vector3i operator &(Vector3i vec, Vector3i andv)
{
vec.x &= andv.x;
@@ -443,65 +546,121 @@ namespace Godot
return vec;
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the vectors are equal.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the vectors are equal.</returns>
public static bool operator ==(Vector3i left, Vector3i right)
{
return left.Equals(right);
}
+ /// <summary>
+ /// Returns <see langword="true"/> if the vectors are not equal.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the vectors are not equal.</returns>
public static bool operator !=(Vector3i left, Vector3i right)
{
return !left.Equals(right);
}
+ /// <summary>
+ /// Compares two <see cref="Vector3i"/> vectors by first checking if
+ /// the X value of the <paramref name="left"/> vector is less than
+ /// the X value of the <paramref name="right"/> vector.
+ /// If the X values are exactly equal, then it repeats this check
+ /// with the Y values of the two vectors, and then with the Z values.
+ /// This operator is useful for sorting vectors.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the left is less than the right.</returns>
public static bool operator <(Vector3i left, Vector3i right)
{
if (left.x == right.x)
{
if (left.y == right.y)
+ {
return left.z < right.z;
- else
- return left.y < right.y;
+ }
+ return left.y < right.y;
}
-
return left.x < right.x;
}
+ /// <summary>
+ /// Compares two <see cref="Vector3i"/> vectors by first checking if
+ /// the X value of the <paramref name="left"/> vector is greater than
+ /// the X value of the <paramref name="right"/> vector.
+ /// If the X values are exactly equal, then it repeats this check
+ /// with the Y values of the two vectors, and then with the Z values.
+ /// This operator is useful for sorting vectors.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the left is greater than the right.</returns>
public static bool operator >(Vector3i left, Vector3i right)
{
if (left.x == right.x)
{
if (left.y == right.y)
+ {
return left.z > right.z;
- else
- return left.y > right.y;
+ }
+ return left.y > right.y;
}
-
return left.x > right.x;
}
+ /// <summary>
+ /// Compares two <see cref="Vector3i"/> vectors by first checking if
+ /// the X value of the <paramref name="left"/> vector is less than
+ /// or equal to the X value of the <paramref name="right"/> vector.
+ /// If the X values are exactly equal, then it repeats this check
+ /// with the Y values of the two vectors, and then with the Z values.
+ /// This operator is useful for sorting vectors.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the left is less than or equal to the right.</returns>
public static bool operator <=(Vector3i left, Vector3i right)
{
if (left.x == right.x)
{
if (left.y == right.y)
+ {
return left.z <= right.z;
- else
- return left.y < right.y;
+ }
+ return left.y < right.y;
}
-
return left.x < right.x;
}
+ /// <summary>
+ /// Compares two <see cref="Vector3i"/> vectors by first checking if
+ /// the X value of the <paramref name="left"/> vector is greater than
+ /// or equal to the X value of the <paramref name="right"/> vector.
+ /// If the X values are exactly equal, then it repeats this check
+ /// with the Y values of the two vectors, and then with the Z values.
+ /// This operator is useful for sorting vectors.
+ /// </summary>
+ /// <param name="left">The left vector.</param>
+ /// <param name="right">The right vector.</param>
+ /// <returns>Whether or not the left is greater than or equal to the right.</returns>
public static bool operator >=(Vector3i left, Vector3i right)
{
if (left.x == right.x)
{
if (left.y == right.y)
+ {
return left.z >= right.z;
- else
- return left.y > right.y;
+ }
+ return left.y > right.y;
}
-
return left.x > right.x;
}
@@ -524,10 +683,11 @@ namespace Godot
}
/// <summary>
- /// Returns <see langword="true"/> if this vector and <paramref name="obj"/> are equal.
+ /// Returns <see langword="true"/> if the vector is equal
+ /// to the given object (<see paramref="obj"/>).
/// </summary>
- /// <param name="obj">The other object to compare.</param>
- /// <returns>Whether or not the vector and the other object are equal.</returns>
+ /// <param name="obj">The object to compare with.</param>
+ /// <returns>Whether or not the vector and the object are equal.</returns>
public override bool Equals(object obj)
{
if (obj is Vector3i)
@@ -539,9 +699,9 @@ namespace Godot
}
/// <summary>
- /// Returns <see langword="true"/> if this vector and <paramref name="other"/> are equal
+ /// Returns <see langword="true"/> if the vectors are equal.
/// </summary>
- /// <param name="other">The other vector to compare.</param>
+ /// <param name="other">The other vector.</param>
/// <returns>Whether or not the vectors are equal.</returns>
public bool Equals(Vector3i other)
{
diff --git a/modules/mono/glue/gd_glue.cpp b/modules/mono/glue/gd_glue.cpp
index a2ff868f65..07ddf5d945 100644
--- a/modules/mono/glue/gd_glue.cpp
+++ b/modules/mono/glue/gd_glue.cpp
@@ -182,26 +182,30 @@ void godot_icall_GD_printt(MonoArray *p_what) {
print_line(str);
}
-float godot_icall_GD_randf() {
- return Math::randf();
+void godot_icall_GD_randomize() {
+ Math::randomize();
}
uint32_t godot_icall_GD_randi() {
return Math::rand();
}
-void godot_icall_GD_randomize() {
- Math::randomize();
+float godot_icall_GD_randf() {
+ return Math::randf();
}
-double godot_icall_GD_randf_range(double from, double to) {
+int32_t godot_icall_GD_randi_range(int32_t from, int32_t to) {
return Math::random(from, to);
}
-int32_t godot_icall_GD_randi_range(int32_t from, int32_t to) {
+double godot_icall_GD_randf_range(double from, double to) {
return Math::random(from, to);
}
+double godot_icall_GD_randfn(double mean, double deviation) {
+ return Math::randfn(mean, deviation);
+}
+
uint32_t godot_icall_GD_rand_seed(uint64_t seed, uint64_t *newSeed) {
uint32_t ret = Math::rand_from_seed(&seed);
*newSeed = seed;
@@ -300,11 +304,12 @@ void godot_register_gd_icalls() {
GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_printraw", godot_icall_GD_printraw);
GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_prints", godot_icall_GD_prints);
GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_printt", godot_icall_GD_printt);
- GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_randf", godot_icall_GD_randf);
- GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_randi", godot_icall_GD_randi);
GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_randomize", godot_icall_GD_randomize);
- GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_randf_range", godot_icall_GD_randf_range);
+ GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_randi", godot_icall_GD_randi);
+ GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_randf", godot_icall_GD_randf);
GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_randi_range", godot_icall_GD_randi_range);
+ GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_randf_range", godot_icall_GD_randf_range);
+ GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_randfn", godot_icall_GD_randfn);
GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_rand_seed", godot_icall_GD_rand_seed);
GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_seed", godot_icall_GD_seed);
GDMonoUtils::add_internal_call("Godot.GD::godot_icall_GD_str", godot_icall_GD_str);
diff --git a/modules/mono/utils/mono_reg_utils.cpp b/modules/mono/utils/mono_reg_utils.cpp
index c80a80c7bd..d0a27b27c1 100644
--- a/modules/mono/utils/mono_reg_utils.cpp
+++ b/modules/mono/utils/mono_reg_utils.cpp
@@ -58,10 +58,10 @@ REGSAM _get_bitness_sam() {
}
LONG _RegOpenKey(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult) {
- LONG res = RegOpenKeyExW(hKey, lpSubKey, 0, Key::READ, phkResult);
+ LONG res = RegOpenKeyExW(hKey, lpSubKey, 0, KEY_READ, phkResult);
if (res != ERROR_SUCCESS)
- res = RegOpenKeyExW(hKey, lpSubKey, 0, Key::READ | _get_bitness_sam(), phkResult);
+ res = RegOpenKeyExW(hKey, lpSubKey, 0, KEY_READ | _get_bitness_sam(), phkResult);
return res;
}
diff --git a/modules/tinyexr/SCsub b/modules/tinyexr/SCsub
index 30bde96fb4..bf9242cc16 100644
--- a/modules/tinyexr/SCsub
+++ b/modules/tinyexr/SCsub
@@ -20,6 +20,9 @@ env_tinyexr.Prepend(CPPPATH=[thirdparty_dir])
# Enable threaded loading with C++11.
env_tinyexr.Append(CPPDEFINES=["TINYEXR_USE_THREAD"])
+# miniz is an external dependency, we could add it but we can instead rely
+# on our existing bundled zlib.
+env_tinyexr.Append(CPPDEFINES=[("TINYEXR_USE_MINIZ", 0)])
env_thirdparty = env_tinyexr.Clone()
env_thirdparty.disable_warnings()
diff --git a/modules/tinyexr/image_loader_tinyexr.cpp b/modules/tinyexr/image_loader_tinyexr.cpp
index eb7a8597e6..6c4c06aab0 100644
--- a/modules/tinyexr/image_loader_tinyexr.cpp
+++ b/modules/tinyexr/image_loader_tinyexr.cpp
@@ -33,6 +33,8 @@
#include "core/os/os.h"
#include "core/string/print_string.h"
+#include <zlib.h> // Should come before including tinyexr.
+
#include "thirdparty/tinyexr/tinyexr.h"
Error ImageLoaderTinyEXR::load_image(Ref<Image> p_image, FileAccess *f, bool p_force_linear, float p_scale) {
diff --git a/modules/tinyexr/image_saver_tinyexr.cpp b/modules/tinyexr/image_saver_tinyexr.cpp
index 6a2fb0f666..f64acf8395 100644
--- a/modules/tinyexr/image_saver_tinyexr.cpp
+++ b/modules/tinyexr/image_saver_tinyexr.cpp
@@ -31,6 +31,8 @@
#include "image_saver_tinyexr.h"
#include "core/math/math_funcs.h"
+#include <zlib.h> // Should come before including tinyexr.
+
#include "thirdparty/tinyexr/tinyexr.h"
static bool is_supported_format(Image::Format p_format) {
diff --git a/modules/upnp/SCsub b/modules/upnp/SCsub
index b2fed0cb23..4b385b820d 100644
--- a/modules/upnp/SCsub
+++ b/modules/upnp/SCsub
@@ -26,9 +26,9 @@ if env["builtin_miniupnpc"]:
"receivedata.c",
"addr_is_reserved.c",
]
- thirdparty_sources = [thirdparty_dir + "miniupnpc/" + file for file in thirdparty_sources]
+ thirdparty_sources = [thirdparty_dir + "src/" + file for file in thirdparty_sources]
- env_upnp.Prepend(CPPPATH=[thirdparty_dir])
+ env_upnp.Prepend(CPPPATH=[thirdparty_dir + "include"])
env_upnp.Append(CPPDEFINES=["MINIUPNP_STATICLIB"])
env_upnp.Append(CPPDEFINES=["MINIUPNPC_SET_SOCKET_TIMEOUT"])
diff --git a/modules/upnp/upnp.cpp b/modules/upnp/upnp.cpp
index 0e51822b01..88d92b0083 100644
--- a/modules/upnp/upnp.cpp
+++ b/modules/upnp/upnp.cpp
@@ -30,8 +30,8 @@
#include "upnp.h"
-#include <miniupnpc/miniwget.h>
-#include <miniupnpc/upnpcommands.h>
+#include <miniwget.h>
+#include <upnpcommands.h>
#include <stdlib.h>
diff --git a/modules/upnp/upnp.h b/modules/upnp/upnp.h
index b961a9667f..67df187f8c 100644
--- a/modules/upnp/upnp.h
+++ b/modules/upnp/upnp.h
@@ -35,7 +35,7 @@
#include "upnp_device.h"
-#include <miniupnpc/miniupnpc.h>
+#include <miniupnpc.h>
class UPNP : public RefCounted {
GDCLASS(UPNP, RefCounted);
diff --git a/modules/upnp/upnp_device.cpp b/modules/upnp/upnp_device.cpp
index ddc66d593c..692a0f3509 100644
--- a/modules/upnp/upnp_device.cpp
+++ b/modules/upnp/upnp_device.cpp
@@ -32,7 +32,7 @@
#include "upnp.h"
-#include <miniupnpc/upnpcommands.h>
+#include <upnpcommands.h>
String UPNPDevice::query_external_address() const {
ERR_FAIL_COND_V_MSG(!is_valid_gateway(), "", "The Internet Gateway Device must be valid.");
diff --git a/modules/visual_script/doc_classes/VisualScript.xml b/modules/visual_script/doc_classes/VisualScript.xml
index be6bf00e50..a452974014 100644
--- a/modules/visual_script/doc_classes/VisualScript.xml
+++ b/modules/visual_script/doc_classes/VisualScript.xml
@@ -9,7 +9,7 @@
You are most likely to use this class via the Visual Script editor or when writing plugins for it.
</description>
<tutorials>
- <link title="VisualScript documentation index">https://docs.godotengine.org/en/latest/tutorials/scripting/visual_script/index.html</link>
+ <link title="VisualScript documentation index">$DOCS_URL/tutorials/scripting/visual_script/index.html</link>
</tutorials>
<methods>
<method name="add_custom_signal">
diff --git a/modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml b/modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml
index f4abb3c122..b3fd678379 100644
--- a/modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml
+++ b/modules/visual_script/doc_classes/VisualScriptBuiltinFunc.xml
@@ -112,104 +112,107 @@
<constant name="MATH_RANDF" value="32" enum="BuiltinFunc">
Return a random floating-point value between 0 and 1. To obtain a random value between 0 to N, you can use it with multiplication.
</constant>
- <constant name="MATH_RANDF_RANGE" value="33" enum="BuiltinFunc">
+ <constant name="MATH_RANDI_RANGE" value="33" enum="BuiltinFunc">
+ Return a random 32-bit integer value between the two inputs.
+ </constant>
+ <constant name="MATH_RANDF_RANGE" value="34" enum="BuiltinFunc">
Return a random floating-point value between the two inputs.
</constant>
- <constant name="MATH_RANDI_RANGE" value="34" enum="BuiltinFunc">
- Return a random 32-bit integer value between the two inputs.
+ <constant name="MATH_RANDFN" value="35" enum="BuiltinFunc">
+ Returns a normally-distributed pseudo-random number, using Box-Muller transform with the specified mean and a standard deviation. This is also called Gaussian distribution.
</constant>
- <constant name="MATH_SEED" value="35" enum="BuiltinFunc">
+ <constant name="MATH_SEED" value="36" enum="BuiltinFunc">
Set the seed for the random number generator.
</constant>
- <constant name="MATH_RANDSEED" value="36" enum="BuiltinFunc">
+ <constant name="MATH_RANDSEED" value="37" enum="BuiltinFunc">
Return a random value from the given seed, along with the new seed.
</constant>
- <constant name="MATH_DEG2RAD" value="37" enum="BuiltinFunc">
+ <constant name="MATH_DEG2RAD" value="38" enum="BuiltinFunc">
Convert the input from degrees to radians.
</constant>
- <constant name="MATH_RAD2DEG" value="38" enum="BuiltinFunc">
+ <constant name="MATH_RAD2DEG" value="39" enum="BuiltinFunc">
Convert the input from radians to degrees.
</constant>
- <constant name="MATH_LINEAR2DB" value="39" enum="BuiltinFunc">
+ <constant name="MATH_LINEAR2DB" value="40" enum="BuiltinFunc">
Convert the input from linear volume to decibel volume.
</constant>
- <constant name="MATH_DB2LINEAR" value="40" enum="BuiltinFunc">
+ <constant name="MATH_DB2LINEAR" value="41" enum="BuiltinFunc">
Convert the input from decibel volume to linear volume.
</constant>
- <constant name="MATH_WRAP" value="41" enum="BuiltinFunc">
+ <constant name="MATH_WRAP" value="42" enum="BuiltinFunc">
</constant>
- <constant name="MATH_WRAPF" value="42" enum="BuiltinFunc">
+ <constant name="MATH_WRAPF" value="43" enum="BuiltinFunc">
</constant>
- <constant name="MATH_PINGPONG" value="43" enum="BuiltinFunc">
+ <constant name="MATH_PINGPONG" value="44" enum="BuiltinFunc">
Return the [code]value[/code] wrapped between [code]0[/code] and the [code]length[/code]. If the limit is reached, the next value the function returned is decreased to the [code]0[/code] side or increased to the [code]length[/code] side (like a triangle wave). If [code]length[/code] is less than zero, it becomes positive.
</constant>
- <constant name="LOGIC_MAX" value="44" enum="BuiltinFunc">
+ <constant name="LOGIC_MAX" value="45" enum="BuiltinFunc">
Return the greater of the two numbers, also known as their maximum.
</constant>
- <constant name="LOGIC_MIN" value="45" enum="BuiltinFunc">
+ <constant name="LOGIC_MIN" value="46" enum="BuiltinFunc">
Return the lesser of the two numbers, also known as their minimum.
</constant>
- <constant name="LOGIC_CLAMP" value="46" enum="BuiltinFunc">
+ <constant name="LOGIC_CLAMP" value="47" enum="BuiltinFunc">
Return the input clamped inside the given range, ensuring the result is never outside it. Equivalent to [code]min(max(input, range_low), range_high)[/code].
</constant>
- <constant name="LOGIC_NEAREST_PO2" value="47" enum="BuiltinFunc">
+ <constant name="LOGIC_NEAREST_PO2" value="48" enum="BuiltinFunc">
Return the nearest power of 2 to the input.
</constant>
- <constant name="OBJ_WEAKREF" value="48" enum="BuiltinFunc">
+ <constant name="OBJ_WEAKREF" value="49" enum="BuiltinFunc">
Create a [WeakRef] from the input.
</constant>
- <constant name="TYPE_CONVERT" value="49" enum="BuiltinFunc">
+ <constant name="TYPE_CONVERT" value="50" enum="BuiltinFunc">
Convert between types.
</constant>
- <constant name="TYPE_OF" value="50" enum="BuiltinFunc">
+ <constant name="TYPE_OF" value="51" enum="BuiltinFunc">
Return the type of the input as an integer. Check [enum Variant.Type] for the integers that might be returned.
</constant>
- <constant name="TYPE_EXISTS" value="51" enum="BuiltinFunc">
+ <constant name="TYPE_EXISTS" value="52" enum="BuiltinFunc">
Checks if a type is registered in the [ClassDB].
</constant>
- <constant name="TEXT_CHAR" value="52" enum="BuiltinFunc">
+ <constant name="TEXT_CHAR" value="53" enum="BuiltinFunc">
Return a character with the given ascii value.
</constant>
- <constant name="TEXT_STR" value="53" enum="BuiltinFunc">
+ <constant name="TEXT_STR" value="54" enum="BuiltinFunc">
Convert the input to a string.
</constant>
- <constant name="TEXT_PRINT" value="54" enum="BuiltinFunc">
+ <constant name="TEXT_PRINT" value="55" enum="BuiltinFunc">
Print the given string to the output window.
</constant>
- <constant name="TEXT_PRINTERR" value="55" enum="BuiltinFunc">
+ <constant name="TEXT_PRINTERR" value="56" enum="BuiltinFunc">
Print the given string to the standard error output.
</constant>
- <constant name="TEXT_PRINTRAW" value="56" enum="BuiltinFunc">
+ <constant name="TEXT_PRINTRAW" value="57" enum="BuiltinFunc">
Print the given string to the standard output, without adding a newline.
</constant>
- <constant name="TEXT_PRINT_VERBOSE" value="57" enum="BuiltinFunc">
+ <constant name="TEXT_PRINT_VERBOSE" value="58" enum="BuiltinFunc">
</constant>
- <constant name="VAR_TO_STR" value="58" enum="BuiltinFunc">
+ <constant name="VAR_TO_STR" value="59" enum="BuiltinFunc">
Serialize a [Variant] to a string.
</constant>
- <constant name="STR_TO_VAR" value="59" enum="BuiltinFunc">
+ <constant name="STR_TO_VAR" value="60" enum="BuiltinFunc">
Deserialize a [Variant] from a string serialized using [constant VAR_TO_STR].
</constant>
- <constant name="VAR_TO_BYTES" value="60" enum="BuiltinFunc">
+ <constant name="VAR_TO_BYTES" value="61" enum="BuiltinFunc">
Serialize a [Variant] to a [PackedByteArray].
</constant>
- <constant name="BYTES_TO_VAR" value="61" enum="BuiltinFunc">
+ <constant name="BYTES_TO_VAR" value="62" enum="BuiltinFunc">
Deserialize a [Variant] from a [PackedByteArray] serialized using [constant VAR_TO_BYTES].
</constant>
- <constant name="MATH_SMOOTHSTEP" value="62" enum="BuiltinFunc">
+ <constant name="MATH_SMOOTHSTEP" value="63" enum="BuiltinFunc">
Return a number smoothly interpolated between the first two inputs, based on the third input. Similar to [constant MATH_LERP], but interpolates faster at the beginning and slower at the end. Using Hermite interpolation formula:
[codeblock]
var t = clamp((weight - from) / (to - from), 0.0, 1.0)
return t * t * (3.0 - 2.0 * t)
[/codeblock]
</constant>
- <constant name="MATH_POSMOD" value="63" enum="BuiltinFunc">
+ <constant name="MATH_POSMOD" value="64" enum="BuiltinFunc">
</constant>
- <constant name="MATH_LERP_ANGLE" value="64" enum="BuiltinFunc">
+ <constant name="MATH_LERP_ANGLE" value="65" enum="BuiltinFunc">
</constant>
- <constant name="TEXT_ORD" value="65" enum="BuiltinFunc">
+ <constant name="TEXT_ORD" value="66" enum="BuiltinFunc">
</constant>
- <constant name="FUNC_MAX" value="66" enum="BuiltinFunc">
+ <constant name="FUNC_MAX" value="67" enum="BuiltinFunc">
Represents the size of the [enum BuiltinFunc] enum.
</constant>
</constants>
diff --git a/modules/visual_script/editor/visual_script_editor.cpp b/modules/visual_script/editor/visual_script_editor.cpp
index 2096487235..e8b25b58b6 100644
--- a/modules/visual_script/editor/visual_script_editor.cpp
+++ b/modules/visual_script/editor/visual_script_editor.cpp
@@ -998,7 +998,7 @@ void VisualScriptEditor::_change_port_type(int p_select, int p_id, int p_port, b
void VisualScriptEditor::_update_node_size(int p_id) {
Node *node = graph->get_node(itos(p_id));
if (Object::cast_to<Control>(node)) {
- Object::cast_to<Control>(node)->set_size(Vector2(1, 1)); // Shrink if text is smaller.
+ Object::cast_to<Control>(node)->reset_size(); // Shrink if text is smaller.
}
}
@@ -1616,7 +1616,7 @@ void VisualScriptEditor::_expression_text_changed(const String &p_text, int p_id
Node *node = graph->get_node(itos(p_id));
if (Object::cast_to<Control>(node)) {
- Object::cast_to<Control>(node)->set_size(Vector2(1, 1)); // Shrink if text is smaller.
+ Object::cast_to<Control>(node)->reset_size(); // Shrink if text is smaller.
}
updating_graph = false;
@@ -3676,7 +3676,7 @@ void VisualScriptEditor::_default_value_edited(Node *p_button, int p_id, int p_i
}
default_value_edit->set_position(Object::cast_to<Control>(p_button)->get_global_position() + Vector2(0, Object::cast_to<Control>(p_button)->get_size().y));
- default_value_edit->set_size(Size2(1, 1));
+ default_value_edit->reset_size();
if (pinfo.type == Variant::NODE_PATH) {
Node *edited_scene = get_tree()->get_edited_scene_root();
@@ -3832,7 +3832,7 @@ void VisualScriptEditor::_comment_node_resized(const Vector2 &p_new_size, int p_
undo_redo->commit_action();
gn->set_custom_minimum_size(new_size);
- gn->set_size(Size2(1, 1));
+ gn->reset_size();
graph->set_block_minimum_size_adjust(false);
updating_graph = false;
}
@@ -4132,10 +4132,10 @@ void VisualScriptEditor::_member_rmb_selected(const Vector2 &p_pos) {
member_popup->clear();
member_popup->set_position(members->get_global_position() + p_pos);
- member_popup->set_size(Vector2());
+ member_popup->reset_size();
function_name_edit->set_position(members->get_global_position() + p_pos);
- function_name_edit->set_size(Vector2());
+ function_name_edit->reset_size();
TreeItem *root = members->get_root();
diff --git a/modules/visual_script/visual_script_builtin_funcs.cpp b/modules/visual_script/visual_script_builtin_funcs.cpp
index 54a5e1449f..7ae85ea415 100644
--- a/modules/visual_script/visual_script_builtin_funcs.cpp
+++ b/modules/visual_script/visual_script_builtin_funcs.cpp
@@ -71,8 +71,9 @@ const char *VisualScriptBuiltinFunc::func_name[VisualScriptBuiltinFunc::FUNC_MAX
"randomize",
"randi",
"randf",
- "randf_range",
"randi_range",
+ "randf_range",
+ "randfn",
"seed",
"rand_seed",
"deg2rad",
@@ -195,8 +196,9 @@ int VisualScriptBuiltinFunc::get_func_argument_count(BuiltinFunc p_func) {
case MATH_POW:
case MATH_EASE:
case MATH_SNAPPED:
- case MATH_RANDF_RANGE:
case MATH_RANDI_RANGE:
+ case MATH_RANDF_RANGE:
+ case MATH_RANDFN:
case LOGIC_MAX:
case LOGIC_MIN:
case TYPE_CONVERT:
@@ -353,6 +355,13 @@ PropertyInfo VisualScriptBuiltinFunc::get_input_value_port_info(int p_idx) const
case MATH_RANDI:
case MATH_RANDF: {
} break;
+ case MATH_RANDI_RANGE: {
+ if (p_idx == 0) {
+ return PropertyInfo(Variant::INT, "from");
+ } else {
+ return PropertyInfo(Variant::INT, "to");
+ }
+ } break;
case MATH_RANDF_RANGE: {
if (p_idx == 0) {
return PropertyInfo(Variant::FLOAT, "from");
@@ -360,11 +369,11 @@ PropertyInfo VisualScriptBuiltinFunc::get_input_value_port_info(int p_idx) const
return PropertyInfo(Variant::FLOAT, "to");
}
} break;
- case MATH_RANDI_RANGE: {
+ case MATH_RANDFN: {
if (p_idx == 0) {
- return PropertyInfo(Variant::INT, "from");
+ return PropertyInfo(Variant::FLOAT, "mean");
} else {
- return PropertyInfo(Variant::INT, "to");
+ return PropertyInfo(Variant::FLOAT, "deviation");
}
} break;
case MATH_SEED:
@@ -527,6 +536,7 @@ PropertyInfo VisualScriptBuiltinFunc::get_output_value_port_info(int p_idx) cons
t = Variant::INT;
} break;
case MATH_RANDF:
+ case MATH_RANDFN:
case MATH_RANDF_RANGE: {
t = Variant::FLOAT;
} break;
@@ -827,15 +837,20 @@ void VisualScriptBuiltinFunc::exec_func(BuiltinFunc p_func, const Variant **p_in
case VisualScriptBuiltinFunc::MATH_RANDF: {
*r_return = Math::randf();
} break;
+ case VisualScriptBuiltinFunc::MATH_RANDI_RANGE: {
+ VALIDATE_ARG_NUM(0);
+ VALIDATE_ARG_NUM(1);
+ *r_return = Math::random((int)*p_inputs[0], (int)*p_inputs[1]);
+ } break;
case VisualScriptBuiltinFunc::MATH_RANDF_RANGE: {
VALIDATE_ARG_NUM(0);
VALIDATE_ARG_NUM(1);
*r_return = Math::random((double)*p_inputs[0], (double)*p_inputs[1]);
} break;
- case VisualScriptBuiltinFunc::MATH_RANDI_RANGE: {
+ case VisualScriptBuiltinFunc::MATH_RANDFN: {
VALIDATE_ARG_NUM(0);
VALIDATE_ARG_NUM(1);
- *r_return = Math::random((int)*p_inputs[0], (int)*p_inputs[1]);
+ *r_return = Math::randfn((double)*p_inputs[0], (double)*p_inputs[1]);
} break;
case VisualScriptBuiltinFunc::MATH_SEED: {
VALIDATE_ARG_NUM(0);
@@ -1211,8 +1226,9 @@ void VisualScriptBuiltinFunc::_bind_methods() {
BIND_ENUM_CONSTANT(MATH_RANDOMIZE);
BIND_ENUM_CONSTANT(MATH_RANDI);
BIND_ENUM_CONSTANT(MATH_RANDF);
- BIND_ENUM_CONSTANT(MATH_RANDF_RANGE);
BIND_ENUM_CONSTANT(MATH_RANDI_RANGE);
+ BIND_ENUM_CONSTANT(MATH_RANDF_RANGE);
+ BIND_ENUM_CONSTANT(MATH_RANDFN);
BIND_ENUM_CONSTANT(MATH_SEED);
BIND_ENUM_CONSTANT(MATH_RANDSEED);
BIND_ENUM_CONSTANT(MATH_DEG2RAD);
@@ -1301,8 +1317,9 @@ void register_visual_script_builtin_func_node() {
VisualScriptLanguage::singleton->add_register_func("functions/built_in/randomize", create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RANDOMIZE>);
VisualScriptLanguage::singleton->add_register_func("functions/built_in/randi", create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RANDI>);
VisualScriptLanguage::singleton->add_register_func("functions/built_in/randf", create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RANDF>);
- VisualScriptLanguage::singleton->add_register_func("functions/built_in/randf_range", create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RANDF_RANGE>);
VisualScriptLanguage::singleton->add_register_func("functions/built_in/randi_range", create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RANDI_RANGE>);
+ VisualScriptLanguage::singleton->add_register_func("functions/built_in/randf_range", create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RANDF_RANGE>);
+ VisualScriptLanguage::singleton->add_register_func("functions/built_in/randfn", create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RANDFN>);
VisualScriptLanguage::singleton->add_register_func("functions/built_in/seed", create_builtin_func_node<VisualScriptBuiltinFunc::MATH_SEED>);
VisualScriptLanguage::singleton->add_register_func("functions/built_in/randseed", create_builtin_func_node<VisualScriptBuiltinFunc::MATH_RANDSEED>);
diff --git a/modules/visual_script/visual_script_builtin_funcs.h b/modules/visual_script/visual_script_builtin_funcs.h
index 30f1f0d417..f71a053f7d 100644
--- a/modules/visual_script/visual_script_builtin_funcs.h
+++ b/modules/visual_script/visual_script_builtin_funcs.h
@@ -71,8 +71,9 @@ public:
MATH_RANDOMIZE,
MATH_RANDI,
MATH_RANDF,
- MATH_RANDF_RANGE,
MATH_RANDI_RANGE,
+ MATH_RANDF_RANGE,
+ MATH_RANDFN,
MATH_SEED,
MATH_RANDSEED,
MATH_DEG2RAD,
diff --git a/modules/vorbis/resource_importer_ogg_vorbis.cpp b/modules/vorbis/resource_importer_ogg_vorbis.cpp
index 33ee6cf359..be9f880103 100644
--- a/modules/vorbis/resource_importer_ogg_vorbis.cpp
+++ b/modules/vorbis/resource_importer_ogg_vorbis.cpp
@@ -57,7 +57,7 @@ String ResourceImporterOGGVorbis::get_resource_type() const {
return "AudioStreamOGGVorbis";
}
-bool ResourceImporterOGGVorbis::get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const {
+bool ResourceImporterOGGVorbis::get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const {
return true;
}
@@ -69,7 +69,7 @@ String ResourceImporterOGGVorbis::get_preset_name(int p_idx) const {
return String();
}
-void ResourceImporterOGGVorbis::get_import_options(List<ImportOption> *r_options, int p_preset) const {
+void ResourceImporterOGGVorbis::get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset) const {
r_options->push_back(ImportOption(PropertyInfo(Variant::BOOL, "loop"), true));
r_options->push_back(ImportOption(PropertyInfo(Variant::FLOAT, "loop_offset"), 0));
}
diff --git a/modules/vorbis/resource_importer_ogg_vorbis.h b/modules/vorbis/resource_importer_ogg_vorbis.h
index acdc1a3d38..8565e0deb8 100644
--- a/modules/vorbis/resource_importer_ogg_vorbis.h
+++ b/modules/vorbis/resource_importer_ogg_vorbis.h
@@ -51,8 +51,8 @@ public:
virtual String get_visible_name() const override;
virtual int get_preset_count() const override;
virtual String get_preset_name(int p_idx) const override;
- virtual void get_import_options(List<ImportOption> *r_options, int p_preset = 0) const override;
- virtual bool get_option_visibility(const String &p_option, const Map<StringName, Variant> &p_options) const override;
+ virtual void get_import_options(const String &p_path, List<ImportOption> *r_options, int p_preset = 0) const override;
+ virtual bool get_option_visibility(const String &p_path, const String &p_option, const Map<StringName, Variant> &p_options) const override;
virtual Error import(const String &p_source_file, const String &p_save_path, const Map<StringName, Variant> &p_options, List<String> *r_platform_variants, List<String> *r_gen_files = nullptr, Variant *r_metadata = nullptr) override;
diff --git a/modules/webp/SCsub b/modules/webp/SCsub
index 4c0c2f7893..80d62400c8 100644
--- a/modules/webp/SCsub
+++ b/modules/webp/SCsub
@@ -67,6 +67,7 @@ if env["builtin_libwebp"]:
"dsp/lossless_msa.c",
"dsp/lossless_neon.c",
"dsp/lossless_sse2.c",
+ "dsp/lossless_sse41.c",
"dsp/rescaler.c",
"dsp/rescaler_mips32.c",
"dsp/rescaler_mips_dsp_r2.c",
diff --git a/modules/websocket/SCsub b/modules/websocket/SCsub
index 4c022c43cf..63c941c4a8 100644
--- a/modules/websocket/SCsub
+++ b/modules/websocket/SCsub
@@ -18,12 +18,11 @@ elif env["builtin_wslay"]:
"wslay_net.c",
"wslay_event.c",
"wslay_queue.c",
- "wslay_stack.c",
"wslay_frame.c",
]
thirdparty_sources = [thirdparty_dir + s for s in thirdparty_sources]
- env_ws.Prepend(CPPPATH=[thirdparty_dir + "includes/"])
+ env_ws.Prepend(CPPPATH=[thirdparty_dir])
env_ws.Append(CPPDEFINES=["HAVE_CONFIG_H"])
if env["platform"] == "windows" or env["platform"] == "uwp":
diff --git a/platform/android/display_server_android.cpp b/platform/android/display_server_android.cpp
index 34f0064a5e..505e7ac0eb 100644
--- a/platform/android/display_server_android.cpp
+++ b/platform/android/display_server_android.cpp
@@ -119,7 +119,9 @@ DisplayServer::ScreenOrientation DisplayServerAndroid::screen_get_orientation(in
GodotIOJavaWrapper *godot_io_java = OS_Android::get_singleton()->get_godot_io_java();
ERR_FAIL_COND_V(!godot_io_java, SCREEN_LANDSCAPE);
- return (ScreenOrientation)godot_io_java->get_screen_orientation();
+ const int orientation = godot_io_java->get_screen_orientation();
+ ERR_FAIL_INDEX_V_MSG(orientation, 7, SCREEN_LANDSCAPE, "Unrecognized screen orientation");
+ return (ScreenOrientation)orientation;
}
int DisplayServerAndroid::get_screen_count() const {
diff --git a/platform/android/export/export_plugin.cpp b/platform/android/export/export_plugin.cpp
index 4c45be5210..05cd63d935 100644
--- a/platform/android/export/export_plugin.cpp
+++ b/platform/android/export/export_plugin.cpp
@@ -751,9 +751,9 @@ void EditorExportPlatformAndroid::_get_permissions(const Ref<EditorExportPreset>
}
int xr_mode_index = p_preset->get("xr_features/xr_mode");
- if (xr_mode_index == 1 /* XRMode.OVR */) {
+ if (xr_mode_index == XR_MODE_OPENXR) {
int hand_tracking_index = p_preset->get("xr_features/hand_tracking"); // 0: none, 1: optional, 2: required
- if (hand_tracking_index > 0) {
+ if (hand_tracking_index > XR_HAND_TRACKING_NONE) {
if (r_permissions.find("com.oculus.permission.HAND_TRACKING") == -1) {
r_permissions.push_back("com.oculus.permission.HAND_TRACKING");
}
@@ -964,6 +964,20 @@ void EditorExportPlatformAndroid::_fix_manifest(const Ref<EditorExportPreset> &p
}
}
+ if (tname == "meta-data" && attrname == "name" && value == "xr_mode_metadata_name") {
+ // Update the meta-data 'android:name' attribute based on the selected XR mode.
+ if (xr_mode_index == XR_MODE_OPENXR) {
+ string_table.write[attr_value] = "com.samsung.android.vr.application.mode";
+ }
+ }
+
+ if (tname == "meta-data" && attrname == "value" && value == "xr_mode_metadata_value") {
+ // Update the meta-data 'android:value' attribute based on the selected XR mode.
+ if (xr_mode_index == XR_MODE_OPENXR) {
+ string_table.write[attr_value] = "vr_only";
+ }
+ }
+
iofs += 20;
}
@@ -978,7 +992,7 @@ void EditorExportPlatformAndroid::_fix_manifest(const Ref<EditorExportPreset> &p
Vector<bool> feature_required_list;
Vector<int> feature_versions;
- if (xr_mode_index == 1 /* XRMode.OVR */) {
+ if (xr_mode_index == XR_MODE_OPENXR) {
// Set degrees of freedom
feature_names.push_back("android.hardware.vr.headtracking");
feature_required_list.push_back(true);
@@ -986,11 +1000,19 @@ void EditorExportPlatformAndroid::_fix_manifest(const Ref<EditorExportPreset> &p
// Check for hand tracking
int hand_tracking_index = p_preset->get("xr_features/hand_tracking"); // 0: none, 1: optional, 2: required
- if (hand_tracking_index > 0) {
+ if (hand_tracking_index > XR_HAND_TRACKING_NONE) {
feature_names.push_back("oculus.software.handtracking");
- feature_required_list.push_back(hand_tracking_index == 2);
+ feature_required_list.push_back(hand_tracking_index == XR_HAND_TRACKING_REQUIRED);
feature_versions.push_back(-1); // no version attribute should be added.
}
+
+ // Check for passthrough
+ int passthrough_mode = p_preset->get("xr_features/passthrough");
+ if (passthrough_mode > XR_PASSTHROUGH_NONE) {
+ feature_names.push_back("com.oculus.feature.PASSTHROUGH");
+ feature_required_list.push_back(passthrough_mode == XR_PASSTHROUGH_REQUIRED);
+ feature_versions.push_back(-1);
+ }
}
if (feature_names.size() > 0) {
@@ -1667,11 +1689,11 @@ void EditorExportPlatformAndroid::get_export_options(List<ExportOption> *r_optio
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, launcher_adaptive_icon_foreground_option, PROPERTY_HINT_FILE, "*.png"), ""));
r_options->push_back(ExportOption(PropertyInfo(Variant::STRING, launcher_adaptive_icon_background_option, PROPERTY_HINT_FILE, "*.png"), ""));
- r_options->push_back(ExportOption(PropertyInfo(Variant::INT, "graphics/depth_buffer_bits", PROPERTY_HINT_ENUM, "16 bits,24 bits [default],32 bits"), 1));
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "graphics/opengl_debug"), false));
- r_options->push_back(ExportOption(PropertyInfo(Variant::INT, "xr_features/xr_mode", PROPERTY_HINT_ENUM, "Regular,Oculus Mobile VR"), 0));
+ r_options->push_back(ExportOption(PropertyInfo(Variant::INT, "xr_features/xr_mode", PROPERTY_HINT_ENUM, "Regular,OpenXR"), 0));
r_options->push_back(ExportOption(PropertyInfo(Variant::INT, "xr_features/hand_tracking", PROPERTY_HINT_ENUM, "None,Optional,Required"), 0));
+ r_options->push_back(ExportOption(PropertyInfo(Variant::INT, "xr_features/passthrough", PROPERTY_HINT_ENUM, "None,Optional,Required"), 0));
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "screen/immersive_mode"), true));
r_options->push_back(ExportOption(PropertyInfo(Variant::BOOL, "screen/support_small"), true));
@@ -2138,10 +2160,17 @@ bool EditorExportPlatformAndroid::can_export(const Ref<EditorExportPreset> &p_pr
// Validate the Xr features are properly populated
int xr_mode_index = p_preset->get("xr_features/xr_mode");
int hand_tracking = p_preset->get("xr_features/hand_tracking");
- if (xr_mode_index != /* XRMode.OVR*/ 1) {
- if (hand_tracking > 0) {
+ int passthrough_mode = p_preset->get("xr_features/passthrough");
+ if (xr_mode_index != XR_MODE_OPENXR) {
+ if (hand_tracking > XR_HAND_TRACKING_NONE) {
valid = false;
- err += TTR("\"Hand Tracking\" is only valid when \"Xr Mode\" is \"Oculus Mobile VR\".");
+ err += TTR("\"Hand Tracking\" is only valid when \"Xr Mode\" is \"OpenXR\".");
+ err += "\n";
+ }
+
+ if (passthrough_mode > XR_PASSTHROUGH_NONE) {
+ valid = false;
+ err += TTR("\"Passthrough\" is only valid when \"Xr Mode\" is \"OpenXR\".");
err += "\n";
}
}
@@ -2203,18 +2232,12 @@ void EditorExportPlatformAndroid::get_command_line_flags(const Ref<EditorExportP
}
int xr_mode_index = p_preset->get("xr_features/xr_mode");
- if (xr_mode_index == 1) {
- command_line_strings.push_back("--xr_mode_ovr");
+ if (xr_mode_index == XR_MODE_OPENXR) {
+ command_line_strings.push_back("--xr_mode_openxr");
} else { // XRMode.REGULAR is the default.
command_line_strings.push_back("--xr_mode_regular");
}
- int depth_buffer_bits_index = p_preset->get("graphics/depth_buffer_bits");
- if (depth_buffer_bits_index >= 0 && depth_buffer_bits_index <= 2) {
- int depth_buffer_bits = 16 + depth_buffer_bits_index * 8;
- command_line_strings.push_back(vformat("--use_depth=%d", depth_buffer_bits));
- }
-
bool immersive = p_preset->get("screen/immersive_mode");
if (immersive) {
command_line_strings.push_back("--use_immersive");
diff --git a/platform/android/export/gradle_export_util.cpp b/platform/android/export/gradle_export_util.cpp
index b0d623827e..658c0ecd0a 100644
--- a/platform/android/export/gradle_export_util.cpp
+++ b/platform/android/export/gradle_export_util.cpp
@@ -211,16 +211,24 @@ String _get_screen_sizes_tag(const Ref<EditorExportPreset> &p_preset) {
String _get_xr_features_tag(const Ref<EditorExportPreset> &p_preset) {
String manifest_xr_features;
- bool uses_xr = (int)(p_preset->get("xr_features/xr_mode")) == 1;
+ int xr_mode_index = (int)(p_preset->get("xr_features/xr_mode"));
+ bool uses_xr = xr_mode_index == XR_MODE_OPENXR;
if (uses_xr) {
manifest_xr_features += " <uses-feature tools:node=\"replace\" android:name=\"android.hardware.vr.headtracking\" android:required=\"true\" android:version=\"1\" />\n";
int hand_tracking_index = p_preset->get("xr_features/hand_tracking"); // 0: none, 1: optional, 2: required
- if (hand_tracking_index == 1) {
+ if (hand_tracking_index == XR_HAND_TRACKING_OPTIONAL) {
manifest_xr_features += " <uses-feature tools:node=\"replace\" android:name=\"oculus.software.handtracking\" android:required=\"false\" />\n";
- } else if (hand_tracking_index == 2) {
+ } else if (hand_tracking_index == XR_HAND_TRACKING_REQUIRED) {
manifest_xr_features += " <uses-feature tools:node=\"replace\" android:name=\"oculus.software.handtracking\" android:required=\"true\" />\n";
}
+
+ int passthrough_mode = p_preset->get("xr_features/passthrough");
+ if (passthrough_mode == XR_PASSTHROUGH_OPTIONAL) {
+ manifest_xr_features += " <uses-feature tools:node=\"replace\" android:name=\"com.oculus.feature.PASSTHROUGH\" android:required=\"false\" />\n";
+ } else if (passthrough_mode == XR_PASSTHROUGH_REQUIRED) {
+ manifest_xr_features += " <uses-feature tools:node=\"replace\" android:name=\"com.oculus.feature.PASSTHROUGH\" android:required=\"true\" />\n";
+ }
}
return manifest_xr_features;
}
@@ -239,7 +247,8 @@ String _get_instrumentation_tag(const Ref<EditorExportPreset> &p_preset) {
}
String _get_activity_tag(const Ref<EditorExportPreset> &p_preset) {
- bool uses_xr = (int)(p_preset->get("xr_features/xr_mode")) == 1;
+ int xr_mode_index = (int)(p_preset->get("xr_features/xr_mode"));
+ bool uses_xr = xr_mode_index == XR_MODE_OPENXR;
String orientation = _get_android_orientation_label(DisplayServer::ScreenOrientation(int(GLOBAL_GET("display/window/handheld/orientation"))));
String manifest_activity_text = vformat(
" <activity android:name=\"com.godot.game.GodotApp\" "
@@ -256,6 +265,8 @@ String _get_activity_tag(const Ref<EditorExportPreset> &p_preset) {
}
String _get_application_tag(const Ref<EditorExportPreset> &p_preset, bool p_has_storage_permission) {
+ int xr_mode_index = (int)(p_preset->get("xr_features/xr_mode"));
+ bool uses_xr = xr_mode_index == XR_MODE_OPENXR;
String manifest_application_text = vformat(
" <application android:label=\"@string/godot_project_name_string\"\n"
" android:allowBackup=\"%s\"\n"
@@ -270,6 +281,9 @@ String _get_application_tag(const Ref<EditorExportPreset> &p_preset, bool p_has_
bool_to_string(p_preset->get("package/retain_data_on_uninstall")),
bool_to_string(p_has_storage_permission));
+ if (uses_xr) {
+ manifest_application_text += " <meta-data tools:node=\"replace\" android:name=\"com.samsung.android.vr.application.mode\" android:value=\"vr_only\" />\n";
+ }
manifest_application_text += _get_activity_tag(p_preset);
manifest_application_text += " </application>\n";
return manifest_application_text;
diff --git a/platform/android/export/gradle_export_util.h b/platform/android/export/gradle_export_util.h
index 744022f1f9..db05c7534c 100644
--- a/platform/android/export/gradle_export_util.h
+++ b/platform/android/export/gradle_export_util.h
@@ -44,6 +44,21 @@ const String godot_project_name_xml_string = R"(<?xml version="1.0" encoding="ut
</resources>
)";
+// Supported XR modes.
+// This should match the entries in 'platform/android/java/lib/src/org/godotengine/godot/xr/XRMode.java'
+static const int XR_MODE_REGULAR = 0;
+static const int XR_MODE_OPENXR = 1;
+
+// Supported XR hand tracking modes.
+static const int XR_HAND_TRACKING_NONE = 0;
+static const int XR_HAND_TRACKING_OPTIONAL = 1;
+static const int XR_HAND_TRACKING_REQUIRED = 2;
+
+// Supported XR passthrough modes.
+static const int XR_PASSTHROUGH_NONE = 0;
+static const int XR_PASSTHROUGH_OPTIONAL = 1;
+static const int XR_PASSTHROUGH_REQUIRED = 2;
+
struct CustomExportData {
String assets_directory;
bool debug;
diff --git a/platform/android/java/app/AndroidManifest.xml b/platform/android/java/app/AndroidManifest.xml
index d7bf6cef30..9ae6367b42 100644
--- a/platform/android/java/app/AndroidManifest.xml
+++ b/platform/android/java/app/AndroidManifest.xml
@@ -33,6 +33,11 @@
<!-- The following metadata values are replaced when Godot exports, modifying them here has no effect. -->
<!-- Do these changes in the export preset. Adding new ones is fine. -->
+ <!-- XR mode metadata. This is modified by the exporter based on the selected xr mode. DO NOT CHANGE the values here. -->
+ <meta-data
+ android:name="xr_mode_metadata_name"
+ android:value="xr_mode_metadata_value" />
+
<activity
android:name=".GodotApp"
android:label="@string/godot_project_name_string"
diff --git a/platform/android/java/lib/src/org/godotengine/godot/Godot.java b/platform/android/java/lib/src/org/godotengine/godot/Godot.java
index d872d5ed8a..17ff3c75c0 100644
--- a/platform/android/java/lib/src/org/godotengine/godot/Godot.java
+++ b/platform/android/java/lib/src/org/godotengine/godot/Godot.java
@@ -119,7 +119,6 @@ public class Godot extends Fragment implements SensorEventListener, IDownloaderC
private Button mWiFiSettingsButton;
private XRMode xrMode = XRMode.REGULAR;
- private int depth_buffer_bits = 24;
private boolean use_immersive = false;
private boolean use_debug_opengl = false;
private boolean mStatePaused;
@@ -266,8 +265,7 @@ public class Godot extends Fragment implements SensorEventListener, IDownloaderC
if (videoDriver.equals("vulkan")) {
mRenderView = new GodotVulkanRenderView(activity, this);
} else {
- mRenderView = new GodotGLRenderView(activity, this, xrMode, depth_buffer_bits,
- use_debug_opengl);
+ mRenderView = new GodotGLRenderView(activity, this, xrMode, use_debug_opengl);
}
View view = mRenderView.getView();
@@ -504,14 +502,8 @@ public class Godot extends Fragment implements SensorEventListener, IDownloaderC
boolean has_extra = i < command_line.length - 1;
if (command_line[i].equals(XRMode.REGULAR.cmdLineArg)) {
xrMode = XRMode.REGULAR;
- } else if (command_line[i].equals(XRMode.OVR.cmdLineArg)) {
- xrMode = XRMode.OVR;
- } else if (command_line[i].startsWith("--use_depth=")) {
- try {
- depth_buffer_bits = Integer.parseInt(command_line[i].split("=")[1]);
- } catch (Exception e) {
- e.printStackTrace();
- }
+ } else if (command_line[i].equals(XRMode.OPENXR.cmdLineArg)) {
+ xrMode = XRMode.OPENXR;
} else if (command_line[i].equals("--debug_opengl")) {
use_debug_opengl = true;
} else if (command_line[i].equals("--use_immersive")) {
diff --git a/platform/android/java/lib/src/org/godotengine/godot/GodotGLRenderView.java b/platform/android/java/lib/src/org/godotengine/godot/GodotGLRenderView.java
index 8b77302491..d5b0b67903 100644
--- a/platform/android/java/lib/src/org/godotengine/godot/GodotGLRenderView.java
+++ b/platform/android/java/lib/src/org/godotengine/godot/GodotGLRenderView.java
@@ -78,10 +78,8 @@ public class GodotGLRenderView extends GLSurfaceView implements GodotRenderView
private final GodotRenderer godotRenderer;
private PointerIcon pointerIcon;
- public GodotGLRenderView(Context context, Godot godot, XRMode xrMode, int p_depth_buffer_bits,
- boolean p_use_debug_opengl) {
+ public GodotGLRenderView(Context context, Godot godot, XRMode xrMode, boolean p_use_debug_opengl) {
super(context);
- GLUtils.depth_buffer_bits = p_depth_buffer_bits;
GLUtils.use_debug_opengl = p_use_debug_opengl;
this.godot = godot;
@@ -91,7 +89,7 @@ public class GodotGLRenderView extends GLSurfaceView implements GodotRenderView
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
pointerIcon = PointerIcon.getSystemIcon(getContext(), PointerIcon.TYPE_DEFAULT);
}
- init(xrMode, false, 16, 0);
+ init(xrMode, false);
}
@Override
@@ -172,11 +170,11 @@ public class GodotGLRenderView extends GLSurfaceView implements GodotRenderView
return pointerIcon;
}
- private void init(XRMode xrMode, boolean translucent, int depth, int stencil) {
+ private void init(XRMode xrMode, boolean translucent) {
setPreserveEGLContextOnPause(true);
setFocusableInTouchMode(true);
switch (xrMode) {
- case OVR:
+ case OPENXR:
// Replace the default egl config chooser.
setEGLConfigChooser(new OvrConfigChooser());
@@ -209,16 +207,9 @@ public class GodotGLRenderView extends GLSurfaceView implements GodotRenderView
* below.
*/
- RegularConfigChooser configChooser =
- new RegularFallbackConfigChooser(8, 8, 8, 8, 16, stencil,
- new RegularConfigChooser(5, 6, 5, 0, 16, stencil));
- if (GLUtils.depth_buffer_bits >= 24) {
- configChooser = new RegularFallbackConfigChooser(8, 8, 8, 8, 24, stencil, configChooser);
- if (GLUtils.depth_buffer_bits >= 32) {
- configChooser = new RegularFallbackConfigChooser(8, 8, 8, 8, 32, stencil, configChooser);
- }
- }
- setEGLConfigChooser(configChooser);
+ setEGLConfigChooser(
+ new RegularFallbackConfigChooser(8, 8, 8, 8, 24, 0,
+ new RegularConfigChooser(8, 8, 8, 8, 16, 0)));
break;
}
diff --git a/platform/android/java/lib/src/org/godotengine/godot/GodotIO.java b/platform/android/java/lib/src/org/godotengine/godot/GodotIO.java
index d85d88ec6c..5f354b6b4c 100644
--- a/platform/android/java/lib/src/org/godotengine/godot/GodotIO.java
+++ b/platform/android/java/lib/src/org/godotengine/godot/GodotIO.java
@@ -288,7 +288,34 @@ public class GodotIO {
}
public int getScreenOrientation() {
- return activity.getRequestedOrientation();
+ int orientation = activity.getRequestedOrientation();
+ switch (orientation) {
+ case ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE:
+ return SCREEN_LANDSCAPE;
+ case ActivityInfo.SCREEN_ORIENTATION_PORTRAIT:
+ return SCREEN_PORTRAIT;
+ case ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE:
+ return SCREEN_REVERSE_LANDSCAPE;
+ case ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT:
+ return SCREEN_REVERSE_PORTRAIT;
+ case ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE:
+ case ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE:
+ return SCREEN_SENSOR_LANDSCAPE;
+ case ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT:
+ case ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT:
+ return SCREEN_SENSOR_PORTRAIT;
+ case ActivityInfo.SCREEN_ORIENTATION_SENSOR:
+ case ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR:
+ case ActivityInfo.SCREEN_ORIENTATION_FULL_USER:
+ return SCREEN_SENSOR;
+ case ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED:
+ case ActivityInfo.SCREEN_ORIENTATION_USER:
+ case ActivityInfo.SCREEN_ORIENTATION_BEHIND:
+ case ActivityInfo.SCREEN_ORIENTATION_NOSENSOR:
+ case ActivityInfo.SCREEN_ORIENTATION_LOCKED:
+ default:
+ return -1;
+ }
}
public void setEdit(GodotEditText _edit) {
diff --git a/platform/android/java/lib/src/org/godotengine/godot/utils/GLUtils.java b/platform/android/java/lib/src/org/godotengine/godot/utils/GLUtils.java
index 0d581785ab..09820fad5f 100644
--- a/platform/android/java/lib/src/org/godotengine/godot/utils/GLUtils.java
+++ b/platform/android/java/lib/src/org/godotengine/godot/utils/GLUtils.java
@@ -44,7 +44,6 @@ public class GLUtils {
public static final boolean DEBUG = false;
- public static int depth_buffer_bits; // No need to reiterate the default here
public static boolean use_debug_opengl = false;
private static final String[] ATTRIBUTES_NAMES = new String[] {
diff --git a/platform/android/java/lib/src/org/godotengine/godot/xr/XRMode.java b/platform/android/java/lib/src/org/godotengine/godot/xr/XRMode.java
index 0995477baf..58f02b0396 100644
--- a/platform/android/java/lib/src/org/godotengine/godot/xr/XRMode.java
+++ b/platform/android/java/lib/src/org/godotengine/godot/xr/XRMode.java
@@ -35,7 +35,7 @@ package org.godotengine.godot.xr;
*/
public enum XRMode {
REGULAR(0, "Regular", "--xr_mode_regular", "Default Android Gamepad"), // Regular/flatscreen
- OVR(1, "Oculus Mobile VR", "--xr_mode_ovr", "");
+ OPENXR(1, "OpenXR", "--xr_mode_openxr", "");
final int index;
final String label;
diff --git a/platform/javascript/detect.py b/platform/javascript/detect.py
index 891ae419bd..b57f3b3f16 100644
--- a/platform/javascript/detect.py
+++ b/platform/javascript/detect.py
@@ -180,6 +180,13 @@ def configure(env):
env.Prepend(CPPPATH=["#platform/javascript"])
env.Append(CPPDEFINES=["JAVASCRIPT_ENABLED", "UNIX_ENABLED"])
+ if env["opengl3"]:
+ env.AppendUnique(CPPDEFINES=["GLES3_ENABLED"])
+ # This setting just makes WebGL 2 APIs available, it does NOT disable WebGL 1.
+ env.Append(LINKFLAGS=["-s", "USE_WEBGL2=1"])
+ # Allow use to take control of swapping WebGL buffers.
+ env.Append(LINKFLAGS=["-s", "OFFSCREEN_FRAMEBUFFER=1"])
+
if env["javascript_eval"]:
env.Append(CPPDEFINES=["JAVASCRIPT_EVAL_ENABLED"])
@@ -218,25 +225,11 @@ def configure(env):
# us since we don't know requirements at compile-time.
env.Append(LINKFLAGS=["-s", "ALLOW_MEMORY_GROWTH=1"])
- # This setting just makes WebGL 2 APIs available, it does NOT disable WebGL 1.
- env.Append(LINKFLAGS=["-s", "USE_WEBGL2=1"])
-
# Do not call main immediately when the support code is ready.
env.Append(LINKFLAGS=["-s", "INVOKE_RUN=0"])
- # Allow use to take control of swapping WebGL buffers.
- env.Append(LINKFLAGS=["-s", "OFFSCREEN_FRAMEBUFFER=1"])
-
# callMain for manual start, cwrap for the mono version.
env.Append(LINKFLAGS=["-s", "EXPORTED_RUNTIME_METHODS=['callMain','cwrap']"])
# Add code that allow exiting runtime.
env.Append(LINKFLAGS=["-s", "EXIT_RUNTIME=1"])
-
- # TODO remove once we have GLES support back (temporary fix undefined symbols due to dead code elimination).
- env.Append(
- LINKFLAGS=[
- "-s",
- "EXPORTED_FUNCTIONS=['_main', '_emscripten_webgl_get_current_context']",
- ]
- )
diff --git a/platform/javascript/display_server_javascript.cpp b/platform/javascript/display_server_javascript.cpp
index d12e1aeee8..7648ddaf43 100644
--- a/platform/javascript/display_server_javascript.cpp
+++ b/platform/javascript/display_server_javascript.cpp
@@ -30,6 +30,9 @@
#include "platform/javascript/display_server_javascript.h"
+#ifdef GLES3_ENABLED
+#include "drivers/gles3/rasterizer_gles3.h"
+#endif
#include "platform/javascript/os_javascript.h"
#include "servers/rendering/rasterizer_dummy.h"
@@ -50,14 +53,6 @@ DisplayServerJavaScript *DisplayServerJavaScript::get_singleton() {
}
// Window (canvas)
-void DisplayServerJavaScript::focus_canvas() {
- godot_js_display_canvas_focus();
-}
-
-bool DisplayServerJavaScript::is_canvas_focused() {
- return godot_js_display_canvas_is_focused() != 0;
-}
-
bool DisplayServerJavaScript::check_size_force_redraw() {
return godot_js_display_size_update() != 0;
}
@@ -141,11 +136,12 @@ void DisplayServerJavaScript::key_callback(int p_pressed, int p_repeat, int p_mo
int DisplayServerJavaScript::mouse_button_callback(int p_pressed, int p_button, double p_x, double p_y, int p_modifiers) {
DisplayServerJavaScript *ds = get_singleton();
+ Point2 pos(p_x, p_y);
+ Input::get_singleton()->set_mouse_position(pos);
Ref<InputEventMouseButton> ev;
ev.instantiate();
- ev->set_pressed(p_pressed);
- ev->set_position(Point2(p_x, p_y));
- ev->set_global_position(ev->get_position());
+ ev->set_position(pos);
+ ev->set_global_position(pos);
ev->set_pressed(p_pressed);
dom2godot_mod(ev, p_modifiers);
@@ -222,13 +218,15 @@ void DisplayServerJavaScript::mouse_move_callback(double p_x, double p_y, double
return;
}
+ Point2 pos(p_x, p_y);
+ Input::get_singleton()->set_mouse_position(pos);
Ref<InputEventMouseMotion> ev;
ev.instantiate();
dom2godot_mod(ev, p_modifiers);
ev->set_button_mask(input_mask);
- ev->set_position(Point2(p_x, p_y));
- ev->set_global_position(ev->get_position());
+ ev->set_position(pos);
+ ev->set_global_position(pos);
ev->set_relative(Vector2(p_rel_x, p_rel_y));
Input::get_singleton()->set_mouse_position(ev->get_position());
@@ -397,6 +395,10 @@ DisplayServer::MouseMode DisplayServerJavaScript::mouse_get_mode() const {
return MOUSE_MODE_VISIBLE;
}
+Point2i DisplayServerJavaScript::mouse_get_position() const {
+ return Input::get_singleton()->get_mouse_position();
+}
+
// Wheel
int DisplayServerJavaScript::mouse_wheel_callback(double p_delta_x, double p_delta_y) {
if (!godot_js_display_canvas_is_focused()) {
@@ -580,7 +582,9 @@ void DisplayServerJavaScript::process_joypads() {
Vector<String> DisplayServerJavaScript::get_rendering_drivers_func() {
Vector<String> drivers;
- drivers.push_back("dummy");
+#ifdef GLES3_ENABLED
+ drivers.push_back("opengl3");
+#endif
return drivers;
}
@@ -678,40 +682,34 @@ DisplayServerJavaScript::DisplayServerJavaScript(const String &p_rendering_drive
// Expose method for requesting quit.
godot_js_os_request_quit_cb(request_quit_callback);
- RasterizerDummy::make_current(); // TODO OpenGL in Godot 4.0... or webgpu?
-#if 0
- EmscriptenWebGLContextAttributes attributes;
- emscripten_webgl_init_context_attributes(&attributes);
- attributes.alpha = GLOBAL_GET("display/window/per_pixel_transparency/allowed");
- attributes.antialias = false;
- ERR_FAIL_INDEX_V(p_video_driver, VIDEO_DRIVER_MAX, ERR_INVALID_PARAMETER);
-
- if (p_desired.layered) {
- set_window_per_pixel_transparency_enabled(true);
- }
-
- bool gl_initialization_error = false;
-
- if (RasterizerGLES3::is_viable() == OK) {
- attributes.majorVersion = 1;
- RasterizerGLES3::register_config();
- RasterizerGLES3::make_current();
- } else {
- gl_initialization_error = true;
- }
-
- EMSCRIPTEN_WEBGL_CONTEXT_HANDLE ctx = emscripten_webgl_create_context(canvas_id, &attributes);
- if (emscripten_webgl_make_context_current(ctx) != EMSCRIPTEN_RESULT_SUCCESS) {
- gl_initialization_error = true;
+#ifdef GLES3_ENABLED
+ // TODO "vulkan" defaults to webgl2 for now.
+ bool wants_webgl2 = p_rendering_driver == "opengl3" || p_rendering_driver == "vulkan";
+ bool webgl2_init_failed = wants_webgl2 && !godot_js_display_has_webgl(2);
+ if (wants_webgl2 && !webgl2_init_failed) {
+ EmscriptenWebGLContextAttributes attributes;
+ emscripten_webgl_init_context_attributes(&attributes);
+ //attributes.alpha = GLOBAL_GET("display/window/per_pixel_transparency/allowed");
+ attributes.alpha = true;
+ attributes.antialias = false;
+ attributes.majorVersion = 2;
+
+ webgl_ctx = emscripten_webgl_create_context(canvas_id, &attributes);
+ if (emscripten_webgl_make_context_current(webgl_ctx) != EMSCRIPTEN_RESULT_SUCCESS) {
+ webgl2_init_failed = true;
+ } else {
+ RasterizerGLES3::make_current();
+ }
}
-
- if (gl_initialization_error) {
- OS::get_singleton()->alert("Your browser does not seem to support WebGL. Please update your browser version.",
+ if (webgl2_init_failed) {
+ OS::get_singleton()->alert("Your browser does not seem to support WebGL2. Please update your browser version.",
"Unable to initialize video driver");
- return ERR_UNAVAILABLE;
}
-
- video_driver_index = p_video_driver;
+ if (!wants_webgl2 || webgl2_init_failed) {
+ RasterizerDummy::make_current();
+ }
+#else
+ RasterizerDummy::make_current();
#endif
// JS Input interface (js/libs/library_godot_input.js)
@@ -738,8 +736,12 @@ DisplayServerJavaScript::DisplayServerJavaScript(const String &p_rendering_drive
}
DisplayServerJavaScript::~DisplayServerJavaScript() {
- //emscripten_webgl_commit_frame();
- //emscripten_webgl_destroy_context(webgl_ctx);
+#ifdef GLES3_ENABLED
+ if (webgl_ctx) {
+ emscripten_webgl_commit_frame();
+ emscripten_webgl_destroy_context(webgl_ctx);
+ }
+#endif
}
bool DisplayServerJavaScript::has_feature(Feature p_feature) const {
@@ -968,5 +970,9 @@ bool DisplayServerJavaScript::get_swap_cancel_ok() {
}
void DisplayServerJavaScript::swap_buffers() {
- //emscripten_webgl_commit_frame();
+#ifdef GLES3_ENABLED
+ if (webgl_ctx) {
+ emscripten_webgl_commit_frame();
+ }
+#endif
}
diff --git a/platform/javascript/display_server_javascript.h b/platform/javascript/display_server_javascript.h
index 80ce772a79..843bb61984 100644
--- a/platform/javascript/display_server_javascript.h
+++ b/platform/javascript/display_server_javascript.h
@@ -51,6 +51,10 @@ private:
};
JSKeyEvent key_event;
+#ifdef GLES3_ENABLED
+ EMSCRIPTEN_WEBGL_CONTEXT_HANDLE webgl_ctx = 0;
+#endif
+
WindowMode window_mode = WINDOW_MODE_WINDOWED;
ObjectID window_attached_instance_id = {};
@@ -72,8 +76,6 @@ private:
bool swap_cancel_ok = false;
// utilities
- static void focus_canvas();
- static bool is_canvas_focused();
static void dom2godot_mod(Ref<InputEventWithModifiers> ev, int p_mod);
static const char *godot2dom_cursor(DisplayServer::CursorShape p_shape);
@@ -121,6 +123,7 @@ public:
// mouse
virtual void mouse_set_mode(MouseMode p_mode) override;
virtual MouseMode mouse_get_mode() const override;
+ virtual Point2i mouse_get_position() const override;
// touch
virtual bool screen_is_touchscreen(int p_screen = SCREEN_OF_MAIN_WINDOW) const override;
diff --git a/platform/javascript/js/libs/library_godot_input.js b/platform/javascript/js/libs/library_godot_input.js
index 587c320f35..d85d0d5335 100644
--- a/platform/javascript/js/libs/library_godot_input.js
+++ b/platform/javascript/js/libs/library_godot_input.js
@@ -104,10 +104,14 @@ const GodotInputGamepads = {
}
}
GodotEventListeners.add(window, 'gamepadconnected', function (evt) {
- add(evt.gamepad);
+ if (evt.gamepad) {
+ add(evt.gamepad);
+ }
}, false);
GodotEventListeners.add(window, 'gamepaddisconnected', function (evt) {
- onchange(evt.gamepad.index, 0);
+ if (evt.gamepad) {
+ onchange(evt.gamepad.index, 0);
+ }
}, false);
},
@@ -389,6 +393,9 @@ const GodotInput = {
const rect = canvas.getBoundingClientRect();
const pos = GodotInput.computePosition(evt, rect);
const modifiers = GodotInput.getModifiers(evt);
+ if (p_pressed && document.activeElement !== GodotConfig.canvas) {
+ GodotConfig.canvas.focus();
+ }
if (func(p_pressed, evt.button, pos[0], pos[1], modifiers)) {
evt.preventDefault();
}
@@ -405,6 +412,9 @@ const GodotInput = {
const func = GodotRuntime.get_func(callback);
const canvas = GodotConfig.canvas;
function touch_cb(type, evt) {
+ if (type === 0 && document.activeElement !== GodotConfig.canvas) {
+ GodotConfig.canvas.focus();
+ }
const rect = canvas.getBoundingClientRect();
const touches = evt.changedTouches;
for (let i = 0; i < touches.length; i++) {
diff --git a/platform/javascript/os_javascript.h b/platform/javascript/os_javascript.h
index d053082d92..fbab95d33b 100644
--- a/platform/javascript/os_javascript.h
+++ b/platform/javascript/os_javascript.h
@@ -75,6 +75,7 @@ public:
Error kill(const ProcessID &p_pid) override;
int get_process_id() const override;
int get_processor_count() const override;
+ int get_default_thread_pool_size() const override { return 1; }
String get_executable_path() const override;
Error shell_open(String p_uri) override;
@@ -89,6 +90,7 @@ public:
String get_user_data_dir() const override;
bool is_userfs_persistent() const override;
+ bool is_single_window() const override { return true; }
void alert(const String &p_alert, const String &p_title = "ALERT!") override;
diff --git a/platform/osx/crash_handler_osx.mm b/platform/osx/crash_handler_osx.mm
index 2252d5eb4f..57bca7a5b9 100644
--- a/platform/osx/crash_handler_osx.mm
+++ b/platform/osx/crash_handler_osx.mm
@@ -134,8 +134,13 @@ static void handle_crash(int sig) {
args.push_back("-o");
args.push_back(_execpath);
+#if defined(__x86_64) || defined(__x86_64__) || defined(__amd64__)
args.push_back("-arch");
args.push_back("x86_64");
+#elif defined(__aarch64__)
+ args.push_back("-arch");
+ args.push_back("arm64");
+#endif
args.push_back("-l");
snprintf(str, 1024, "%p", load_addr);
args.push_back(str);
diff --git a/platform/osx/joypad_osx.cpp b/platform/osx/joypad_osx.cpp
index d4ba7879f1..8405ed1da1 100644
--- a/platform/osx/joypad_osx.cpp
+++ b/platform/osx/joypad_osx.cpp
@@ -58,6 +58,7 @@ void joypad::free() {
if (ff_device) {
FFDeviceReleaseEffect(ff_device, ff_object);
FFReleaseDevice(ff_device);
+ ff_device = nullptr;
memfree(ff_axes);
memfree(ff_directions);
}
@@ -243,7 +244,7 @@ void JoypadOSX::_device_added(IOReturn p_res, IOHIDDeviceRef p_device) {
if (is_joypad(p_device)) {
configure_joypad(p_device, &new_joypad);
#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060
- if (IOHIDDeviceGetService != nullptr) {
+ if (IOHIDDeviceGetService) {
#endif
const io_service_t ioservice = IOHIDDeviceGetService(p_device);
if ((ioservice) && (FFIsForceFeedback(ioservice) == FF_OK) && new_joypad.config_force_feedback(ioservice)) {
@@ -348,6 +349,7 @@ bool JoypadOSX::configure_joypad(IOHIDDeviceRef p_device_ref, joypad *p_joy) {
{ \
if (ret != FF_OK) { \
FFReleaseDevice(ff_device); \
+ ff_device = nullptr; \
return false; \
} \
}
@@ -367,6 +369,7 @@ bool joypad::config_force_feedback(io_service_t p_service) {
return true;
}
FFReleaseDevice(ff_device);
+ ff_device = nullptr;
return false;
}
#undef FF_ERR
@@ -601,7 +604,7 @@ JoypadOSX::JoypadOSX(Input *in) {
if (array) {
hid_manager = IOHIDManagerCreate(kCFAllocatorDefault, kIOHIDOptionsTypeNone);
- if (hid_manager != nullptr) {
+ if (hid_manager) {
config_hid_manager(array);
}
CFRelease(array);
diff --git a/platform/osx/joypad_osx.h b/platform/osx/joypad_osx.h
index 3048ecf39e..2ba7f0d950 100644
--- a/platform/osx/joypad_osx.h
+++ b/platform/osx/joypad_osx.h
@@ -68,8 +68,8 @@ struct joypad {
io_service_t ffservice = 0; /* Interface for force feedback, 0 = no ff */
FFCONSTANTFORCE ff_constant_force;
- FFDeviceObjectReference ff_device;
- FFEffectObjectReference ff_object;
+ FFDeviceObjectReference ff_device = nullptr;
+ FFEffectObjectReference ff_object = nullptr;
uint64_t ff_timestamp = 0;
LONG *ff_directions = nullptr;
FFEFFECT ff_effect;
diff --git a/platform/windows/detect.py b/platform/windows/detect.py
index 20deb35089..aaaa50e729 100644
--- a/platform/windows/detect.py
+++ b/platform/windows/detect.py
@@ -206,6 +206,8 @@ def configure_msvc(env, manual_msvc_config):
elif env["target"] == "debug":
env.AppendUnique(CCFLAGS=["/Zi", "/FS", "/Od", "/EHsc"])
+ # Allow big objects. Only needed for debug, see MinGW branch for rationale.
+ env.AppendUnique(CCFLAGS=["/bigobj"])
env.Append(LINKFLAGS=["/DEBUG"])
if env["debug_symbols"]:
@@ -227,7 +229,6 @@ def configure_msvc(env, manual_msvc_config):
env.AppendUnique(CCFLAGS=["/Gd", "/GR", "/nologo"])
env.AppendUnique(CCFLAGS=["/utf-8"]) # Force to use Unicode encoding.
- env.AppendUnique(CCFLAGS=["/bigobj"]) # Allow big objects, no drawbacks.
env.AppendUnique(CXXFLAGS=["/TP"]) # assume all sources are C++
if manual_msvc_config: # should be automatic if SCons found it
@@ -359,6 +360,10 @@ def configure_mingw(env):
elif env["target"] == "debug":
env.Append(CCFLAGS=["-g3"])
+ # Allow big objects. It's supposed not to have drawbacks but seems to break
+ # GCC LTO, so enabling for debug builds only (which are not built with LTO
+ # and are the only ones with too big objects).
+ env.Append(CCFLAGS=["-Wa,-mbig-obj"])
if env["windows_subsystem"] == "gui":
env.Append(LINKFLAGS=["-Wl,--subsystem,windows"])
@@ -422,7 +427,6 @@ def configure_mingw(env):
## Compile flags
env.Append(CCFLAGS=["-mwindows"])
- env.Append(CCFLAGS=["-Wa,-mbig-obj"]) # Allow big objects, no drawbacks.
env.Append(CPPDEFINES=["WINDOWS_ENABLED", "WASAPI_ENABLED", "WINMIDI_ENABLED"])
env.Append(CPPDEFINES=[("WINVER", env["target_win_version"]), ("_WIN32_WINNT", env["target_win_version"])])
diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp
index 2c21390d73..d8d4e92d9d 100644
--- a/platform/windows/os_windows.cpp
+++ b/platform/windows/os_windows.cpp
@@ -760,7 +760,7 @@ String OS_Windows::get_user_data_dir() const {
}
}
- return ProjectSettings::get_singleton()->get_resource_path();
+ return get_data_path().plus_file(get_godot_dir_name()).plus_file("app_userdata").plus_file("[unnamed project]");
}
String OS_Windows::get_unique_id() const {
diff --git a/scene/2d/camera_2d.cpp b/scene/2d/camera_2d.cpp
index b4ee85120e..bf5671be19 100644
--- a/scene/2d/camera_2d.cpp
+++ b/scene/2d/camera_2d.cpp
@@ -232,6 +232,7 @@ void Camera2D::_notification(int p_what) {
} break;
case NOTIFICATION_ENTER_TREE: {
+ ERR_FAIL_COND(!is_inside_tree());
if (custom_viewport && ObjectDB::get_instance(custom_viewport_id)) {
viewport = custom_viewport;
} else {
diff --git a/scene/2d/navigation_region_2d.cpp b/scene/2d/navigation_region_2d.cpp
index bdb6cda5af..204ed72878 100644
--- a/scene/2d/navigation_region_2d.cpp
+++ b/scene/2d/navigation_region_2d.cpp
@@ -464,7 +464,7 @@ void NavigationRegion2D::_notification(int p_what) {
draw_line(a, b, doors_color);
// Draw a circle to illustrate the margins.
- real_t angle = b.angle_to_point(a);
+ real_t angle = a.angle_to_point(b);
draw_arc(a, radius, angle + Math_PI / 2.0, angle - Math_PI / 2.0 + Math_TAU, 10, doors_color);
draw_arc(b, radius, angle - Math_PI / 2.0, angle + Math_PI / 2.0, 10, doors_color);
}
diff --git a/scene/2d/physics_body_2d.cpp b/scene/2d/physics_body_2d.cpp
index 5ec2a81108..f0e51097db 100644
--- a/scene/2d/physics_body_2d.cpp
+++ b/scene/2d/physics_body_2d.cpp
@@ -1317,6 +1317,17 @@ void CharacterBody2D::_move_and_slide_grounded(double p_delta, bool p_was_on_flo
_snap_on_floor(p_was_on_floor, vel_dir_facing_up);
+ // Scales the horizontal velocity according to the wall slope.
+ if (is_on_wall_only() && motion_slide_up.dot(motion_results.get(0).collision_normal) < 0) {
+ Vector2 slide_motion = motion_velocity.slide(motion_results.get(0).collision_normal);
+ if (motion_slide_up.dot(slide_motion) < 0) {
+ motion_velocity = up_direction * up_direction.dot(motion_velocity);
+ } else {
+ // Keeps the vertical motion from motion_velocity and add the horizontal motion of the projection.
+ motion_velocity = up_direction * up_direction.dot(motion_velocity) + slide_motion.slide(up_direction);
+ }
+ }
+
// Reset the gravity accumulation when touching the ground.
if (on_floor && !vel_dir_facing_up) {
motion_velocity = motion_velocity.slide(up_direction);
diff --git a/scene/2d/tile_map.cpp b/scene/2d/tile_map.cpp
index 96c4164721..a8caebf088 100644
--- a/scene/2d/tile_map.cpp
+++ b/scene/2d/tile_map.cpp
@@ -1928,7 +1928,7 @@ void TileMap::set_cell(int p_layer, const Vector2i &p_coords, int p_source_id, c
if ((source_id == TileSet::INVALID_SOURCE || atlas_coords == TileSetSource::INVALID_ATLAS_COORDS || alternative_tile == TileSetSource::INVALID_TILE_ALTERNATIVE) &&
(source_id != TileSet::INVALID_SOURCE || atlas_coords != TileSetSource::INVALID_ATLAS_COORDS || alternative_tile != TileSetSource::INVALID_TILE_ALTERNATIVE)) {
- WARN_PRINT("Setting a cell a cell as empty requires both source_id, atlas_coord and alternative_tile to be set to their respective \"invalid\" values. Values were thus changes accordingly.");
+ WARN_PRINT("Setting a cell as empty requires both source_id, atlas_coord and alternative_tile to be set to their respective \"invalid\" values. Values were thus changes accordingly.");
source_id = TileSet::INVALID_SOURCE;
atlas_coords = TileSetSource::INVALID_ATLAS_COORDS;
alternative_tile = TileSetSource::INVALID_TILE_ALTERNATIVE;
diff --git a/scene/3d/decal.cpp b/scene/3d/decal.cpp
index c9f634a5e5..500bf4d8f5 100644
--- a/scene/3d/decal.cpp
+++ b/scene/3d/decal.cpp
@@ -175,9 +175,6 @@ TypedArray<String> Decal::get_configuration_warnings() const {
}
if (cull_mask == 0) {
- // NOTE: This warning will not be emitted if none of the 20 checkboxes
- // exposed in the editor are checked. This is because there are
- // currently 12 unexposed layers in the editor inspector.
warnings.push_back(TTR("The decal's Cull Mask has no bits enabled, which means the decal will not paint objects on any layer.\nTo resolve this, enable at least one bit in the Cull Mask property."));
}
diff --git a/scene/3d/gpu_particles_collision_3d.cpp b/scene/3d/gpu_particles_collision_3d.cpp
index 6ac9364b1a..2235de1599 100644
--- a/scene/3d/gpu_particles_collision_3d.cpp
+++ b/scene/3d/gpu_particles_collision_3d.cpp
@@ -256,10 +256,10 @@ void GPUParticlesCollisionSDF::_find_closest_distance(const Vector3 &p_pos, cons
Vector2 pq1 = v1 - e1 * CLAMP(v1.dot(e1) / e1.dot(e1), 0.0, 1.0);
Vector2 pq2 = v2 - e2 * CLAMP(v2.dot(e2) / e2.dot(e2), 0.0, 1.0);
- float s = SGN(e0.x * e2.y - e0.y * e2.x);
+ float s = SIGN(e0.x * e2.y - e0.y * e2.x);
Vector2 d2 = Vector2(pq0.dot(pq0), s * (v0.x * e0.y - v0.y * e0.x)).min(Vector2(pq1.dot(pq1), s * (v1.x * e1.y - v1.y * e1.x))).min(Vector2(pq2.dot(pq2), s * (v2.x * e2.y - v2.y * e2.x)));
- inside_d = -Math::sqrt(d2.x) * SGN(d2.y);
+ inside_d = -Math::sqrt(d2.x) * SIGN(d2.y);
}
//make sure distance to planes is not shorter if inside
@@ -288,7 +288,7 @@ void GPUParticlesCollisionSDF::_find_closest_distance(const Vector3 &p_pos, cons
Vector3 nor = ba.cross(ac);
inside_d = Math::sqrt(
- (SGN(ba.cross(nor).dot(pa)) + SGN(cb.cross(nor).dot(pb)) + SGN(ac.cross(nor).dot(pc)) < 2.0)
+ (SIGN(ba.cross(nor).dot(pa)) + SIGN(cb.cross(nor).dot(pb)) + SIGN(ac.cross(nor).dot(pc)) < 2.0)
? MIN(MIN(
Vector3_dot2(ba * CLAMP(ba.dot(pa) / Vector3_dot2(ba), 0.0, 1.0) - pa),
Vector3_dot2(cb * CLAMP(cb.dot(pb) / Vector3_dot2(cb), 0.0, 1.0) - pb)),
diff --git a/scene/3d/occluder_instance_3d.cpp b/scene/3d/occluder_instance_3d.cpp
index 6c548edc74..aeac430cd9 100644
--- a/scene/3d/occluder_instance_3d.cpp
+++ b/scene/3d/occluder_instance_3d.cpp
@@ -329,9 +329,6 @@ TypedArray<String> OccluderInstance3D::get_configuration_warnings() const {
}
if (bake_mask == 0) {
- // NOTE: This warning will not be emitted if none of the 20 checkboxes
- // exposed in the editor are checked. This is because there are
- // currently 12 unexposed layers in the editor inspector.
warnings.push_back(TTR("The Bake Mask has no bits enabled, which means baking will not produce any occluder meshes for this OccluderInstance3D.\nTo resolve this, enable at least one bit in the Bake Mask property."));
}
diff --git a/scene/3d/physics_body_3d.cpp b/scene/3d/physics_body_3d.cpp
index 5cb7f431e3..edaf76bc3e 100644
--- a/scene/3d/physics_body_3d.cpp
+++ b/scene/3d/physics_body_3d.cpp
@@ -1299,7 +1299,6 @@ void CharacterBody3D::_move_and_slide_grounded(double p_delta, bool p_was_on_flo
// in order to avoid blocking lateral motion along a wall.
if (motion_angle < .5 * Math_PI) {
apply_default_sliding = false;
-
if (p_was_on_floor && !vel_dir_facing_up) {
// Cancel the motion.
Transform3D gt = get_global_transform();
@@ -1307,14 +1306,18 @@ void CharacterBody3D::_move_and_slide_grounded(double p_delta, bool p_was_on_flo
real_t cancel_dist_max = MIN(0.1, margin * 20);
if (travel_total <= margin + CMP_EPSILON) {
gt.origin -= result.travel;
+ result.travel = Vector3(); // Cancel for constant speed computation.
} else if (travel_total < cancel_dist_max) { // If the movement is large the body can be prevented from reaching the walls.
gt.origin -= result.travel.slide(up_direction);
// Keep remaining motion in sync with amount canceled.
motion = motion.slide(up_direction);
+ result.travel = Vector3();
+ } else {
+ // Travel is too high to be safely cancelled, we take it into account.
+ result.travel = result.travel.slide(up_direction);
+ motion = motion.normalized() * result.travel.length();
}
set_global_transform(gt);
- result.travel = Vector3(); // Cancel for constant speed computation.
-
// Determines if you are on the ground, and limits the possibility of climbing on the walls because of the approximations.
_snap_on_floor(true, false);
} else {
@@ -1584,6 +1587,7 @@ void CharacterBody3D::_set_collision_direction(const PhysicsServer3D::MotionResu
Vector3 prev_wall_normal = wall_normal;
int wall_collision_count = 0;
Vector3 combined_wall_normal;
+ Vector3 tmp_wall_col; // Avoid duplicate on average calculation.
for (int i = p_result.collision_count - 1; i >= 0; i--) {
const PhysicsServer3D::MotionCollision &collision = p_result.collisions[i];
@@ -1630,8 +1634,11 @@ void CharacterBody3D::_set_collision_direction(const PhysicsServer3D::MotionResu
}
// Collect normal for calculating average.
- combined_wall_normal += collision.normal;
- wall_collision_count++;
+ if (!collision.normal.is_equal_approx(tmp_wall_col)) {
+ tmp_wall_col = collision.normal;
+ combined_wall_normal += collision.normal;
+ wall_collision_count++;
+ }
}
if (r_state.wall) {
diff --git a/scene/3d/reflection_probe.cpp b/scene/3d/reflection_probe.cpp
index 40d4d822c9..f7f19596a7 100644
--- a/scene/3d/reflection_probe.cpp
+++ b/scene/3d/reflection_probe.cpp
@@ -94,7 +94,7 @@ void ReflectionProbe::set_extents(const Vector3 &p_extents) {
}
if (extents[i] - 0.01 < ABS(origin_offset[i])) {
- origin_offset[i] = SGN(origin_offset[i]) * (extents[i] - 0.01);
+ origin_offset[i] = SIGN(origin_offset[i]) * (extents[i] - 0.01);
}
}
@@ -113,7 +113,7 @@ void ReflectionProbe::set_origin_offset(const Vector3 &p_extents) {
for (int i = 0; i < 3; i++) {
if (extents[i] - 0.01 < ABS(origin_offset[i])) {
- origin_offset[i] = SGN(origin_offset[i]) * (extents[i] - 0.01);
+ origin_offset[i] = SIGN(origin_offset[i]) * (extents[i] - 0.01);
}
}
RS::get_singleton()->reflection_probe_set_extents(probe, extents);
diff --git a/scene/gui/code_edit.cpp b/scene/gui/code_edit.cpp
index 324b21c6d0..7fba94da4c 100644
--- a/scene/gui/code_edit.cpp
+++ b/scene/gui/code_edit.cpp
@@ -296,11 +296,11 @@ void CodeEdit::gui_input(const Ref<InputEvent> &p_gui_input) {
mpos.x = get_size().x - mpos.x;
}
- Point2i pos = get_line_column_at_pos(mpos);
+ Point2i pos = get_line_column_at_pos(mpos, false);
int line = pos.y;
int col = pos.x;
- if (mb->get_button_index() == MouseButton::LEFT) {
+ if (line != -1 && mb->get_button_index() == MouseButton::LEFT) {
if (is_line_folded(line)) {
int wrap_index = get_line_wrap_index_at_column(line, col);
if (wrap_index == get_line_wrap_count(line)) {
@@ -321,11 +321,13 @@ void CodeEdit::gui_input(const Ref<InputEvent> &p_gui_input) {
mpos.x = get_size().x - mpos.x;
}
- Point2i pos = get_line_column_at_pos(mpos);
+ Point2i pos = get_line_column_at_pos(mpos, false);
int line = pos.y;
int col = pos.x;
- emit_signal(SNAME("symbol_lookup"), symbol_lookup_word, line, col);
+ if (line != -1) {
+ emit_signal(SNAME("symbol_lookup"), symbol_lookup_word, line, col);
+ }
return;
}
}
@@ -536,11 +538,11 @@ Control::CursorShape CodeEdit::get_cursor_shape(const Point2 &p_pos) const {
return CURSOR_ARROW;
}
- Point2i pos = get_line_column_at_pos(p_pos);
+ Point2i pos = get_line_column_at_pos(p_pos, false);
int line = pos.y;
int col = pos.x;
- if (is_line_folded(line)) {
+ if (line != -1 && is_line_folded(line)) {
int wrap_index = get_line_wrap_index_at_column(line, col);
if (wrap_index == get_line_wrap_count(line)) {
int eol_icon_width = folded_eol_icon->get_width();
@@ -2016,10 +2018,14 @@ bool CodeEdit::is_symbol_lookup_on_click_enabled() const {
String CodeEdit::get_text_for_symbol_lookup() {
Point2i mp = get_local_mouse_pos();
- Point2i pos = get_line_column_at_pos(mp);
+ Point2i pos = get_line_column_at_pos(mp, false);
int line = pos.y;
int col = pos.x;
+ if (line == -1) {
+ return String();
+ }
+
StringBuilder lookup_text;
const int text_size = get_line_count();
for (int i = 0; i < text_size; i++) {
diff --git a/scene/gui/color_picker.cpp b/scene/gui/color_picker.cpp
index 049cdb5bef..5a378554c9 100644
--- a/scene/gui/color_picker.cpp
+++ b/scene/gui/color_picker.cpp
@@ -833,7 +833,7 @@ void ColorPicker::_uv_input(const Ref<InputEvent> &p_event, Control *c) {
real_t dist = center.distance_to(bev->get_position());
if (dist <= center.x) {
- real_t rad = bev->get_position().angle_to_point(center);
+ real_t rad = center.angle_to_point(bev->get_position());
h = ((rad >= 0) ? rad : (Math_TAU + rad)) / Math_TAU;
s = CLAMP(dist / center.x, 0, 1);
} else {
@@ -850,7 +850,7 @@ void ColorPicker::_uv_input(const Ref<InputEvent> &p_event, Control *c) {
real_t dist = center.distance_to(bev->get_position());
if (dist >= center.x * 0.84 && dist <= center.x) {
- real_t rad = bev->get_position().angle_to_point(center);
+ real_t rad = center.angle_to_point(bev->get_position());
h = ((rad >= 0) ? rad : (Math_TAU + rad)) / Math_TAU;
spinning = true;
} else {
@@ -895,12 +895,12 @@ void ColorPicker::_uv_input(const Ref<InputEvent> &p_event, Control *c) {
Vector2 center = c->get_size() / 2.0;
if (picker_type == SHAPE_VHS_CIRCLE) {
real_t dist = center.distance_to(mev->get_position());
- real_t rad = mev->get_position().angle_to_point(center);
+ real_t rad = center.angle_to_point(mev->get_position());
h = ((rad >= 0) ? rad : (Math_TAU + rad)) / Math_TAU;
s = CLAMP(dist / center.x, 0, 1);
} else {
if (spinning) {
- real_t rad = mev->get_position().angle_to_point(center);
+ real_t rad = center.angle_to_point(mev->get_position());
h = ((rad >= 0) ? rad : (Math_TAU + rad)) / Math_TAU;
} else {
real_t corner_x = (c == wheel_uv) ? center.x - Math_SQRT12 * c->get_size().width * 0.42 : 0;
diff --git a/scene/gui/control.cpp b/scene/gui/control.cpp
index 582c8e5860..9f715be155 100644
--- a/scene/gui/control.cpp
+++ b/scene/gui/control.cpp
@@ -810,6 +810,10 @@ void Control::set_drag_preview(Control *p_control) {
get_viewport()->_gui_set_drag_preview(this, p_control);
}
+bool Control::is_drag_successful() const {
+ return is_inside_tree() && get_viewport()->gui_is_drag_successful();
+}
+
void Control::_call_gui_input(const Ref<InputEvent> &p_event) {
emit_signal(SceneStringNames::get_singleton()->gui_input, p_event); //signal should be first, so it's possible to override an event (and then accept it)
if (!is_inside_tree() || get_viewport()->is_input_handled()) {
@@ -1821,6 +1825,10 @@ Size2 Control::get_size() const {
return data.size_cache;
}
+void Control::reset_size() {
+ set_size(Size2());
+}
+
Rect2 Control::get_global_rect() const {
return Rect2(get_global_position(), get_size());
}
@@ -2841,6 +2849,7 @@ void Control::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_position", "position", "keep_offsets"), &Control::set_position, DEFVAL(false));
ClassDB::bind_method(D_METHOD("_set_position", "position"), &Control::_set_position);
ClassDB::bind_method(D_METHOD("set_size", "size", "keep_offsets"), &Control::set_size, DEFVAL(false));
+ ClassDB::bind_method(D_METHOD("reset_size"), &Control::reset_size);
ClassDB::bind_method(D_METHOD("_set_size", "size"), &Control::_set_size);
ClassDB::bind_method(D_METHOD("set_custom_minimum_size", "size"), &Control::set_custom_minimum_size);
ClassDB::bind_method(D_METHOD("set_global_position", "position", "keep_offsets"), &Control::set_global_position, DEFVAL(false));
@@ -2964,6 +2973,7 @@ void Control::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_drag_forwarding", "target"), &Control::set_drag_forwarding);
ClassDB::bind_method(D_METHOD("set_drag_preview", "control"), &Control::set_drag_preview);
+ ClassDB::bind_method(D_METHOD("is_drag_successful"), &Control::is_drag_successful);
ClassDB::bind_method(D_METHOD("warp_mouse", "to_position"), &Control::warp_mouse);
diff --git a/scene/gui/control.h b/scene/gui/control.h
index 02ab336ef0..1a94cc68a6 100644
--- a/scene/gui/control.h
+++ b/scene/gui/control.h
@@ -357,6 +357,7 @@ public:
virtual void drop_data(const Point2 &p_point, const Variant &p_data);
void set_drag_preview(Control *p_control);
void force_drag(const Variant &p_data, Control *p_control);
+ bool is_drag_successful() const;
void set_custom_minimum_size(const Size2 &p_custom);
Size2 get_custom_minimum_size() const;
@@ -400,6 +401,7 @@ public:
void set_size(const Size2 &p_size, bool p_keep_offsets = false);
Size2 get_size() const;
+ void reset_size();
Rect2 get_rect() const;
Rect2 get_global_rect() const;
diff --git a/scene/gui/graph_edit.cpp b/scene/gui/graph_edit.cpp
index ba050b652d..e7d98a686f 100644
--- a/scene/gui/graph_edit.cpp
+++ b/scene/gui/graph_edit.cpp
@@ -501,6 +501,43 @@ void GraphEdit::_notification(int p_what) {
}
}
+void GraphEdit::_update_comment_enclosed_nodes_list(GraphNode *p_node, HashMap<StringName, Vector<GraphNode *>> &p_comment_enclosed_nodes) {
+ Rect2 comment_node_rect = p_node->get_rect();
+ Vector<GraphNode *> enclosed_nodes;
+
+ for (int i = 0; i < get_child_count(); i++) {
+ GraphNode *gn = Object::cast_to<GraphNode>(get_child(i));
+ if (!gn || gn->is_selected()) {
+ continue;
+ }
+
+ Rect2 node_rect = gn->get_rect();
+ bool included = comment_node_rect.encloses(node_rect);
+ if (included) {
+ enclosed_nodes.push_back(gn);
+ }
+ }
+
+ p_comment_enclosed_nodes.set(p_node->get_name(), enclosed_nodes);
+}
+
+void GraphEdit::_set_drag_comment_enclosed_nodes(GraphNode *p_node, HashMap<StringName, Vector<GraphNode *>> &p_comment_enclosed_nodes, bool p_drag) {
+ for (int i = 0; i < p_comment_enclosed_nodes[p_node->get_name()].size(); i++) {
+ p_comment_enclosed_nodes[p_node->get_name()][i]->set_drag(p_drag);
+ }
+}
+
+void GraphEdit::_set_position_of_comment_enclosed_nodes(GraphNode *p_node, HashMap<StringName, Vector<GraphNode *>> &p_comment_enclosed_nodes, Vector2 p_drag_accum) {
+ for (int i = 0; i < p_comment_enclosed_nodes[p_node->get_name()].size(); i++) {
+ Vector2 pos = (p_comment_enclosed_nodes[p_node->get_name()][i]->get_drag_from() * zoom + drag_accum) / zoom;
+ if (is_using_snap() ^ Input::get_singleton()->is_key_pressed(Key::CTRL)) {
+ const int snap = get_snap();
+ pos = pos.snapped(Vector2(snap, snap));
+ }
+ p_comment_enclosed_nodes[p_node->get_name()][i]->set_position_offset(pos);
+ }
+}
+
bool GraphEdit::_filter_input(const Point2 &p_point) {
Ref<Texture2D> port = get_theme_icon(SNAME("port"), SNAME("GraphNode"));
Vector2i port_size = Vector2i(port->get_width(), port->get_height());
@@ -1058,6 +1095,9 @@ void GraphEdit::gui_input(const Ref<InputEvent> &p_ev) {
}
gn->set_position_offset(pos);
+ if (gn->is_comment()) {
+ _set_position_of_comment_enclosed_nodes(gn, comment_enclosed_nodes, drag_accum);
+ }
}
}
}
@@ -1153,6 +1193,9 @@ void GraphEdit::gui_input(const Ref<InputEvent> &p_ev) {
GraphNode *gn = Object::cast_to<GraphNode>(get_child(i));
if (gn && gn->is_selected()) {
gn->set_drag(false);
+ if (gn->is_comment()) {
+ _set_drag_comment_enclosed_nodes(gn, comment_enclosed_nodes, false);
+ }
}
}
}
@@ -1220,6 +1263,10 @@ void GraphEdit::gui_input(const Ref<InputEvent> &p_ev) {
}
if (o_gn->is_selected()) {
o_gn->set_drag(true);
+ if (o_gn->is_comment()) {
+ _update_comment_enclosed_nodes_list(o_gn, comment_enclosed_nodes);
+ _set_drag_comment_enclosed_nodes(o_gn, comment_enclosed_nodes, true);
+ }
}
}
diff --git a/scene/gui/graph_edit.h b/scene/gui/graph_edit.h
index 44e50aa3c2..6c11f9df6a 100644
--- a/scene/gui/graph_edit.h
+++ b/scene/gui/graph_edit.h
@@ -217,6 +217,11 @@ private:
Set<int> valid_left_disconnect_types;
Set<int> valid_right_disconnect_types;
+ HashMap<StringName, Vector<GraphNode *>> comment_enclosed_nodes;
+ void _update_comment_enclosed_nodes_list(GraphNode *p_node, HashMap<StringName, Vector<GraphNode *>> &p_comment_enclosed_nodes);
+ void _set_drag_comment_enclosed_nodes(GraphNode *p_node, HashMap<StringName, Vector<GraphNode *>> &p_comment_enclosed_nodes, bool p_drag);
+ void _set_position_of_comment_enclosed_nodes(GraphNode *p_node, HashMap<StringName, Vector<GraphNode *>> &p_comment_enclosed_nodes, Vector2 p_pos);
+
HBoxContainer *zoom_hb;
friend class GraphEditFilter;
diff --git a/scene/gui/line_edit.cpp b/scene/gui/line_edit.cpp
index 124d5c7821..69b08fda3c 100644
--- a/scene/gui/line_edit.cpp
+++ b/scene/gui/line_edit.cpp
@@ -228,7 +228,7 @@ void LineEdit::gui_input(const Ref<InputEvent> &p_event) {
if (b->is_pressed() && b->get_button_index() == MouseButton::RIGHT && context_menu_enabled) {
_ensure_menu();
menu->set_position(get_screen_transform().xform(get_local_mouse_position()));
- menu->set_size(Vector2(1, 1));
+ menu->reset_size();
menu->popup();
grab_focus();
accept_event();
@@ -268,7 +268,9 @@ void LineEdit::gui_input(const Ref<InputEvent> &p_event) {
return;
}
- shift_selection_check_pre(b->is_shift_pressed());
+ if (b->is_shift_pressed()) {
+ shift_selection_check_pre(true);
+ }
set_caret_at_pixel_pos(b->get_position().x);
@@ -345,6 +347,9 @@ void LineEdit::gui_input(const Ref<InputEvent> &p_event) {
}
selection.creating = false;
selection.double_click = false;
+ if (!drag_action) {
+ selection.drag_attempt = false;
+ }
show_virtual_keyboard();
}
@@ -369,6 +374,11 @@ void LineEdit::gui_input(const Ref<InputEvent> &p_event) {
selection_fill_at_caret();
}
}
+
+ if (drag_action && can_drop_data(m->get_position(), get_viewport()->gui_get_drag_data())) {
+ drag_caret_force_displayed = true;
+ set_caret_at_pixel_pos(m->get_position().x);
+ }
}
Ref<InputEventKey> k = p_event;
@@ -383,7 +393,7 @@ void LineEdit::gui_input(const Ref<InputEvent> &p_event) {
_ensure_menu();
Point2 pos = Point2(get_caret_pixel_pos().x, (get_size().y + get_theme_font(SNAME("font"))->get_height(get_theme_font_size(SNAME("font_size")))) / 2);
menu->set_position(get_global_transform().xform(pos));
- menu->set_size(Vector2(1, 1));
+ menu->reset_size();
menu->popup();
menu->grab_focus();
}
@@ -569,21 +579,44 @@ bool LineEdit::can_drop_data(const Point2 &p_point, const Variant &p_data) const
return drop_override;
}
- return p_data.get_type() == Variant::STRING;
+ return is_editable() && p_data.get_type() == Variant::STRING;
}
void LineEdit::drop_data(const Point2 &p_point, const Variant &p_data) {
Control::drop_data(p_point, p_data);
- if (p_data.get_type() == Variant::STRING) {
+ if (p_data.get_type() == Variant::STRING && is_editable()) {
set_caret_at_pixel_pos(p_point.x);
+ int caret_column_tmp = caret_column;
+ if (selection.drag_attempt) {
+ selection.drag_attempt = false;
+ if (caret_column < selection.begin || caret_column > selection.end) {
+ if (caret_column_tmp > selection.end) {
+ caret_column_tmp = caret_column_tmp - (selection.end - selection.begin);
+ }
+ selection_delete();
- text = text.left(selection.begin) + text.substr(selection.end);
- _shape();
-
- insert_text_at_caret(p_data);
- selection.begin = caret_column - (selection.end - selection.begin);
- selection.end = caret_column;
+ set_caret_column(caret_column_tmp);
+ insert_text_at_caret(p_data);
+ }
+ } else if (selection.enabled && caret_column >= selection.begin && caret_column <= selection.end) {
+ caret_column_tmp = selection.begin;
+ selection_delete();
+ set_caret_column(caret_column_tmp);
+ insert_text_at_caret(p_data);
+ grab_focus();
+ } else {
+ insert_text_at_caret(p_data);
+ grab_focus();
+ }
+ select(caret_column_tmp, caret_column);
+ if (!text_changed_dirty) {
+ if (is_inside_tree()) {
+ MessageQueue::get_singleton()->push_call(this, "_text_changed");
+ }
+ text_changed_dirty = true;
+ }
+ update();
}
}
@@ -803,7 +836,7 @@ void LineEdit::_notification(int p_what) {
// Draw carets.
ofs.x = x_ofs + scroll_offset;
- if (draw_caret) {
+ if (draw_caret || drag_caret_force_displayed) {
if (ime_text.length() == 0) {
// Normal caret.
CaretInfo caret = TS->shaped_text_get_carets(text_rid, caret_column);
@@ -921,7 +954,7 @@ void LineEdit::_notification(int p_what) {
DisplayServer::get_singleton()->virtual_keyboard_hide();
}
- if (deselect_on_focus_loss_enabled) {
+ if (deselect_on_focus_loss_enabled && !selection.drag_attempt) {
deselect();
}
} break;
@@ -935,6 +968,25 @@ void LineEdit::_notification(int p_what) {
update();
}
} break;
+ case Control::NOTIFICATION_DRAG_BEGIN: {
+ drag_action = true;
+ } break;
+ case Control::NOTIFICATION_DRAG_END: {
+ if (is_drag_successful()) {
+ if (selection.drag_attempt) {
+ selection.drag_attempt = false;
+ if (is_editable()) {
+ selection_delete();
+ } else if (deselect_on_focus_loss_enabled) {
+ deselect();
+ }
+ }
+ } else {
+ selection.drag_attempt = false;
+ }
+ drag_action = false;
+ drag_caret_force_displayed = false;
+ } break;
}
}
@@ -999,6 +1051,9 @@ void LineEdit::undo() {
} else if (undo_stack_pos == undo_stack.front()) {
return;
}
+
+ deselect();
+
undo_stack_pos = undo_stack_pos->prev();
TextOperation op = undo_stack_pos->get();
text = op.text;
@@ -1020,6 +1075,9 @@ void LineEdit::redo() {
if (undo_stack_pos == undo_stack.back()) {
return;
}
+
+ deselect();
+
undo_stack_pos = undo_stack_pos->next();
TextOperation op = undo_stack_pos->get();
text = op.text;
diff --git a/scene/gui/line_edit.h b/scene/gui/line_edit.h
index 134d5f8f76..221dd9eb2e 100644
--- a/scene/gui/line_edit.h
+++ b/scene/gui/line_edit.h
@@ -129,6 +129,9 @@ private:
bool middle_mouse_paste_enabled = true;
+ bool drag_action = false;
+ bool drag_caret_force_displayed = false;
+
Ref<Texture2D> right_icon;
bool flat = false;
diff --git a/scene/gui/range.cpp b/scene/gui/range.cpp
index 92d4261d8d..c4f05a7975 100644
--- a/scene/gui/range.cpp
+++ b/scene/gui/range.cpp
@@ -61,6 +61,11 @@ void Range::_changed_notify(const char *p_what) {
update();
}
+void Range::_validate_values() {
+ shared->max = MAX(shared->max, shared->min);
+ shared->page = CLAMP(shared->page, 0, shared->max - shared->min);
+}
+
void Range::Shared::emit_changed(const char *p_what) {
for (Set<Range *>::Element *E = owners.front(); E; E = E->next()) {
Range *r = E->get();
@@ -100,6 +105,7 @@ void Range::set_value(double p_val) {
void Range::set_min(double p_min) {
shared->min = p_min;
set_value(shared->val);
+ _validate_values();
shared->emit_changed("min");
@@ -109,6 +115,7 @@ void Range::set_min(double p_min) {
void Range::set_max(double p_max) {
shared->max = p_max;
set_value(shared->val);
+ _validate_values();
shared->emit_changed("max");
}
@@ -121,6 +128,7 @@ void Range::set_step(double p_step) {
void Range::set_page(double p_page) {
shared->page = p_page;
set_value(shared->val);
+ _validate_values();
shared->emit_changed("page");
}
@@ -270,6 +278,12 @@ void Range::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "rounded"), "set_use_rounded_values", "is_using_rounded_values");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "allow_greater"), "set_allow_greater", "is_greater_allowed");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "allow_lesser"), "set_allow_lesser", "is_lesser_allowed");
+
+ ADD_LINKED_PROPERTY("min_value", "value");
+ ADD_LINKED_PROPERTY("min_value", "max_value");
+ ADD_LINKED_PROPERTY("min_value", "page");
+ ADD_LINKED_PROPERTY("max_value", "value");
+ ADD_LINKED_PROPERTY("max_value", "page");
}
void Range::set_use_rounded_values(bool p_enable) {
diff --git a/scene/gui/range.h b/scene/gui/range.h
index 7a129e88d6..0dc702b19c 100644
--- a/scene/gui/range.h
+++ b/scene/gui/range.h
@@ -59,6 +59,7 @@ class Range : public Control {
void _value_changed_notify();
void _changed_notify(const char *p_what = "");
+ void _validate_values();
protected:
virtual void _value_changed(double) {}
diff --git a/scene/gui/scroll_container.cpp b/scene/gui/scroll_container.cpp
index 013358e75c..7b2ea46e17 100644
--- a/scene/gui/scroll_container.cpp
+++ b/scene/gui/scroll_container.cpp
@@ -320,7 +320,9 @@ void ScrollContainer::_notification(int p_what) {
};
if (p_what == NOTIFICATION_READY) {
- get_viewport()->connect("gui_focus_changed", callable_mp(this, &ScrollContainer::_gui_focus_changed));
+ Viewport *viewport = get_viewport();
+ ERR_FAIL_COND(!viewport);
+ viewport->connect("gui_focus_changed", callable_mp(this, &ScrollContainer::_gui_focus_changed));
_update_dimensions();
}
diff --git a/scene/gui/spin_box.cpp b/scene/gui/spin_box.cpp
index 4497c20772..f30206c943 100644
--- a/scene/gui/spin_box.cpp
+++ b/scene/gui/spin_box.cpp
@@ -166,7 +166,7 @@ void SpinBox::gui_input(const Ref<InputEvent> &p_event) {
if (mm.is_valid() && (mm->get_button_mask() & MouseButton::MASK_LEFT) != MouseButton::NONE) {
if (drag.enabled) {
drag.diff_y += mm->get_relative().y;
- float diff_y = -0.01 * Math::pow(ABS(drag.diff_y), 1.8f) * SGN(drag.diff_y);
+ float diff_y = -0.01 * Math::pow(ABS(drag.diff_y), 1.8f) * SIGN(drag.diff_y);
set_value(CLAMP(drag.base_val + get_step() * diff_y, get_min(), get_max()));
} else if (drag.allowed && drag.capture_pos.distance_to(mm->get_position()) > 2) {
Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_CAPTURED);
diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp
index 8ffbe479be..c8f6ecdafd 100644
--- a/scene/gui/text_edit.cpp
+++ b/scene/gui/text_edit.cpp
@@ -608,7 +608,7 @@ void TextEdit::_notification(int p_what) {
int draw_amount = visible_rows + (smooth_scroll_enabled ? 1 : 0);
draw_amount += get_line_wrap_count(first_visible_line + 1);
- // minimap
+ // Draw minimap.
if (draw_minimap) {
int minimap_visible_lines = get_minimap_visible_lines();
int minimap_line_height = (minimap_char_size.y + minimap_line_spacing);
@@ -788,8 +788,9 @@ void TextEdit::_notification(int p_what) {
bottom_limit_y -= style_normal->get_margin(SIDE_BOTTOM);
}
- // draw main text
+ // Draw main text.
caret.visible = false;
+ line_drawing_cache.clear();
int row_height = get_line_height();
int line = first_visible_line;
for (int i = 0; i < draw_amount; i++) {
@@ -810,6 +811,8 @@ void TextEdit::_notification(int p_what) {
continue;
}
+ LineDrawingCache cache_entry;
+
Dictionary color_map = _get_line_syntax_highlighting(line);
// Ensure we at least use the font color.
@@ -899,6 +902,8 @@ void TextEdit::_notification(int p_what) {
if (line_wrap_index == 0) {
// Only do these if we are on the first wrapped part of a line.
+ cache_entry.y_offset = ofs_y;
+
int gutter_offset = style_normal->get_margin(SIDE_LEFT);
for (int g = 0; g < gutters.size(); g++) {
const GutterInfo gutter = gutters[g];
@@ -1076,6 +1081,10 @@ void TextEdit::_notification(int p_what) {
int gl_size = TS->shaped_text_get_glyph_count(rid);
ofs_y += ldata->get_line_ascent(line_wrap_index);
+
+ int first_visible_char = TS->shaped_text_get_range(rid).y;
+ int last_visible_char = TS->shaped_text_get_range(rid).x;
+
int char_ofs = 0;
if (outline_size > 0 && outline_color.a > 0) {
for (int j = 0; j < gl_size; j++) {
@@ -1143,21 +1152,36 @@ void TextEdit::_notification(int p_what) {
}
}
+ bool had_glyphs_drawn = false;
for (int k = 0; k < glyphs[j].repeat; k++) {
if (!clipped && (char_ofs + char_margin) >= xmargin_beg && (char_ofs + glyphs[j].advance + char_margin) <= xmargin_end) {
if (glyphs[j].font_rid != RID()) {
TS->font_draw_glyph(glyphs[j].font_rid, ci, glyphs[j].font_size, Vector2(char_margin + char_ofs + ofs_x + glyphs[j].x_off, ofs_y + glyphs[j].y_off), glyphs[j].index, current_color);
+ had_glyphs_drawn = true;
} else if ((glyphs[j].flags & TextServer::GRAPHEME_IS_VIRTUAL) != TextServer::GRAPHEME_IS_VIRTUAL) {
TS->draw_hex_code_box(ci, glyphs[j].font_size, Vector2(char_margin + char_ofs + ofs_x + glyphs[j].x_off, ofs_y + glyphs[j].y_off), glyphs[j].index, current_color);
+ had_glyphs_drawn = true;
}
}
char_ofs += glyphs[j].advance;
}
+
+ if (had_glyphs_drawn) {
+ if (first_visible_char > glyphs[j].start) {
+ first_visible_char = glyphs[j].start;
+ } else if (last_visible_char < glyphs[j].end) {
+ last_visible_char = glyphs[j].end;
+ }
+ }
+
if ((char_ofs + char_margin) >= xmargin_end) {
break;
}
}
+ cache_entry.first_visible_chars.push_back(first_visible_char);
+ cache_entry.last_visible_chars.push_back(last_visible_char);
+
// is_line_folded
if (line_wrap_index == line_wrap_amount && line < text.size() - 1 && _is_line_hidden(line + 1)) {
int xofs = char_ofs + char_margin + ofs_x + (folded_eol_icon->get_width() / 2);
@@ -1308,6 +1332,8 @@ void TextEdit::_notification(int p_what) {
}
}
}
+
+ line_drawing_cache[line] = cache_entry;
}
if (has_focus()) {
@@ -1569,7 +1595,7 @@ void TextEdit::gui_input(const Ref<InputEvent> &p_gui_input) {
_generate_context_menu();
menu->set_position(get_screen_transform().xform(mpos));
- menu->set_size(Vector2(1, 1));
+ menu->reset_size();
menu->popup();
grab_focus();
}
@@ -1802,7 +1828,7 @@ void TextEdit::gui_input(const Ref<InputEvent> &p_gui_input) {
_generate_context_menu();
adjust_viewport_to_caret();
menu->set_position(get_screen_transform().xform(get_caret_draw_pos()));
- menu->set_size(Vector2(1, 1));
+ menu->reset_size();
menu->popup();
menu->grab_focus();
}
@@ -2878,6 +2904,16 @@ Point2i TextEdit::get_next_visible_line_index_offset_from(int p_line_from, int p
}
}
wrap_index = get_line_wrap_count(MIN(i, text.size() - 1)) - MAX(0, num_visible - p_visible_amount);
+
+ // If we are a hidden line, then we are the last line as we cannot reach "p_visible_amount".
+ // This means we need to backtrack to get last visible line.
+ // Currently, line 0 cannot be hidden so this should always be valid.
+ int line = (p_line_from + num_total) - 1;
+ if (_is_line_hidden(line)) {
+ Point2i backtrack = get_next_visible_line_index_offset_from(line, 0, -1);
+ num_total = num_total - (backtrack.x - 1);
+ wrap_index = backtrack.y;
+ }
} else {
p_visible_amount = ABS(p_visible_amount);
int i;
@@ -3386,7 +3422,7 @@ String TextEdit::get_word_at_pos(const Vector2 &p_pos) const {
return String();
}
-Point2i TextEdit::get_line_column_at_pos(const Point2i &p_pos) const {
+Point2i TextEdit::get_line_column_at_pos(const Point2i &p_pos, bool p_allow_out_of_bounds) const {
float rows = p_pos.y;
rows -= style_normal->get_margin(SIDE_TOP);
rows /= get_line_height();
@@ -3396,8 +3432,9 @@ Point2i TextEdit::get_line_column_at_pos(const Point2i &p_pos) const {
int wrap_index = 0;
if (get_line_wrapping_mode() != LineWrappingMode::LINE_WRAPPING_NONE || _is_hiding_enabled()) {
- Point2i f_ofs = get_next_visible_line_index_offset_from(first_vis_line, caret.wrap_ofs, rows + (1 * SGN(rows)));
+ Point2i f_ofs = get_next_visible_line_index_offset_from(first_vis_line, caret.wrap_ofs, rows + (1 * SIGN(rows)));
wrap_index = f_ofs.y;
+
if (rows < 0) {
row = first_vis_line - (f_ofs.x - 1);
} else {
@@ -3409,37 +3446,86 @@ Point2i TextEdit::get_line_column_at_pos(const Point2i &p_pos) const {
row = 0;
}
- int col = 0;
-
if (row >= text.size()) {
row = text.size() - 1;
- col = text[row].size();
- } else {
- int colx = p_pos.x - (style_normal->get_margin(SIDE_LEFT) + gutters_width + gutter_padding);
- colx += caret.x_ofs;
- col = _get_char_pos_for_line(colx, row, wrap_index);
- if (get_line_wrapping_mode() != LineWrappingMode::LINE_WRAPPING_NONE && wrap_index < get_line_wrap_count(row)) {
- // Move back one if we are at the end of the row.
- Vector<String> rows2 = get_line_wrapped_text(row);
- int row_end_col = 0;
- for (int i = 0; i < wrap_index + 1; i++) {
- row_end_col += rows2[i].length();
- }
- if (col >= row_end_col) {
- col -= 1;
- }
+ }
+
+ int visible_lines = get_visible_line_count_in_range(first_vis_line, row);
+ if (rows > visible_lines) {
+ if (!p_allow_out_of_bounds) {
+ return Point2i(-1, -1);
}
+ return Point2i(text[row].size(), row);
+ }
- RID text_rid = text.get_line_data(row)->get_line_rid(wrap_index);
- if (is_layout_rtl()) {
- colx = TS->shaped_text_get_size(text_rid).x - colx;
+ int col = 0;
+ int colx = p_pos.x - (style_normal->get_margin(SIDE_LEFT) + gutters_width + gutter_padding);
+ colx += caret.x_ofs;
+ col = _get_char_pos_for_line(colx, row, wrap_index);
+ if (get_line_wrapping_mode() != LineWrappingMode::LINE_WRAPPING_NONE && wrap_index < get_line_wrap_count(row)) {
+ // Move back one if we are at the end of the row.
+ Vector<String> rows2 = get_line_wrapped_text(row);
+ int row_end_col = 0;
+ for (int i = 0; i < wrap_index + 1; i++) {
+ row_end_col += rows2[i].length();
+ }
+ if (col >= row_end_col) {
+ col -= 1;
}
- col = TS->shaped_text_hit_test_position(text_rid, colx);
}
+ RID text_rid = text.get_line_data(row)->get_line_rid(wrap_index);
+ if (is_layout_rtl()) {
+ colx = TS->shaped_text_get_size(text_rid).x - colx;
+ }
+ col = TS->shaped_text_hit_test_position(text_rid, colx);
+
return Point2i(col, row);
}
+Point2i TextEdit::get_pos_at_line_column(int p_line, int p_column) const {
+ Rect2i rect = get_rect_at_line_column(p_line, p_column);
+ return rect.position + Vector2i(0, get_line_height());
+}
+
+Rect2i TextEdit::get_rect_at_line_column(int p_line, int p_column) const {
+ ERR_FAIL_INDEX_V(p_line, text.size(), Rect2i(-1, -1, 0, 0));
+ ERR_FAIL_COND_V(p_column < 0, Rect2i(-1, -1, 0, 0));
+ ERR_FAIL_COND_V(p_column > text[p_line].length(), Rect2i(-1, -1, 0, 0));
+
+ if (line_drawing_cache.size() == 0 || !line_drawing_cache.has(p_line)) {
+ // Line is not in the cache, which means it's outside of the viewing area.
+ return Rect2i(-1, -1, 0, 0);
+ }
+ LineDrawingCache cache_entry = line_drawing_cache[p_line];
+
+ int wrap_index = get_line_wrap_index_at_column(p_line, p_column);
+ if (wrap_index >= cache_entry.first_visible_chars.size()) {
+ // Line seems to be wrapped beyond the viewable area.
+ return Rect2i(-1, -1, 0, 0);
+ }
+
+ int first_visible_char = cache_entry.first_visible_chars[wrap_index];
+ int last_visible_char = cache_entry.last_visible_chars[wrap_index];
+ if (p_column < first_visible_char || p_column > last_visible_char) {
+ // Character is outside of the viewing area, no point calculating its position.
+ return Rect2i(-1, -1, 0, 0);
+ }
+
+ Point2i pos, size;
+ pos.y = cache_entry.y_offset + get_line_height() * wrap_index;
+ pos.x = get_total_gutter_width() + style_normal->get_margin(SIDE_LEFT) - get_h_scroll();
+
+ RID text_rid = text.get_line_data(p_line)->get_line_rid(wrap_index);
+ Vector2 col_bounds = TS->shaped_text_get_grapheme_bounds(text_rid, p_column);
+ pos.x += col_bounds.x;
+ size.x = col_bounds.y - col_bounds.x;
+
+ size.y = get_line_height();
+
+ return Rect2i(pos, size);
+}
+
int TextEdit::get_minimap_line_at_pos(const Point2i &p_pos) const {
float rows = p_pos.y;
rows -= style_normal->get_margin(SIDE_TOP);
@@ -3471,7 +3557,7 @@ int TextEdit::get_minimap_line_at_pos(const Point2i &p_pos) const {
int row = minimap_line + Math::floor(rows);
if (get_line_wrapping_mode() != LineWrappingMode::LINE_WRAPPING_NONE || _is_hiding_enabled()) {
- int f_ofs = get_next_visible_line_index_offset_from(minimap_line, caret.wrap_ofs, rows + (1 * SGN(rows))).x - 1;
+ int f_ofs = get_next_visible_line_index_offset_from(minimap_line, caret.wrap_ofs, rows + (1 * SIGN(rows))).x - 1;
if (rows < 0) {
row = minimap_line - f_ofs;
} else {
@@ -3880,7 +3966,7 @@ void TextEdit::delete_selection() {
update();
}
-/* line wrapping. */
+/* Line wrapping. */
void TextEdit::set_line_wrapping_mode(LineWrappingMode p_wrapping_mode) {
if (line_wrapping_mode != p_wrapping_mode) {
line_wrapping_mode = p_wrapping_mode;
@@ -4012,15 +4098,7 @@ double TextEdit::get_scroll_pos_for_line(int p_line, int p_wrap_index) const {
return p_line;
}
- // Count the number of visible lines up to this line.
- double new_line_scroll_pos = 0.0;
- int to = CLAMP(p_line, 0, text.size() - 1);
- for (int i = 0; i < to; i++) {
- if (!text.is_hidden(i)) {
- new_line_scroll_pos++;
- new_line_scroll_pos += get_line_wrap_count(i);
- }
- }
+ double new_line_scroll_pos = get_visible_line_count_in_range(0, CLAMP(p_line, 0, text.size() - 1));
new_line_scroll_pos += p_wrap_index;
return new_line_scroll_pos;
}
@@ -4077,14 +4155,18 @@ int TextEdit::get_visible_line_count() const {
return _get_control_height() / get_line_height();
}
-int TextEdit::get_total_visible_line_count() const {
+int TextEdit::get_visible_line_count_in_range(int p_from_line, int p_to_line) const {
+ ERR_FAIL_INDEX_V(p_from_line, text.size(), 0);
+ ERR_FAIL_INDEX_V(p_to_line, text.size(), 0);
+ ERR_FAIL_COND_V(p_from_line > p_to_line, 0);
+
/* Returns the total number of (lines + wrapped - hidden). */
if (!_is_hiding_enabled() && get_line_wrapping_mode() == LineWrappingMode::LINE_WRAPPING_NONE) {
- return text.size();
+ return p_to_line - p_from_line;
}
int total_rows = 0;
- for (int i = 0; i < text.size(); i++) {
+ for (int i = p_from_line; i <= p_to_line; i++) {
if (!text.is_hidden(i)) {
total_rows++;
total_rows += get_line_wrap_count(i);
@@ -4093,6 +4175,10 @@ int TextEdit::get_total_visible_line_count() const {
return total_rows;
}
+int TextEdit::get_total_visible_line_count() const {
+ return get_visible_line_count_in_range(0, text.size() - 1);
+}
+
// Auto adjust
void TextEdit::adjust_viewport_to_caret() {
// Make sure Caret is visible on the screen.
@@ -4683,7 +4769,10 @@ void TextEdit::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_word_at_pos", "position"), &TextEdit::get_word_at_pos);
- ClassDB::bind_method(D_METHOD("get_line_column_at_pos", "position"), &TextEdit::get_line_column_at_pos);
+ ClassDB::bind_method(D_METHOD("get_line_column_at_pos", "position", "allow_out_of_bounds"), &TextEdit::get_line_column_at_pos, DEFVAL(true));
+ ClassDB::bind_method(D_METHOD("get_pos_at_line_column", "line", "column"), &TextEdit::get_pos_at_line_column);
+ ClassDB::bind_method(D_METHOD("get_rect_at_line_column", "line", "column"), &TextEdit::get_rect_at_line_column);
+
ClassDB::bind_method(D_METHOD("get_minimap_line_at_pos", "position"), &TextEdit::get_minimap_line_at_pos);
ClassDB::bind_method(D_METHOD("is_dragging_cursor"), &TextEdit::is_dragging_cursor);
@@ -4761,7 +4850,7 @@ void TextEdit::_bind_methods() {
ClassDB::bind_method(D_METHOD("deselect"), &TextEdit::deselect);
ClassDB::bind_method(D_METHOD("delete_selection"), &TextEdit::delete_selection);
- /* line wrapping. */
+ /* Line wrapping. */
BIND_ENUM_CONSTANT(LINE_WRAPPING_NONE);
BIND_ENUM_CONSTANT(LINE_WRAPPING_BOUNDARY);
@@ -4807,6 +4896,7 @@ void TextEdit::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_last_full_visible_line_wrap_index"), &TextEdit::get_last_full_visible_line_wrap_index);
ClassDB::bind_method(D_METHOD("get_visible_line_count"), &TextEdit::get_visible_line_count);
+ ClassDB::bind_method(D_METHOD("get_visible_line_count_in_range", "from_line", "to_line"), &TextEdit::get_visible_line_count_in_range);
ClassDB::bind_method(D_METHOD("get_total_visible_line_count"), &TextEdit::get_total_visible_line_count);
// Auto adjust
@@ -5762,7 +5852,7 @@ double TextEdit::_get_v_scroll_offset() const {
}
void TextEdit::_scroll_up(real_t p_delta) {
- if (scrolling && smooth_scroll_enabled && SGN(target_v_scroll - v_scroll->get_value()) != SGN(-p_delta)) {
+ if (scrolling && smooth_scroll_enabled && SIGN(target_v_scroll - v_scroll->get_value()) != SIGN(-p_delta)) {
scrolling = false;
minimap_clicked = false;
}
@@ -5789,7 +5879,7 @@ void TextEdit::_scroll_up(real_t p_delta) {
}
void TextEdit::_scroll_down(real_t p_delta) {
- if (scrolling && smooth_scroll_enabled && SGN(target_v_scroll - v_scroll->get_value()) != SGN(p_delta)) {
+ if (scrolling && smooth_scroll_enabled && SIGN(target_v_scroll - v_scroll->get_value()) != SIGN(p_delta)) {
scrolling = false;
minimap_clicked = false;
}
diff --git a/scene/gui/text_edit.h b/scene/gui/text_edit.h
index 1a7dc851b5..b13adb8519 100644
--- a/scene/gui/text_edit.h
+++ b/scene/gui/text_edit.h
@@ -271,7 +271,7 @@ private:
bool virtual_keyboard_enabled = true;
bool middle_mouse_paste_enabled = true;
- // Overridable actions
+ // Overridable actions.
String cut_copy_line = "";
// Context menu.
@@ -336,6 +336,14 @@ private:
Variant tooltip_ud;
/* Mouse */
+ struct LineDrawingCache {
+ int y_offset = 0;
+ Vector<int> first_visible_chars;
+ Vector<int> last_visible_chars;
+ };
+
+ Map<int, LineDrawingCache> line_drawing_cache;
+
int _get_char_pos_for_line(int p_px, int p_line, int p_wrap_index = 0) const;
/* Caret. */
@@ -415,7 +423,7 @@ private:
void _pre_shift_selection();
void _post_shift_selection();
- /* line wrapping. */
+ /* Line wrapping. */
LineWrappingMode line_wrapping_mode = LineWrappingMode::LINE_WRAPPING_NONE;
int wrap_at_column = 0;
@@ -455,14 +463,14 @@ private:
void _scroll_lines_up();
void _scroll_lines_down();
- // Minimap
+ // Minimap.
bool draw_minimap = false;
int minimap_width = 80;
Point2 minimap_char_size = Point2(1, 2);
int minimap_line_spacing = 1;
- // minimap scroll
+ // Minimap scroll.
bool minimap_clicked = false;
bool hovering_minimap = false;
bool dragging_minimap = false;
@@ -716,7 +724,10 @@ public:
String get_word_at_pos(const Vector2 &p_pos) const;
- Point2i get_line_column_at_pos(const Point2i &p_pos) const;
+ Point2i get_line_column_at_pos(const Point2i &p_pos, bool p_allow_out_of_bounds = true) const;
+ Point2i get_pos_at_line_column(int p_line, int p_column) const;
+ Rect2i get_rect_at_line_column(int p_line, int p_column) const;
+
int get_minimap_line_at_pos(const Point2i &p_pos) const;
bool is_dragging_cursor() const;
@@ -782,7 +793,7 @@ public:
void deselect();
void delete_selection();
- /* line wrapping. */
+ /* Line wrapping. */
void set_line_wrapping_mode(LineWrappingMode p_wrapping_mode);
LineWrappingMode get_line_wrapping_mode() const;
@@ -822,6 +833,7 @@ public:
int get_last_full_visible_line_wrap_index() const;
int get_visible_line_count() const;
+ int get_visible_line_count_in_range(int p_from, int p_to) const;
int get_total_visible_line_count() const;
// Auto Adjust
diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp
index 7c4cdf828b..27e617bdd0 100644
--- a/scene/gui/tree.cpp
+++ b/scene/gui/tree.cpp
@@ -3164,7 +3164,7 @@ void Tree::gui_input(const Ref<InputEvent> &p_event) {
} else {
const TreeItem::Cell &c = popup_edited_item->cells[popup_edited_item_col];
float diff_y = -mm->get_relative().y;
- diff_y = Math::pow(ABS(diff_y), 1.8f) * SGN(diff_y);
+ diff_y = Math::pow(ABS(diff_y), 1.8f) * SIGN(diff_y);
diff_y *= 0.1;
range_drag_base = CLAMP(range_drag_base + c.step * diff_y, c.min, c.max);
popup_edited_item->set_range(popup_edited_item_col, range_drag_base);
diff --git a/scene/main/canvas_item.cpp b/scene/main/canvas_item.cpp
index 5065684839..22e3c3bf24 100644
--- a/scene/main/canvas_item.cpp
+++ b/scene/main/canvas_item.cpp
@@ -274,6 +274,7 @@ void CanvasItem::_exit_canvas() {
void CanvasItem::_notification(int p_what) {
switch (p_what) {
case NOTIFICATION_ENTER_TREE: {
+ ERR_FAIL_COND(!is_inside_tree());
_update_texture_filter_changed(false);
_update_texture_repeat_changed(false);
diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp
index 1ecc3c762a..48a672b310 100644
--- a/scene/main/viewport.cpp
+++ b/scene/main/viewport.cpp
@@ -1515,8 +1515,9 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) {
if (gui.drag_data.get_type() != Variant::NIL && mb->get_button_index() == MouseButton::LEFT) {
// Alternate drop use (when using force_drag(), as proposed by #5342).
+ gui.drag_successful = false;
if (gui.mouse_focus) {
- _gui_drop(gui.mouse_focus, pos, false);
+ gui.drag_successful = _gui_drop(gui.mouse_focus, pos, false);
}
gui.drag_data = Variant();
@@ -1534,8 +1535,9 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) {
_gui_cancel_tooltip();
} else {
if (gui.drag_data.get_type() != Variant::NIL && mb->get_button_index() == MouseButton::LEFT) {
+ gui.drag_successful = false;
if (gui.drag_mouse_over) {
- _gui_drop(gui.drag_mouse_over, gui.drag_mouse_over_pos, false);
+ gui.drag_successful = _gui_drop(gui.drag_mouse_over, gui.drag_mouse_over_pos, false);
}
Control *drag_preview = _gui_get_drag_preview();
@@ -2895,6 +2897,10 @@ bool Viewport::gui_is_dragging() const {
return gui.dragging;
}
+bool Viewport::gui_is_drag_successful() const {
+ return gui.drag_successful;
+}
+
void Viewport::set_input_as_handled() {
_drop_physics_mouseover();
@@ -3534,6 +3540,7 @@ void Viewport::_bind_methods() {
ClassDB::bind_method(D_METHOD("gui_get_drag_data"), &Viewport::gui_get_drag_data);
ClassDB::bind_method(D_METHOD("gui_is_dragging"), &Viewport::gui_is_dragging);
+ ClassDB::bind_method(D_METHOD("gui_is_drag_successful"), &Viewport::gui_is_drag_successful);
ClassDB::bind_method(D_METHOD("set_disable_input", "disable"), &Viewport::set_disable_input);
ClassDB::bind_method(D_METHOD("is_input_disabled"), &Viewport::is_input_disabled);
diff --git a/scene/main/viewport.h b/scene/main/viewport.h
index 5320aea02a..11b76b32eb 100644
--- a/scene/main/viewport.h
+++ b/scene/main/viewport.h
@@ -348,6 +348,7 @@ private:
List<Control *> roots;
int canvas_sort_index = 0; //for sorting items with canvas as root
bool dragging = false;
+ bool drag_successful = false;
bool embed_subwindows_hint = false;
bool embedding_subwindows = false;
@@ -556,6 +557,7 @@ public:
bool is_handling_input_locally() const;
bool gui_is_dragging() const;
+ bool gui_is_drag_successful() const;
Control *gui_find_control(const Point2 &p_global);
diff --git a/scene/main/window.cpp b/scene/main/window.cpp
index 5da5a183f7..20f8b30dc6 100644
--- a/scene/main/window.cpp
+++ b/scene/main/window.cpp
@@ -88,6 +88,10 @@ Size2i Window::get_size() const {
return size;
}
+void Window::reset_size() {
+ set_size(Size2i());
+}
+
Size2i Window::get_real_size() const {
if (window_id != DisplayServer::INVALID_WINDOW_ID) {
return DisplayServer::get_singleton()->window_get_real_size(window_id);
@@ -1410,6 +1414,7 @@ void Window::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_size", "size"), &Window::set_size);
ClassDB::bind_method(D_METHOD("get_size"), &Window::get_size);
+ ClassDB::bind_method(D_METHOD("reset_size"), &Window::reset_size);
ClassDB::bind_method(D_METHOD("get_real_size"), &Window::get_real_size);
diff --git a/scene/main/window.h b/scene/main/window.h
index def6eab7b8..0b1075ff76 100644
--- a/scene/main/window.h
+++ b/scene/main/window.h
@@ -178,6 +178,7 @@ public:
void set_size(const Size2i &p_size);
Size2i get_size() const;
+ void reset_size();
Size2i get_real_size() const;
diff --git a/scene/resources/animation.cpp b/scene/resources/animation.cpp
index 3700e87839..d31771e71a 100644
--- a/scene/resources/animation.cpp
+++ b/scene/resources/animation.cpp
@@ -317,7 +317,7 @@ bool Animation::_set(const StringName &p_name, const Variant &p_value) {
Vector<real_t> times = d["times"];
Vector<real_t> values = d["points"];
- ERR_FAIL_COND_V(times.size() * 5 != values.size(), false);
+ ERR_FAIL_COND_V(times.size() * 6 != values.size(), false);
if (times.size()) {
int valcount = times.size();
@@ -330,11 +330,12 @@ bool Animation::_set(const StringName &p_name, const Variant &p_value) {
for (int i = 0; i < valcount; i++) {
bt->values.write[i].time = rt[i];
bt->values.write[i].transition = 0; //unused in bezier
- bt->values.write[i].value.value = rv[i * 5 + 0];
- bt->values.write[i].value.in_handle.x = rv[i * 5 + 1];
- bt->values.write[i].value.in_handle.y = rv[i * 5 + 2];
- bt->values.write[i].value.out_handle.x = rv[i * 5 + 3];
- bt->values.write[i].value.out_handle.y = rv[i * 5 + 4];
+ bt->values.write[i].value.value = rv[i * 6 + 0];
+ bt->values.write[i].value.in_handle.x = rv[i * 6 + 1];
+ bt->values.write[i].value.in_handle.y = rv[i * 6 + 2];
+ bt->values.write[i].value.out_handle.x = rv[i * 6 + 3];
+ bt->values.write[i].value.out_handle.y = rv[i * 6 + 4];
+ bt->values.write[i].value.handle_mode = static_cast<HandleMode>((int)rv[i * 6 + 5]);
}
}
@@ -698,7 +699,7 @@ bool Animation::_get(const StringName &p_name, Variant &r_ret) const {
int kk = bt->values.size();
key_times.resize(kk);
- key_points.resize(kk * 5);
+ key_points.resize(kk * 6);
real_t *wti = key_times.ptrw();
real_t *wpo = key_points.ptrw();
@@ -709,11 +710,12 @@ bool Animation::_get(const StringName &p_name, Variant &r_ret) const {
for (int i = 0; i < kk; i++) {
wti[idx] = vls[i].time;
- wpo[idx * 5 + 0] = vls[i].value.value;
- wpo[idx * 5 + 1] = vls[i].value.in_handle.x;
- wpo[idx * 5 + 2] = vls[i].value.in_handle.y;
- wpo[idx * 5 + 3] = vls[i].value.out_handle.x;
- wpo[idx * 5 + 4] = vls[i].value.out_handle.y;
+ wpo[idx * 6 + 0] = vls[i].value.value;
+ wpo[idx * 6 + 1] = vls[i].value.in_handle.x;
+ wpo[idx * 6 + 2] = vls[i].value.in_handle.y;
+ wpo[idx * 6 + 3] = vls[i].value.out_handle.x;
+ wpo[idx * 6 + 4] = vls[i].value.out_handle.y;
+ wpo[idx * 6 + 5] = (double)vls[i].value.handle_mode;
idx++;
}
@@ -1623,7 +1625,7 @@ void Animation::track_insert_key(int p_track, double p_time, const Variant &p_ke
BezierTrack *bt = static_cast<BezierTrack *>(t);
Array arr = p_key;
- ERR_FAIL_COND(arr.size() != 5);
+ ERR_FAIL_COND(arr.size() != 6);
TKey<BezierKey> k;
k.time = p_time;
@@ -1632,6 +1634,7 @@ void Animation::track_insert_key(int p_track, double p_time, const Variant &p_ke
k.value.in_handle.y = arr[2];
k.value.out_handle.x = arr[3];
k.value.out_handle.y = arr[4];
+ k.value.handle_mode = static_cast<HandleMode>((int)arr[5]);
_insert(p_time, bt->values, k);
} break;
@@ -1770,12 +1773,13 @@ Variant Animation::track_get_key_value(int p_track, int p_key_idx) const {
ERR_FAIL_INDEX_V(p_key_idx, bt->values.size(), Variant());
Array arr;
- arr.resize(5);
+ arr.resize(6);
arr[0] = bt->values[p_key_idx].value.value;
arr[1] = bt->values[p_key_idx].value.in_handle.x;
arr[2] = bt->values[p_key_idx].value.in_handle.y;
arr[3] = bt->values[p_key_idx].value.out_handle.x;
arr[4] = bt->values[p_key_idx].value.out_handle.y;
+ arr[5] = (double)bt->values[p_key_idx].value.handle_mode;
return arr;
} break;
@@ -2144,13 +2148,14 @@ void Animation::track_set_key_value(int p_track, int p_key_idx, const Variant &p
ERR_FAIL_INDEX(p_key_idx, bt->values.size());
Array arr = p_value;
- ERR_FAIL_COND(arr.size() != 5);
+ ERR_FAIL_COND(arr.size() != 6);
bt->values.write[p_key_idx].value.value = arr[0];
bt->values.write[p_key_idx].value.in_handle.x = arr[1];
bt->values.write[p_key_idx].value.in_handle.y = arr[2];
bt->values.write[p_key_idx].value.out_handle.x = arr[3];
bt->values.write[p_key_idx].value.out_handle.y = arr[4];
+ bt->values.write[p_key_idx].value.handle_mode = static_cast<HandleMode>((int)arr[5]);
} break;
case TYPE_AUDIO: {
@@ -3203,7 +3208,7 @@ StringName Animation::method_track_get_name(int p_track, int p_key_idx) const {
return pm->methods[p_key_idx].method;
}
-int Animation::bezier_track_insert_key(int p_track, double p_time, real_t p_value, const Vector2 &p_in_handle, const Vector2 &p_out_handle) {
+int Animation::bezier_track_insert_key(int p_track, double p_time, real_t p_value, const Vector2 &p_in_handle, const Vector2 &p_out_handle, const HandleMode p_handle_mode) {
ERR_FAIL_INDEX_V(p_track, tracks.size(), -1);
Track *t = tracks[p_track];
ERR_FAIL_COND_V(t->type != TYPE_BEZIER, -1);
@@ -3221,6 +3226,7 @@ int Animation::bezier_track_insert_key(int p_track, double p_time, real_t p_valu
if (k.value.out_handle.x < 0) {
k.value.out_handle.x = 0;
}
+ k.value.handle_mode = p_handle_mode;
int key = _insert(p_time, bt->values, k);
@@ -3229,6 +3235,30 @@ int Animation::bezier_track_insert_key(int p_track, double p_time, real_t p_valu
return key;
}
+void Animation::bezier_track_set_key_handle_mode(int p_track, int p_index, HandleMode p_mode, double p_balanced_value_time_ratio) {
+ ERR_FAIL_INDEX(p_track, tracks.size());
+ Track *t = tracks[p_track];
+ ERR_FAIL_COND(t->type != TYPE_BEZIER);
+
+ BezierTrack *bt = static_cast<BezierTrack *>(t);
+
+ ERR_FAIL_INDEX(p_index, bt->values.size());
+
+ bt->values.write[p_index].value.handle_mode = p_mode;
+
+ if (p_mode == HANDLE_MODE_BALANCED) {
+ Transform2D xform;
+ xform.set_scale(Vector2(1.0, 1.0 / p_balanced_value_time_ratio));
+
+ Vector2 vec_in = xform.xform(bt->values[p_index].value.in_handle);
+ Vector2 vec_out = xform.xform(bt->values[p_index].value.out_handle);
+
+ bt->values.write[p_index].value.in_handle = xform.affine_inverse().xform(-vec_out.normalized() * vec_in.length());
+ }
+
+ emit_changed();
+}
+
void Animation::bezier_track_set_key_value(int p_track, int p_index, real_t p_value) {
ERR_FAIL_INDEX(p_track, tracks.size());
Track *t = tracks[p_track];
@@ -3242,7 +3272,7 @@ void Animation::bezier_track_set_key_value(int p_track, int p_index, real_t p_va
emit_changed();
}
-void Animation::bezier_track_set_key_in_handle(int p_track, int p_index, const Vector2 &p_handle) {
+void Animation::bezier_track_set_key_in_handle(int p_track, int p_index, const Vector2 &p_handle, double p_balanced_value_time_ratio) {
ERR_FAIL_INDEX(p_track, tracks.size());
Track *t = tracks[p_track];
ERR_FAIL_COND(t->type != TYPE_BEZIER);
@@ -3251,14 +3281,26 @@ void Animation::bezier_track_set_key_in_handle(int p_track, int p_index, const V
ERR_FAIL_INDEX(p_index, bt->values.size());
- bt->values.write[p_index].value.in_handle = p_handle;
- if (bt->values[p_index].value.in_handle.x > 0) {
- bt->values.write[p_index].value.in_handle.x = 0;
+ Vector2 in_handle = p_handle;
+ if (in_handle.x > 0) {
+ in_handle.x = 0;
+ }
+ bt->values.write[p_index].value.in_handle = in_handle;
+
+ if (bt->values[p_index].value.handle_mode == HANDLE_MODE_BALANCED) {
+ Transform2D xform;
+ xform.set_scale(Vector2(1.0, 1.0 / p_balanced_value_time_ratio));
+
+ Vector2 vec_out = xform.xform(bt->values[p_index].value.out_handle);
+ Vector2 vec_in = xform.xform(in_handle);
+
+ bt->values.write[p_index].value.out_handle = xform.affine_inverse().xform(-vec_in.normalized() * vec_out.length());
}
+
emit_changed();
}
-void Animation::bezier_track_set_key_out_handle(int p_track, int p_index, const Vector2 &p_handle) {
+void Animation::bezier_track_set_key_out_handle(int p_track, int p_index, const Vector2 &p_handle, double p_balanced_value_time_ratio) {
ERR_FAIL_INDEX(p_track, tracks.size());
Track *t = tracks[p_track];
ERR_FAIL_COND(t->type != TYPE_BEZIER);
@@ -3267,10 +3309,22 @@ void Animation::bezier_track_set_key_out_handle(int p_track, int p_index, const
ERR_FAIL_INDEX(p_index, bt->values.size());
- bt->values.write[p_index].value.out_handle = p_handle;
- if (bt->values[p_index].value.out_handle.x < 0) {
- bt->values.write[p_index].value.out_handle.x = 0;
+ Vector2 out_handle = p_handle;
+ if (out_handle.x < 0) {
+ out_handle.x = 0;
+ }
+ bt->values.write[p_index].value.out_handle = out_handle;
+
+ if (bt->values[p_index].value.handle_mode == HANDLE_MODE_BALANCED) {
+ Transform2D xform;
+ xform.set_scale(Vector2(1.0, 1.0 / p_balanced_value_time_ratio));
+
+ Vector2 vec_in = xform.xform(bt->values[p_index].value.in_handle);
+ Vector2 vec_out = xform.xform(out_handle);
+
+ bt->values.write[p_index].value.in_handle = xform.affine_inverse().xform(-vec_out.normalized() * vec_in.length());
}
+
emit_changed();
}
@@ -3286,6 +3340,18 @@ real_t Animation::bezier_track_get_key_value(int p_track, int p_index) const {
return bt->values[p_index].value.value;
}
+int Animation::bezier_track_get_key_handle_mode(int p_track, int p_index) const {
+ ERR_FAIL_INDEX_V(p_track, tracks.size(), 0);
+ Track *t = tracks[p_track];
+ ERR_FAIL_COND_V(t->type != TYPE_BEZIER, 0);
+
+ BezierTrack *bt = static_cast<BezierTrack *>(t);
+
+ ERR_FAIL_INDEX_V(p_index, bt->values.size(), 0);
+
+ return bt->values[p_index].value.handle_mode;
+}
+
Vector2 Animation::bezier_track_get_key_in_handle(int p_track, int p_index) const {
ERR_FAIL_INDEX_V(p_track, tracks.size(), Vector2());
Track *t = tracks[p_track];
@@ -3718,11 +3784,11 @@ void Animation::_bind_methods() {
ClassDB::bind_method(D_METHOD("method_track_get_name", "track_idx", "key_idx"), &Animation::method_track_get_name);
ClassDB::bind_method(D_METHOD("method_track_get_params", "track_idx", "key_idx"), &Animation::method_track_get_params);
- ClassDB::bind_method(D_METHOD("bezier_track_insert_key", "track_idx", "time", "value", "in_handle", "out_handle"), &Animation::bezier_track_insert_key, DEFVAL(Vector2()), DEFVAL(Vector2()));
+ ClassDB::bind_method(D_METHOD("bezier_track_insert_key", "track_idx", "time", "value", "in_handle", "out_handle", "handle_mode"), &Animation::bezier_track_insert_key, DEFVAL(Vector2()), DEFVAL(Vector2()), DEFVAL(Animation::HandleMode::HANDLE_MODE_BALANCED));
ClassDB::bind_method(D_METHOD("bezier_track_set_key_value", "track_idx", "key_idx", "value"), &Animation::bezier_track_set_key_value);
- ClassDB::bind_method(D_METHOD("bezier_track_set_key_in_handle", "track_idx", "key_idx", "in_handle"), &Animation::bezier_track_set_key_in_handle);
- ClassDB::bind_method(D_METHOD("bezier_track_set_key_out_handle", "track_idx", "key_idx", "out_handle"), &Animation::bezier_track_set_key_out_handle);
+ ClassDB::bind_method(D_METHOD("bezier_track_set_key_in_handle", "track_idx", "key_idx", "in_handle", "balanced_value_time_ratio"), &Animation::bezier_track_set_key_in_handle, DEFVAL(1.0));
+ ClassDB::bind_method(D_METHOD("bezier_track_set_key_out_handle", "track_idx", "key_idx", "out_handle", "balanced_value_time_ratio"), &Animation::bezier_track_set_key_out_handle, DEFVAL(1.0));
ClassDB::bind_method(D_METHOD("bezier_track_get_key_value", "track_idx", "key_idx"), &Animation::bezier_track_get_key_value);
ClassDB::bind_method(D_METHOD("bezier_track_get_key_in_handle", "track_idx", "key_idx"), &Animation::bezier_track_get_key_in_handle);
@@ -3738,6 +3804,9 @@ void Animation::_bind_methods() {
ClassDB::bind_method(D_METHOD("audio_track_get_key_start_offset", "track_idx", "key_idx"), &Animation::audio_track_get_key_start_offset);
ClassDB::bind_method(D_METHOD("audio_track_get_key_end_offset", "track_idx", "key_idx"), &Animation::audio_track_get_key_end_offset);
+ ClassDB::bind_method(D_METHOD("bezier_track_set_key_handle_mode", "track_idx", "key_idx", "key_handle_mode", "balanced_value_time_ratio"), &Animation::bezier_track_set_key_handle_mode, DEFVAL(1.0));
+ ClassDB::bind_method(D_METHOD("bezier_track_get_key_handle_mode", "track_idx", "key_idx"), &Animation::bezier_track_get_key_handle_mode);
+
ClassDB::bind_method(D_METHOD("animation_track_insert_key", "track_idx", "time", "animation"), &Animation::animation_track_insert_key);
ClassDB::bind_method(D_METHOD("animation_track_set_key_animation", "track_idx", "key_idx", "animation"), &Animation::animation_track_set_key_animation);
ClassDB::bind_method(D_METHOD("animation_track_get_key_animation", "track_idx", "key_idx"), &Animation::animation_track_get_key_animation);
@@ -3784,6 +3853,9 @@ void Animation::_bind_methods() {
BIND_ENUM_CONSTANT(LOOP_NONE);
BIND_ENUM_CONSTANT(LOOP_LINEAR);
BIND_ENUM_CONSTANT(LOOP_PINGPONG);
+
+ BIND_ENUM_CONSTANT(HANDLE_MODE_FREE);
+ BIND_ENUM_CONSTANT(HANDLE_MODE_BALANCED);
}
void Animation::clear() {
diff --git a/scene/resources/animation.h b/scene/resources/animation.h
index 510d6c8323..8e4287e4fb 100644
--- a/scene/resources/animation.h
+++ b/scene/resources/animation.h
@@ -72,6 +72,11 @@ public:
LOOP_PINGPONG,
};
+ enum HandleMode {
+ HANDLE_MODE_FREE,
+ HANDLE_MODE_BALANCED,
+ };
+
private:
struct Track {
TrackType type = TrackType::TYPE_ANIMATION;
@@ -157,10 +162,10 @@ private:
};
/* BEZIER TRACK */
-
struct BezierKey {
Vector2 in_handle; //relative (x always <0)
Vector2 out_handle; //relative (x always >0)
+ HandleMode handle_mode = HANDLE_MODE_BALANCED;
real_t value = 0.0;
};
@@ -419,11 +424,13 @@ public:
void track_set_interpolation_type(int p_track, InterpolationType p_interp);
InterpolationType track_get_interpolation_type(int p_track) const;
- int bezier_track_insert_key(int p_track, double p_time, real_t p_value, const Vector2 &p_in_handle, const Vector2 &p_out_handle);
+ int bezier_track_insert_key(int p_track, double p_time, real_t p_value, const Vector2 &p_in_handle, const Vector2 &p_out_handle, const HandleMode p_handle_mode = HandleMode::HANDLE_MODE_BALANCED);
+ void bezier_track_set_key_handle_mode(int p_track, int p_index, HandleMode p_mode, double p_balanced_value_time_ratio = 1.0);
void bezier_track_set_key_value(int p_track, int p_index, real_t p_value);
- void bezier_track_set_key_in_handle(int p_track, int p_index, const Vector2 &p_handle);
- void bezier_track_set_key_out_handle(int p_track, int p_index, const Vector2 &p_handle);
+ void bezier_track_set_key_in_handle(int p_track, int p_index, const Vector2 &p_handle, double p_balanced_value_time_ratio = 1.0);
+ void bezier_track_set_key_out_handle(int p_track, int p_index, const Vector2 &p_handle, double p_balanced_value_time_ratio = 1.0);
real_t bezier_track_get_key_value(int p_track, int p_index) const;
+ int bezier_track_get_key_handle_mode(int p_track, int p_index) const;
Vector2 bezier_track_get_key_in_handle(int p_track, int p_index) const;
Vector2 bezier_track_get_key_out_handle(int p_track, int p_index) const;
@@ -478,6 +485,7 @@ public:
VARIANT_ENUM_CAST(Animation::TrackType);
VARIANT_ENUM_CAST(Animation::InterpolationType);
VARIANT_ENUM_CAST(Animation::UpdateMode);
+VARIANT_ENUM_CAST(Animation::HandleMode);
VARIANT_ENUM_CAST(Animation::LoopMode);
#endif
diff --git a/scene/resources/font.cpp b/scene/resources/font.cpp
index d9de47afc7..6cd42e1456 100644
--- a/scene/resources/font.cpp
+++ b/scene/resources/font.cpp
@@ -88,6 +88,9 @@ void FontData::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_msdf_size", "msdf_size"), &FontData::set_msdf_size);
ClassDB::bind_method(D_METHOD("get_msdf_size"), &FontData::get_msdf_size);
+ ClassDB::bind_method(D_METHOD("set_fixed_size", "fixed_size"), &FontData::set_fixed_size);
+ ClassDB::bind_method(D_METHOD("get_fixed_size"), &FontData::get_fixed_size);
+
ClassDB::bind_method(D_METHOD("set_force_autohinter", "force_autohinter"), &FontData::set_force_autohinter);
ClassDB::bind_method(D_METHOD("is_force_autohinter"), &FontData::is_force_autohinter);
diff --git a/scene/resources/packed_scene.cpp b/scene/resources/packed_scene.cpp
index f43715a463..3f4765d20f 100644
--- a/scene/resources/packed_scene.cpp
+++ b/scene/resources/packed_scene.cpp
@@ -315,13 +315,13 @@ Node *SceneState::instantiate(GenEditState p_edit_state) const {
node->_set_owner_nocheck(owner);
}
}
- }
- // we only want to deal with pinned flag if instancing as pure main (no instance, no inheriting)
- if (p_edit_state == GEN_EDIT_STATE_MAIN) {
- _sanitize_node_pinned_properties(node);
- } else {
- node->remove_meta("_edit_pinned_properties_");
+ // we only want to deal with pinned flag if instancing as pure main (no instance, no inheriting)
+ if (p_edit_state == GEN_EDIT_STATE_MAIN) {
+ _sanitize_node_pinned_properties(node);
+ } else {
+ node->remove_meta("_edit_pinned_properties_");
+ }
}
ret_nodes[i] = node;
diff --git a/scene/resources/resource_format_text.cpp b/scene/resources/resource_format_text.cpp
index ea3b72af1b..cead42b4e2 100644
--- a/scene/resources/resource_format_text.cpp
+++ b/scene/resources/resource_format_text.cpp
@@ -350,7 +350,7 @@ Ref<PackedScene> ResourceLoaderText::_parse_node_tag(VariantParser::ResourcePars
} else if (next_tag.name == "editable") {
if (!next_tag.fields.has("path")) {
error = ERR_FILE_CORRUPT;
- error_text = "missing 'path' field from connection tag";
+ error_text = "missing 'path' field from editable tag";
_printerr();
return Ref<PackedScene>();
}
diff --git a/scene/resources/skeleton_modification_2d_ccdik.cpp b/scene/resources/skeleton_modification_2d_ccdik.cpp
index 6eab8d4afe..bea42109cb 100644
--- a/scene/resources/skeleton_modification_2d_ccdik.cpp
+++ b/scene/resources/skeleton_modification_2d_ccdik.cpp
@@ -205,8 +205,8 @@ void SkeletonModification2DCCDIK::_execute_ccdik_joint(int p_joint_idx, Node2D *
} else {
// How to rotate from the tip: get the difference of rotation needed from the tip to the target, from the perspective of the joint.
// Because we are only using the offset, we do not need to account for the bone angle of the Bone2D node.
- float joint_to_tip = operation_transform.get_origin().angle_to_point(p_tip->get_global_position());
- float joint_to_target = operation_transform.get_origin().angle_to_point(p_target->get_global_position());
+ float joint_to_tip = p_tip->get_global_position().angle_to_point(operation_transform.get_origin());
+ float joint_to_target = p_target->get_global_position().angle_to_point(operation_transform.get_origin());
operation_transform.set_rotation(
operation_transform.get_rotation() + (joint_to_target - joint_to_tip));
}
diff --git a/scene/resources/skeleton_modification_stack_2d.cpp b/scene/resources/skeleton_modification_stack_2d.cpp
index db9fe62b4d..25c3e9d2ef 100644
--- a/scene/resources/skeleton_modification_stack_2d.cpp
+++ b/scene/resources/skeleton_modification_stack_2d.cpp
@@ -195,6 +195,7 @@ void SkeletonModificationStack2D::set_modification(int p_mod_idx, Ref<SkeletonMo
}
void SkeletonModificationStack2D::set_modification_count(int p_count) {
+ ERR_FAIL_COND_MSG(p_count < 0, "Modification count cannot be less than zero.");
modifications.resize(p_count);
notify_property_list_changed();
diff --git a/scene/resources/skeleton_modification_stack_3d.cpp b/scene/resources/skeleton_modification_stack_3d.cpp
index c03210cf48..301811f0b6 100644
--- a/scene/resources/skeleton_modification_stack_3d.cpp
+++ b/scene/resources/skeleton_modification_stack_3d.cpp
@@ -149,6 +149,7 @@ void SkeletonModificationStack3D::set_modification(int p_mod_idx, Ref<SkeletonMo
}
void SkeletonModificationStack3D::set_modification_count(int p_count) {
+ ERR_FAIL_COND_MSG(p_count < 0, "Modification count cannot be less than zero.");
modifications.resize(p_count);
notify_property_list_changed();
}
diff --git a/scene/resources/sky_material.cpp b/scene/resources/sky_material.cpp
index de94c92cac..ff388e288c 100644
--- a/scene/resources/sky_material.cpp
+++ b/scene/resources/sky_material.cpp
@@ -37,7 +37,7 @@ RID ProceduralSkyMaterial::shader;
void ProceduralSkyMaterial::set_sky_top_color(const Color &p_sky_top) {
sky_top_color = p_sky_top;
- RS::get_singleton()->material_set_param(_get_material(), "sky_top_color", sky_top_color.to_linear());
+ RS::get_singleton()->material_set_param(_get_material(), "sky_top_color", sky_top_color);
}
Color ProceduralSkyMaterial::get_sky_top_color() const {
@@ -46,7 +46,7 @@ Color ProceduralSkyMaterial::get_sky_top_color() const {
void ProceduralSkyMaterial::set_sky_horizon_color(const Color &p_sky_horizon) {
sky_horizon_color = p_sky_horizon;
- RS::get_singleton()->material_set_param(_get_material(), "sky_horizon_color", sky_horizon_color.to_linear());
+ RS::get_singleton()->material_set_param(_get_material(), "sky_horizon_color", sky_horizon_color);
}
Color ProceduralSkyMaterial::get_sky_horizon_color() const {
@@ -73,7 +73,7 @@ float ProceduralSkyMaterial::get_sky_energy() const {
void ProceduralSkyMaterial::set_ground_bottom_color(const Color &p_ground_bottom) {
ground_bottom_color = p_ground_bottom;
- RS::get_singleton()->material_set_param(_get_material(), "ground_bottom_color", ground_bottom_color.to_linear());
+ RS::get_singleton()->material_set_param(_get_material(), "ground_bottom_color", ground_bottom_color);
}
Color ProceduralSkyMaterial::get_ground_bottom_color() const {
@@ -82,7 +82,7 @@ Color ProceduralSkyMaterial::get_ground_bottom_color() const {
void ProceduralSkyMaterial::set_ground_horizon_color(const Color &p_ground_horizon) {
ground_horizon_color = p_ground_horizon;
- RS::get_singleton()->material_set_param(_get_material(), "ground_horizon_color", ground_horizon_color.to_linear());
+ RS::get_singleton()->material_set_param(_get_material(), "ground_horizon_color", ground_horizon_color);
}
Color ProceduralSkyMaterial::get_ground_horizon_color() const {
@@ -564,10 +564,10 @@ void PhysicalSkyMaterial::_update_shader() {
shader_type sky;
uniform float rayleigh : hint_range(0, 64) = 2.0;
-uniform vec4 rayleigh_color : hint_color = vec4(0.056, 0.14, 0.3, 1.0);
+uniform vec4 rayleigh_color : hint_color = vec4(0.26, 0.41, 0.58, 1.0);
uniform float mie : hint_range(0, 1) = 0.005;
uniform float mie_eccentricity : hint_range(-1, 1) = 0.8;
-uniform vec4 mie_color : hint_color = vec4(0.36, 0.56, 0.82, 1.0);
+uniform vec4 mie_color : hint_color = vec4(0.63, 0.77, 0.92, 1.0);
uniform float turbidity : hint_range(0, 1000) = 10.0;
uniform float sun_disk_scale : hint_range(0, 360) = 1.0;
@@ -661,10 +661,10 @@ void sky() {
PhysicalSkyMaterial::PhysicalSkyMaterial() {
set_rayleigh_coefficient(2.0);
- set_rayleigh_color(Color(0.056, 0.14, 0.3));
+ set_rayleigh_color(Color(0.26, 0.41, 0.58));
set_mie_coefficient(0.005);
set_mie_eccentricity(0.8);
- set_mie_color(Color(0.36, 0.56, 0.82));
+ set_mie_color(Color(0.63, 0.77, 0.92));
set_turbidity(10.0);
set_sun_disk_scale(1.0);
set_ground_color(Color(1.0, 1.0, 1.0));
diff --git a/scene/resources/visual_shader.cpp b/scene/resources/visual_shader.cpp
index 0bdc81330e..87ff225de9 100644
--- a/scene/resources/visual_shader.cpp
+++ b/scene/resources/visual_shader.cpp
@@ -1835,6 +1835,7 @@ void VisualShader::_update_shader() const {
code += " float __scalar_buff1;\n";
code += " float __scalar_buff2;\n";
code += " int __scalar_ibuff;\n";
+ code += " vec4 __vec4_buff;\n";
code += " vec3 __ndiff = normalize(__diff);\n\n";
}
if (has_start) {
diff --git a/scene/resources/visual_shader_particle_nodes.cpp b/scene/resources/visual_shader_particle_nodes.cpp
index 7dd4eed15b..1a829968e3 100644
--- a/scene/resources/visual_shader_particle_nodes.cpp
+++ b/scene/resources/visual_shader_particle_nodes.cpp
@@ -264,7 +264,7 @@ String VisualShaderNodeParticleMeshEmitter::get_caption() const {
}
int VisualShaderNodeParticleMeshEmitter::get_output_port_count() const {
- return 2;
+ return 6;
}
VisualShaderNodeParticleBoxEmitter::PortType VisualShaderNodeParticleMeshEmitter::get_output_port_type(int p_port) const {
@@ -273,6 +273,14 @@ VisualShaderNodeParticleBoxEmitter::PortType VisualShaderNodeParticleMeshEmitter
return PORT_TYPE_VECTOR; // position
case 1:
return PORT_TYPE_VECTOR; // normal
+ case 2:
+ return PORT_TYPE_VECTOR; // color
+ case 3:
+ return PORT_TYPE_SCALAR; // alpha
+ case 4:
+ return PORT_TYPE_VECTOR; // uv
+ case 5:
+ return PORT_TYPE_VECTOR; // uv2
}
return PORT_TYPE_SCALAR;
}
@@ -283,6 +291,14 @@ String VisualShaderNodeParticleMeshEmitter::get_output_port_name(int p_port) con
return "position";
case 1:
return "normal";
+ case 2:
+ return "color";
+ case 3:
+ return "alpha";
+ case 4:
+ return "uv";
+ case 5:
+ return "uv2";
}
return String();
}
@@ -299,135 +315,263 @@ String VisualShaderNodeParticleMeshEmitter::get_input_port_name(int p_port) cons
return String();
}
-String VisualShaderNodeParticleMeshEmitter::generate_global_per_node(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const {
+String VisualShaderNodeParticleMeshEmitter::generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const {
String code;
if (mesh.is_valid()) {
- code += "uniform sampler2D " + make_unique_id(p_type, p_id, "mesh_vx") + ";\n";
- code += "uniform sampler2D " + make_unique_id(p_type, p_id, "mesh_nm") + ";\n";
+ if (is_output_port_connected(0)) { // position
+ code += "uniform sampler2D " + make_unique_id(p_type, p_id, "mesh_vx") + ";\n";
+ }
+
+ if (is_output_port_connected(1)) { // normal
+ code += "uniform sampler2D " + make_unique_id(p_type, p_id, "mesh_nm") + ";\n";
+ }
+
+ if (is_output_port_connected(2) || is_output_port_connected(3)) { // color & alpha
+ code += "uniform sampler2D " + make_unique_id(p_type, p_id, "mesh_col") + ";\n";
+ }
+
+ if (is_output_port_connected(4)) { // uv
+ code += "uniform sampler2D " + make_unique_id(p_type, p_id, "mesh_uv") + ";\n";
+ }
+
+ if (is_output_port_connected(5)) { // uv2
+ code += "uniform sampler2D " + make_unique_id(p_type, p_id, "mesh_uv2") + ";\n";
+ }
}
return code;
}
-String VisualShaderNodeParticleMeshEmitter::generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview) const {
+String VisualShaderNodeParticleMeshEmitter::_generate_code(VisualShader::Type p_type, int p_id, const String *p_output_vars, int p_index, const String &p_texture_name, bool p_ignore_mode2d) const {
String code;
-
- code += " __scalar_ibuff = int(__rand_from_seed(__seed) * 65535.0) % " + itos(position_texture->get_width()) + ";\n";
-
- if (position_texture->get_width() == 0) {
- code += " " + p_output_vars[0] + " = vec3(0.0);\n";
- } else {
- if (mode_2d) {
- code += " " + p_output_vars[0] + " = vec3(";
+ if (is_output_port_connected(p_index)) {
+ if (mode_2d && !p_ignore_mode2d) {
+ code += " " + p_output_vars[p_index] + " = vec3(";
code += "texelFetch(";
- code += make_unique_id(p_type, p_id, "mesh_vx") + ", ";
+ code += make_unique_id(p_type, p_id, p_texture_name) + ", ";
code += "ivec2(__scalar_ibuff, 0), 0).xy, 0.0);\n";
} else {
- code += " " + p_output_vars[0] + " = texelFetch(";
- code += make_unique_id(p_type, p_id, "mesh_vx") + ", ";
+ code += " " + p_output_vars[p_index] + " = texelFetch(";
+ code += make_unique_id(p_type, p_id, p_texture_name) + ", ";
code += "ivec2(__scalar_ibuff, 0), 0).xyz;\n";
}
}
+ return code;
+}
- if (normal_texture->get_width() == 0) {
- code += " " + p_output_vars[1] + " = vec3(0.0);\n";
- } else {
- if (mode_2d) {
- code += " " + p_output_vars[1] + " = vec3(";
- code += "texelFetch(";
- code += make_unique_id(p_type, p_id, "mesh_nm") + ", ";
- code += "ivec2(__scalar_ibuff, 0), 0).xy, 0.0);\n";
+String VisualShaderNodeParticleMeshEmitter::generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview) const {
+ String code;
+ code += " __scalar_ibuff = int(__rand_from_seed(__seed) * 65535.0) % " + itos(position_texture->get_width()) + ";\n";
+
+ code += _generate_code(p_type, p_id, p_output_vars, 0, "mesh_vx");
+ code += _generate_code(p_type, p_id, p_output_vars, 1, "mesh_nm");
+
+ if (is_output_port_connected(2) || is_output_port_connected(3)) {
+ code += " __vec4_buff = texelFetch(";
+ code += make_unique_id(p_type, p_id, "mesh_col") + ", ";
+ code += "ivec2(__scalar_ibuff, 0), 0);\n";
+ if (is_output_port_connected(2)) {
+ code += " " + p_output_vars[2] + " = __vec4_buff.rgb;\n";
} else {
- code += " " + p_output_vars[1] + " = texelFetch(";
- code += make_unique_id(p_type, p_id, "mesh_nm") + ", ";
- code += "ivec2(__scalar_ibuff, 0), 0).xyz;\n";
+ code += " " + p_output_vars[2] + " = vec3(0.0);\n";
+ }
+ if (is_output_port_connected(3)) {
+ code += " " + p_output_vars[3] + " = __vec4_buff.a;\n";
+ } else {
+ code += " " + p_output_vars[3] + " = 0.0;\n";
}
}
+ code += _generate_code(p_type, p_id, p_output_vars, 4, "mesh_uv", true);
+ code += _generate_code(p_type, p_id, p_output_vars, 5, "mesh_uv2", true);
+
return code;
}
Vector<VisualShader::DefaultTextureParam> VisualShaderNodeParticleMeshEmitter::get_default_texture_parameters(VisualShader::Type p_type, int p_id) const {
- VisualShader::DefaultTextureParam dtp_vx;
- dtp_vx.name = make_unique_id(p_type, p_id, "mesh_vx");
- dtp_vx.params.push_back(position_texture);
+ Vector<VisualShader::DefaultTextureParam> ret;
- VisualShader::DefaultTextureParam dtp_nm;
- dtp_nm.name = make_unique_id(p_type, p_id, "mesh_nm");
- dtp_nm.params.push_back(normal_texture);
+ if (is_output_port_connected(0)) {
+ VisualShader::DefaultTextureParam dtp;
+ dtp.name = make_unique_id(p_type, p_id, "mesh_vx");
+ dtp.params.push_back(position_texture);
+ ret.push_back(dtp);
+ }
+
+ if (is_output_port_connected(1)) {
+ VisualShader::DefaultTextureParam dtp;
+ dtp.name = make_unique_id(p_type, p_id, "mesh_nm");
+ dtp.params.push_back(normal_texture);
+ ret.push_back(dtp);
+ }
+
+ if (is_output_port_connected(2) || is_output_port_connected(3)) {
+ VisualShader::DefaultTextureParam dtp;
+ dtp.name = make_unique_id(p_type, p_id, "mesh_col");
+ dtp.params.push_back(color_texture);
+ ret.push_back(dtp);
+ }
+
+ if (is_output_port_connected(4)) {
+ VisualShader::DefaultTextureParam dtp;
+ dtp.name = make_unique_id(p_type, p_id, "mesh_uv");
+ dtp.params.push_back(uv_texture);
+ ret.push_back(dtp);
+ }
+
+ if (is_output_port_connected(5)) {
+ VisualShader::DefaultTextureParam dtp;
+ dtp.name = make_unique_id(p_type, p_id, "mesh_uv2");
+ dtp.params.push_back(uv2_texture);
+ ret.push_back(dtp);
+ }
- Vector<VisualShader::DefaultTextureParam> ret;
- ret.push_back(dtp_vx);
- ret.push_back(dtp_nm);
return ret;
}
-void VisualShaderNodeParticleMeshEmitter::update_texture() {
+void VisualShaderNodeParticleMeshEmitter::_update_texture(const Vector<Vector2> &p_array, Ref<ImageTexture> &r_texture) {
+ Ref<Image> image;
+ image.instantiate();
+
+ if (p_array.size() == 0) {
+ image->create(1, 1, false, Image::Format::FORMAT_RGBF);
+ } else {
+ image->create(p_array.size(), 1, false, Image::Format::FORMAT_RGBF);
+ }
+
+ for (int i = 0; i < p_array.size(); i++) {
+ Vector2 v = p_array[i];
+ image->set_pixel(i, 0, Color(v.x, v.y, 0));
+ }
+ if (r_texture->get_width() != p_array.size() || p_array.size() == 0) {
+ r_texture->create_from_image(image);
+ } else {
+ r_texture->update(image);
+ }
+}
+
+void VisualShaderNodeParticleMeshEmitter::_update_texture(const Vector<Vector3> &p_array, Ref<ImageTexture> &r_texture) {
+ Ref<Image> image;
+ image.instantiate();
+
+ if (p_array.size() == 0) {
+ image->create(1, 1, false, Image::Format::FORMAT_RGBF);
+ } else {
+ image->create(p_array.size(), 1, false, Image::Format::FORMAT_RGBF);
+ }
+
+ for (int i = 0; i < p_array.size(); i++) {
+ Vector3 v = p_array[i];
+ image->set_pixel(i, 0, Color(v.x, v.y, v.z));
+ }
+ if (r_texture->get_width() != p_array.size() || p_array.size() == 0) {
+ r_texture->create_from_image(image);
+ } else {
+ r_texture->update(image);
+ }
+}
+
+void VisualShaderNodeParticleMeshEmitter::_update_texture(const Vector<Color> &p_array, Ref<ImageTexture> &r_texture) {
+ Ref<Image> image;
+ image.instantiate();
+
+ if (p_array.size() == 0) {
+ image->create(1, 1, false, Image::Format::FORMAT_RGBA8);
+ } else {
+ image->create(p_array.size(), 1, false, Image::Format::FORMAT_RGBA8);
+ }
+
+ for (int i = 0; i < p_array.size(); i++) {
+ image->set_pixel(i, 0, p_array[i]);
+ }
+ if (r_texture->get_width() != p_array.size() || p_array.size() == 0) {
+ r_texture->create_from_image(image);
+ } else {
+ r_texture->update(image);
+ }
+}
+
+void VisualShaderNodeParticleMeshEmitter::_update_textures() {
if (!mesh.is_valid()) {
return;
}
Vector<Vector3> vertices;
Vector<Vector3> normals;
+ Vector<Color> colors;
+ Vector<Vector2> uvs;
+ Vector<Vector2> uvs2;
if (use_all_surfaces) {
for (int i = 0; i < max_surface_index; i++) {
+ // position
Array vertex_array = mesh->surface_get_arrays(i)[Mesh::ARRAY_VERTEX];
for (int j = 0; j < vertex_array.size(); j++) {
vertices.push_back((Vector3)vertex_array[j]);
}
+ // normal
Array normal_array = mesh->surface_get_arrays(i)[Mesh::ARRAY_NORMAL];
- for (int j = 0; j < vertex_array.size(); j++) {
- normals.push_back((Vector3)vertex_array[j]);
+ for (int j = 0; j < normal_array.size(); j++) {
+ normals.push_back((Vector3)normal_array[j]);
+ }
+
+ // color
+ Array color_array = mesh->surface_get_arrays(i)[Mesh::ARRAY_COLOR];
+ for (int j = 0; j < color_array.size(); j++) {
+ colors.push_back((Color)color_array[j]);
+ }
+
+ // uv
+ Array uv_array = mesh->surface_get_arrays(i)[Mesh::ARRAY_TEX_UV];
+ for (int j = 0; j < uv_array.size(); j++) {
+ uvs.push_back((Vector2)uv_array[j]);
+ }
+
+ // uv2
+ Array uv2_array = mesh->surface_get_arrays(i)[Mesh::ARRAY_TEX_UV2];
+ for (int j = 0; j < uv2_array.size(); j++) {
+ uvs2.push_back((Vector2)uv2_array[j]);
}
}
} else {
+ // position
Array vertex_array = mesh->surface_get_arrays(surface_index)[Mesh::ARRAY_VERTEX];
for (int i = 0; i < vertex_array.size(); i++) {
vertices.push_back((Vector3)vertex_array[i]);
}
+ // normal
Array normal_array = mesh->surface_get_arrays(surface_index)[Mesh::ARRAY_NORMAL];
for (int i = 0; i < normal_array.size(); i++) {
normals.push_back((Vector3)normal_array[i]);
}
- }
- // vertices
- {
- Ref<Image> image;
- image.instantiate();
- image->create(vertices.size(), 1, false, Image::Format::FORMAT_RGBF);
-
- for (int i = 0; i < vertices.size(); i++) {
- Vector3 v = vertices[i];
- image->set_pixel(i, 0, Color(v.x, v.y, v.z));
- }
- if (position_texture->get_width() != vertices.size()) {
- position_texture->create_from_image(image);
- } else {
- position_texture->update(image);
+ // color
+ Array color_array = mesh->surface_get_arrays(surface_index)[Mesh::ARRAY_COLOR];
+ for (int i = 0; i < color_array.size(); i++) {
+ colors.push_back((Color)color_array[i]);
}
- }
-
- // normals
- {
- Ref<Image> image;
- image.instantiate();
- image->create(normals.size(), 1, false, Image::Format::FORMAT_RGBF);
- for (int i = 0; i < normals.size(); i++) {
- Vector3 v = normals[i];
- image->set_pixel(i, 0, Color(v.x, v.y, v.z));
+ // uv
+ Array uv_array = mesh->surface_get_arrays(surface_index)[Mesh::ARRAY_TEX_UV];
+ for (int j = 0; j < uv_array.size(); j++) {
+ uvs.push_back((Vector2)uv_array[j]);
}
- if (normal_texture->get_width() != normals.size()) {
- normal_texture->create_from_image(image);
- } else {
- normal_texture->update(image);
+
+ // uv2
+ Array uv2_array = mesh->surface_get_arrays(surface_index)[Mesh::ARRAY_TEX_UV2];
+ for (int j = 0; j < uv2_array.size(); j++) {
+ uvs2.push_back((Vector2)uv2_array[j]);
}
}
+
+ _update_texture(vertices, position_texture);
+ _update_texture(normals, normal_texture);
+ _update_texture(colors, color_texture);
+ _update_texture(uvs, uv_texture);
+ _update_texture(uvs2, uv2_texture);
}
void VisualShaderNodeParticleMeshEmitter::set_mesh(Ref<Mesh> p_mesh) {
@@ -442,7 +586,7 @@ void VisualShaderNodeParticleMeshEmitter::set_mesh(Ref<Mesh> p_mesh) {
}
if (mesh.is_valid()) {
- Callable callable = callable_mp(this, &VisualShaderNodeParticleMeshEmitter::update_texture);
+ Callable callable = callable_mp(this, &VisualShaderNodeParticleMeshEmitter::_update_textures);
if (mesh->is_connected(CoreStringNames::get_singleton()->changed, callable)) {
mesh->disconnect(CoreStringNames::get_singleton()->changed, callable);
@@ -452,7 +596,7 @@ void VisualShaderNodeParticleMeshEmitter::set_mesh(Ref<Mesh> p_mesh) {
mesh = p_mesh;
if (mesh.is_valid()) {
- Callable callable = callable_mp(this, &VisualShaderNodeParticleMeshEmitter::update_texture);
+ Callable callable = callable_mp(this, &VisualShaderNodeParticleMeshEmitter::_update_textures);
if (!mesh->is_connected(CoreStringNames::get_singleton()->changed, callable)) {
mesh->connect(CoreStringNames::get_singleton()->changed, callable);
@@ -528,10 +672,13 @@ void VisualShaderNodeParticleMeshEmitter::_bind_methods() {
}
VisualShaderNodeParticleMeshEmitter::VisualShaderNodeParticleMeshEmitter() {
- connect(CoreStringNames::get_singleton()->changed, callable_mp(this, &VisualShaderNodeParticleMeshEmitter::update_texture));
+ connect(CoreStringNames::get_singleton()->changed, callable_mp(this, &VisualShaderNodeParticleMeshEmitter::_update_textures));
position_texture.instantiate();
normal_texture.instantiate();
+ color_texture.instantiate();
+ uv_texture.instantiate();
+ uv2_texture.instantiate();
}
// VisualShaderNodeParticleMultiplyByAxisAngle
diff --git a/scene/resources/visual_shader_particle_nodes.h b/scene/resources/visual_shader_particle_nodes.h
index 0d0f21e4bf..79459432f1 100644
--- a/scene/resources/visual_shader_particle_nodes.h
+++ b/scene/resources/visual_shader_particle_nodes.h
@@ -115,6 +115,16 @@ class VisualShaderNodeParticleMeshEmitter : public VisualShaderNodeParticleEmitt
Ref<ImageTexture> position_texture;
Ref<ImageTexture> normal_texture;
+ Ref<ImageTexture> color_texture;
+ Ref<ImageTexture> uv_texture;
+ Ref<ImageTexture> uv2_texture;
+
+ String _generate_code(VisualShader::Type p_type, int p_id, const String *p_output_vars, int p_index, const String &p_texture_name, bool p_ignore_mode2d = false) const;
+
+ void _update_texture(const Vector<Vector2> &p_array, Ref<ImageTexture> &r_texture);
+ void _update_texture(const Vector<Vector3> &p_array, Ref<ImageTexture> &r_texture);
+ void _update_texture(const Vector<Color> &p_array, Ref<ImageTexture> &r_texture);
+ void _update_textures();
protected:
static void _bind_methods();
@@ -130,11 +140,9 @@ public:
virtual PortType get_input_port_type(int p_port) const override;
virtual String get_input_port_name(int p_port) const override;
- virtual String generate_global_per_node(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const override;
+ virtual String generate_global(Shader::Mode p_mode, VisualShader::Type p_type, int p_id) const override;
virtual String generate_code(Shader::Mode p_mode, VisualShader::Type p_type, int p_id, const String *p_input_vars, const String *p_output_vars, bool p_for_preview = false) const override;
- void update_texture();
-
void set_mesh(Ref<Mesh> p_mesh);
Ref<Mesh> get_mesh() const;
diff --git a/servers/physics_2d/godot_area_2d.cpp b/servers/physics_2d/godot_area_2d.cpp
index fb9d38e7ea..c4060615c9 100644
--- a/servers/physics_2d/godot_area_2d.cpp
+++ b/servers/physics_2d/godot_area_2d.cpp
@@ -213,6 +213,7 @@ void GodotArea2D::set_monitorable(bool p_monitorable) {
monitorable = p_monitorable;
_set_static(!monitorable);
+ _shapes_changed();
}
void GodotArea2D::call_queries() {
diff --git a/servers/physics_2d/godot_area_pair_2d.cpp b/servers/physics_2d/godot_area_pair_2d.cpp
index a98513004d..bde22aab11 100644
--- a/servers/physics_2d/godot_area_pair_2d.cpp
+++ b/servers/physics_2d/godot_area_pair_2d.cpp
@@ -128,7 +128,7 @@ bool GodotArea2Pair2D::setup(real_t p_step) {
process_collision_a = false;
if (result_a != colliding_a) {
- if (area_a->has_area_monitor_callback() && area_b->is_monitorable()) {
+ if (area_a->has_area_monitor_callback() && area_b_monitorable) {
process_collision_a = true;
process_collision = true;
}
@@ -137,7 +137,7 @@ bool GodotArea2Pair2D::setup(real_t p_step) {
process_collision_b = false;
if (result_b != colliding_b) {
- if (area_b->has_area_monitor_callback() && area_a->is_monitorable()) {
+ if (area_b->has_area_monitor_callback() && area_a_monitorable) {
process_collision_b = true;
process_collision = true;
}
@@ -176,19 +176,21 @@ GodotArea2Pair2D::GodotArea2Pair2D(GodotArea2D *p_area_a, int p_shape_a, GodotAr
area_b = p_area_b;
shape_a = p_shape_a;
shape_b = p_shape_b;
+ area_a_monitorable = area_a->is_monitorable();
+ area_b_monitorable = area_b->is_monitorable();
area_a->add_constraint(this);
area_b->add_constraint(this);
}
GodotArea2Pair2D::~GodotArea2Pair2D() {
if (colliding_a) {
- if (area_a->has_area_monitor_callback()) {
+ if (area_a->has_area_monitor_callback() && area_b_monitorable) {
area_a->remove_area_from_query(area_b, shape_b, shape_a);
}
}
if (colliding_b) {
- if (area_b->has_area_monitor_callback()) {
+ if (area_b->has_area_monitor_callback() && area_a_monitorable) {
area_b->remove_area_from_query(area_a, shape_a, shape_b);
}
}
diff --git a/servers/physics_2d/godot_area_pair_2d.h b/servers/physics_2d/godot_area_pair_2d.h
index 45bd3df1ed..f1290a27d0 100644
--- a/servers/physics_2d/godot_area_pair_2d.h
+++ b/servers/physics_2d/godot_area_pair_2d.h
@@ -62,6 +62,8 @@ class GodotArea2Pair2D : public GodotConstraint2D {
bool colliding_b = false;
bool process_collision_a = false;
bool process_collision_b = false;
+ bool area_a_monitorable;
+ bool area_b_monitorable;
public:
virtual bool setup(real_t p_step) override;
diff --git a/servers/physics_2d/godot_body_2d.cpp b/servers/physics_2d/godot_body_2d.cpp
index 9b97583300..6d1c5539aa 100644
--- a/servers/physics_2d/godot_body_2d.cpp
+++ b/servers/physics_2d/godot_body_2d.cpp
@@ -185,6 +185,9 @@ void GodotBody2D::set_param(PhysicsServer2D::BodyParameter p_param, const Varian
_update_transform_dependent();
} break;
case PhysicsServer2D::BODY_PARAM_GRAVITY_SCALE: {
+ if (Math::is_zero_approx(gravity_scale)) {
+ wakeup();
+ }
gravity_scale = p_value;
} break;
case PhysicsServer2D::BODY_PARAM_LINEAR_DAMP_MODE: {
diff --git a/servers/physics_2d/godot_space_2d.cpp b/servers/physics_2d/godot_space_2d.cpp
index 6465a5542c..7a5eb26bb3 100644
--- a/servers/physics_2d/godot_space_2d.cpp
+++ b/servers/physics_2d/godot_space_2d.cpp
@@ -439,8 +439,6 @@ bool GodotPhysicsDirectSpaceState2D::rest_info(const ShapeParameters &p_paramete
GodotShape2D *shape = GodotPhysicsServer2D::godot_singleton->shape_owner.get_or_null(p_parameters.shape_rid);
ERR_FAIL_COND_V(!shape, 0);
- real_t min_contact_depth = p_parameters.margin * TEST_MOTION_MIN_CONTACT_DEPTH_FACTOR;
-
Rect2 aabb = p_parameters.transform.xform(shape->get_aabb());
aabb = aabb.merge(Rect2(aabb.position + p_parameters.motion, aabb.size)); //motion
aabb = aabb.grow(p_parameters.margin);
@@ -448,10 +446,11 @@ bool GodotPhysicsDirectSpaceState2D::rest_info(const ShapeParameters &p_paramete
int amount = space->broadphase->cull_aabb(aabb, space->intersection_query_results, GodotSpace2D::INTERSECTION_QUERY_MAX, space->intersection_query_subindex_results);
_RestCallbackData2D rcd;
- rcd.best_len = 0;
- rcd.best_object = nullptr;
- rcd.best_shape = 0;
- rcd.min_allowed_depth = min_contact_depth;
+
+ // Allowed depth can't be lower than motion length, in order to handle contacts at low speed.
+ real_t motion_length = p_parameters.motion.length();
+ real_t min_contact_depth = p_parameters.margin * TEST_MOTION_MIN_CONTACT_DEPTH_FACTOR;
+ rcd.min_allowed_depth = MIN(motion_length, min_contact_depth);
for (int i = 0; i < amount; i++) {
if (!_can_collide_with(space->intersection_query_results[i], p_parameters.collision_mask, p_parameters.collide_with_bodies, p_parameters.collide_with_areas)) {
@@ -879,9 +878,6 @@ bool GodotSpace2D::test_body_motion(GodotBody2D *p_body, const PhysicsServer2D::
ugt.elements[2] += p_parameters.motion * unsafe;
_RestCallbackData2D rcd;
- rcd.best_len = 0;
- rcd.best_object = nullptr;
- rcd.best_shape = 0;
// Allowed depth can't be lower than motion length, in order to handle contacts at low speed.
rcd.min_allowed_depth = MIN(motion_length, min_contact_depth);
diff --git a/servers/physics_2d/godot_step_2d.cpp b/servers/physics_2d/godot_step_2d.cpp
index 84ec0e3c63..00d11acdab 100644
--- a/servers/physics_2d/godot_step_2d.cpp
+++ b/servers/physics_2d/godot_step_2d.cpp
@@ -152,6 +152,9 @@ void GodotStep2D::step(GodotSpace2D *p_space, real_t p_delta, int p_iterations)
p_space->set_active_objects(active_count);
+ // Update the broadphase to register collision pairs.
+ p_space->update();
+
{ //profile
profile_endtime = OS::get_singleton()->get_ticks_usec();
p_space->set_elapsed_time(GodotSpace2D::ELAPSED_TIME_INTEGRATE_FORCES, profile_endtime - profile_begtime);
@@ -286,7 +289,6 @@ void GodotStep2D::step(GodotSpace2D *p_space, real_t p_delta, int p_iterations)
all_constraints.clear();
- p_space->update();
p_space->unlock();
_step++;
}
diff --git a/servers/physics_3d/godot_area_3d.cpp b/servers/physics_3d/godot_area_3d.cpp
index 9cdad069fe..d4e14b8d85 100644
--- a/servers/physics_3d/godot_area_3d.cpp
+++ b/servers/physics_3d/godot_area_3d.cpp
@@ -242,6 +242,7 @@ void GodotArea3D::set_monitorable(bool p_monitorable) {
monitorable = p_monitorable;
_set_static(!monitorable);
+ _shapes_changed();
}
void GodotArea3D::call_queries() {
diff --git a/servers/physics_3d/godot_area_pair_3d.cpp b/servers/physics_3d/godot_area_pair_3d.cpp
index d3623178d5..58188565e3 100644
--- a/servers/physics_3d/godot_area_pair_3d.cpp
+++ b/servers/physics_3d/godot_area_pair_3d.cpp
@@ -129,7 +129,7 @@ bool GodotArea2Pair3D::setup(real_t p_step) {
process_collision_a = false;
if (result_a != colliding_a) {
- if (area_a->has_area_monitor_callback() && area_b->is_monitorable()) {
+ if (area_a->has_area_monitor_callback() && area_b_monitorable) {
process_collision_a = true;
process_collision = true;
}
@@ -138,7 +138,7 @@ bool GodotArea2Pair3D::setup(real_t p_step) {
process_collision_b = false;
if (result_b != colliding_b) {
- if (area_b->has_area_monitor_callback() && area_a->is_monitorable()) {
+ if (area_b->has_area_monitor_callback() && area_a_monitorable) {
process_collision_b = true;
process_collision = true;
}
@@ -177,19 +177,21 @@ GodotArea2Pair3D::GodotArea2Pair3D(GodotArea3D *p_area_a, int p_shape_a, GodotAr
area_b = p_area_b;
shape_a = p_shape_a;
shape_b = p_shape_b;
+ area_a_monitorable = area_a->is_monitorable();
+ area_b_monitorable = area_b->is_monitorable();
area_a->add_constraint(this);
area_b->add_constraint(this);
}
GodotArea2Pair3D::~GodotArea2Pair3D() {
if (colliding_a) {
- if (area_a->has_area_monitor_callback()) {
+ if (area_a->has_area_monitor_callback() && area_b_monitorable) {
area_a->remove_area_from_query(area_b, shape_b, shape_a);
}
}
if (colliding_b) {
- if (area_b->has_area_monitor_callback()) {
+ if (area_b->has_area_monitor_callback() && area_a_monitorable) {
area_b->remove_area_from_query(area_a, shape_a, shape_b);
}
}
diff --git a/servers/physics_3d/godot_area_pair_3d.h b/servers/physics_3d/godot_area_pair_3d.h
index 16175e9fa8..4237e7722e 100644
--- a/servers/physics_3d/godot_area_pair_3d.h
+++ b/servers/physics_3d/godot_area_pair_3d.h
@@ -63,6 +63,8 @@ class GodotArea2Pair3D : public GodotConstraint3D {
bool colliding_b = false;
bool process_collision_a = false;
bool process_collision_b = false;
+ bool area_a_monitorable;
+ bool area_b_monitorable;
public:
virtual bool setup(real_t p_step) override;
diff --git a/servers/physics_3d/godot_body_3d.cpp b/servers/physics_3d/godot_body_3d.cpp
index 0e21dd303f..40d946655d 100644
--- a/servers/physics_3d/godot_body_3d.cpp
+++ b/servers/physics_3d/godot_body_3d.cpp
@@ -227,6 +227,9 @@ void GodotBody3D::set_param(PhysicsServer3D::BodyParameter p_param, const Varian
_update_transform_dependent();
} break;
case PhysicsServer3D::BODY_PARAM_GRAVITY_SCALE: {
+ if (Math::is_zero_approx(gravity_scale)) {
+ wakeup();
+ }
gravity_scale = p_value;
} break;
case PhysicsServer3D::BODY_PARAM_LINEAR_DAMP_MODE: {
diff --git a/servers/physics_3d/godot_collision_solver_3d.cpp b/servers/physics_3d/godot_collision_solver_3d.cpp
index 686f3e4d59..540b16c6e3 100644
--- a/servers/physics_3d/godot_collision_solver_3d.cpp
+++ b/servers/physics_3d/godot_collision_solver_3d.cpp
@@ -264,7 +264,7 @@ bool GodotCollisionSolver3D::solve_soft_body(const GodotShape3D *p_shape_A, cons
local_aabb.size[i] = smax - smin;
}
- concave_shape_A->cull(local_aabb, soft_body_concave_callback, &query_cinfo);
+ concave_shape_A->cull(local_aabb, soft_body_concave_callback, &query_cinfo, true);
} else {
AABB shape_aabb = p_transform_A.xform(p_shape_A->get_aabb());
shape_aabb.grow_by(collision_margin);
@@ -346,7 +346,7 @@ bool GodotCollisionSolver3D::solve_concave(const GodotShape3D *p_shape_A, const
local_aabb.size[i] = smax - smin;
}
- concave_B->cull(local_aabb, concave_callback, &cinfo);
+ concave_B->cull(local_aabb, concave_callback, &cinfo, false);
return cinfo.collided;
}
@@ -559,7 +559,7 @@ bool GodotCollisionSolver3D::solve_distance(const GodotShape3D *p_shape_A, const
local_aabb.size[i] = smax - smin;
}
- concave_B->cull(local_aabb, concave_distance_callback, &cinfo);
+ concave_B->cull(local_aabb, concave_distance_callback, &cinfo, false);
if (!cinfo.collided) {
r_point_A = cinfo.close_A;
r_point_B = cinfo.close_B;
diff --git a/servers/physics_3d/godot_collision_solver_3d_sat.cpp b/servers/physics_3d/godot_collision_solver_3d_sat.cpp
index 0790333f65..4faa07b6c9 100644
--- a/servers/physics_3d/godot_collision_solver_3d_sat.cpp
+++ b/servers/physics_3d/godot_collision_solver_3d_sat.cpp
@@ -36,6 +36,8 @@
#define fallback_collision_solver gjk_epa_calculate_penetration
+#define _BACKFACE_NORMAL_THRESHOLD -0.0002
+
// Cylinder SAT analytic methods and face-circle contact points for cylinder-trimesh and cylinder-box collision are based on ODE colliders.
/*
@@ -612,13 +614,14 @@ class SeparatorAxisTest {
const Transform3D *transform_A = nullptr;
const Transform3D *transform_B = nullptr;
real_t best_depth = 1e15;
- Vector3 best_axis;
_CollectorCallback *callback = nullptr;
real_t margin_A = 0.0;
real_t margin_B = 0.0;
Vector3 separator_axis;
public:
+ Vector3 best_axis;
+
_FORCE_INLINE_ bool test_previous_axis() {
if (callback && callback->prev_axis && *callback->prev_axis != Vector3()) {
return test_axis(*callback->prev_axis);
@@ -627,7 +630,7 @@ public:
}
}
- _FORCE_INLINE_ bool test_axis(const Vector3 &p_axis, bool p_directional = false) {
+ _FORCE_INLINE_ bool test_axis(const Vector3 &p_axis) {
Vector3 axis = p_axis;
if (axis.is_equal_approx(Vector3())) {
@@ -661,12 +664,7 @@ public:
//use the smallest depth
if (min_B < 0.0) { // could be +0.0, we don't want it to become -0.0
- if (p_directional) {
- min_B = max_B;
- axis = -axis;
- } else {
- min_B = -min_B;
- }
+ min_B = -min_B;
}
if (max_B < min_B) {
@@ -1014,7 +1012,7 @@ static void _collision_sphere_face(const GodotShape3D *p_a, const Transform3D &p
Vector3 normal = (vertex[0] - vertex[2]).cross(vertex[0] - vertex[1]).normalized();
- if (!separator.test_axis(normal, !face_B->backface_collision)) {
+ if (!separator.test_axis(normal)) {
return;
}
@@ -1041,6 +1039,17 @@ static void _collision_sphere_face(const GodotShape3D *p_a, const Transform3D &p
}
}
+ if (!face_B->backface_collision) {
+ if (separator.best_axis.dot(normal) < _BACKFACE_NORMAL_THRESHOLD) {
+ if (face_B->invert_backface_collision) {
+ separator.best_axis = separator.best_axis.bounce(normal);
+ } else {
+ // Just ignore backface collision.
+ return;
+ }
+ }
+ }
+
separator.generate_contacts();
}
@@ -1486,7 +1495,7 @@ static void _collision_box_face(const GodotShape3D *p_a, const Transform3D &p_tr
Vector3 normal = (vertex[0] - vertex[2]).cross(vertex[0] - vertex[1]).normalized();
- if (!separator.test_axis(normal, !face_B->backface_collision)) {
+ if (!separator.test_axis(normal)) {
return;
}
@@ -1591,6 +1600,17 @@ static void _collision_box_face(const GodotShape3D *p_a, const Transform3D &p_tr
}
}
+ if (!face_B->backface_collision) {
+ if (separator.best_axis.dot(normal) < _BACKFACE_NORMAL_THRESHOLD) {
+ if (face_B->invert_backface_collision) {
+ separator.best_axis = separator.best_axis.bounce(normal);
+ } else {
+ // Just ignore backface collision.
+ return;
+ }
+ }
+ }
+
separator.generate_contacts();
}
@@ -1802,7 +1822,7 @@ static void _collision_capsule_face(const GodotShape3D *p_a, const Transform3D &
Vector3 normal = (vertex[0] - vertex[2]).cross(vertex[0] - vertex[1]).normalized();
- if (!separator.test_axis(normal, !face_B->backface_collision)) {
+ if (!separator.test_axis(normal)) {
return;
}
@@ -1858,6 +1878,17 @@ static void _collision_capsule_face(const GodotShape3D *p_a, const Transform3D &
}
}
+ if (!face_B->backface_collision) {
+ if (separator.best_axis.dot(normal) < _BACKFACE_NORMAL_THRESHOLD) {
+ if (face_B->invert_backface_collision) {
+ separator.best_axis = separator.best_axis.bounce(normal);
+ } else {
+ // Just ignore backface collision.
+ return;
+ }
+ }
+ }
+
separator.generate_contacts();
}
@@ -1952,7 +1983,7 @@ static void _collision_cylinder_face(const GodotShape3D *p_a, const Transform3D
Vector3 normal = (vertex[0] - vertex[2]).cross(vertex[0] - vertex[1]).normalized();
// Face B normal.
- if (!separator.test_axis(normal, !face_B->backface_collision)) {
+ if (!separator.test_axis(normal)) {
return;
}
@@ -2034,6 +2065,17 @@ static void _collision_cylinder_face(const GodotShape3D *p_a, const Transform3D
}
}
+ if (!face_B->backface_collision) {
+ if (separator.best_axis.dot(normal) < _BACKFACE_NORMAL_THRESHOLD) {
+ if (face_B->invert_backface_collision) {
+ separator.best_axis = separator.best_axis.bounce(normal);
+ } else {
+ // Just ignore backface collision.
+ return;
+ }
+ }
+ }
+
separator.generate_contacts();
}
@@ -2174,7 +2216,7 @@ static void _collision_convex_polygon_face(const GodotShape3D *p_a, const Transf
Vector3 normal = (vertex[0] - vertex[2]).cross(vertex[0] - vertex[1]).normalized();
- if (!separator.test_axis(normal, !face_B->backface_collision)) {
+ if (!separator.test_axis(normal)) {
return;
}
@@ -2266,6 +2308,17 @@ static void _collision_convex_polygon_face(const GodotShape3D *p_a, const Transf
}
}
+ if (!face_B->backface_collision) {
+ if (separator.best_axis.dot(normal) < _BACKFACE_NORMAL_THRESHOLD) {
+ if (face_B->invert_backface_collision) {
+ separator.best_axis = separator.best_axis.bounce(normal);
+ } else {
+ // Just ignore backface collision.
+ return;
+ }
+ }
+ }
+
separator.generate_contacts();
}
diff --git a/servers/physics_3d/godot_shape_3d.cpp b/servers/physics_3d/godot_shape_3d.cpp
index b520ee45c7..5364a9833d 100644
--- a/servers/physics_3d/godot_shape_3d.cpp
+++ b/servers/physics_3d/godot_shape_3d.cpp
@@ -430,7 +430,7 @@ Vector3 GodotBoxShape3D::get_closest_point_to(const Vector3 &p_point) const {
if (outside == 1) {
//use plane if only one side matches
Vector3 n;
- n[i] = SGN(p_point[i]);
+ n[i] = SIGN(p_point[i]);
Plane p(n, half_extents[i]);
min_point = p.project(p_point);
@@ -1401,7 +1401,7 @@ bool GodotConcavePolygonShape3D::_cull(int p_idx, _CullParams *p_params) const {
return false;
}
-void GodotConcavePolygonShape3D::cull(const AABB &p_local_aabb, QueryCallback p_callback, void *p_userdata) const {
+void GodotConcavePolygonShape3D::cull(const AABB &p_local_aabb, QueryCallback p_callback, void *p_userdata, bool p_invert_backface_collision) const {
// make matrix local to concave
if (faces.size() == 0) {
return;
@@ -1416,6 +1416,7 @@ void GodotConcavePolygonShape3D::cull(const AABB &p_local_aabb, QueryCallback p_
GodotFaceShape3D face; // use this to send in the callback
face.backface_collision = backface_collision;
+ face.invert_backface_collision = p_invert_backface_collision;
_CullParams params;
params.aabb = local_aabb;
@@ -1961,7 +1962,7 @@ void GodotHeightMapShape3D::_get_cell(const Vector3 &p_point, int &r_x, int &r_y
r_z = (clamped_point.z < 0.0) ? (clamped_point.z - 0.5) : (clamped_point.z + 0.5);
}
-void GodotHeightMapShape3D::cull(const AABB &p_local_aabb, QueryCallback p_callback, void *p_userdata) const {
+void GodotHeightMapShape3D::cull(const AABB &p_local_aabb, QueryCallback p_callback, void *p_userdata, bool p_invert_backface_collision) const {
if (heights.is_empty()) {
return;
}
@@ -1988,7 +1989,8 @@ void GodotHeightMapShape3D::cull(const AABB &p_local_aabb, QueryCallback p_callb
int end_z = MIN(depth - 1, aabb_max[2]);
GodotFaceShape3D face;
- face.backface_collision = true;
+ face.backface_collision = !p_invert_backface_collision;
+ face.invert_backface_collision = p_invert_backface_collision;
for (int z = start_z; z < end_z; z++) {
for (int x = start_x; x < end_x; x++) {
diff --git a/servers/physics_3d/godot_shape_3d.h b/servers/physics_3d/godot_shape_3d.h
index 7a32b69166..43319510d4 100644
--- a/servers/physics_3d/godot_shape_3d.h
+++ b/servers/physics_3d/godot_shape_3d.h
@@ -107,7 +107,7 @@ public:
// Returns true to stop the query.
typedef bool (*QueryCallback)(void *p_userdata, GodotShape3D *p_convex);
- virtual void cull(const AABB &p_local_aabb, QueryCallback p_callback, void *p_userdata) const = 0;
+ virtual void cull(const AABB &p_local_aabb, QueryCallback p_callback, void *p_userdata, bool p_invert_backface_collision) const = 0;
GodotConcaveShape3D() {}
};
@@ -370,7 +370,7 @@ public:
virtual bool intersect_point(const Vector3 &p_point) const override;
virtual Vector3 get_closest_point_to(const Vector3 &p_point) const override;
- virtual void cull(const AABB &p_local_aabb, QueryCallback p_callback, void *p_userdata) const override;
+ virtual void cull(const AABB &p_local_aabb, QueryCallback p_callback, void *p_userdata, bool p_invert_backface_collision) const override;
virtual Vector3 get_moment_of_inertia(real_t p_mass) const override;
@@ -433,7 +433,7 @@ public:
virtual bool intersect_point(const Vector3 &p_point) const override;
virtual Vector3 get_closest_point_to(const Vector3 &p_point) const override;
- virtual void cull(const AABB &p_local_aabb, QueryCallback p_callback, void *p_userdata) const override;
+ virtual void cull(const AABB &p_local_aabb, QueryCallback p_callback, void *p_userdata, bool p_invert_backface_collision) const override;
virtual Vector3 get_moment_of_inertia(real_t p_mass) const override;
@@ -448,6 +448,7 @@ struct GodotFaceShape3D : public GodotShape3D {
Vector3 normal; //cache
Vector3 vertex[3];
bool backface_collision = false;
+ bool invert_backface_collision = false;
virtual PhysicsServer3D::ShapeType get_type() const override { return PhysicsServer3D::SHAPE_CONCAVE_POLYGON; }
diff --git a/servers/physics_3d/godot_soft_body_3d.cpp b/servers/physics_3d/godot_soft_body_3d.cpp
index b8e9ab4fb9..231b8686f5 100644
--- a/servers/physics_3d/godot_soft_body_3d.cpp
+++ b/servers/physics_3d/godot_soft_body_3d.cpp
@@ -964,12 +964,6 @@ void GodotSoftBody3D::apply_forces(const LocalVector<GodotArea3D *> &p_wind_area
}
}
-void GodotSoftBody3D::_compute_area_gravity(const GodotArea3D *p_area) {
- Vector3 area_gravity;
- p_area->compute_gravity(get_transform().get_origin(), area_gravity);
- gravity += area_gravity;
-}
-
Vector3 GodotSoftBody3D::_compute_area_windforce(const GodotArea3D *p_area, const Face *p_face) {
real_t wfm = p_area->get_wind_force_magnitude();
real_t waf = p_area->get_wind_attenuation_factor();
@@ -987,12 +981,12 @@ void GodotSoftBody3D::predict_motion(real_t p_delta) {
ERR_FAIL_COND(!get_space());
- int ac = areas.size();
-
bool gravity_done = false;
+ Vector3 gravity;
LocalVector<GodotArea3D *> wind_areas;
+ int ac = areas.size();
if (ac) {
areas.sort();
const AreaCMP *aa = &areas[0];
diff --git a/servers/physics_3d/godot_soft_body_3d.h b/servers/physics_3d/godot_soft_body_3d.h
index c03951959f..5198186b5d 100644
--- a/servers/physics_3d/godot_soft_body_3d.h
+++ b/servers/physics_3d/godot_soft_body_3d.h
@@ -101,8 +101,6 @@ class GodotSoftBody3D : public GodotCollisionObject3D {
real_t drag_coefficient = 0.0; // [0,1]
LocalVector<int> pinned_vertices;
- Vector3 gravity;
-
SelfList<GodotSoftBody3D> active_list;
Set<GodotConstraint3D *> constraints;
@@ -113,7 +111,6 @@ class GodotSoftBody3D : public GodotCollisionObject3D {
uint64_t island_step = 0;
- _FORCE_INLINE_ void _compute_area_gravity(const GodotArea3D *p_area);
_FORCE_INLINE_ Vector3 _compute_area_windforce(const GodotArea3D *p_area, const Face *p_face);
public:
diff --git a/servers/physics_3d/godot_space_3d.cpp b/servers/physics_3d/godot_space_3d.cpp
index e2f90b90ad..f503273c88 100644
--- a/servers/physics_3d/godot_space_3d.cpp
+++ b/servers/physics_3d/godot_space_3d.cpp
@@ -507,15 +507,17 @@ bool GodotPhysicsDirectSpaceState3D::rest_info(const ShapeParameters &p_paramete
GodotShape3D *shape = GodotPhysicsServer3D::godot_singleton->shape_owner.get_or_null(p_parameters.shape_rid);
ERR_FAIL_COND_V(!shape, 0);
- real_t min_contact_depth = p_parameters.margin * TEST_MOTION_MIN_CONTACT_DEPTH_FACTOR;
-
AABB aabb = p_parameters.transform.xform(shape->get_aabb());
aabb = aabb.grow(p_parameters.margin);
int amount = space->broadphase->cull_aabb(aabb, space->intersection_query_results, GodotSpace3D::INTERSECTION_QUERY_MAX, space->intersection_query_subindex_results);
_RestCallbackData rcd;
- rcd.min_allowed_depth = min_contact_depth;
+
+ // Allowed depth can't be lower than motion length, in order to handle contacts at low speed.
+ real_t motion_length = p_parameters.motion.length();
+ real_t min_contact_depth = p_parameters.margin * TEST_MOTION_MIN_CONTACT_DEPTH_FACTOR;
+ rcd.min_allowed_depth = MIN(motion_length, min_contact_depth);
for (int i = 0; i < amount; i++) {
if (!_can_collide_with(space->intersection_query_results[i], p_parameters.collision_mask, p_parameters.collide_with_bodies, p_parameters.collide_with_areas)) {
diff --git a/servers/physics_3d/godot_step_3d.cpp b/servers/physics_3d/godot_step_3d.cpp
index 331d65df49..5453c4415c 100644
--- a/servers/physics_3d/godot_step_3d.cpp
+++ b/servers/physics_3d/godot_step_3d.cpp
@@ -220,6 +220,9 @@ void GodotStep3D::step(GodotSpace3D *p_space, real_t p_delta, int p_iterations)
p_space->set_active_objects(active_count);
+ // Update the broadphase to register collision pairs.
+ p_space->update();
+
{ //profile
profile_endtime = OS::get_singleton()->get_ticks_usec();
p_space->set_elapsed_time(GodotSpace3D::ELAPSED_TIME_INTEGRATE_FORCES, profile_endtime - profile_begtime);
@@ -398,7 +401,6 @@ void GodotStep3D::step(GodotSpace3D *p_space, real_t p_delta, int p_iterations)
all_constraints.clear();
- p_space->update();
p_space->unlock();
_step++;
}
diff --git a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp
index 22e3bbdb00..6d85c1f4c1 100644
--- a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp
+++ b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.cpp
@@ -334,6 +334,10 @@ void RenderForwardClustered::_render_list_template(RenderingDevice::DrawListID p
const GeometryInstanceSurfaceDataCache *surf = p_params->elements[i];
const RenderElementInfo &element_info = p_params->element_info[i];
+ if ((p_pass_mode == PASS_MODE_COLOR || p_pass_mode == PASS_MODE_COLOR_SPECULAR) && !(surf->flags & GeometryInstanceSurfaceDataCache::FLAG_PASS_OPAQUE)) {
+ continue; // Objects with "Depth-prepass" transparency are included in both render lists, but should only be rendered in the transparent pass
+ }
+
if (surf->owner->instance_count == 0) {
continue;
}
@@ -958,20 +962,20 @@ void RenderForwardClustered::_fill_render_list(RenderListType p_render_list, con
bool uses_gi = false;
float fade_alpha = 1.0;
- if (p_render_list == RENDER_LIST_OPAQUE) {
- if (inst->fade_near || inst->fade_far) {
- float fade_dist = inst->transform.origin.distance_to(p_render_data->cam_transform.origin);
- if (inst->fade_far && fade_dist > inst->fade_far_begin) {
- fade_alpha = MAX(0.0, 1.0 - (fade_dist - inst->fade_far_begin) / (inst->fade_far_end - inst->fade_far_begin));
- } else if (inst->fade_near && fade_dist < inst->fade_near_end) {
- fade_alpha = MAX(0.0, (fade_dist - inst->fade_near_begin) / (inst->fade_near_end - inst->fade_near_begin));
- }
+ if (inst->fade_near || inst->fade_far) {
+ float fade_dist = inst->transform.origin.distance_to(p_render_data->cam_transform.origin);
+ if (inst->fade_far && fade_dist > inst->fade_far_begin) {
+ fade_alpha = MAX(0.0, 1.0 - (fade_dist - inst->fade_far_begin) / (inst->fade_far_end - inst->fade_far_begin));
+ } else if (inst->fade_near && fade_dist < inst->fade_near_end) {
+ fade_alpha = MAX(0.0, (fade_dist - inst->fade_near_begin) / (inst->fade_near_end - inst->fade_near_begin));
}
+ }
- fade_alpha *= inst->force_alpha * inst->parent_fade_alpha;
+ fade_alpha *= inst->force_alpha * inst->parent_fade_alpha;
- flags = (flags & ~INSTANCE_DATA_FLAGS_FADE_MASK) | (uint32_t(fade_alpha * 255.0) << INSTANCE_DATA_FLAGS_FADE_SHIFT);
+ flags = (flags & ~INSTANCE_DATA_FLAGS_FADE_MASK) | (uint32_t(fade_alpha * 255.0) << INSTANCE_DATA_FLAGS_FADE_SHIFT);
+ if (p_render_list == RENDER_LIST_OPAQUE) {
// Setup GI
if (inst->lightmap_instance.is_valid()) {
int32_t lightmap_cull_index = -1;
@@ -1206,6 +1210,7 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co
scene_state.ubo.viewport_size[0] = vp_he.x;
scene_state.ubo.viewport_size[1] = vp_he.y;
scene_state.ubo.directional_light_count = 0;
+ scene_state.ubo.opaque_prepass_threshold = 0.99f;
Size2i screen_size;
RID opaque_framebuffer;
@@ -1449,6 +1454,7 @@ void RenderForwardClustered::_render_scene(RenderDataRD *p_render_data, const Co
RD::get_singleton()->draw_command_begin_label("Render Opaque Pass");
scene_state.ubo.directional_light_count = p_render_data->directional_light_count;
+ scene_state.ubo.opaque_prepass_threshold = 0.0f;
_setup_environment(p_render_data, p_render_data->reflection_probe.is_valid(), screen_size, !p_render_data->reflection_probe.is_valid(), p_default_bg_color, p_render_data->render_buffers.is_valid());
@@ -1632,6 +1638,7 @@ void RenderForwardClustered::_render_shadow_append(RID p_framebuffer, const Page
render_data.render_info = p_render_info;
scene_state.ubo.dual_paraboloid_side = p_use_dp_flip ? -1 : 1;
+ scene_state.ubo.opaque_prepass_threshold = 0.1f;
_setup_environment(&render_data, true, Vector2(1, 1), !p_flip_y, Color(), false, p_use_pancake, shadow_pass_index);
@@ -1718,6 +1725,7 @@ void RenderForwardClustered::_render_particle_collider_heightfield(RID p_fb, con
_update_render_base_uniform_set();
scene_state.ubo.dual_paraboloid_side = 0;
+ scene_state.ubo.opaque_prepass_threshold = 0.0;
_setup_environment(&render_data, true, Vector2(1, 1), true, Color(), false, false);
@@ -1755,6 +1763,7 @@ void RenderForwardClustered::_render_material(const Transform3D &p_cam_transform
scene_state.ubo.dual_paraboloid_side = 0;
scene_state.ubo.material_uv2_mode = false;
+ scene_state.ubo.opaque_prepass_threshold = 0.0f;
_setup_environment(&render_data, true, Vector2(1, 1), false, Color());
@@ -1798,6 +1807,7 @@ void RenderForwardClustered::_render_uv2(const PagedArray<GeometryInstance *> &p
scene_state.ubo.dual_paraboloid_side = 0;
scene_state.ubo.material_uv2_mode = true;
+ scene_state.ubo.opaque_prepass_threshold = 0.0;
_setup_environment(&render_data, true, Vector2(1, 1), false, Color());
diff --git a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h
index 2ba9558128..7707d77296 100644
--- a/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h
+++ b/servers/rendering/renderer_rd/forward_clustered/render_forward_clustered.h
@@ -257,7 +257,8 @@ class RenderForwardClustered : public RendererSceneRenderRD {
float roughness_limiter_amount;
float roughness_limiter_limit;
- uint32_t roughness_limiter_pad[2];
+ float opaque_prepass_threshold;
+ uint32_t roughness_limiter_pad;
float sdf_to_bounds[16];
diff --git a/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp b/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp
index 6ae76c9bf2..768bd1de9d 100644
--- a/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp
+++ b/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp
@@ -585,6 +585,7 @@ void SceneShaderForwardClustered::init(RendererStorageRD *p_storage, const Strin
actions.renames["CUSTOM1"] = "custom1_attrib";
actions.renames["CUSTOM2"] = "custom2_attrib";
actions.renames["CUSTOM3"] = "custom3_attrib";
+ actions.renames["OUTPUT_IS_SRGB"] = "SHADER_IS_SRGB";
// not implemented but need these just in case code is in the shaders
actions.renames["VIEW_INDEX"] = "0";
@@ -649,6 +650,7 @@ void SceneShaderForwardClustered::init(RendererStorageRD *p_storage, const Strin
actions.render_mode_defines["cull_front"] = "#define DO_SIDE_CHECK\n";
actions.render_mode_defines["cull_disabled"] = "#define DO_SIDE_CHECK\n";
actions.render_mode_defines["particle_trails"] = "#define USE_PARTICLE_TRAILS\n";
+ actions.render_mode_defines["depth_draw_opaque"] = "#define USE_OPAQUE_PREPASS\n";
bool force_lambert = GLOBAL_GET("rendering/shading/overrides/force_lambert_over_burley");
diff --git a/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp b/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp
index f23a386acf..445623fb86 100644
--- a/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp
+++ b/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp
@@ -483,6 +483,7 @@ void RenderForwardMobile::_render_scene(RenderDataRD *p_render_data, const Color
scene_state.ubo.viewport_size[0] = vp_he.x;
scene_state.ubo.viewport_size[1] = vp_he.y;
scene_state.ubo.directional_light_count = 0;
+ scene_state.ubo.opaque_prepass_threshold = 0.0;
// We can only use our full subpass approach if we're:
// - not reading from SCREEN_TEXTURE/DEPTH_TEXTURE
@@ -793,7 +794,7 @@ void RenderForwardMobile::_render_scene(RenderDataRD *p_render_data, const Color
if (using_subpass_transparent) {
RD::FramebufferFormatID fb_format = RD::get_singleton()->framebuffer_get_format(framebuffer);
- RenderListParameters render_list_params(render_list[RENDER_LIST_ALPHA].elements.ptr(), render_list[RENDER_LIST_ALPHA].element_info.ptr(), render_list[RENDER_LIST_ALPHA].elements.size(), reverse_cull, PASS_MODE_COLOR, rp_uniform_set, spec_constant_base_flags, get_debug_draw_mode() == RS::VIEWPORT_DEBUG_DRAW_WIREFRAME, Vector2(), p_render_data->lod_camera_plane, p_render_data->lod_distance_multiplier, p_render_data->screen_lod_threshold, p_render_data->view_count);
+ RenderListParameters render_list_params(render_list[RENDER_LIST_ALPHA].elements.ptr(), render_list[RENDER_LIST_ALPHA].element_info.ptr(), render_list[RENDER_LIST_ALPHA].elements.size(), reverse_cull, PASS_MODE_COLOR_TRANSPARENT, rp_uniform_set, spec_constant_base_flags, get_debug_draw_mode() == RS::VIEWPORT_DEBUG_DRAW_WIREFRAME, Vector2(), p_render_data->lod_camera_plane, p_render_data->lod_distance_multiplier, p_render_data->screen_lod_threshold, p_render_data->view_count);
render_list_params.framebuffer_format = fb_format;
if ((uint32_t)render_list_params.element_count > render_list_thread_threshold && false) {
// secondary command buffers need more testing at this time
@@ -897,6 +898,7 @@ void RenderForwardMobile::_render_shadow_append(RID p_framebuffer, const PagedAr
render_data.lod_distance_multiplier = p_lod_distance_multiplier;
scene_state.ubo.dual_paraboloid_side = p_use_dp_flip ? -1 : 1;
+ scene_state.ubo.opaque_prepass_threshold = 0.1;
_setup_environment(&render_data, true, Vector2(1, 1), !p_flip_y, Color(), false, p_use_pancake, shadow_pass_index);
@@ -978,6 +980,7 @@ void RenderForwardMobile::_render_material(const Transform3D &p_cam_transform, c
scene_state.ubo.dual_paraboloid_side = 0;
scene_state.ubo.material_uv2_mode = false;
+ scene_state.ubo.opaque_prepass_threshold = 0.0f;
RenderDataRD render_data;
render_data.cam_projection = p_cam_projection;
@@ -1089,6 +1092,7 @@ void RenderForwardMobile::_render_particle_collider_heightfield(RID p_fb, const
_update_render_base_uniform_set();
scene_state.ubo.dual_paraboloid_side = 0;
+ scene_state.ubo.opaque_prepass_threshold = 0.0;
RenderDataRD render_data;
render_data.cam_projection = p_cam_projection;
@@ -1447,13 +1451,13 @@ void RenderForwardMobile::_fill_render_list(RenderListType p_render_list, const
}
// ADD Element
- if (p_pass_mode == PASS_MODE_COLOR) {
+ if (p_pass_mode == PASS_MODE_COLOR || p_pass_mode == PASS_MODE_COLOR_TRANSPARENT) {
#ifdef DEBUG_ENABLED
bool force_alpha = unlikely(get_debug_draw_mode() == RS::VIEWPORT_DEBUG_DRAW_OVERDRAW);
#else
bool force_alpha = false;
#endif
- if (!force_alpha && (surf->flags & (GeometryInstanceSurfaceDataCache::FLAG_PASS_DEPTH | GeometryInstanceSurfaceDataCache::FLAG_PASS_OPAQUE))) {
+ if (!force_alpha && (surf->flags & GeometryInstanceSurfaceDataCache::FLAG_PASS_OPAQUE)) {
rl->add_element(surf);
}
if (force_alpha || (surf->flags & GeometryInstanceSurfaceDataCache::FLAG_PASS_ALPHA)) {
diff --git a/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.h b/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.h
index 74bfe16557..485d08b589 100644
--- a/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.h
+++ b/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.h
@@ -292,7 +292,8 @@ protected:
float roughness_limiter_amount;
float roughness_limiter_limit;
- uint32_t roughness_limiter_pad[2];
+ float opaque_prepass_threshold;
+ uint32_t roughness_limiter_pad;
// Fog
uint32_t fog_enabled;
diff --git a/servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.cpp b/servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.cpp
index 3a6c945052..e6d9a60f94 100644
--- a/servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.cpp
+++ b/servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.cpp
@@ -573,6 +573,7 @@ void SceneShaderForwardMobile::init(RendererStorageRD *p_storage, const String p
actions.renames["CUSTOM1"] = "custom1_attrib";
actions.renames["CUSTOM2"] = "custom2_attrib";
actions.renames["CUSTOM3"] = "custom3_attrib";
+ actions.renames["OUTPUT_IS_SRGB"] = "SHADER_IS_SRGB";
actions.renames["VIEW_INDEX"] = "ViewIndex";
actions.renames["VIEW_MONO_LEFT"] = "0";
@@ -636,6 +637,7 @@ void SceneShaderForwardMobile::init(RendererStorageRD *p_storage, const String p
actions.render_mode_defines["cull_front"] = "#define DO_SIDE_CHECK\n";
actions.render_mode_defines["cull_disabled"] = "#define DO_SIDE_CHECK\n";
actions.render_mode_defines["particle_trails"] = "#define USE_PARTICLE_TRAILS\n";
+ actions.render_mode_defines["depth_draw_opaque"] = "#define USE_OPAQUE_PREPASS\n";
bool force_lambert = GLOBAL_GET("rendering/shading/overrides/force_lambert_over_burley");
if (!force_lambert) {
diff --git a/servers/rendering/renderer_rd/renderer_storage_rd.cpp b/servers/rendering/renderer_rd/renderer_storage_rd.cpp
index 64be176d24..04753d7a9b 100644
--- a/servers/rendering/renderer_rd/renderer_storage_rd.cpp
+++ b/servers/rendering/renderer_rd/renderer_storage_rd.cpp
@@ -2868,7 +2868,7 @@ bool RendererStorageRD::MaterialData::update_parameters_uniform_set(const Map<St
//check whether buffer changed
if (p_uniform_dirty && ubo_data.size()) {
- update_uniform_buffer(p_uniforms, p_uniform_offsets, p_parameters, ubo_data.ptrw(), ubo_data.size(), false);
+ update_uniform_buffer(p_uniforms, p_uniform_offsets, p_parameters, ubo_data.ptrw(), ubo_data.size(), true);
RD::get_singleton()->buffer_update(uniform_buffer, 0, ubo_data.size(), ubo_data.ptrw(), p_barrier);
}
diff --git a/servers/rendering/renderer_rd/shader_compiler_rd.cpp b/servers/rendering/renderer_rd/shader_compiler_rd.cpp
index 215959bb6a..f7c8ca1487 100644
--- a/servers/rendering/renderer_rd/shader_compiler_rd.cpp
+++ b/servers/rendering/renderer_rd/shader_compiler_rd.cpp
@@ -227,6 +227,13 @@ static String _prestr(SL::DataPrecision p_pres, bool p_force_highp = false) {
return "";
}
+static String _constr(bool p_is_const) {
+ if (p_is_const) {
+ return "const ";
+ }
+ return "";
+}
+
static String _qualstr(SL::ArgumentQualifier p_qual) {
switch (p_qual) {
case SL::ARGUMENT_QUALIFIER_IN:
@@ -417,9 +424,7 @@ void ShaderCompilerRD::_dump_function_deps(const SL::ShaderNode *p_node, const S
if (i > 0) {
header += ", ";
}
- if (fnode->arguments[i].is_const) {
- header += "const ";
- }
+ header += _constr(fnode->arguments[i].is_const);
if (fnode->arguments[i].type == SL::TYPE_STRUCT) {
header += _qualstr(fnode->arguments[i].qualifier) + _mkid(fnode->arguments[i].type_str) + " " + _mkid(fnode->arguments[i].name);
} else {
@@ -791,7 +796,7 @@ String ShaderCompilerRD::_dump_node_code(const SL::Node *p_node, int p_level, Ge
for (int i = 0; i < pnode->vconstants.size(); i++) {
const SL::ShaderNode::Constant &cnode = pnode->vconstants[i];
String gcode;
- gcode += "const ";
+ gcode += _constr(true);
gcode += _prestr(cnode.precision, ShaderLanguage::is_float_type(cnode.type));
if (cnode.type == SL::TYPE_STRUCT) {
gcode += _mkid(cnode.type_str);
@@ -875,9 +880,7 @@ String ShaderCompilerRD::_dump_node_code(const SL::Node *p_node, int p_level, Ge
SL::VariableDeclarationNode *vdnode = (SL::VariableDeclarationNode *)p_node;
String declaration;
- if (vdnode->is_const) {
- declaration += "const ";
- }
+ declaration += _constr(vdnode->is_const);
if (vdnode->datatype == SL::TYPE_STRUCT) {
declaration += _mkid(vdnode->struct_name);
} else {
@@ -997,9 +1000,7 @@ String ShaderCompilerRD::_dump_node_code(const SL::Node *p_node, int p_level, Ge
case SL::Node::TYPE_ARRAY_DECLARATION: {
SL::ArrayDeclarationNode *adnode = (SL::ArrayDeclarationNode *)p_node;
String declaration;
- if (adnode->is_const) {
- declaration += "const ";
- }
+ declaration += _constr(adnode->is_const);
if (adnode->datatype == SL::TYPE_STRUCT) {
declaration += _mkid(adnode->struct_name);
} else {
diff --git a/servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl b/servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl
index 83c02d08a7..8e33610ae2 100644
--- a/servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl
+++ b/servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl
@@ -6,6 +6,8 @@
#include "scene_forward_clustered_inc.glsl"
+#define SHADER_IS_SRGB false
+
/* INPUT ATTRIBS */
layout(location = 0) in vec3 vertex_attrib;
@@ -358,6 +360,8 @@ void main() {
#VERSION_DEFINES
+#define SHADER_IS_SRGB false
+
/* Specialization Constants (Toggles) */
layout(constant_id = 0) const bool sc_use_forward_gi = false;
@@ -691,7 +695,7 @@ void main() {
#endif // ALPHA_ANTIALIASING_EDGE_USED
#ifdef USE_OPAQUE_PREPASS
- if (alpha < opaque_prepass_threshold) {
+ if (alpha < scene_data.opaque_prepass_threshold) {
discard;
}
#endif // USE_OPAQUE_PREPASS
@@ -1707,7 +1711,7 @@ void main() {
#ifdef USE_OPAQUE_PREPASS
- if (alpha < opaque_prepass_threshold) {
+ if (alpha < scene_data.opaque_prepass_threshold) {
discard;
}
diff --git a/servers/rendering/renderer_rd/shaders/scene_forward_clustered_inc.glsl b/servers/rendering/renderer_rd/shaders/scene_forward_clustered_inc.glsl
index c8489f2137..be29cf4f58 100644
--- a/servers/rendering/renderer_rd/shaders/scene_forward_clustered_inc.glsl
+++ b/servers/rendering/renderer_rd/shaders/scene_forward_clustered_inc.glsl
@@ -208,7 +208,8 @@ layout(set = 1, binding = 0, std140) uniform SceneData {
float roughness_limiter_amount;
float roughness_limiter_limit;
- uvec2 roughness_limiter_pad;
+ float opaque_prepass_threshold;
+ uint roughness_limiter_pad;
mat4 sdf_to_bounds;
diff --git a/servers/rendering/renderer_rd/shaders/scene_forward_mobile.glsl b/servers/rendering/renderer_rd/shaders/scene_forward_mobile.glsl
index e2fec87d2a..e92fbecfd0 100644
--- a/servers/rendering/renderer_rd/shaders/scene_forward_mobile.glsl
+++ b/servers/rendering/renderer_rd/shaders/scene_forward_mobile.glsl
@@ -7,6 +7,8 @@
/* Include our forward mobile UBOs definitions etc. */
#include "scene_forward_mobile_inc.glsl"
+#define SHADER_IS_SRGB false
+
/* INPUT ATTRIBS */
layout(location = 0) in vec3 vertex_attrib;
@@ -370,6 +372,8 @@ void main() {
#VERSION_DEFINES
+#define SHADER_IS_SRGB false
+
/* Specialization Constants */
#if !defined(MODE_RENDER_DEPTH)
@@ -701,7 +705,7 @@ void main() {
#endif // ALPHA_ANTIALIASING_EDGE_USED
#ifdef USE_OPAQUE_PREPASS
- if (alpha < opaque_prepass_threshold) {
+ if (alpha < scene_data.opaque_prepass_threshold) {
discard;
}
#endif // USE_OPAQUE_PREPASS
@@ -1345,7 +1349,7 @@ void main() {
#endif
blur_shadow(shadow);
- light_compute(normal, directional_lights.data[i].direction, normalize(view), 0.0, directional_lights.data[i].color * directional_lights.data[i].energy, shadow, f0, orms, 1.0,
+ light_compute(normal, directional_lights.data[i].direction, normalize(view), 0.0, directional_lights.data[i].color * directional_lights.data[i].energy, shadow, f0, orms, 1.0, albedo, alpha,
#ifdef LIGHT_BACKLIGHT_USED
backlight,
#endif
@@ -1358,7 +1362,7 @@ void main() {
#endif
*/
#ifdef LIGHT_RIM_USED
- rim, rim_tint, albedo,
+ rim, rim_tint,
#endif
#ifdef LIGHT_CLEARCOAT_USED
clearcoat, clearcoat_gloss,
@@ -1369,9 +1373,6 @@ void main() {
#ifdef USE_SOFT_SHADOW
directional_lights.data[i].size,
#endif
-#ifdef USE_SHADOW_TO_OPACITY
- alpha,
-#endif
diffuse_light,
specular_light);
}
@@ -1475,7 +1476,7 @@ void main() {
#ifdef USE_OPAQUE_PREPASS
- if (alpha < opaque_prepass_threshold) {
+ if (alpha < scene_data.opaque_prepass_threshold) {
discard;
}
diff --git a/servers/rendering/renderer_rd/shaders/scene_forward_mobile_inc.glsl b/servers/rendering/renderer_rd/shaders/scene_forward_mobile_inc.glsl
index eb8fb49598..a9a4fce82a 100644
--- a/servers/rendering/renderer_rd/shaders/scene_forward_mobile_inc.glsl
+++ b/servers/rendering/renderer_rd/shaders/scene_forward_mobile_inc.glsl
@@ -168,7 +168,8 @@ layout(set = 1, binding = 0, std140) uniform SceneData {
mediump float roughness_limiter_amount;
mediump float roughness_limiter_limit;
- uvec2 roughness_limiter_pad;
+ mediump float opaque_prepass_threshold;
+ uint roughness_limiter_pad;
bool fog_enabled;
highp float fog_density;
diff --git a/servers/rendering/renderer_scene_cull.cpp b/servers/rendering/renderer_scene_cull.cpp
index e338e526a0..7b4e2d34df 100644
--- a/servers/rendering/renderer_scene_cull.cpp
+++ b/servers/rendering/renderer_scene_cull.cpp
@@ -644,6 +644,7 @@ void RendererSceneCull::instance_set_base(RID p_instance, RID p_base) {
scene_render->geometry_instance_set_use_dynamic_gi(geom->geometry_instance, instance->dynamic_gi);
scene_render->geometry_instance_set_cast_double_sided_shadows(geom->geometry_instance, instance->cast_shadows == RS::SHADOW_CASTING_SETTING_DOUBLE_SIDED);
scene_render->geometry_instance_set_use_lightmap(geom->geometry_instance, RID(), instance->lightmap_uv_scale, instance->lightmap_slice_index);
+ scene_render->geometry_instance_set_transparency(geom->geometry_instance, instance->transparency);
if (instance->lightmap_sh.size() == 9) {
scene_render->geometry_instance_set_lightmap_capture(geom->geometry_instance, instance->lightmap_sh.ptr());
}
@@ -839,6 +840,8 @@ void RendererSceneCull::instance_geometry_set_transparency(RID p_instance, float
Instance *instance = instance_owner.get_or_null(p_instance);
ERR_FAIL_COND(!instance);
+ instance->transparency = p_transparency;
+
if ((1 << instance->base_type) & RS::INSTANCE_GEOMETRY_MASK && instance->base_data) {
InstanceGeometryData *geom = static_cast<InstanceGeometryData *>(instance->base_data);
scene_render->geometry_instance_set_transparency(geom->geometry_instance, p_transparency);
diff --git a/servers/rendering/renderer_scene_cull.h b/servers/rendering/renderer_scene_cull.h
index de22bc1328..2bfcfd462c 100644
--- a/servers/rendering/renderer_scene_cull.h
+++ b/servers/rendering/renderer_scene_cull.h
@@ -439,17 +439,18 @@ public:
RID self;
//scenario stuff
DynamicBVH::ID indexer_id;
- int32_t array_index;
+ int32_t array_index = -1;
int32_t visibility_index = -1;
- float visibility_range_begin;
- float visibility_range_end;
- float visibility_range_begin_margin;
- float visibility_range_end_margin;
+ float visibility_range_begin = 0.0f;
+ float visibility_range_end = 0.0f;
+ float visibility_range_begin_margin = 0.0f;
+ float visibility_range_end_margin = 0.0f;
RS::VisibilityRangeFadeMode visibility_range_fade_mode = RS::VISIBILITY_RANGE_FADE_DISABLED;
Instance *visibility_parent = nullptr;
Set<Instance *> visibility_dependencies;
- uint32_t visibility_dependencies_depth;
- Scenario *scenario;
+ uint32_t visibility_dependencies_depth = 0;
+ float transparency = 0.0f;
+ Scenario *scenario = nullptr;
SelfList<Instance> scenario_item;
//aabb stuff
diff --git a/servers/rendering/shader_language.cpp b/servers/rendering/shader_language.cpp
index d803d5fcf8..f865aab677 100644
--- a/servers/rendering/shader_language.cpp
+++ b/servers/rendering/shader_language.cpp
@@ -4920,7 +4920,9 @@ ShaderLanguage::Node *ShaderLanguage::_parse_expression(BlockNode *p_block, cons
bool error = false;
Node *n = func->arguments[argidx];
if (n->type == Node::TYPE_CONSTANT || n->type == Node::TYPE_OPERATOR) {
- error = true;
+ if (!call_function->arguments[i].is_const) {
+ error = true;
+ }
} else if (n->type == Node::TYPE_ARRAY) {
ArrayNode *an = static_cast<ArrayNode *>(n);
if (an->call_expression != nullptr || an->is_const) {
@@ -7188,11 +7190,6 @@ Error ShaderLanguage::_parse_block(BlockNode *p_block, const FunctionInfo &p_fun
//check return type
BlockNode *b = p_block;
- if (b && b->parent_function && p_function_info.main_function) {
- _set_error(vformat("Using 'return' in '%s' processor function results in undefined behavior!", b->parent_function->name));
- return ERR_PARSE_ERROR;
- }
-
while (b && !b->parent_function) {
b = b->parent_block;
}
@@ -7202,6 +7199,11 @@ Error ShaderLanguage::_parse_block(BlockNode *p_block, const FunctionInfo &p_fun
return ERR_BUG;
}
+ if (b && b->parent_function && p_function_info.main_function) {
+ _set_error(vformat("Using 'return' in '%s' processor function results in undefined behavior!", b->parent_function->name));
+ return ERR_PARSE_ERROR;
+ }
+
String return_struct_name = String(b->parent_function->return_struct_name);
String array_size_string;
diff --git a/servers/text/text_server_extension.cpp b/servers/text/text_server_extension.cpp
index 0a7523e33a..d6d98b4f8f 100644
--- a/servers/text/text_server_extension.cpp
+++ b/servers/text/text_server_extension.cpp
@@ -260,6 +260,7 @@ void TextServerExtension::_bind_methods() {
GDVIRTUAL_BIND(_shaped_text_draw, "shaped", "canvas", "pos", "clip_l", "clip_r", "color");
GDVIRTUAL_BIND(_shaped_text_draw_outline, "shaped", "canvas", "pos", "clip_l", "clip_r", "outline_size", "color");
+ GDVIRTUAL_BIND(_shaped_text_get_grapheme_bounds, "shaped", "pos");
GDVIRTUAL_BIND(_shaped_text_next_grapheme_pos, "shaped", "pos");
GDVIRTUAL_BIND(_shaped_text_prev_grapheme_pos, "shaped", "pos");
@@ -1292,6 +1293,14 @@ void TextServerExtension::shaped_text_draw_outline(RID p_shaped, RID p_canvas, c
shaped_text_draw_outline(p_shaped, p_canvas, p_pos, p_clip_l, p_clip_r, p_outline_size, p_color);
}
+Vector2 TextServerExtension::shaped_text_get_grapheme_bounds(RID p_shaped, int p_pos) const {
+ Vector2 ret;
+ if (GDVIRTUAL_CALL(_shaped_text_get_grapheme_bounds, p_shaped, p_pos, ret)) {
+ return ret;
+ }
+ return TextServer::shaped_text_get_grapheme_bounds(p_shaped, p_pos);
+}
+
int TextServerExtension::shaped_text_next_grapheme_pos(RID p_shaped, int p_pos) const {
int ret;
if (GDVIRTUAL_CALL(_shaped_text_next_grapheme_pos, p_shaped, p_pos, ret)) {
diff --git a/servers/text/text_server_extension.h b/servers/text/text_server_extension.h
index e419b4055d..a2dbd25e05 100644
--- a/servers/text/text_server_extension.h
+++ b/servers/text/text_server_extension.h
@@ -428,8 +428,10 @@ public:
GDVIRTUAL6C(_shaped_text_draw, RID, RID, const Vector2 &, float, float, const Color &);
GDVIRTUAL7C(_shaped_text_draw_outline, RID, RID, const Vector2 &, float, float, int, const Color &);
+ virtual Vector2 shaped_text_get_grapheme_bounds(RID p_shaped, int p_pos) const override;
virtual int shaped_text_next_grapheme_pos(RID p_shaped, int p_pos) const override;
virtual int shaped_text_prev_grapheme_pos(RID p_shaped, int p_pos) const override;
+ GDVIRTUAL2RC(Vector2, _shaped_text_get_grapheme_bounds, RID, int);
GDVIRTUAL2RC(int, _shaped_text_next_grapheme_pos, RID, int);
GDVIRTUAL2RC(int, _shaped_text_prev_grapheme_pos, RID, int);
diff --git a/servers/text_server.cpp b/servers/text_server.cpp
index 9034239fe0..8fc1b56ae4 100644
--- a/servers/text_server.cpp
+++ b/servers/text_server.cpp
@@ -403,6 +403,7 @@ void TextServer::_bind_methods() {
ClassDB::bind_method(D_METHOD("shaped_text_hit_test_grapheme", "shaped", "coords"), &TextServer::shaped_text_hit_test_grapheme);
ClassDB::bind_method(D_METHOD("shaped_text_hit_test_position", "shaped", "coords"), &TextServer::shaped_text_hit_test_position);
+ ClassDB::bind_method(D_METHOD("shaped_text_get_grapheme_bounds", "shaped", "pos"), &TextServer::shaped_text_get_grapheme_bounds);
ClassDB::bind_method(D_METHOD("shaped_text_next_grapheme_pos", "shaped", "pos"), &TextServer::shaped_text_next_grapheme_pos);
ClassDB::bind_method(D_METHOD("shaped_text_prev_grapheme_pos", "shaped", "pos"), &TextServer::shaped_text_prev_grapheme_pos);
@@ -1120,6 +1121,27 @@ int TextServer::shaped_text_hit_test_position(RID p_shaped, real_t p_coords) con
return 0;
}
+Vector2 TextServer::shaped_text_get_grapheme_bounds(RID p_shaped, int p_pos) const {
+ int v_size = shaped_text_get_glyph_count(p_shaped);
+ const Glyph *glyphs = shaped_text_get_glyphs(p_shaped);
+
+ real_t off = 0.0f;
+ for (int i = 0; i < v_size; i++) {
+ if ((glyphs[i].count > 0) && ((glyphs[i].index != 0) || ((glyphs[i].flags & GRAPHEME_IS_SPACE) == GRAPHEME_IS_SPACE))) {
+ if (glyphs[i].start <= p_pos && glyphs[i].end >= p_pos) {
+ real_t advance = 0.f;
+ for (int j = 0; j < glyphs[i].count; j++) {
+ advance += glyphs[i + j].advance;
+ }
+ return Vector2(off, off + advance);
+ }
+ }
+ off += glyphs[i].advance * glyphs[i].repeat;
+ }
+
+ return Vector2();
+}
+
int TextServer::shaped_text_next_grapheme_pos(RID p_shaped, int p_pos) const {
int v_size = shaped_text_get_glyph_count(p_shaped);
const Glyph *glyphs = shaped_text_get_glyphs(p_shaped);
diff --git a/servers/text_server.h b/servers/text_server.h
index 4f55f881e6..5c994feaae 100644
--- a/servers/text_server.h
+++ b/servers/text_server.h
@@ -438,6 +438,7 @@ public:
virtual int shaped_text_hit_test_grapheme(RID p_shaped, float p_coords) const; // Return grapheme index.
virtual int shaped_text_hit_test_position(RID p_shaped, float p_coords) const; // Return caret/selection position.
+ virtual Vector2 shaped_text_get_grapheme_bounds(RID p_shaped, int p_pos) const;
virtual int shaped_text_next_grapheme_pos(RID p_shaped, int p_pos) const;
virtual int shaped_text_prev_grapheme_pos(RID p_shaped, int p_pos) const;
diff --git a/tests/core/io/test_pck_packer.h b/tests/core/io/test_pck_packer.h
index ae51d58522..75a4abffbe 100644
--- a/tests/core/io/test_pck_packer.h
+++ b/tests/core/io/test_pck_packer.h
@@ -40,17 +40,11 @@
namespace TestPCKPacker {
-// Dummy 64-character encryption key (since it's required).
-constexpr const char *ENCRYPTION_KEY = "0000000000000000000000000000000000000000000000000000000000000000";
-
TEST_CASE("[PCKPacker] Pack an empty PCK file") {
PCKPacker pck_packer;
const String output_pck_path = OS::get_singleton()->get_cache_path().plus_file("output_empty.pck");
CHECK_MESSAGE(
- pck_packer.pck_start(
- output_pck_path,
- 32,
- ENCRYPTION_KEY) == OK,
+ pck_packer.pck_start(output_pck_path) == OK,
"Starting a PCK file should return an OK error code.");
CHECK_MESSAGE(
@@ -70,14 +64,27 @@ TEST_CASE("[PCKPacker] Pack an empty PCK file") {
"The generated empty PCK file shouldn't be too large.");
}
+TEST_CASE("[PCKPacker] Pack empty with zero alignment invalid") {
+ PCKPacker pck_packer;
+ const String output_pck_path = OS::get_singleton()->get_cache_path().plus_file("output_empty.pck");
+ ERR_PRINT_OFF;
+ CHECK_MESSAGE(pck_packer.pck_start(output_pck_path, 0) != OK, "PCK with zero alignment should fail.");
+ ERR_PRINT_ON;
+}
+
+TEST_CASE("[PCKPacker] Pack empty with invalid key") {
+ PCKPacker pck_packer;
+ const String output_pck_path = OS::get_singleton()->get_cache_path().plus_file("output_empty.pck");
+ ERR_PRINT_OFF;
+ CHECK_MESSAGE(pck_packer.pck_start(output_pck_path, 32, "") != OK, "PCK with invalid key should fail.");
+ ERR_PRINT_ON;
+}
+
TEST_CASE("[PCKPacker] Pack a PCK file with some files and directories") {
PCKPacker pck_packer;
const String output_pck_path = OS::get_singleton()->get_cache_path().plus_file("output_with_files.pck");
CHECK_MESSAGE(
- pck_packer.pck_start(
- output_pck_path,
- 32,
- ENCRYPTION_KEY) == OK,
+ pck_packer.pck_start(output_pck_path) == OK,
"Starting a PCK file should return an OK error code.");
const String base_dir = OS::get_singleton()->get_executable_path().get_base_dir();
diff --git a/thirdparty/README.md b/thirdparty/README.md
index 25d2e1cfe3..6ebcffb7ae 100644
--- a/thirdparty/README.md
+++ b/thirdparty/README.md
@@ -8,7 +8,7 @@ readability.
## basis_universal
- Upstream: https://github.com/BinomialLLC/basis_universal
-- Version: git (ba1c3e40f1d434ebaf9a167b44e9b11d2bf0f765, 2021)
+- Version: git (646a9f826131cb0b9e14b5e4740874808315f83a, 2021)
- License: Apache 2.0
Files extracted from upstream source:
@@ -176,14 +176,14 @@ Files extracted from upstream source:
## graphite
- Upstream: https://github.com/silnrsi/graphite
-- Version: 1.3.14 (92f59dcc52f73ce747f1cdc831579ed2546884aa, 2020)
+- Version: 1.3.14 (80c52493ef42e6fe605a69dcddd2a691cd8a1380, 2021)
- License: MPL-2.0
Files extracted from upstream source:
- the `include` folder
-- the `src` folder
-- `COPYING`, `ChangeLog`
+- the `src` folder (minus `CMakeLists.txt` and `files.mk`)
+- `COPYING`
## harfbuzz
@@ -235,14 +235,14 @@ Files extracted from upstream source:
## libogg
- Upstream: https://www.xiph.org/ogg
-- Version: git (c8fca6b4a02d695b1ceea39b330d4406001c03ed, 2019)
+- Version: 1.3.5 (e1774cd77f471443541596e09078e78fdc342e4f, 2021)
- License: BSD-3-Clause
Files extracted from upstream source:
- `src/*.{c,h}`
-- `include/ogg/*.h` in ogg/
-- COPYING
+- `include/ogg/*.h` in `ogg/` (run `configure` to generate `config_types.h`)
+- `COPYING`
## libpng
@@ -279,26 +279,26 @@ on top of the 1.1.1 source (not included in any stable release yet).
## libvorbis
- Upstream: https://www.xiph.org/vorbis
-- Version: 1.3.6 (2018)
+- Version: 1.3.7 (0657aee69dec8508a0011f47f3b69d7538e9d262, 2020)
- License: BSD-3-Clause
Files extracted from upstream source:
-- `src/*` except from: `lookups.pl`, `Makefile.*`
-- `include/vorbis/*.h` as vorbis/
-- COPYING
+- `lib/*` except from: `lookups.pl`, `Makefile.*`
+- `include/vorbis/*.h` as `vorbis/`
+- `COPYING`
## libwebp
- Upstream: https://chromium.googlesource.com/webm/libwebp/
-- Version: 1.1.0 (d7844e9762b61c9638c263657bd49e1690184832, 2020)
+- Version: 1.2.1 (9ce5843dbabcfd3f7c39ec7ceba9cbeb213cbfdf, 2021)
- License: BSD-3-Clause
Files extracted from upstream source:
-- `src/*` except from: .am, .rc and .in files
-- AUTHORS, COPYING, PATENTS
+- `src/*` except from: `.am`, `.rc` and `.in` files
+- `AUTHORS`, `COPYING`, `PATENTS`
Important: The files `utils/bit_reader_utils.{c,h}` have Godot-made
changes to ensure they build for Javascript/HTML5. Those
@@ -333,7 +333,7 @@ File extracted from upstream release tarball:
## meshoptimizer
- Upstream: https://github.com/zeux/meshoptimizer
-- Version: git (f5d83e879c48f8664783a69b4f50711d27549b66, 2021)
+- Version: git (f4c356d79fadb99cbf432f7e199d823581b0e19e, 2021)
- License: MIT
Files extracted from upstream repository:
@@ -350,22 +350,19 @@ found in the `patches` directory.
## miniupnpc
- Upstream: https://github.com/miniupnp/miniupnp
-- Version: 2.2.2 (81029a860baf1f727903e5b85307903b3f40cbc8, 2021)
+- Version: 2.2.3 (2df8120326ed4246e049a7a6de707539604cd514, 2021)
- License: BSD-3-Clause
Files extracted from upstream source:
-- All `*.c` and `*.h` files from `miniupnpc` to `thirdparty/miniupnpc/miniupnpc`
+- Copy `miniupnpc/src` and `miniupnpc/include` to `thirdparty/miniupnpc`
- Remove the following test or sample files:
- `listdevices.c minihttptestserver.c miniupnpcmodule.c upnpc.c upnperrors.* test* wingenminiupnpcstrings.c`
+ `listdevices.c minihttptestserver.c miniupnpcmodule.c upnpc.c upnperrors.* test*`
- `LICENSE`
-The only modified file is `miniupnpcstrings.h`, which was created for Godot
-(it is usually autogenerated by cmake). Bump the version number for miniupnpc in that
-file when upgrading.
-
-Note: The following upstream patch has been applied, remove this notice on next update.
-https://github.com/miniupnp/miniupnp/commit/3a08dd4b89af2e9effa22a136bac86f2f306fd79
+The only modified file is `src/miniupnpcstrings.h`, which was created for Godot
+(it is usually autogenerated by cmake). Bump the version number for miniupnpc in
+that file when upgrading.
## minizip
@@ -506,7 +503,7 @@ Patch files are provided in `oidn/patches/`.
## pcre2
- Upstream: http://www.pcre.org
-- Version: 10.36 (r1288, 2020)
+- Version: 10.39 (35fee4193b852cb504892352bd0155de10809889, 2021)
- License: BSD-3-Clause
Files extracted from upstream source:
@@ -599,18 +596,21 @@ comments and a patch is provided in the squish/ folder.
## tinyexr
- Upstream: https://github.com/syoyo/tinyexr
-- Version: 1.0.0 (e4b7840d9448b7d57a88384ce26143004f3c0c71, 2020)
+- Version: 1.0.1 (67010eae802211202d0797f4df2b809f4ba7442c, 2021)
- License: BSD-3-Clause
Files extracted from upstream source:
- `tinyexr.{cc,h}`
+The `tinyexr.cc` file was modified to include `zlib.h` which we provide,
+instead of `miniz.h` as an external dependency.
+
## vhacd
- Upstream: https://github.com/kmammou/v-hacd
-- Version: git (b07958e18e01d504e3af80eeaeb9f033226533d7, 2019)
+- Version: git (1a49edf29c69039df15286181f2f27e17ceb9aef, 2020)
- License: BSD-3-Clause
Files extracted from upstream source:
@@ -670,25 +670,29 @@ Patches in the `patches` directory should be re-applied after updates.
## wslay
- Upstream: https://github.com/tatsuhiro-t/wslay
-- Version: 1.1.1 (c9a84aa6df8512584c77c8cd15be9536b89c35aa, 2020)
+- Version: 1.1.1+git (45d22583b488f79d5a4e598cc7675c191c5ab53f, 2021)
- License: MIT
File extracted from upstream release tarball:
-- All `*.c` and `*.h` in `lib/` and `lib/includes/`
-- `wslay.h` has a small Godot addition to fix MSVC build.
- See `thirdparty/wslay/msvcfix.diff`
+- Run `cmake .` to generate `config.h` and `wslayver.h`.
+ Contents might need tweaking for Godot, review diff.
+- All `*.c` and `*.h` files from `lib/`
+- All `*.h` in `lib/includes/wslay/` as `wslay/`
+- `wslay/wslay.h` has a small Godot addition to fix MSVC build.
+ See `patches/msvcfix.diff`
+- `COPYING`
## xatlas
- Upstream: https://github.com/jpcy/xatlas
-- Version: git (5571fc7ef0d06832947c0a935ccdcf083f7a9264, 2020)
+- Version: git (ec707faeac3b95e6b416076a9509718cce105b6a, 2021)
- License: MIT
Files extracted from upstream source:
-- `xatlas.{cpp,h}`
+- `source/xatlas/xatlas.{cpp,h}`
- `LICENSE`
@@ -706,11 +710,11 @@ Files extracted from upstream source:
## zstd
- Upstream: https://github.com/facebook/zstd
-- Version: 1.4.8 (97a3da1df009d4dc67251de0c4b1c9d7fe286fc1, 2020)
+- Version: 1.5.0 (a488ba114ec17ea1054b9057c26a046fc122b3b6, 2021)
- License: BSD-3-Clause
Files extracted from upstream source:
-- lib/{common/,compress/,decompress/,zstd.h}
-- LICENSE
+- `lib/{common/,compress/,decompress/,zstd.h,zstd_errors.h}`
+- `LICENSE`
diff --git a/thirdparty/basis_universal/encoder/apg_bmp.c b/thirdparty/basis_universal/encoder/apg_bmp.c
index ef3d015e40..d342b20fc8 100644
--- a/thirdparty/basis_universal/encoder/apg_bmp.c
+++ b/thirdparty/basis_universal/encoder/apg_bmp.c
@@ -247,7 +247,7 @@ unsigned char* apg_bmp_read( const char* filename, int* w, int* h, unsigned int*
}
// allocate memory for the output pixels block. cast to size_t in case width and height are both the max of 65536 and n_dst_chans > 1
- unsigned char* dst_img_ptr = malloc( (size_t)width * (size_t)height * (size_t)n_dst_chans );
+ unsigned char* dst_img_ptr = (unsigned char*)malloc( (size_t)width * (size_t)height * (size_t)n_dst_chans );
if ( !dst_img_ptr ) {
free( record.data );
return NULL;
@@ -480,7 +480,7 @@ unsigned int apg_bmp_write( const char* filename, unsigned char* pixels_ptr, int
dib_hdr.bitmask_b = 0x0000FF00;
}
- uint8_t* dst_pixels_ptr = malloc( dst_pixels_padded_sz );
+ uint8_t* dst_pixels_ptr = (uint8_t*)malloc( dst_pixels_padded_sz );
if ( !dst_pixels_ptr ) { return 0; }
{
size_t dst_byte_idx = 0;
diff --git a/thirdparty/basis_universal/encoder/basisu_bc7enc.cpp b/thirdparty/basis_universal/encoder/basisu_bc7enc.cpp
index 06aa7eb8b1..22fdfa603f 100644
--- a/thirdparty/basis_universal/encoder/basisu_bc7enc.cpp
+++ b/thirdparty/basis_universal/encoder/basisu_bc7enc.cpp
@@ -174,9 +174,8 @@ static void astc_init()
} // range
}
-static inline uint32_t astc_interpolate(uint32_t l, uint32_t h, uint32_t w)
+static inline uint32_t astc_interpolate_linear(uint32_t l, uint32_t h, uint32_t w)
{
- // This is for linear values, not sRGB.
l = (l << 8) | l;
h = (h << 8) | h;
uint32_t k = (l * (64 - w) + h * w + 32) >> 6;
@@ -230,7 +229,7 @@ void bc7enc_compress_block_init()
{
uint32_t high = (h << 4) | h;
- const int k = astc_interpolate(low, high, g_bc7_weights3[BC7ENC_ASTC_4BIT_3BIT_OPTIMAL_INDEX]);
+ const int k = astc_interpolate_linear(low, high, g_bc7_weights3[BC7ENC_ASTC_4BIT_3BIT_OPTIMAL_INDEX]);
const int err = (k - c) * (k - c);
if (err < best.m_error)
@@ -259,7 +258,7 @@ void bc7enc_compress_block_init()
{
uint32_t high = (h << 4) | h;
- const int k = astc_interpolate(low, high, g_bc7_weights2[BC7ENC_ASTC_4BIT_2BIT_OPTIMAL_INDEX]);
+ const int k = astc_interpolate_linear(low, high, g_bc7_weights2[BC7ENC_ASTC_4BIT_2BIT_OPTIMAL_INDEX]);
const int err = (k - c) * (k - c);
if (err < best.m_error)
@@ -288,7 +287,7 @@ void bc7enc_compress_block_init()
{
uint32_t high = g_astc_sorted_order_unquant[7][h].m_unquant;
- const int k = astc_interpolate(low, high, g_bc7_weights2[BC7ENC_ASTC_RANGE7_2BIT_OPTIMAL_INDEX]);
+ const int k = astc_interpolate_linear(low, high, g_bc7_weights2[BC7ENC_ASTC_RANGE7_2BIT_OPTIMAL_INDEX]);
const int err = (k - c) * (k - c);
if (err < best.m_error)
@@ -317,7 +316,7 @@ void bc7enc_compress_block_init()
{
uint32_t high = g_astc_sorted_order_unquant[13][h].m_unquant;
- const int k = astc_interpolate(low, high, g_astc_weights4[BC7ENC_ASTC_RANGE13_4BIT_OPTIMAL_INDEX]);
+ const int k = astc_interpolate_linear(low, high, g_astc_weights4[BC7ENC_ASTC_RANGE13_4BIT_OPTIMAL_INDEX]);
const int err = (k - c) * (k - c);
if (err < best.m_error)
@@ -346,7 +345,7 @@ void bc7enc_compress_block_init()
{
uint32_t high = g_astc_sorted_order_unquant[13][h].m_unquant;
- const int k = astc_interpolate(low, high, g_bc7_weights2[BC7ENC_ASTC_RANGE13_2BIT_OPTIMAL_INDEX]);
+ const int k = astc_interpolate_linear(low, high, g_bc7_weights2[BC7ENC_ASTC_RANGE13_2BIT_OPTIMAL_INDEX]);
const int err = (k - c) * (k - c);
if (err < best.m_error)
@@ -375,7 +374,7 @@ void bc7enc_compress_block_init()
{
uint32_t high = g_astc_sorted_order_unquant[11][h].m_unquant;
- const int k = astc_interpolate(low, high, g_astc_weights5[BC7ENC_ASTC_RANGE11_5BIT_OPTIMAL_INDEX]);
+ const int k = astc_interpolate_linear(low, high, g_astc_weights5[BC7ENC_ASTC_RANGE11_5BIT_OPTIMAL_INDEX]);
const int err = (k - c) * (k - c);
if (err < best.m_error)
@@ -650,7 +649,7 @@ static uint64_t pack_astc_4bit_3bit_to_one_color(const color_cell_compressor_par
uint32_t low = (pResults->m_low_endpoint.m_c[i] << 4) | pResults->m_low_endpoint.m_c[i];
uint32_t high = (pResults->m_high_endpoint.m_c[i] << 4) | pResults->m_high_endpoint.m_c[i];
- p.m_c[i] = (uint8_t)astc_interpolate(low, high, g_bc7_weights3[BC7ENC_ASTC_4BIT_3BIT_OPTIMAL_INDEX]);
+ p.m_c[i] = (uint8_t)astc_interpolate_linear(low, high, g_bc7_weights3[BC7ENC_ASTC_4BIT_3BIT_OPTIMAL_INDEX]);
}
p.m_c[3] = 255;
@@ -689,7 +688,7 @@ static uint64_t pack_astc_4bit_2bit_to_one_color_rgba(const color_cell_compresso
uint32_t low = (pResults->m_low_endpoint.m_c[i] << 4) | pResults->m_low_endpoint.m_c[i];
uint32_t high = (pResults->m_high_endpoint.m_c[i] << 4) | pResults->m_high_endpoint.m_c[i];
- p.m_c[i] = (uint8_t)astc_interpolate(low, high, g_bc7_weights2[BC7ENC_ASTC_4BIT_2BIT_OPTIMAL_INDEX]);
+ p.m_c[i] = (uint8_t)astc_interpolate_linear(low, high, g_bc7_weights2[BC7ENC_ASTC_4BIT_2BIT_OPTIMAL_INDEX]);
}
uint64_t total_err = 0;
@@ -728,7 +727,7 @@ static uint64_t pack_astc_range7_2bit_to_one_color(const color_cell_compressor_p
uint32_t low = g_astc_sorted_order_unquant[7][pResults->m_low_endpoint.m_c[i]].m_unquant;
uint32_t high = g_astc_sorted_order_unquant[7][pResults->m_high_endpoint.m_c[i]].m_unquant;
- p.m_c[i] = (uint8_t)astc_interpolate(low, high, g_bc7_weights2[BC7ENC_ASTC_RANGE7_2BIT_OPTIMAL_INDEX]);
+ p.m_c[i] = (uint8_t)astc_interpolate_linear(low, high, g_bc7_weights2[BC7ENC_ASTC_RANGE7_2BIT_OPTIMAL_INDEX]);
}
p.m_c[3] = 255;
@@ -768,7 +767,7 @@ static uint64_t pack_astc_range13_2bit_to_one_color(const color_cell_compressor_
uint32_t low = g_astc_sorted_order_unquant[13][pResults->m_low_endpoint.m_c[i]].m_unquant;
uint32_t high = g_astc_sorted_order_unquant[13][pResults->m_high_endpoint.m_c[i]].m_unquant;
- p.m_c[i] = (uint8_t)astc_interpolate(low, high, g_bc7_weights2[BC7ENC_ASTC_RANGE13_2BIT_OPTIMAL_INDEX]);
+ p.m_c[i] = (uint8_t)astc_interpolate_linear(low, high, g_bc7_weights2[BC7ENC_ASTC_RANGE13_2BIT_OPTIMAL_INDEX]);
}
uint64_t total_err = 0;
@@ -807,7 +806,7 @@ static uint64_t pack_astc_range11_5bit_to_one_color(const color_cell_compressor_
uint32_t low = g_astc_sorted_order_unquant[11][pResults->m_low_endpoint.m_c[i]].m_unquant;
uint32_t high = g_astc_sorted_order_unquant[11][pResults->m_high_endpoint.m_c[i]].m_unquant;
- p.m_c[i] = (uint8_t)astc_interpolate(low, high, g_astc_weights5[BC7ENC_ASTC_RANGE11_5BIT_OPTIMAL_INDEX]);
+ p.m_c[i] = (uint8_t)astc_interpolate_linear(low, high, g_astc_weights5[BC7ENC_ASTC_RANGE11_5BIT_OPTIMAL_INDEX]);
}
uint64_t total_err = 0;
@@ -863,7 +862,7 @@ static uint64_t evaluate_solution(const color_quad_u8 *pLow, const color_quad_u8
for (uint32_t i = 1; i < (N - 1); i++)
{
for (uint32_t j = 0; j < nc; j++)
- weightedColors[i].m_c[j] = (uint8_t)(astc_interpolate(actualMinColor.m_c[j], actualMaxColor.m_c[j], pParams->m_pSelector_weights[i]));
+ weightedColors[i].m_c[j] = (uint8_t)(astc_interpolate_linear(actualMinColor.m_c[j], actualMaxColor.m_c[j], pParams->m_pSelector_weights[i]));
}
}
else
@@ -1300,7 +1299,7 @@ void check_best_overall_error(const color_cell_compressor_params *pParams, color
for (uint32_t i = 1; i < pParams->m_num_selector_weights - 1; i++)
for (uint32_t c = 0; c < 4; c++)
- colors[i].m_c[c] = (uint8_t)astc_interpolate(colors[0].m_c[c], colors[n - 1].m_c[c], pParams->m_pSelector_weights[i]);
+ colors[i].m_c[c] = (uint8_t)astc_interpolate_linear(colors[0].m_c[c], colors[n - 1].m_c[c], pParams->m_pSelector_weights[i]);
uint64_t total_err = 0;
for (uint32_t p = 0; p < pParams->m_num_pixels; p++)
@@ -1815,10 +1814,10 @@ uint64_t color_cell_compression_est_astc(
weightedColors[num_weights - 1] = highColor;
for (uint32_t i = 1; i < (num_weights - 1); i++)
{
- weightedColors[i].m_c[0] = (uint8_t)astc_interpolate(lowColor.m_c[0], highColor.m_c[0], pWeight_table[i]);
- weightedColors[i].m_c[1] = (uint8_t)astc_interpolate(lowColor.m_c[1], highColor.m_c[1], pWeight_table[i]);
- weightedColors[i].m_c[2] = (uint8_t)astc_interpolate(lowColor.m_c[2], highColor.m_c[2], pWeight_table[i]);
- weightedColors[i].m_c[3] = (num_comps == 4) ? (uint8_t)astc_interpolate(lowColor.m_c[3], highColor.m_c[3], pWeight_table[i]) : 255;
+ weightedColors[i].m_c[0] = (uint8_t)astc_interpolate_linear(lowColor.m_c[0], highColor.m_c[0], pWeight_table[i]);
+ weightedColors[i].m_c[1] = (uint8_t)astc_interpolate_linear(lowColor.m_c[1], highColor.m_c[1], pWeight_table[i]);
+ weightedColors[i].m_c[2] = (uint8_t)astc_interpolate_linear(lowColor.m_c[2], highColor.m_c[2], pWeight_table[i]);
+ weightedColors[i].m_c[3] = (num_comps == 4) ? (uint8_t)astc_interpolate_linear(lowColor.m_c[3], highColor.m_c[3], pWeight_table[i]) : 255;
}
// Compute dots and thresholds
diff --git a/thirdparty/basis_universal/encoder/basisu_bc7enc.h b/thirdparty/basis_universal/encoder/basisu_bc7enc.h
index 23469912e2..8d8b7888ca 100644
--- a/thirdparty/basis_universal/encoder/basisu_bc7enc.h
+++ b/thirdparty/basis_universal/encoder/basisu_bc7enc.h
@@ -12,6 +12,7 @@
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
+#pragma once
#include "basisu_enc.h"
#include "../transcoder/basisu_transcoder_uastc.h"
diff --git a/thirdparty/basis_universal/encoder/basisu_comp.cpp b/thirdparty/basis_universal/encoder/basisu_comp.cpp
index dc4ae11539..10f96cec4a 100644
--- a/thirdparty/basis_universal/encoder/basisu_comp.cpp
+++ b/thirdparty/basis_universal/encoder/basisu_comp.cpp
@@ -467,7 +467,10 @@ namespace basisu
return false;
}
- printf("Read source image \"%s\", %ux%u\n", pSource_filename, file_image.get_width(), file_image.get_height());
+ if (m_params.m_status_output)
+ {
+ printf("Read source image \"%s\", %ux%u\n", pSource_filename, file_image.get_width(), file_image.get_height());
+ }
// Optionally load another image and put a grayscale version of it into the alpha channel.
if ((source_file_index < m_params.m_source_alpha_filenames.size()) && (m_params.m_source_alpha_filenames[source_file_index].size()))
@@ -1427,7 +1430,10 @@ namespace basisu
return false;
}
- printf("Wrote output .basis/.ktx2 file \"%s\"\n", output_filename.c_str());
+ if (m_params.m_status_output)
+ {
+ printf("Wrote output .basis/.ktx2 file \"%s\"\n", output_filename.c_str());
+ }
}
size_t comp_size = 0;
diff --git a/thirdparty/basis_universal/encoder/basisu_enc.cpp b/thirdparty/basis_universal/encoder/basisu_enc.cpp
index f02fb62c11..daaf65badc 100644
--- a/thirdparty/basis_universal/encoder/basisu_enc.cpp
+++ b/thirdparty/basis_universal/encoder/basisu_enc.cpp
@@ -195,7 +195,7 @@ namespace basisu
{
QueryPerformanceFrequency(reinterpret_cast<LARGE_INTEGER*>(pTicks));
}
-#elif defined(__APPLE__)
+#elif defined(__APPLE__) || defined(__OpenBSD__)
#include <sys/time.h>
inline void query_counter(timer_ticks* pTicks)
{
@@ -1779,8 +1779,6 @@ namespace basisu
return nullptr;
}
- const uint32_t bytes_per_line = hdr.m_width * tga_bytes_per_pixel;
-
const uint8_t *pSrc = pBuf + sizeof(tga_header);
uint32_t bytes_remaining = buf_size - sizeof(tga_header);
diff --git a/thirdparty/basis_universal/encoder/basisu_enc.h b/thirdparty/basis_universal/encoder/basisu_enc.h
index 05c95cbc3b..0ce011452d 100644
--- a/thirdparty/basis_universal/encoder/basisu_enc.h
+++ b/thirdparty/basis_universal/encoder/basisu_enc.h
@@ -1634,6 +1634,14 @@ namespace basisu
if ((!l_weight) || (!r_weight))
{
+ l_children.resize(0);
+ new_l_child.set(0.0f);
+ l_ttsum = 0.0f;
+ l_weight = 0;
+ r_children.resize(0);
+ new_r_child.set(0.0f);
+ r_ttsum = 0.0f;
+ r_weight = 0;
TrainingVectorType firstVec;
for (uint32_t i = 0; i < node.m_training_vecs.size(); i++)
{
@@ -1660,7 +1668,7 @@ namespace basisu
}
}
- if (!l_weight)
+ if ((!l_weight) || (!r_weight))
return false;
}
diff --git a/thirdparty/basis_universal/encoder/basisu_resampler.cpp b/thirdparty/basis_universal/encoder/basisu_resampler.cpp
index e193ce83ff..f4cedf0031 100644
--- a/thirdparty/basis_universal/encoder/basisu_resampler.cpp
+++ b/thirdparty/basis_universal/encoder/basisu_resampler.cpp
@@ -15,14 +15,6 @@
#include "basisu_resampler.h"
#include "basisu_resampler_filters.h"
-#ifndef max
-#define max(a, b) (((a) > (b)) ? (a) : (b))
-#endif
-
-#ifndef min
-#define min(a, b) (((a) < (b)) ? (a) : (b))
-#endif
-
#define RESAMPLER_DEBUG 0
namespace basisu
diff --git a/thirdparty/basis_universal/encoder/cppspmd_sse.h b/thirdparty/basis_universal/encoder/cppspmd_sse.h
index b39cb82a5f..9a97eeb695 100644
--- a/thirdparty/basis_universal/encoder/cppspmd_sse.h
+++ b/thirdparty/basis_universal/encoder/cppspmd_sse.h
@@ -1327,33 +1327,15 @@ struct spmd_kernel
CPPSPMD_FORCE_INLINE float reduce_add(vfloat v)
{
__m128 k3210 = _mm_castsi128_ps(blendv_mask_epi32(_mm_setzero_si128(), _mm_castps_si128(v.m_value), m_exec.m_mask));
-
-//#if CPPSPMD_SSE2
-#if 1
- // See https://stackoverflow.com/questions/6996764/fastest-way-to-do-horizontal-sse-vector-sum-or-other-reduction/35270026#35270026
- __m128 shuf = _mm_shuffle_ps(k3210, k3210, _MM_SHUFFLE(2, 3, 0, 1));
- __m128 sums = _mm_add_ps(k3210, shuf);
- shuf = _mm_movehl_ps(shuf, sums);
- sums = _mm_add_ss(sums, shuf);
- return _mm_cvtss_f32(sums);
-#else
- // This is pretty slow.
- __m128 a = _mm_hadd_ps(k3210, k3210);
- __m128 b = _mm_hadd_ps(a, a);
- return extractf_ps_x(b);
-#endif
+ __m128 temp = _mm_add_ps(_mm_shuffle_ps(k3210, k3210, _MM_SHUFFLE(0, 1, 2, 3)), k3210);
+ return _mm_cvtss_f32(_mm_add_ss(_mm_movehl_ps(temp, temp), temp));
}
-
+
CPPSPMD_FORCE_INLINE int reduce_add(vint v)
{
__m128i k3210 = blendv_mask_epi32(_mm_setzero_si128(), v.m_value, m_exec.m_mask);
-
- // See https://stackoverflow.com/questions/6996764/fastest-way-to-do-horizontal-sse-vector-sum-or-other-reduction/35270026#35270026
- __m128i shuf = _mm_shuffle_epi32(k3210, _MM_SHUFFLE(2, 3, 0, 1));
- __m128i sums = _mm_add_epi32(k3210, shuf);
- shuf = _mm_castps_si128(_mm_movehl_ps(_mm_castsi128_ps(shuf), _mm_castsi128_ps(sums)));
- sums = _mm_add_epi32(sums, shuf);
- return extract_x(sums);
+ __m128i temp = _mm_add_epi32(_mm_shuffle_epi32(k3210, _MM_SHUFFLE(0, 1, 2, 3)), k3210);
+ return extract_x(_mm_add_epi32(_mm_castps_si128(_mm_movehl_ps(_mm_castsi128_ps(temp), _mm_castsi128_ps(temp))), temp));
}
#include "cppspmd_math_declares.h"
@@ -1686,6 +1668,12 @@ CPPSPMD_FORCE_INLINE vint uniform_shift_right_epi16(const vint& a, const vint& b
CPPSPMD_FORCE_INLINE vint undefined_vint() { return vint{ _mm_undefined_si128() }; }
CPPSPMD_FORCE_INLINE vfloat undefined_vfloat() { return vfloat{ _mm_undefined_ps() }; }
+CPPSPMD_FORCE_INLINE vint vint_lane_set(int v0, int v1, int v2, int v3) { return vint{ _mm_set_epi32(v3, v2, v1, v0) }; }
+CPPSPMD_FORCE_INLINE vfloat vfloat_lane_set(float v0, float v1, float v2, float v3) { return vfloat{ _mm_set_ps(v3, v2, v1, v0) }; }
+
+CPPSPMD_FORCE_INLINE vint vint_lane_set_r(int v3, int v2, int v1, int v0) { return vint{ _mm_set_epi32(v3, v2, v1, v0) }; }
+CPPSPMD_FORCE_INLINE vfloat vfloat_lane_set_r(float v3, float v2, float v1, float v0) { return vfloat{ _mm_set_ps(v3, v2, v1, v0) }; }
+
// control is an 8-bit immediate value containing 4 2-bit indices which shuffles the int32's in each 128-bit lane.
#define VINT_LANE_SHUFFLE_EPI32(a, control) vint(_mm_shuffle_epi32((a).m_value, control))
diff --git a/thirdparty/basis_universal/transcoder/basisu_transcoder.cpp b/thirdparty/basis_universal/transcoder/basisu_transcoder.cpp
index 29eb3c0d55..0b3733385d 100644
--- a/thirdparty/basis_universal/transcoder/basisu_transcoder.cpp
+++ b/thirdparty/basis_universal/transcoder/basisu_transcoder.cpp
@@ -10778,8 +10778,6 @@ namespace basist
return false;
}
- const bool transcode_alpha_data_to_opaque_formats = (decode_flags & cDecodeFlagsTranscodeAlphaDataToOpaqueFormats) != 0;
-
if (decode_flags & cDecodeFlagsPVRTCDecodeToNextPow2)
{
BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: cDecodeFlagsPVRTCDecodeToNextPow2 currently unsupported\n");
@@ -17336,7 +17334,6 @@ namespace basist
bool ktx2_transcoder::decompress_level_data(uint32_t level_index, basisu::uint8_vec& uncomp_data)
{
- const uint8_t* pComp_data = m_levels[level_index].m_byte_offset + m_pData;
const uint64_t comp_size = m_levels[level_index].m_byte_length;
const uint64_t uncomp_size = m_levels[level_index].m_uncompressed_byte_length;
@@ -17361,6 +17358,7 @@ namespace basist
if (m_header.m_supercompression_scheme == KTX2_SS_ZSTANDARD)
{
#if BASISD_SUPPORT_KTX2_ZSTD
+ const uint8_t* pComp_data = m_levels[level_index].m_byte_offset + m_pData;
size_t actualUncompSize = ZSTD_decompress(uncomp_data.data(), (size_t)uncomp_size, pComp_data, (size_t)comp_size);
if (ZSTD_isError(actualUncompSize))
{
diff --git a/thirdparty/certs/ca-certificates.crt b/thirdparty/certs/ca-certificates.crt
index 7d5ea3bef1..7f89e81d01 100644
--- a/thirdparty/certs/ca-certificates.crt
+++ b/thirdparty/certs/ca-certificates.crt
@@ -1,7 +1,7 @@
##
## Bundle of CA Root Certificates
##
-## Certificate data from Mozilla as of: Mon Jul 5 21:36:52 2021 GMT
+## Certificate data from Mozilla as of: Mon Nov 1 15:39:58 2021 GMT
##
## This is a bundle of X.509 certificates of public Certificate Authorities
## (CA). These were automatically extracted from Mozilla's root certificates
@@ -14,7 +14,7 @@
## Just configure this file as the SSLCACertificateFile.
##
## Conversion done with mk-ca-bundle.pl version 1.28.
-## SHA256: c8f6733d1ff4e6a4769c182971a1234f95ae079247a9c439a13423fe8ba5c24f
+## SHA256: bb36818a81feaa4cca61101e6d6276cd09e972efcb08112dfed846918ca41d7f
##
@@ -381,26 +381,6 @@ mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
-----END CERTIFICATE-----
-DST Root CA X3
-==============
------BEGIN CERTIFICATE-----
-MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK
-ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
-DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1
-cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD
-ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT
-rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9
-UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy
-xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d
-utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T
-AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ
-MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug
-dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE
-GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw
-RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
-fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
------END CERTIFICATE-----
-
SwissSign Gold CA - G2
======================
-----BEGIN CERTIFICATE-----
@@ -2713,7 +2693,8 @@ CBeQyh+KTOgNG3qxrdWBCUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7
jHvrZQnD+JbNR6iC8hZVdyR+EhCVBCyj
-----END CERTIFICATE-----
-# emSign Root CA - C1
+emSign Root CA - C1
+===================
-----BEGIN CERTIFICATE-----
MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkGA1UEBhMCVVMx
EzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNp
@@ -2733,7 +2714,8 @@ wC68AivTxEDkigcxHpvOJpkT+xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQ
BmIMMMAVSKeoWXzhriKi4gp6D/piq1JM4fHfyr6DDUI=
-----END CERTIFICATE-----
-# emSign ECC Root CA - C3
+emSign ECC Root CA - C3
+=======================
-----BEGIN CERTIFICATE-----
MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQGEwJVUzETMBEG
A1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMxIDAeBgNVBAMTF2VtU2lnbiBF
@@ -2747,7 +2729,8 @@ MGUCMQC02C8Cif22TGK6Q04ThHK1rt0c3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwU
ZOR8loMRnLDRWmFLpg9J0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ==
-----END CERTIFICATE-----
-# Hongkong Post Root CA 3
+Hongkong Post Root CA 3
+=======================
-----BEGIN CERTIFICATE-----
MIIFzzCCA7egAwIBAgIUCBZfikyl7ADJk0DfxMauI7gcWqQwDQYJKoZIhvcNAQELBQAwbzELMAkG
A1UEBhMCSEsxEjAQBgNVBAgTCUhvbmcgS29uZzESMBAGA1UEBxMJSG9uZyBLb25nMRYwFAYDVQQK
@@ -2778,7 +2761,8 @@ hcErulWuBurQB7Lcq9CClnXO0lD+mefPL5/ndtFhKvshuzHQqp9HpLIiyhY6UFfEW0NnxWViA0kB
dBb9HxEGmpv0
-----END CERTIFICATE-----
-# Entrust Root Certification Authority - G4
+Entrust Root Certification Authority - G4
+=========================================
-----BEGIN CERTIFICATE-----
MIIGSzCCBDOgAwIBAgIRANm1Q3+vqTkPAAAAAFVlrVgwDQYJKoZIhvcNAQELBQAwgb4xCzAJBgNV
BAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3Qu
@@ -2811,7 +2795,8 @@ JOgc47OlIQ6SwJAfzyBfyjs4x7dtOvPmRLgOMWuIjnDrnBdSqEGULoe256YSxXXfW8AKbnuk5F6G
kcpG2om3PVODLAgfi49T3f+sHw==
-----END CERTIFICATE-----
-# Microsoft ECC Root Certificate Authority 2017
+Microsoft ECC Root Certificate Authority 2017
+=============================================
-----BEGIN CERTIFICATE-----
MIICWTCCAd+gAwIBAgIQZvI9r4fei7FK6gxXMQHC7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV
UzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNyb3NvZnQgRUND
@@ -2826,7 +2811,8 @@ Xu5gKcs68tvWMoQZP3zVL8KxzJOuULsJMsbG7X7JNpQS5GiFBqIb0C8CMQCZ6Ra0DvpWSNSkMBaR
eNtUjGUBiudQZsIxtzm6uBoiB078a1QWIP8rtedMDE2mT3M=
-----END CERTIFICATE-----
-# Microsoft RSA Root Certificate Authority 2017
+Microsoft RSA Root Certificate Authority 2017
+=============================================
-----BEGIN CERTIFICATE-----
MIIFqDCCA5CgAwIBAgIQHtOXCV/YtLNHcB6qvn9FszANBgkqhkiG9w0BAQwFADBlMQswCQYDVQQG
EwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNyb3NvZnQg
@@ -2856,7 +2842,8 @@ c0QWbej09+CVgI+WXTik9KveCjCHk9hNAHFiRSdLOkKEW39lt2c0Ui2cFmuqqNh7o0JMcccMyj6D
5KbvtwEwXlGjefVwaaZBRA+GsCyRxj3qrg+E
-----END CERTIFICATE-----
-# e-Szigno Root CA 2017
+e-Szigno Root CA 2017
+=====================
-----BEGIN CERTIFICATE-----
MIICQDCCAeWgAwIBAgIMAVRI7yH9l1kN9QQKMAoGCCqGSM49BAMCMHExCzAJBgNVBAYTAkhVMREw
DwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUt
@@ -2871,7 +2858,8 @@ tVfd14pVCzbhhkT61NlojbjcI4qKDdQvfepz7L9NbKgCIQDLpbQS+ue16M9+k/zzNY9vTlp8tLxO
svxyqltZ+efcMQ==
-----END CERTIFICATE-----
-# certSIGN Root CA G2
+certSIGN Root CA G2
+===================
-----BEGIN CERTIFICATE-----
MIIFRzCCAy+gAwIBAgIJEQA0tk7GNi02MA0GCSqGSIb3DQEBCwUAMEExCzAJBgNVBAYTAlJPMRQw
EgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJR04gUk9PVCBDQSBHMjAeFw0xNzAy
@@ -2899,7 +2887,8 @@ NMn5X7azKFGnpyuqSfqNZSlO42sTp5SjLVFteAxEy9/eCG/Oo2Sr05WE1LlSVHJ7liXMvGnjSG4N
0MedJ5qq+BOS3R7fY581qRY27Iy4g/Q9iY/NtBde17MXQRBdJ3NghVdJIgc=
-----END CERTIFICATE-----
-# Trustwave Global Certification Authority
+Trustwave Global Certification Authority
+========================================
-----BEGIN CERTIFICATE-----
MIIF2jCCA8KgAwIBAgIMBfcOhtpJ80Y1LrqyMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJV
UzERMA8GA1UECAwISWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28xITAfBgNVBAoMGFRydXN0d2F2
@@ -2930,7 +2919,8 @@ Yj6RS8fZMXZC+fc8Y+wmjHMMfRod6qh8h6jCJ3zhM0EPz8/8AKAigJ5Kp28AsEFFtyLKaEjFQqKu
29FpHOTKyeC2nOnOcXHebD8WpHk=
-----END CERTIFICATE-----
-# Trustwave Global ECC P256 Certification Authority
+Trustwave Global ECC P256 Certification Authority
+=================================================
-----BEGIN CERTIFICATE-----
MIICYDCCAgegAwIBAgIMDWpfCD8oXD5Rld9dMAoGCCqGSM49BAMCMIGRMQswCQYDVQQGEwJVUzER
MA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBI
@@ -2945,7 +2935,8 @@ P62jQzBBMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcGADAdBgNVHQ4EFgQUo0EGrJBt
RM4q3wghDDcCIC0mA6AFvWvR9lz4ZcyGbbOcNEhjhAnFjXca4syc4XR7
-----END CERTIFICATE-----
-# Trustwave Global ECC P384 Certification Authority
+Trustwave Global ECC P384 Certification Authority
+=================================================
-----BEGIN CERTIFICATE-----
MIICnTCCAiSgAwIBAgIMCL2Fl2yZJ6SAaEc7MAoGCCqGSM49BAMDMIGRMQswCQYDVQQGEwJVUzER
MA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBI
@@ -2961,7 +2952,8 @@ ADBkAjA3AZKXRRJ+oPM+rRk6ct30UJMDEr5E0k9BpIycnR+j9sKS50gU/k6bpZFXrsY3crsCMGcl
CrEMXu6pY5Jv5ZAL/mYiykf9ijH3g/56vxC+GCsej/YpHpRZ744hN8tRmKVuSw==
-----END CERTIFICATE-----
-# NAVER Global Root Certification Authority
+NAVER Global Root Certification Authority
+=========================================
-----BEGIN CERTIFICATE-----
MIIFojCCA4qgAwIBAgIUAZQwHqIL3fXFMyqxQ0Rx+NZQTQ0wDQYJKoZIhvcNAQEMBQAwaTELMAkG
A1UEBhMCS1IxJjAkBgNVBAoMHU5BVkVSIEJVU0lORVNTIFBMQVRGT1JNIENvcnAuMTIwMAYDVQQD
@@ -2991,7 +2983,8 @@ I/hGoiLtk/bdmuYqh7GYVPEi92tF4+KOdh2ajcQGjTa3FPOdVGm3jjzVpG2Tgbet9r1ke8LJaDmg
kpzNNIaRkPpkUZ3+/uul9XXeifdy
-----END CERTIFICATE-----
-# AC RAIZ FNMT-RCM SERVIDORES SEGUROS
+AC RAIZ FNMT-RCM SERVIDORES SEGUROS
+===================================
-----BEGIN CERTIFICATE-----
MIICbjCCAfOgAwIBAgIQYvYybOXE42hcG2LdnC6dlTAKBggqhkjOPQQDAzB4MQswCQYDVQQGEwJF
UzERMA8GA1UECgwIRk5NVC1SQ00xDjAMBgNVBAsMBUNlcmVzMRgwFgYDVQRhDA9WQVRFUy1RMjgy
@@ -3006,7 +2999,8 @@ SM49BAMDA2kAMGYCMQCuSuMrQMN0EfKVrRYj3k4MGuZdpSRea0R7/DjiT8ucRRcRTBQnJlU5dUoD
zBOQn5ICMQD6SmxgiHPz7riYYqnOK8LZiqZwMR2vsJRM60/G49HzYqc8/5MuB1xJAWdpEgJyv+c=
-----END CERTIFICATE-----
-# GlobalSign Root R46
+GlobalSign Root R46
+===================
-----BEGIN CERTIFICATE-----
MIIFWjCCA0KgAwIBAgISEdK7udcjGJ5AXwqdLdDfJWfRMA0GCSqGSIb3DQEBDAUAMEYxCzAJBgNV
BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQDExNHbG9iYWxTaWduIFJv
@@ -3035,7 +3029,8 @@ DEJ4Y9HiD2971KE9dJeFt0g5QdYg/NA6s/rob8SKunE3vouXsXgxT7PntgMTzlSdriVZzH81Xwj3
QEUxeCp6
-----END CERTIFICATE-----
-# GlobalSign Root E46
+GlobalSign Root E46
+===================
-----BEGIN CERTIFICATE-----
MIICCzCCAZGgAwIBAgISEdK7ujNu1LzmJGjFDYQdmOhDMAoGCCqGSM49BAMDMEYxCzAJBgNVBAYT
AkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQDExNHbG9iYWxTaWduIFJvb3Qg
@@ -3049,7 +3044,8 @@ vLtoURMMA/cVi4RguYv/Uo7njLwcAjA8+RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+
CAezNIm8BZ/3Hobui3A=
-----END CERTIFICATE-----
-# GLOBALTRUST 2020
+GLOBALTRUST 2020
+================
-----BEGIN CERTIFICATE-----
MIIFgjCCA2qgAwIBAgILWku9WvtPilv6ZeUwDQYJKoZIhvcNAQELBQAwTTELMAkGA1UEBhMCQVQx
IzAhBgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVT
@@ -3078,7 +3074,8 @@ YqYK6miyeUcGbvJXqBUzxvd4Sj1Ce2t+/vdG6tHrju+IaFvowdlxfv1k7/9nR4hYJS8+hge9+6jl
gqispdNpQ80xiEmEU5LAsTkbOYMBMMTyqfrQA71yN2BWHzZ8vTmR9W0Nv3vXkg==
-----END CERTIFICATE-----
-# ANF Secure Server Root CA
+ANF Secure Server Root CA
+=========================
-----BEGIN CERTIFICATE-----
MIIF7zCCA9egAwIBAgIIDdPjvGz5a7EwDQYJKoZIhvcNAQELBQAwgYQxEjAQBgNVBAUTCUc2MzI4
NzUxMDELMAkGA1UEBhMCRVMxJzAlBgNVBAoTHkFORiBBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lv
@@ -3109,7 +3106,8 @@ g77FGr8H6lnco4g175x2MjxNBiLOFeXdntiP2t7SxDnlF4HPOEfrf4htWRvfn0IUrn7PqLBmZdo3
r5+qPeoott7VMVgWglvquxl1AnMaykgaIZOQCo6ThKd9OyMYkomgjaw=
-----END CERTIFICATE-----
-# Certum EC-384 CA
+Certum EC-384 CA
+================
-----BEGIN CERTIFICATE-----
MIICZTCCAeugAwIBAgIQeI8nXIESUiClBNAt3bpz9DAKBggqhkjOPQQDAzB0MQswCQYDVQQGEwJQ
TDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2Vy
@@ -3124,7 +3122,8 @@ ADBlAjADVS2m5hjEfO/JUG7BJw+ch69u1RsIGL2SKcHvlJF40jocVYli5RsJHrpka/F2tNQCMQC0
QoSZ/6vnnvuRlydd3LBbMHHOXjgaatkl5+r3YZJW+OraNsKHZZYuciUvf9/DE8k=
-----END CERTIFICATE-----
-# Certum Trusted Root CA
+Certum Trusted Root CA
+======================
-----BEGIN CERTIFICATE-----
MIIFwDCCA6igAwIBAgIQHr9ZULjJgDdMBvfrVU+17TANBgkqhkiG9w0BAQ0FADB6MQswCQYDVQQG
EwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0g
@@ -3153,3 +3152,81 @@ WWRrJ8/vJ8HjJLWG965+Mk2weWjROeiQWMODvA8s1pfrzgzhIMfatz7DP78v3DSk+yshzWePS/Tj
OPQD8rv7gmsHINFSH5pkAnuYZttcTVoP0ISVoDwUQwbKytu4QTbaakRnh6+v40URFWkIsr4WOZck
bxJF0WddCajJFdr60qZfE2Efv4WstK2tBZQIgx51F9NxO5NQI1mg7TyRVJ12AMXDuDjb
-----END CERTIFICATE-----
+
+TunTrust Root CA
+================
+-----BEGIN CERTIFICATE-----
+MIIFszCCA5ugAwIBAgIUEwLV4kBMkkaGFmddtLu7sms+/BMwDQYJKoZIhvcNAQELBQAwYTELMAkG
+A1UEBhMCVE4xNzA1BgNVBAoMLkFnZW5jZSBOYXRpb25hbGUgZGUgQ2VydGlmaWNhdGlvbiBFbGVj
+dHJvbmlxdWUxGTAXBgNVBAMMEFR1blRydXN0IFJvb3QgQ0EwHhcNMTkwNDI2MDg1NzU2WhcNNDQw
+NDI2MDg1NzU2WjBhMQswCQYDVQQGEwJUTjE3MDUGA1UECgwuQWdlbmNlIE5hdGlvbmFsZSBkZSBD
+ZXJ0aWZpY2F0aW9uIEVsZWN0cm9uaXF1ZTEZMBcGA1UEAwwQVHVuVHJ1c3QgUm9vdCBDQTCCAiIw
+DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMPN0/y9BFPdDCA61YguBUtB9YOCfvdZn56eY+hz
+2vYGqU8ftPkLHzmMmiDQfgbU7DTZhrx1W4eI8NLZ1KMKsmwb60ksPqxd2JQDoOw05TDENX37Jk0b
+bjBU2PWARZw5rZzJJQRNmpA+TkBuimvNKWfGzC3gdOgFVwpIUPp6Q9p+7FuaDmJ2/uqdHYVy7BG7
+NegfJ7/Boce7SBbdVtfMTqDhuazb1YMZGoXRlJfXyqNlC/M4+QKu3fZnz8k/9YosRxqZbwUN/dAd
+gjH8KcwAWJeRTIAAHDOFli/LQcKLEITDCSSJH7UP2dl3RxiSlGBcx5kDPP73lad9UKGAwqmDrViW
+VSHbhlnUr8a83YFuB9tgYv7sEG7aaAH0gxupPqJbI9dkxt/con3YS7qC0lH4Zr8GRuR5KiY2eY8f
+Tpkdso8MDhz/yV3A/ZAQprE38806JG60hZC/gLkMjNWb1sjxVj8agIl6qeIbMlEsPvLfe/ZdeikZ
+juXIvTZxi11Mwh0/rViizz1wTaZQmCXcI/m4WEEIcb9PuISgjwBUFfyRbVinljvrS5YnzWuioYas
+DXxU5mZMZl+QviGaAkYt5IPCgLnPSz7ofzwB7I9ezX/SKEIBlYrilz0QIX32nRzFNKHsLA4KUiwS
+VXAkPcvCFDVDXSdOvsC9qnyW5/yeYa1E0wCXAgMBAAGjYzBhMB0GA1UdDgQWBBQGmpsfU33x9aTI
+04Y+oXNZtPdEITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFAaamx9TffH1pMjThj6hc1m0
+90QhMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAqgVutt0Vyb+zxiD2BkewhpMl
+0425yAA/l/VSJ4hxyXT968pk21vvHl26v9Hr7lxpuhbI87mP0zYuQEkHDVneixCwSQXi/5E/S7fd
+Ao74gShczNxtr18UnH1YeA32gAm56Q6XKRm4t+v4FstVEuTGfbvE7Pi1HE4+Z7/FXxttbUcoqgRY
+YdZ2vyJ/0Adqp2RT8JeNnYA/u8EH22Wv5psymsNUk8QcCMNE+3tjEUPRahphanltkE8pjkcFwRJp
+adbGNjHh/PqAulxPxOu3Mqz4dWEX1xAZufHSCe96Qp1bWgvUxpVOKs7/B9dPfhgGiPEZtdmYu65x
+xBzndFlY7wyJz4sfdZMaBBSSSFCp61cpABbjNhzI+L/wM9VBD8TMPN3pM0MBkRArHtG5Xc0yGYuP
+jCB31yLEQtyEFpslbei0VXF/sHyz03FJuc9SpAQ/3D2gu68zngowYI7bnV2UqL1g52KAdoGDDIzM
+MEZJ4gzSqK/rYXHv5yJiqfdcZGyfFoxnNidF9Ql7v/YQCvGwjVRDjAS6oz/v4jXH+XTgbzRB0L9z
+ZVcg+ZtnemZoJE6AZb0QmQZZ8mWvuMZHu/2QeItBcy6vVR/cO5JyboTT0GFMDcx2V+IthSIVNg3r
+AZ3r2OvEhJn7wAzMMujjd9qDRIueVSjAi1jTkD5OGwDxFa2DK5o=
+-----END CERTIFICATE-----
+
+HARICA TLS RSA Root CA 2021
+===========================
+-----BEGIN CERTIFICATE-----
+MIIFpDCCA4ygAwIBAgIQOcqTHO9D88aOk8f0ZIk4fjANBgkqhkiG9w0BAQsFADBsMQswCQYDVQQG
+EwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u
+cyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBSU0EgUm9vdCBDQSAyMDIxMB4XDTIxMDIxOTEwNTUz
+OFoXDTQ1MDIxMzEwNTUzN1owbDELMAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRl
+bWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgUlNB
+IFJvb3QgQ0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIvC569lmwVnlskN
+JLnQDmT8zuIkGCyEf3dRywQRNrhe7Wlxp57kJQmXZ8FHws+RFjZiPTgE4VGC/6zStGndLuwRo0Xu
+a2s7TL+MjaQenRG56Tj5eg4MmOIjHdFOY9TnuEFE+2uva9of08WRiFukiZLRgeaMOVig1mlDqa2Y
+Ulhu2wr7a89o+uOkXjpFc5gH6l8Cct4MpbOfrqkdtx2z/IpZ525yZa31MJQjB/OCFks1mJxTuy/K
+5FrZx40d/JiZ+yykgmvwKh+OC19xXFyuQnspiYHLA6OZyoieC0AJQTPb5lh6/a6ZcMBaD9YThnEv
+dmn8kN3bLW7R8pv1GmuebxWMevBLKKAiOIAkbDakO/IwkfN4E8/BPzWr8R0RI7VDIp4BkrcYAuUR
+0YLbFQDMYTfBKnya4dC6s1BG7oKsnTH4+yPiAwBIcKMJJnkVU2DzOFytOOqBAGMUuTNe3QvboEUH
+GjMJ+E20pwKmafTCWQWIZYVWrkvL4N48fS0ayOn7H6NhStYqE613TBoYm5EPWNgGVMWX+Ko/IIqm
+haZ39qb8HOLubpQzKoNQhArlT4b4UEV4AIHrW2jjJo3Me1xR9BQsQL4aYB16cmEdH2MtiKrOokWQ
+CPxrvrNQKlr9qEgYRtaQQJKQCoReaDH46+0N0x3GfZkYVVYnZS6NRcUk7M7jAgMBAAGjQjBAMA8G
+A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFApII6ZgpJIKM+qTW8VX6iVNvRLuMA4GA1UdDwEB/wQE
+AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAPpBIqm5iFSVmewzVjIuJndftTgfvnNAUX15QvWiWkKQU
+EapobQk1OUAJ2vQJLDSle1mESSmXdMgHHkdt8s4cUCbjnj1AUz/3f5Z2EMVGpdAgS1D0NTsY9FVq
+QRtHBmg8uwkIYtlfVUKqrFOFrJVWNlar5AWMxajaH6NpvVMPxP/cyuN+8kyIhkdGGvMA9YCRotxD
+QpSbIPDRzbLrLFPCU3hKTwSUQZqPJzLB5UkZv/HywouoCjkxKLR9YjYsTewfM7Z+d21+UPCfDtcR
+j88YxeMn/ibvBZ3PzzfF0HvaO7AWhAw6k9a+F9sPPg4ZeAnHqQJyIkv3N3a6dcSFA1pj1bF1BcK5
+vZStjBWZp5N99sXzqnTPBIWUmAD04vnKJGW/4GKvyMX6ssmeVkjaef2WdhW+o45WxLM0/L5H9MG0
+qPzVMIho7suuyWPEdr6sOBjhXlzPrjoiUevRi7PzKzMHVIf6tLITe7pTBGIBnfHAT+7hOtSLIBD6
+Alfm78ELt5BGnBkpjNxvoEppaZS3JGWg/6w/zgH7IS79aPib8qXPMThcFarmlwDB31qlpzmq6YR/
+PFGoOtmUW4y/Twhx5duoXNTSpv4Ao8YWxw/ogM4cKGR0GQjTQuPOAF1/sdwTsOEFy9EgqoZ0njnn
+kf3/W9b3raYvAwtt41dU63ZTGI0RmLo=
+-----END CERTIFICATE-----
+
+HARICA TLS ECC Root CA 2021
+===========================
+-----BEGIN CERTIFICATE-----
+MIICVDCCAdugAwIBAgIQZ3SdjXfYO2rbIvT/WeK/zjAKBggqhkjOPQQDAzBsMQswCQYDVQQGEwJH
+UjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBD
+QTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBFQ0MgUm9vdCBDQSAyMDIxMB4XDTIxMDIxOTExMDExMFoX
+DTQ1MDIxMzExMDEwOVowbDELMAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWlj
+IGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgRUNDIFJv
+b3QgQ0EgMjAyMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDgI/rGgltJ6rK9JOtDA4MM7KKrxcm1l
+AEeIhPyaJmuqS7psBAqIXhfyVYf8MLA04jRYVxqEU+kw2anylnTDUR9YSTHMmE5gEYd103KUkE+b
+ECUqqHgtvpBBWJAVcqeht6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUyRtTgRL+BNUW
+0aq8mm+3oJUZbsowDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMDA2cAMGQCMBHervjcToiwqfAi
+rcJRQO9gcS3ujwLEXQNwSaSS6sUUiHCm0w2wqsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/Qw
+CZ61IygNnxS2PFOiTAZpffpskcYqSUXm7LcT4Tps
+-----END CERTIFICATE-----
diff --git a/thirdparty/graphite/ChangeLog b/thirdparty/graphite/ChangeLog
deleted file mode 100644
index e36110e1c1..0000000000
--- a/thirdparty/graphite/ChangeLog
+++ /dev/null
@@ -1,238 +0,0 @@
-1.3.14
- . Bug fixes
- . Allow features to be hidden (for aliases)
- . Move to python3
- . Rename doc files from .txt to .asc
-
-1.3.13
- . Resolve minor spacing issue in rtl non-overlap kerning
- . python3 for graphite.py
- . Better fuzzing
- . Better building on windows
-
-1.3.12
- . Graphite no longer does dumb rendering for fonts with no smarts
- . Segment caching code removed. Anything attempting to use the segment cache gets given a regular face instead
- . Add libfuzzer support
- . Builds now require C++11
- . Improvements to Windows 64 bit builds
- . Support different versions of python including 32 bit and python 3
- . Various minor bug fixes
-
-1.3.11
- . Fixes due to security review
- . Minor collision avoidance fixes
- . Fix LZ4 decompressor against high compression
-
-1.3.10
- . Address floating point build parameters to give consistent positioning results across platforms
- . Various bug fixes
-
-1.3.9
- . Add Collision COLL_ISSPACE to allow for visible spaces in collision avoidance
- . Add segment and pass direction information to tracing output
- . Bug fix rule length testing in 32-bit
- . Increase slanted margin distances for collision avoidance
- . Change kerning algorithm to simple outline expansion. Seems to make no visible difference.
- . Add trace2svg to test tools
-
-1.3.8
- . Various bug fixes arising from fuzzing
- . Fix regression that stopped piglatin from working
- . Make collision avoidance kerning give more regular results
- . Minor modification to clustering algorithm to handle variable width chars
-
-1.3.7
- . Bug fixes
- . Start to deprecate SegCache. This will be going away in a later release.
-
-1.3.6
- . Bug fixes
-
-1.3.5
- . Bug fixes
- . Security bug fix
- . Fix ARM misalignment problem
- . Track latest cmake
-
-1.3.4
- . Transition from Mercurial to Git
- . Bug fixes
- . Fix Collision Kerning ignoring some diacritics
- . Handle pass bits 16-31 to speed up fonts with > 16 passes
- . Various minor fuzz bug fixes
- . Make Coverity happy
- . Add GR_FALLTHROUGH macro for clang c++11
-
-1.3.3
- . Slight speed up in Collision Avoidance
- . Remove dead bidi code
- . Bug fixes
- . Between pass bidi reorderings and at the end
- . Decompressor fuzz bugs
- . Other fuzz bugs
-
-1.3.2
- . Remove full bidi. All segments are assumed to be single directioned.
- . Bug fixes:
- . Decompressor corner cases
- . Various fuzz bugs
-
-1.3.1
- . Deprecation warning: Full bidi support is about to be deprecated. Make contact
- if this impacts you.
- . Change compression block format slightly to conform to LZ4
- . Bug fixes:
- . Handle mono direction text with diacritics consistently. Fonts
- now see the direction they expect consistently and bidi now
- gives expected results.
- . Fixed lots of fuzz bugs
- . Coverity cleanups
- . Build now works for clang and/or asan and/or afl etc.
-
-1.3.0
- . Add collision avoidance
- . Shift Collider
- . Kern Collider
- . Octabox outlines and subboxes
- . Add compressed Silf and Glat table support
- . Bug fixes:
- . Stop loops forming in the child, sibling tree
- . Handle bidi mirroring correctly if no bidi occurring
-
-1.2.4
- . Face failure now has error code reporting via debug logging
- . can now call gr_start_logging(NULL, fname)
- . gr2fonttest --alltrace added
- . Format 14 table support
- . Not done. To be handled entirely in the compiler
- . Bidi support for Unicode 6.3 Isolating direction controls
- . Fonts no longer require a glyf/loca table. In such cases the bounding box is always 0.
- . Clang ASAN build support added for testing.
- . Handle out of memory sanely.
- . Documentation improvements
- . Bug fixes:
- . Enforce fonts having to store glyph attributes by monotonically increasing attribute number
- . zeropadding was not getting called on feature tags
- . automatic associations for unassociated characters
- . use direct engine on Mac
- . various extreme case reading 1 past the end errors fixed
- . remove tabs from sources so that it becomes readable again
-
-1.2.3
- . Bug fixes only:
- . fix byte swapping when testing cmap subtable lengths
- . work around armel compilation problems with conditional operators
- . fix pseudoglyph support for advance and bbox
-
-1.2.2
- . Add support for passKeySlot (makes Charis 2x faster) up to 32 passes
- . Add telemetry output to json if enabled in build GRAPHITE2_TELEMETRY
- . Shrink font memory footprint particularly in the fsm
- . Add -S to comparerenderer
- . Bug fixes:
- . Fix shift.x being reversed for rtl text
- . Fix faulty fallback justification
- . Fix bad cmap handling
- . Support compiling on old Solaris where bidi attributes clash with register names
- . Follow the crowd in using Windows.h
-
-1.2.1
- . Bug fixes:
- . Allow glyph reattachment
- . Allow signed glyph attributes
- . Various build problems with MacOS, old gcc versions, etc.
- . Various overrun read errors fixed
-
-1.2.0
- . API Changes:
- . Added Windows friendly gr_start_logging and gr_stop_logging, now per face
- . Added gr_make_face_with_ops, gr_make_face_with_seg_cache_and_ops
- . Added gr_make_font_with_ops
- . Added gr_face_is_char_supported
- . Added gr_face_info to give info to apps about face capabilities
- . Deprecated gr_make_face, gr_make_face_with_seg_cache, gr_make_font_with_advance_fn
- . Deprecated graphite_start_logging and graphite_stop_logging
- . These functions are stubbed now and do nothing, but do compile and link.
- . Bump API version to 3
- . Add C# wrapper to contrib
- . Handle justification information in a font and do something useful with it
- . Builds clang clean (has done for a while)
- . Bug fixes
- . Windows build and bug fixes
- . Add extra information to json debug output
- . Added windows build documentation
- . Added freetype sample code and test
-
-1.1.3
- . Default build has GRAPHITE2_COMPARE_RENDERER to OFF to reduce dependencies
- . Builds on Mac with clang
- . Debug output improvements
- . Tidy up perl wrappers
- . Fuzz tester improvements
- . Various bug fixes for bad font handling
-
-1.1.2
- . Support feature ids < 4 chars when space padded for inclusion in FF 14.
- . More fuzztesting and removal of causes of valgrind bad reads and sigabrts
- . Remove contrib/android into its own repo (http://hg.palaso.org/grandroid)
- . Update comparerenderer to latest harfbuzzng api
-
-1.1.1
- . Missing Log.h included
- . perl wrappers updated
-
-1.1.0
- . Refactored debug output to use json
- . Renamed VM_MACHINE_TYPE to GRAPHITE2_VM_TYPE
- . Renamed DISABLE_SEGCACHE to GRAPHITE2_NSEGCACE
- . Renamed DISBALE_FILE_FACE to GRAPHITE2_NFILEFACE
- . Renamed ENABLE_COMPARE_RENDERER to GRAPHTIE2_COMPARE_RENDERER
- . Renamed DOXYGEN_CONFIG to GRAPHITE2_DOXYGEN_CONFIG
- . Renamed GR2_CUSTOM_HEADER to GRAPHITE2_CUSTOM_HEADER
- . Renamed GR2_EXPORTING to GRAPHITE2_EXPORTING
- . Added GRAPHITE2_STATIC for static only builds
- . Added GRAPHITE2_NTRACING to compile out tracing code
- . Documented GRAPHITE2_{EXPORTING,STATIC,NTRACING} in hacking.txt
- . Bump libtool version to 2.1.0
- . dumb font rendering works
- . slot user attributes are now signed rather than unsigned
- . add support for long class maps
- . Rename perl library to avoid nameclash on Windows
- . Various robustness fixes
- . Moved internal .h files into src/inc
- . Parallelise fuzztest
- . General build improvements, particularly on Windows
-
-1.0.3
- . Fix UTF16 surrogate support
- . script and lang tags may be space padded or null padded
- . Remove need for WORDS_BIGENDIAN, do it all automatically
- . Remove all #include <new>. Use CLASS_NEW_DELETE instead.
- . Fix comparerenderer to work with current hbng
- . Add valgrind to fuzztest to ensure good memory use at all times
- . Fix new fuzztest exposed bugs.
- . Fix bugs exposed by Mozilla security review
- . Add continuous integration build on Windows support
-
-1.0.2
- . Fix Windows build
- . Comparerenderer uses hbng enforcing ot rendering
- . Add Bidi .hasChar support and refactor mirroring code
- . Make cmake default Release rather than debug
- . Don't compile in a boat load of TtfUtil that isn't used, saving 15% of binary
- . Chase the FSF around its latest office moves
- . WORDS_BIGENDIAN is set at the top so tests now pass on ppc, etc.
- . More words in the manual
-
-1.0.1
- . Release is the default build in cmake now.
- . Refactor cmake build to not rebuild things so much.
- . Include a missing file
- . Remove -nostdlibs, making gcc happy everywhere
- . Update comparerenderer to latest hbng interface
- . Add changelog
-
-1.0.0
- . First major release of perfect code!
-
diff --git a/thirdparty/graphite/src/Pass.cpp b/thirdparty/graphite/src/Pass.cpp
index db31c22d46..47ae2064f7 100644
--- a/thirdparty/graphite/src/Pass.cpp
+++ b/thirdparty/graphite/src/Pass.cpp
@@ -1056,12 +1056,17 @@ float Pass::resolveKern(Segment *seg, Slot *slotFix, GR_MAYBE_UNUSED Slot *start
ymin = min(by + bbb.bl.y, ymin);
for (nbor = slotFix->next(); nbor; nbor = nbor->next())
{
- if (nbor->isChildOf(base))
- continue;
if (!gc.check(nbor->gid()))
return 0.;
const Rect &bb = seg->theGlyphBBoxTemporary(nbor->gid());
SlotCollision *cNbor = seg->collisionInfo(nbor);
+ const float nby = nbor->origin().y + cNbor->shift().y;
+ if (nbor->isChildOf(base))
+ {
+ ymax = max(nby + bb.tr.y, ymax);
+ ymin = min(nby + bb.bl.y, ymin);
+ continue;
+ }
if ((bb.bl.y == 0.f && bb.tr.y == 0.f) || (cNbor->flags() & SlotCollision::COLL_ISSPACE))
{
if (m_kernColls == InWord)
diff --git a/thirdparty/libogg/framing.c b/thirdparty/libogg/framing.c
index 83601199ad..724d116d7f 100644
--- a/thirdparty/libogg/framing.c
+++ b/thirdparty/libogg/framing.c
@@ -597,9 +597,14 @@ char *ogg_sync_buffer(ogg_sync_state *oy, long size){
if(size>oy->storage-oy->fill){
/* We need to extend the internal buffer */
- long newsize=size+oy->fill+4096; /* an extra page to be nice */
+ long newsize;
void *ret;
+ if(size>INT_MAX-4096-oy->fill){
+ ogg_sync_clear(oy);
+ return NULL;
+ }
+ newsize=size+oy->fill+4096; /* an extra page to be nice */
if(oy->data)
ret=_ogg_realloc(oy->data,newsize);
else
@@ -1564,7 +1569,7 @@ void test_pack(const int *pl, const int **headers, int byteskip,
byteskipcount=byteskip;
}
- ogg_sync_wrote(&oy,next-buf);
+ ogg_sync_wrote(&oy,(long)(next-buf));
while(1){
int ret=ogg_sync_pageout(&oy,&og_de);
diff --git a/thirdparty/libogg/ogg/config_types.h b/thirdparty/libogg/ogg/config_types.h
index 4dc8393fdc..1a87df6423 100644
--- a/thirdparty/libogg/ogg/config_types.h
+++ b/thirdparty/libogg/ogg/config_types.h
@@ -1,7 +1,20 @@
#ifndef __CONFIG_TYPES_H__
#define __CONFIG_TYPES_H__
-#include <stdint.h>
+/* these are filled in by configure or cmake*/
+#define INCLUDE_INTTYPES_H 1
+#define INCLUDE_STDINT_H 1
+#define INCLUDE_SYS_TYPES_H 1
+
+#if INCLUDE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#if INCLUDE_STDINT_H
+# include <stdint.h>
+#endif
+#if INCLUDE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
typedef int16_t ogg_int16_t;
typedef uint16_t ogg_uint16_t;
diff --git a/thirdparty/libvorbis/COPYING b/thirdparty/libvorbis/COPYING
index 153b926a15..fb456a87bd 100644
--- a/thirdparty/libvorbis/COPYING
+++ b/thirdparty/libvorbis/COPYING
@@ -1,4 +1,4 @@
-Copyright (c) 2002-2018 Xiph.org Foundation
+Copyright (c) 2002-2020 Xiph.org Foundation
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
diff --git a/thirdparty/libvorbis/analysis.c b/thirdparty/libvorbis/analysis.c
index 0e11a167be..14919737eb 100644
--- a/thirdparty/libvorbis/analysis.c
+++ b/thirdparty/libvorbis/analysis.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/backends.h b/thirdparty/libvorbis/backends.h
index 22809d46d5..670b0b902e 100644
--- a/thirdparty/libvorbis/backends.h
+++ b/thirdparty/libvorbis/backends.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/barkmel.c b/thirdparty/libvorbis/barkmel.c
index 4b19935f30..f833c30211 100644
--- a/thirdparty/libvorbis/barkmel.c
+++ b/thirdparty/libvorbis/barkmel.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/bitrate.c b/thirdparty/libvorbis/bitrate.c
index 96055140f7..132553cbee 100644
--- a/thirdparty/libvorbis/bitrate.c
+++ b/thirdparty/libvorbis/bitrate.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/bitrate.h b/thirdparty/libvorbis/bitrate.h
index 655a68cc09..48fa150596 100644
--- a/thirdparty/libvorbis/bitrate.h
+++ b/thirdparty/libvorbis/bitrate.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/block.c b/thirdparty/libvorbis/block.c
index db245b3e69..6a50da0843 100644
--- a/thirdparty/libvorbis/block.c
+++ b/thirdparty/libvorbis/block.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/books/coupled/res_books_51.h b/thirdparty/libvorbis/books/coupled/res_books_51.h
index 47df4b221b..eb569c6f04 100644
--- a/thirdparty/libvorbis/books/coupled/res_books_51.h
+++ b/thirdparty/libvorbis/books/coupled/res_books_51.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2010 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
*
diff --git a/thirdparty/libvorbis/books/coupled/res_books_stereo.h b/thirdparty/libvorbis/books/coupled/res_books_stereo.h
index 61d934046d..7b53cb972b 100644
--- a/thirdparty/libvorbis/books/coupled/res_books_stereo.h
+++ b/thirdparty/libvorbis/books/coupled/res_books_stereo.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/books/floor/floor_books.h b/thirdparty/libvorbis/books/floor/floor_books.h
index 67d5f31a3b..d26664f766 100644
--- a/thirdparty/libvorbis/books/floor/floor_books.h
+++ b/thirdparty/libvorbis/books/floor/floor_books.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/books/uncoupled/res_books_uncoupled.h b/thirdparty/libvorbis/books/uncoupled/res_books_uncoupled.h
index 3d658ec470..107e22f9e3 100644
--- a/thirdparty/libvorbis/books/uncoupled/res_books_uncoupled.h
+++ b/thirdparty/libvorbis/books/uncoupled/res_books_uncoupled.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/codebook.c b/thirdparty/libvorbis/codebook.c
index 78672e222d..7a0c206783 100644
--- a/thirdparty/libvorbis/codebook.c
+++ b/thirdparty/libvorbis/codebook.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/codebook.h b/thirdparty/libvorbis/codebook.h
index 08440c6962..7d4e2aae4f 100644
--- a/thirdparty/libvorbis/codebook.h
+++ b/thirdparty/libvorbis/codebook.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/codec_internal.h b/thirdparty/libvorbis/codec_internal.h
index e522be18da..2ecf5e5c73 100644
--- a/thirdparty/libvorbis/codec_internal.h
+++ b/thirdparty/libvorbis/codec_internal.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/envelope.c b/thirdparty/libvorbis/envelope.c
index da75237542..22d39aa6e0 100644
--- a/thirdparty/libvorbis/envelope.c
+++ b/thirdparty/libvorbis/envelope.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/envelope.h b/thirdparty/libvorbis/envelope.h
index f466efde8a..2ef60a82ca 100644
--- a/thirdparty/libvorbis/envelope.h
+++ b/thirdparty/libvorbis/envelope.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/floor0.c b/thirdparty/libvorbis/floor0.c
index 443c0e5a96..f4a6d4d559 100644
--- a/thirdparty/libvorbis/floor0.c
+++ b/thirdparty/libvorbis/floor0.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/floor1.c b/thirdparty/libvorbis/floor1.c
index 673e954c53..c4fe3ea7e7 100644
--- a/thirdparty/libvorbis/floor1.c
+++ b/thirdparty/libvorbis/floor1.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/highlevel.h b/thirdparty/libvorbis/highlevel.h
index 337b75bfa4..7690e3ebfb 100644
--- a/thirdparty/libvorbis/highlevel.h
+++ b/thirdparty/libvorbis/highlevel.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/info.c b/thirdparty/libvorbis/info.c
index 3fbb7c757a..f2e39e387e 100644
--- a/thirdparty/libvorbis/info.c
+++ b/thirdparty/libvorbis/info.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
@@ -19,7 +19,6 @@
#include <stdlib.h>
#include <string.h>
-#include <ctype.h>
#include <ogg/ogg.h>
#include "vorbis/codec.h"
#include "codec_internal.h"
@@ -30,8 +29,8 @@
#include "misc.h"
#include "os.h"
-#define GENERAL_VENDOR_STRING "Xiph.Org libVorbis 1.3.6"
-#define ENCODE_VENDOR_STRING "Xiph.Org libVorbis I 20180316 (Now 100% fewer shells)"
+#define GENERAL_VENDOR_STRING "Xiph.Org libVorbis 1.3.7"
+#define ENCODE_VENDOR_STRING "Xiph.Org libVorbis I 20200704 (Reducing Environment)"
/* helpers */
static void _v_writestring(oggpack_buffer *o,const char *s, int bytes){
@@ -47,6 +46,10 @@ static void _v_readstring(oggpack_buffer *o,char *buf,int bytes){
}
}
+static int _v_toupper(int c) {
+ return (c >= 'a' && c <= 'z') ? (c & ~('a' - 'A')) : c;
+}
+
void vorbis_comment_init(vorbis_comment *vc){
memset(vc,0,sizeof(*vc));
}
@@ -78,7 +81,7 @@ void vorbis_comment_add_tag(vorbis_comment *vc, const char *tag, const char *con
static int tagcompare(const char *s1, const char *s2, int n){
int c=0;
while(c < n){
- if(toupper(s1[c]) != toupper(s2[c]))
+ if(_v_toupper(s1[c]) != _v_toupper(s2[c]))
return !0;
c++;
}
@@ -203,6 +206,7 @@ void vorbis_info_clear(vorbis_info *vi){
static int _vorbis_unpack_info(vorbis_info *vi,oggpack_buffer *opb){
codec_setup_info *ci=vi->codec_setup;
+ int bs;
if(!ci)return(OV_EFAULT);
vi->version=oggpack_read(opb,32);
@@ -215,8 +219,12 @@ static int _vorbis_unpack_info(vorbis_info *vi,oggpack_buffer *opb){
vi->bitrate_nominal=(ogg_int32_t)oggpack_read(opb,32);
vi->bitrate_lower=(ogg_int32_t)oggpack_read(opb,32);
- ci->blocksizes[0]=1<<oggpack_read(opb,4);
- ci->blocksizes[1]=1<<oggpack_read(opb,4);
+ bs = oggpack_read(opb,4);
+ if(bs<0)goto err_out;
+ ci->blocksizes[0]=1<<bs;
+ bs = oggpack_read(opb,4);
+ if(bs<0)goto err_out;
+ ci->blocksizes[1]=1<<bs;
if(vi->rate<1)goto err_out;
if(vi->channels<1)goto err_out;
diff --git a/thirdparty/libvorbis/lookup.c b/thirdparty/libvorbis/lookup.c
index 1cc1f88ee9..7cd01a44d3 100644
--- a/thirdparty/libvorbis/lookup.c
+++ b/thirdparty/libvorbis/lookup.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/lookup.h b/thirdparty/libvorbis/lookup.h
index 4bc0f3a206..ec05014f44 100644
--- a/thirdparty/libvorbis/lookup.h
+++ b/thirdparty/libvorbis/lookup.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/lookup_data.h b/thirdparty/libvorbis/lookup_data.h
index 5de3cfdc7e..7935715a70 100644
--- a/thirdparty/libvorbis/lookup_data.h
+++ b/thirdparty/libvorbis/lookup_data.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/lpc.c b/thirdparty/libvorbis/lpc.c
index 798f4cf076..877da47f8e 100644
--- a/thirdparty/libvorbis/lpc.c
+++ b/thirdparty/libvorbis/lpc.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/lpc.h b/thirdparty/libvorbis/lpc.h
index 9cc79451b6..4f59e6d32d 100644
--- a/thirdparty/libvorbis/lpc.h
+++ b/thirdparty/libvorbis/lpc.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/lsp.c b/thirdparty/libvorbis/lsp.c
index 8588054515..8afa305f50 100644
--- a/thirdparty/libvorbis/lsp.c
+++ b/thirdparty/libvorbis/lsp.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
@@ -15,9 +15,10 @@
The LSP generation code is taken (with minimal modification and a
few bugfixes) from "On the Computation of the LSP Frequencies" by
Joseph Rothweiler (see http://www.rothweiler.us for contact info).
+
The paper is available at:
- http://www.myown1.com/joe/lsf
+ https://web.archive.org/web/20110810174000/http://home.myfairpoint.net/vzenxj75/myown1/joe/lsf/index.html
********************************************************************/
diff --git a/thirdparty/libvorbis/lsp.h b/thirdparty/libvorbis/lsp.h
index 8a8d10e978..68b38daf16 100644
--- a/thirdparty/libvorbis/lsp.h
+++ b/thirdparty/libvorbis/lsp.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/mapping0.c b/thirdparty/libvorbis/mapping0.c
index ccb4493d4c..efa0fbcd93 100644
--- a/thirdparty/libvorbis/mapping0.c
+++ b/thirdparty/libvorbis/mapping0.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2010 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/masking.h b/thirdparty/libvorbis/masking.h
index 955e18c719..7a196a37eb 100644
--- a/thirdparty/libvorbis/masking.h
+++ b/thirdparty/libvorbis/masking.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/mdct.c b/thirdparty/libvorbis/mdct.c
index f3f1ed805b..2a0ff8d01b 100644
--- a/thirdparty/libvorbis/mdct.c
+++ b/thirdparty/libvorbis/mdct.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/mdct.h b/thirdparty/libvorbis/mdct.h
index 3b8c9ba4a2..ceaea617a3 100644
--- a/thirdparty/libvorbis/mdct.h
+++ b/thirdparty/libvorbis/mdct.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/misc.h b/thirdparty/libvorbis/misc.h
index 13788445a3..eac5160e88 100644
--- a/thirdparty/libvorbis/misc.h
+++ b/thirdparty/libvorbis/misc.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/floor_all.h b/thirdparty/libvorbis/modes/floor_all.h
index 20928aac87..2e3d4a5012 100644
--- a/thirdparty/libvorbis/modes/floor_all.h
+++ b/thirdparty/libvorbis/modes/floor_all.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/psych_11.h b/thirdparty/libvorbis/modes/psych_11.h
index cc5eea2402..9d8ed357ee 100644
--- a/thirdparty/libvorbis/modes/psych_11.h
+++ b/thirdparty/libvorbis/modes/psych_11.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/psych_16.h b/thirdparty/libvorbis/modes/psych_16.h
index 477cb4d90f..49cbf7c4b2 100644
--- a/thirdparty/libvorbis/modes/psych_16.h
+++ b/thirdparty/libvorbis/modes/psych_16.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/psych_44.h b/thirdparty/libvorbis/modes/psych_44.h
index 6c9eaa4e5f..d15509b71d 100644
--- a/thirdparty/libvorbis/modes/psych_44.h
+++ b/thirdparty/libvorbis/modes/psych_44.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/psych_8.h b/thirdparty/libvorbis/modes/psych_8.h
index 277db8436c..a19817f760 100644
--- a/thirdparty/libvorbis/modes/psych_8.h
+++ b/thirdparty/libvorbis/modes/psych_8.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/residue_16.h b/thirdparty/libvorbis/modes/residue_16.h
index 3e05471cec..15e161c862 100644
--- a/thirdparty/libvorbis/modes/residue_16.h
+++ b/thirdparty/libvorbis/modes/residue_16.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/residue_44.h b/thirdparty/libvorbis/modes/residue_44.h
index e89bc0e486..3f982695a7 100644
--- a/thirdparty/libvorbis/modes/residue_44.h
+++ b/thirdparty/libvorbis/modes/residue_44.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/residue_44p51.h b/thirdparty/libvorbis/modes/residue_44p51.h
index 7f33e250e2..8ac5f65e62 100644
--- a/thirdparty/libvorbis/modes/residue_44p51.h
+++ b/thirdparty/libvorbis/modes/residue_44p51.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2010 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/residue_44u.h b/thirdparty/libvorbis/modes/residue_44u.h
index e55ac12548..2f3595e49f 100644
--- a/thirdparty/libvorbis/modes/residue_44u.h
+++ b/thirdparty/libvorbis/modes/residue_44u.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/residue_8.h b/thirdparty/libvorbis/modes/residue_8.h
index ae123a276a..b836f79c84 100644
--- a/thirdparty/libvorbis/modes/residue_8.h
+++ b/thirdparty/libvorbis/modes/residue_8.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/setup_11.h b/thirdparty/libvorbis/modes/setup_11.h
index 0cbcaafcb2..5ade5dd169 100644
--- a/thirdparty/libvorbis/modes/setup_11.h
+++ b/thirdparty/libvorbis/modes/setup_11.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/setup_16.h b/thirdparty/libvorbis/modes/setup_16.h
index d59ad70d2e..8b2daafa3f 100644
--- a/thirdparty/libvorbis/modes/setup_16.h
+++ b/thirdparty/libvorbis/modes/setup_16.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/setup_22.h b/thirdparty/libvorbis/modes/setup_22.h
index bc38af9630..eef5a4e7da 100644
--- a/thirdparty/libvorbis/modes/setup_22.h
+++ b/thirdparty/libvorbis/modes/setup_22.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/setup_32.h b/thirdparty/libvorbis/modes/setup_32.h
index f66a0bcd00..f87cb767d0 100644
--- a/thirdparty/libvorbis/modes/setup_32.h
+++ b/thirdparty/libvorbis/modes/setup_32.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/setup_44.h b/thirdparty/libvorbis/modes/setup_44.h
index a189b5fb95..12d592808e 100644
--- a/thirdparty/libvorbis/modes/setup_44.h
+++ b/thirdparty/libvorbis/modes/setup_44.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/setup_44p51.h b/thirdparty/libvorbis/modes/setup_44p51.h
index 3bde7b340c..4d49173ffb 100644
--- a/thirdparty/libvorbis/modes/setup_44p51.h
+++ b/thirdparty/libvorbis/modes/setup_44p51.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2010 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/setup_44u.h b/thirdparty/libvorbis/modes/setup_44u.h
index 7ae3af6b2a..2dd8bf701f 100644
--- a/thirdparty/libvorbis/modes/setup_44u.h
+++ b/thirdparty/libvorbis/modes/setup_44u.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/setup_8.h b/thirdparty/libvorbis/modes/setup_8.h
index 7502556879..16b02e01b7 100644
--- a/thirdparty/libvorbis/modes/setup_8.h
+++ b/thirdparty/libvorbis/modes/setup_8.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/modes/setup_X.h b/thirdparty/libvorbis/modes/setup_X.h
index 2229a5ef2f..27807c10b4 100644
--- a/thirdparty/libvorbis/modes/setup_X.h
+++ b/thirdparty/libvorbis/modes/setup_X.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/os.h b/thirdparty/libvorbis/os.h
index 416a401dd1..9ded7358d4 100644
--- a/thirdparty/libvorbis/os.h
+++ b/thirdparty/libvorbis/os.h
@@ -8,7 +8,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
@@ -60,7 +60,7 @@ void *_alloca(size_t size);
# define FAST_HYPOT hypot
#endif
-#endif
+#endif /* _V_IFDEFJAIL_H_ */
#ifdef HAVE_ALLOCA_H
# include <alloca.h>
@@ -80,7 +80,7 @@ void *_alloca(size_t size);
/* Special i386 GCC implementation */
-#if defined(__i386__) && defined(__GNUC__) && !defined(__BEOS__)
+#if defined(__i386__) && defined(__GNUC__) && !defined(__BEOS__) && !defined(__SSE2_MATH__)
# define VORBIS_FPU_CONTROL
/* both GCC and MSVC are kinda stupid about rounding/casting to int.
Because of encapsulation constraints (GCC can't see inside the asm
@@ -119,8 +119,7 @@ static inline int vorbis_ftoi(double f){ /* yes, double! Otherwise,
/* MSVC inline assembly. 32 bit only; inline ASM isn't implemented in the
* 64 bit compiler and doesn't work on arm. */
-#if defined(_MSC_VER) && !defined(_WIN64) && \
- !defined(_WIN32_WCE) && !defined(_M_ARM)
+#if defined(_MSC_VER) && defined(_M_IX86) && !defined(_WIN32_WCE)
# define VORBIS_FPU_CONTROL
typedef ogg_int16_t vorbis_fpu_control;
@@ -147,7 +146,7 @@ static __inline void vorbis_fpu_restore(vorbis_fpu_control fpu){
/* Optimized code path for x86_64 builds. Uses SSE2 intrinsics. This can be
done safely because all x86_64 CPUs supports SSE2. */
-#if (defined(_MSC_VER) && defined(_WIN64)) || (defined(__GNUC__) && defined (__x86_64__))
+#if (defined(_MSC_VER) && defined(_M_X64)) || (defined(__GNUC__) && defined (__SSE2_MATH__))
# define VORBIS_FPU_CONTROL
typedef ogg_int16_t vorbis_fpu_control;
@@ -174,7 +173,7 @@ static __inline void vorbis_fpu_restore(vorbis_fpu_control fpu){
typedef int vorbis_fpu_control;
-static int vorbis_ftoi(double f){
+STIN int vorbis_ftoi(double f){
/* Note: MSVC and GCC (at least on some systems) round towards zero, thus,
the floor() call is required to ensure correct roudning of
negative numbers */
diff --git a/thirdparty/libvorbis/psy.c b/thirdparty/libvorbis/psy.c
index 422c6f1e41..036b094aa7 100644
--- a/thirdparty/libvorbis/psy.c
+++ b/thirdparty/libvorbis/psy.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2010 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
@@ -599,11 +599,12 @@ static void bark_noise_hybridmp(int n,const long *b,
XY[i] = tXY;
}
- for (i = 0, x = 0.f;; i++, x += 1.f) {
+ for (i = 0, x = 0.f; i < n; i++, x += 1.f) {
lo = b[i] >> 16;
- if( lo>=0 ) break;
hi = b[i] & 0xffff;
+ if( lo>=0 || -lo>=n ) break;
+ if( hi>=n ) break;
tN = N[hi] + N[-lo];
tX = X[hi] - X[-lo];
@@ -615,17 +616,17 @@ static void bark_noise_hybridmp(int n,const long *b,
B = tN * tXY - tX * tY;
D = tN * tXX - tX * tX;
R = (A + x * B) / D;
- if (R < 0.f)
- R = 0.f;
+ if (R < 0.f) R = 0.f;
noise[i] = R - offset;
}
- for ( ;; i++, x += 1.f) {
+ for ( ; i < n; i++, x += 1.f) {
lo = b[i] >> 16;
hi = b[i] & 0xffff;
- if(hi>=n)break;
+ if( lo<0 || lo>=n ) break;
+ if( hi>=n ) break;
tN = N[hi] - N[lo];
tX = X[hi] - X[lo];
@@ -641,6 +642,7 @@ static void bark_noise_hybridmp(int n,const long *b,
noise[i] = R - offset;
}
+
for ( ; i < n; i++, x += 1.f) {
R = (A + x * B) / D;
@@ -651,10 +653,11 @@ static void bark_noise_hybridmp(int n,const long *b,
if (fixed <= 0) return;
- for (i = 0, x = 0.f;; i++, x += 1.f) {
+ for (i = 0, x = 0.f; i < n; i++, x += 1.f) {
hi = i + fixed / 2;
lo = hi - fixed;
- if(lo>=0)break;
+ if ( hi>=n ) break;
+ if ( lo>=0 ) break;
tN = N[hi] + N[-lo];
tX = X[hi] - X[-lo];
@@ -670,11 +673,12 @@ static void bark_noise_hybridmp(int n,const long *b,
if (R - offset < noise[i]) noise[i] = R - offset;
}
- for ( ;; i++, x += 1.f) {
+ for ( ; i < n; i++, x += 1.f) {
hi = i + fixed / 2;
lo = hi - fixed;
- if(hi>=n)break;
+ if ( hi>=n ) break;
+ if ( lo<0 ) break;
tN = N[hi] - N[lo];
tX = X[hi] - X[lo];
diff --git a/thirdparty/libvorbis/psy.h b/thirdparty/libvorbis/psy.h
index ab2534db3a..d9a04e8b74 100644
--- a/thirdparty/libvorbis/psy.h
+++ b/thirdparty/libvorbis/psy.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/psytune.c b/thirdparty/libvorbis/psytune.c
index 6952136c6b..67223e5118 100644
--- a/thirdparty/libvorbis/psytune.c
+++ b/thirdparty/libvorbis/psytune.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/registry.c b/thirdparty/libvorbis/registry.c
index 74f7ef0396..db0f67b2e2 100644
--- a/thirdparty/libvorbis/registry.c
+++ b/thirdparty/libvorbis/registry.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/registry.h b/thirdparty/libvorbis/registry.h
index 599d959942..b823aa6091 100644
--- a/thirdparty/libvorbis/registry.h
+++ b/thirdparty/libvorbis/registry.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/res0.c b/thirdparty/libvorbis/res0.c
index 6d623d730f..c931aded38 100644
--- a/thirdparty/libvorbis/res0.c
+++ b/thirdparty/libvorbis/res0.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2010 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
@@ -30,9 +30,6 @@
#include "misc.h"
#include "os.h"
-//#define TRAIN_RES 1
-//#define TRAIN_RESAUX 1
-
#if defined(TRAIN_RES) || defined (TRAIN_RESAUX)
#include <stdio.h>
#endif
diff --git a/thirdparty/libvorbis/scales.h b/thirdparty/libvorbis/scales.h
index 18bc4e7518..3c2ae48d9e 100644
--- a/thirdparty/libvorbis/scales.h
+++ b/thirdparty/libvorbis/scales.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/sharedbook.c b/thirdparty/libvorbis/sharedbook.c
index 4545d4f459..62a9a00afb 100644
--- a/thirdparty/libvorbis/sharedbook.c
+++ b/thirdparty/libvorbis/sharedbook.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
@@ -50,7 +50,7 @@ long _float32_pack(float val){
sign=0x80000000;
val= -val;
}
- exp= floor(log(val)/log(2.f)+.001); //+epsilon
+ exp= floor(log(val)/log(2.f)+.001); /* +epsilon */
mant=rint(ldexp(val,(VQ_FMAN-1)-exp));
exp=(exp+VQ_FEXP_BIAS)<<VQ_FMAN;
@@ -62,7 +62,15 @@ float _float32_unpack(long val){
int sign=val&0x80000000;
long exp =(val&0x7fe00000L)>>VQ_FMAN;
if(sign)mant= -mant;
- return(ldexp(mant,exp-(VQ_FMAN-1)-VQ_FEXP_BIAS));
+ exp=exp-(VQ_FMAN-1)-VQ_FEXP_BIAS;
+ /* clamp excessive exponent values */
+ if (exp>63){
+ exp=63;
+ }
+ if (exp<-63){
+ exp=-63;
+ }
+ return(ldexp(mant,exp));
}
/* given a list of word lengths, generate a list of codewords. Works
@@ -294,7 +302,7 @@ int vorbis_book_init_encode(codebook *c,const static_codebook *s){
c->used_entries=s->entries;
c->dim=s->dim;
c->codelist=_make_words(s->lengthlist,s->entries,0);
- //c->valuelist=_book_unquantize(s,s->entries,NULL);
+ /* c->valuelist=_book_unquantize(s,s->entries,NULL); */
c->quantvals=_book_maptype1_quantvals(s);
c->minval=(int)rint(_float32_unpack(s->q_min));
c->delta=(int)rint(_float32_unpack(s->q_delta));
@@ -573,6 +581,7 @@ void run_test(static_codebook *b,float *comp){
exit(1);
}
}
+ free(out);
}
int main(){
diff --git a/thirdparty/libvorbis/smallft.c b/thirdparty/libvorbis/smallft.c
index 6d528af423..4ffabab4bb 100644
--- a/thirdparty/libvorbis/smallft.c
+++ b/thirdparty/libvorbis/smallft.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/smallft.h b/thirdparty/libvorbis/smallft.h
index 9e867c67d2..02fe8f9cd4 100644
--- a/thirdparty/libvorbis/smallft.h
+++ b/thirdparty/libvorbis/smallft.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/synthesis.c b/thirdparty/libvorbis/synthesis.c
index 5f6092c3d3..3e2d681270 100644
--- a/thirdparty/libvorbis/synthesis.c
+++ b/thirdparty/libvorbis/synthesis.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/vorbis/codec.h b/thirdparty/libvorbis/vorbis/codec.h
index 42aa29138e..f8a912bc26 100644
--- a/thirdparty/libvorbis/vorbis/codec.h
+++ b/thirdparty/libvorbis/vorbis/codec.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
********************************************************************
diff --git a/thirdparty/libvorbis/vorbis/vorbisenc.h b/thirdparty/libvorbis/vorbis/vorbisenc.h
index 55f3b4a667..085b15e669 100644
--- a/thirdparty/libvorbis/vorbis/vorbisenc.h
+++ b/thirdparty/libvorbis/vorbis/vorbisenc.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2001 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/vorbis/vorbisfile.h b/thirdparty/libvorbis/vorbis/vorbisfile.h
index 56626119bb..3d65393f52 100644
--- a/thirdparty/libvorbis/vorbis/vorbisfile.h
+++ b/thirdparty/libvorbis/vorbis/vorbisfile.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/vorbisenc.c b/thirdparty/libvorbis/vorbisenc.c
index 4a4607cb41..cf3806a6e1 100644
--- a/thirdparty/libvorbis/vorbisenc.c
+++ b/thirdparty/libvorbis/vorbisenc.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
@@ -684,6 +684,7 @@ int vorbis_encode_setup_init(vorbis_info *vi){
highlevel_encode_setup *hi=&ci->hi;
if(ci==NULL)return(OV_EINVAL);
+ if(vi->channels<1||vi->channels>255)return(OV_EINVAL);
if(!hi->impulse_block_p)i0=1;
/* too low/high an ATH floater is nonsensical, but doesn't break anything */
@@ -1210,7 +1211,7 @@ int vorbis_encode_ctl(vorbis_info *vi,int number,void *arg){
hi->req,
hi->managed,
&new_base);
- if(!hi->setup)return OV_EIMPL;
+ if(!new_template)return OV_EIMPL;
hi->setup=new_template;
hi->base_setting=new_base;
vorbis_encode_setup_setting(vi,vi->channels,vi->rate);
diff --git a/thirdparty/libvorbis/vorbisfile.c b/thirdparty/libvorbis/vorbisfile.c
index b570c3c5f6..9219c2f2dc 100644
--- a/thirdparty/libvorbis/vorbisfile.c
+++ b/thirdparty/libvorbis/vorbisfile.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2015 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
@@ -264,6 +264,10 @@ static ogg_int64_t _get_prev_page_serial(OggVorbis_File *vf, ogg_int64_t begin,
}
}
}
+ /*We started from the beginning of the stream and found nothing.
+ This should be impossible unless the contents of the stream changed out
+ from under us after we read from it.*/
+ if(!begin&&vf->offset<0)return OV_EBADLINK;
}
/* we're not interested in the page... just the serialno and granpos. */
@@ -1230,7 +1234,6 @@ double ov_time_total(OggVorbis_File *vf,int i){
int ov_raw_seek(OggVorbis_File *vf,ogg_int64_t pos){
ogg_stream_state work_os;
- int ret;
if(vf->ready_state<OPENED)return(OV_EINVAL);
if(!vf->seekable)
@@ -1253,8 +1256,12 @@ int ov_raw_seek(OggVorbis_File *vf,ogg_int64_t pos){
vf->current_serialno); /* must set serialno */
vorbis_synthesis_restart(&vf->vd);
- ret=_seek_helper(vf,pos);
- if(ret)goto seek_error;
+ if(_seek_helper(vf,pos)) {
+ /* dump the machine so we're in a known state */
+ vf->pcm_offset=-1;
+ _decode_clear(vf);
+ return OV_EBADLINK;
+ }
/* we need to make sure the pcm_offset is set, but we don't want to
advance the raw cursor past good packets just to get to the first
@@ -1388,13 +1395,6 @@ int ov_raw_seek(OggVorbis_File *vf,ogg_int64_t pos){
vf->bittrack=0.f;
vf->samptrack=0.f;
return(0);
-
- seek_error:
- /* dump the machine so we're in a known state */
- vf->pcm_offset=-1;
- ogg_stream_clear(&work_os);
- _decode_clear(vf);
- return OV_EBADLINK;
}
/* Page granularity seek (faster than sample granularity because we
@@ -1964,6 +1964,7 @@ long ov_read_filter(OggVorbis_File *vf,char *buffer,int length,
long samples;
if(vf->ready_state<OPENED)return(OV_EINVAL);
+ if(word<=0)return(OV_EINVAL);
while(1){
if(vf->ready_state==INITSET){
@@ -1989,6 +1990,8 @@ long ov_read_filter(OggVorbis_File *vf,char *buffer,int length,
long channels=ov_info(vf,-1)->channels;
long bytespersample=word * channels;
vorbis_fpu_control fpu;
+
+ if(channels<1||channels>255)return(OV_EINVAL);
if(samples>length/bytespersample)samples=length/bytespersample;
if(samples <= 0)
diff --git a/thirdparty/libvorbis/window.c b/thirdparty/libvorbis/window.c
index b3b7ce0163..2151b278d1 100644
--- a/thirdparty/libvorbis/window.c
+++ b/thirdparty/libvorbis/window.c
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2009 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libvorbis/window.h b/thirdparty/libvorbis/window.h
index 6ac260749e..33d83f85f9 100644
--- a/thirdparty/libvorbis/window.h
+++ b/thirdparty/libvorbis/window.h
@@ -6,7 +6,7 @@
* IN 'COPYING'. PLEASE READ THESE TERMS BEFORE DISTRIBUTING. *
* *
* THE OggVorbis SOURCE CODE IS (C) COPYRIGHT 1994-2007 *
- * by the Xiph.Org Foundation http://www.xiph.org/ *
+ * by the Xiph.Org Foundation https://xiph.org/ *
* *
********************************************************************
diff --git a/thirdparty/libwebp/AUTHORS b/thirdparty/libwebp/AUTHORS
index 0d70b7fb2a..30abde0326 100644
--- a/thirdparty/libwebp/AUTHORS
+++ b/thirdparty/libwebp/AUTHORS
@@ -1,9 +1,15 @@
Contributors:
+- Aidan O'Loan (aidanol at gmail dot com)
- Alan Browning (browning at google dot com)
- Charles Munger (clm at google dot com)
+- Cheng Yi (cyi at google dot com)
- Christian Duvivier (cduvivier at google dot com)
+- Christopher Degawa (ccom at randomderp dot com)
+- Clement Courbet (courbet at google dot com)
- Djordje Pesut (djordje dot pesut at imgtec dot com)
- Hui Su (huisu at google dot com)
+- Ilya Kurdyukov (jpegqs at gmail dot com)
+- Ingvar Stepanyan (rreverser at google dot com)
- James Zern (jzern at google dot com)
- Jan Engelhardt (jengelh at medozas dot de)
- Jehan (jehan at girinstud dot io)
@@ -20,6 +26,7 @@ Contributors:
- Mislav Bradac (mislavm at google dot com)
- Nico Weber (thakis at chromium dot org)
- Noel Chromium (noel at chromium dot org)
+- Oliver Wolff (oliver dot wolff at qt dot io)
- Owen Rodley (orodley at google dot com)
- Parag Salasakar (img dot mips1 at gmail dot com)
- Pascal Massimino (pascal dot massimino at gmail dot com)
@@ -38,5 +45,7 @@ Contributors:
- Vikas Arora (vikasa at google dot com)
- Vincent Rabaud (vrabaud at google dot com)
- Vlad Tsyrklevich (vtsyrklevich at chromium dot org)
+- Wan-Teh Chang (wtc at google dot com)
- Yang Zhang (yang dot zhang at arm dot com)
- Yannis Guyon (yguyon at google dot com)
+- Zhi An Ng (zhin at chromium dot org)
diff --git a/thirdparty/libwebp/src/dec/alpha_dec.c b/thirdparty/libwebp/src/dec/alpha_dec.c
index bce735bfc2..0b93a30b32 100644
--- a/thirdparty/libwebp/src/dec/alpha_dec.c
+++ b/thirdparty/libwebp/src/dec/alpha_dec.c
@@ -183,7 +183,7 @@ const uint8_t* VP8DecompressAlphaRows(VP8Decoder* const dec,
assert(dec != NULL && io != NULL);
if (row < 0 || num_rows <= 0 || row + num_rows > height) {
- return NULL; // sanity check.
+ return NULL;
}
if (!dec->is_alpha_decoded_) {
diff --git a/thirdparty/libwebp/src/dec/buffer_dec.c b/thirdparty/libwebp/src/dec/buffer_dec.c
index 3cd94eb4d9..4786cf0ddb 100644
--- a/thirdparty/libwebp/src/dec/buffer_dec.c
+++ b/thirdparty/libwebp/src/dec/buffer_dec.c
@@ -102,7 +102,7 @@ static VP8StatusCode AllocateBuffer(WebPDecBuffer* const buffer) {
int stride;
uint64_t size;
- if ((uint64_t)w * kModeBpp[mode] >= (1ull << 32)) {
+ if ((uint64_t)w * kModeBpp[mode] >= (1ull << 31)) {
return VP8_STATUS_INVALID_PARAM;
}
stride = w * kModeBpp[mode];
@@ -117,7 +117,6 @@ static VP8StatusCode AllocateBuffer(WebPDecBuffer* const buffer) {
}
total_size = size + 2 * uv_size + a_size;
- // Security/sanity checks
output = (uint8_t*)WebPSafeMalloc(total_size, sizeof(*output));
if (output == NULL) {
return VP8_STATUS_OUT_OF_MEMORY;
@@ -156,11 +155,11 @@ VP8StatusCode WebPFlipBuffer(WebPDecBuffer* const buffer) {
}
if (WebPIsRGBMode(buffer->colorspace)) {
WebPRGBABuffer* const buf = &buffer->u.RGBA;
- buf->rgba += (buffer->height - 1) * buf->stride;
+ buf->rgba += (int64_t)(buffer->height - 1) * buf->stride;
buf->stride = -buf->stride;
} else {
WebPYUVABuffer* const buf = &buffer->u.YUVA;
- const int H = buffer->height;
+ const int64_t H = buffer->height;
buf->y += (H - 1) * buf->y_stride;
buf->y_stride = -buf->y_stride;
buf->u += ((H - 1) >> 1) * buf->u_stride;
@@ -188,8 +187,7 @@ VP8StatusCode WebPAllocateDecBuffer(int width, int height,
const int ch = options->crop_height;
const int x = options->crop_left & ~1;
const int y = options->crop_top & ~1;
- if (x < 0 || y < 0 || cw <= 0 || ch <= 0 ||
- x + cw > width || y + ch > height) {
+ if (!WebPCheckCropDimensions(width, height, x, y, cw, ch)) {
return VP8_STATUS_INVALID_PARAM; // out of frame boundary.
}
width = cw;
diff --git a/thirdparty/libwebp/src/dec/frame_dec.c b/thirdparty/libwebp/src/dec/frame_dec.c
index 04609a8e56..91ca1f8609 100644
--- a/thirdparty/libwebp/src/dec/frame_dec.c
+++ b/thirdparty/libwebp/src/dec/frame_dec.c
@@ -705,7 +705,7 @@ static int AllocateMemory(VP8Decoder* const dec) {
+ cache_size + alpha_size + WEBP_ALIGN_CST;
uint8_t* mem;
- if (needed != (size_t)needed) return 0; // check for overflow
+ if (!CheckSizeOverflow(needed)) return 0; // check for overflow
if (needed > dec->mem_size_) {
WebPSafeFree(dec->mem_);
dec->mem_size_ = 0;
diff --git a/thirdparty/libwebp/src/dec/io_dec.c b/thirdparty/libwebp/src/dec/io_dec.c
index e603f19c98..5ef6298886 100644
--- a/thirdparty/libwebp/src/dec/io_dec.c
+++ b/thirdparty/libwebp/src/dec/io_dec.c
@@ -25,21 +25,16 @@
static int EmitYUV(const VP8Io* const io, WebPDecParams* const p) {
WebPDecBuffer* output = p->output;
const WebPYUVABuffer* const buf = &output->u.YUVA;
- uint8_t* const y_dst = buf->y + io->mb_y * buf->y_stride;
- uint8_t* const u_dst = buf->u + (io->mb_y >> 1) * buf->u_stride;
- uint8_t* const v_dst = buf->v + (io->mb_y >> 1) * buf->v_stride;
+ uint8_t* const y_dst = buf->y + (size_t)io->mb_y * buf->y_stride;
+ uint8_t* const u_dst = buf->u + (size_t)(io->mb_y >> 1) * buf->u_stride;
+ uint8_t* const v_dst = buf->v + (size_t)(io->mb_y >> 1) * buf->v_stride;
const int mb_w = io->mb_w;
const int mb_h = io->mb_h;
const int uv_w = (mb_w + 1) / 2;
const int uv_h = (mb_h + 1) / 2;
- int j;
- for (j = 0; j < mb_h; ++j) {
- memcpy(y_dst + j * buf->y_stride, io->y + j * io->y_stride, mb_w);
- }
- for (j = 0; j < uv_h; ++j) {
- memcpy(u_dst + j * buf->u_stride, io->u + j * io->uv_stride, uv_w);
- memcpy(v_dst + j * buf->v_stride, io->v + j * io->uv_stride, uv_w);
- }
+ WebPCopyPlane(io->y, io->y_stride, y_dst, buf->y_stride, mb_w, mb_h);
+ WebPCopyPlane(io->u, io->uv_stride, u_dst, buf->u_stride, uv_w, uv_h);
+ WebPCopyPlane(io->v, io->uv_stride, v_dst, buf->v_stride, uv_w, uv_h);
return io->mb_h;
}
@@ -47,7 +42,7 @@ static int EmitYUV(const VP8Io* const io, WebPDecParams* const p) {
static int EmitSampledRGB(const VP8Io* const io, WebPDecParams* const p) {
WebPDecBuffer* const output = p->output;
WebPRGBABuffer* const buf = &output->u.RGBA;
- uint8_t* const dst = buf->rgba + io->mb_y * buf->stride;
+ uint8_t* const dst = buf->rgba + (size_t)io->mb_y * buf->stride;
WebPSamplerProcessPlane(io->y, io->y_stride,
io->u, io->v, io->uv_stride,
dst, buf->stride, io->mb_w, io->mb_h,
@@ -62,7 +57,7 @@ static int EmitSampledRGB(const VP8Io* const io, WebPDecParams* const p) {
static int EmitFancyRGB(const VP8Io* const io, WebPDecParams* const p) {
int num_lines_out = io->mb_h; // a priori guess
const WebPRGBABuffer* const buf = &p->output->u.RGBA;
- uint8_t* dst = buf->rgba + io->mb_y * buf->stride;
+ uint8_t* dst = buf->rgba + (size_t)io->mb_y * buf->stride;
WebPUpsampleLinePairFunc upsample = WebPUpsamplers[p->output->colorspace];
const uint8_t* cur_y = io->y;
const uint8_t* cur_u = io->u;
@@ -133,7 +128,7 @@ static int EmitAlphaYUV(const VP8Io* const io, WebPDecParams* const p,
const WebPYUVABuffer* const buf = &p->output->u.YUVA;
const int mb_w = io->mb_w;
const int mb_h = io->mb_h;
- uint8_t* dst = buf->a + io->mb_y * buf->a_stride;
+ uint8_t* dst = buf->a + (size_t)io->mb_y * buf->a_stride;
int j;
(void)expected_num_lines_out;
assert(expected_num_lines_out == mb_h);
@@ -186,7 +181,7 @@ static int EmitAlphaRGB(const VP8Io* const io, WebPDecParams* const p,
(colorspace == MODE_ARGB || colorspace == MODE_Argb);
const WebPRGBABuffer* const buf = &p->output->u.RGBA;
int num_rows;
- const int start_y = GetAlphaSourceRow(io, &alpha, &num_rows);
+ const size_t start_y = GetAlphaSourceRow(io, &alpha, &num_rows);
uint8_t* const base_rgba = buf->rgba + start_y * buf->stride;
uint8_t* const dst = base_rgba + (alpha_first ? 0 : 3);
const int has_alpha = WebPDispatchAlpha(alpha, io->width, mb_w,
@@ -210,7 +205,7 @@ static int EmitAlphaRGBA4444(const VP8Io* const io, WebPDecParams* const p,
const WEBP_CSP_MODE colorspace = p->output->colorspace;
const WebPRGBABuffer* const buf = &p->output->u.RGBA;
int num_rows;
- const int start_y = GetAlphaSourceRow(io, &alpha, &num_rows);
+ const size_t start_y = GetAlphaSourceRow(io, &alpha, &num_rows);
uint8_t* const base_rgba = buf->rgba + start_y * buf->stride;
#if (WEBP_SWAP_16BIT_CSP == 1)
uint8_t* alpha_dst = base_rgba;
@@ -276,9 +271,9 @@ static int EmitRescaledYUV(const VP8Io* const io, WebPDecParams* const p) {
static int EmitRescaledAlphaYUV(const VP8Io* const io, WebPDecParams* const p,
int expected_num_lines_out) {
const WebPYUVABuffer* const buf = &p->output->u.YUVA;
- uint8_t* const dst_a = buf->a + p->last_y * buf->a_stride;
+ uint8_t* const dst_a = buf->a + (size_t)p->last_y * buf->a_stride;
if (io->a != NULL) {
- uint8_t* const dst_y = buf->y + p->last_y * buf->y_stride;
+ uint8_t* const dst_y = buf->y + (size_t)p->last_y * buf->y_stride;
const int num_lines_out = Rescale(io->a, io->width, io->mb_h, p->scaler_a);
assert(expected_num_lines_out == num_lines_out);
if (num_lines_out > 0) { // unmultiply the Y
@@ -303,46 +298,57 @@ static int InitYUVRescaler(const VP8Io* const io, WebPDecParams* const p) {
const int uv_out_height = (out_height + 1) >> 1;
const int uv_in_width = (io->mb_w + 1) >> 1;
const int uv_in_height = (io->mb_h + 1) >> 1;
- const size_t work_size = 2 * out_width; // scratch memory for luma rescaler
+ // scratch memory for luma rescaler
+ const size_t work_size = 2 * (size_t)out_width;
const size_t uv_work_size = 2 * uv_out_width; // and for each u/v ones
- size_t tmp_size, rescaler_size;
+ uint64_t total_size;
+ size_t rescaler_size;
rescaler_t* work;
WebPRescaler* scalers;
const int num_rescalers = has_alpha ? 4 : 3;
- tmp_size = (work_size + 2 * uv_work_size) * sizeof(*work);
+ total_size = ((uint64_t)work_size + 2 * uv_work_size) * sizeof(*work);
if (has_alpha) {
- tmp_size += work_size * sizeof(*work);
+ total_size += (uint64_t)work_size * sizeof(*work);
}
rescaler_size = num_rescalers * sizeof(*p->scaler_y) + WEBP_ALIGN_CST;
+ total_size += rescaler_size;
+ if (!CheckSizeOverflow(total_size)) {
+ return 0;
+ }
- p->memory = WebPSafeMalloc(1ULL, tmp_size + rescaler_size);
+ p->memory = WebPSafeMalloc(1ULL, (size_t)total_size);
if (p->memory == NULL) {
return 0; // memory error
}
work = (rescaler_t*)p->memory;
- scalers = (WebPRescaler*)WEBP_ALIGN((const uint8_t*)work + tmp_size);
+ scalers = (WebPRescaler*)WEBP_ALIGN(
+ (const uint8_t*)work + total_size - rescaler_size);
p->scaler_y = &scalers[0];
p->scaler_u = &scalers[1];
p->scaler_v = &scalers[2];
p->scaler_a = has_alpha ? &scalers[3] : NULL;
- WebPRescalerInit(p->scaler_y, io->mb_w, io->mb_h,
- buf->y, out_width, out_height, buf->y_stride, 1,
- work);
- WebPRescalerInit(p->scaler_u, uv_in_width, uv_in_height,
- buf->u, uv_out_width, uv_out_height, buf->u_stride, 1,
- work + work_size);
- WebPRescalerInit(p->scaler_v, uv_in_width, uv_in_height,
- buf->v, uv_out_width, uv_out_height, buf->v_stride, 1,
- work + work_size + uv_work_size);
+ if (!WebPRescalerInit(p->scaler_y, io->mb_w, io->mb_h,
+ buf->y, out_width, out_height, buf->y_stride, 1,
+ work) ||
+ !WebPRescalerInit(p->scaler_u, uv_in_width, uv_in_height,
+ buf->u, uv_out_width, uv_out_height, buf->u_stride, 1,
+ work + work_size) ||
+ !WebPRescalerInit(p->scaler_v, uv_in_width, uv_in_height,
+ buf->v, uv_out_width, uv_out_height, buf->v_stride, 1,
+ work + work_size + uv_work_size)) {
+ return 0;
+ }
p->emit = EmitRescaledYUV;
if (has_alpha) {
- WebPRescalerInit(p->scaler_a, io->mb_w, io->mb_h,
- buf->a, out_width, out_height, buf->a_stride, 1,
- work + work_size + 2 * uv_work_size);
+ if (!WebPRescalerInit(p->scaler_a, io->mb_w, io->mb_h,
+ buf->a, out_width, out_height, buf->a_stride, 1,
+ work + work_size + 2 * uv_work_size)) {
+ return 0;
+ }
p->emit_alpha = EmitRescaledAlphaYUV;
WebPInitAlphaProcessing();
}
@@ -356,7 +362,7 @@ static int ExportRGB(WebPDecParams* const p, int y_pos) {
const WebPYUV444Converter convert =
WebPYUV444Converters[p->output->colorspace];
const WebPRGBABuffer* const buf = &p->output->u.RGBA;
- uint8_t* dst = buf->rgba + y_pos * buf->stride;
+ uint8_t* dst = buf->rgba + (size_t)y_pos * buf->stride;
int num_lines_out = 0;
// For RGB rescaling, because of the YUV420, current scan position
// U/V can be +1/-1 line from the Y one. Hence the double test.
@@ -383,15 +389,15 @@ static int EmitRescaledRGB(const VP8Io* const io, WebPDecParams* const p) {
while (j < mb_h) {
const int y_lines_in =
WebPRescalerImport(p->scaler_y, mb_h - j,
- io->y + j * io->y_stride, io->y_stride);
+ io->y + (size_t)j * io->y_stride, io->y_stride);
j += y_lines_in;
if (WebPRescaleNeededLines(p->scaler_u, uv_mb_h - uv_j)) {
- const int u_lines_in =
- WebPRescalerImport(p->scaler_u, uv_mb_h - uv_j,
- io->u + uv_j * io->uv_stride, io->uv_stride);
- const int v_lines_in =
- WebPRescalerImport(p->scaler_v, uv_mb_h - uv_j,
- io->v + uv_j * io->uv_stride, io->uv_stride);
+ const int u_lines_in = WebPRescalerImport(
+ p->scaler_u, uv_mb_h - uv_j, io->u + (size_t)uv_j * io->uv_stride,
+ io->uv_stride);
+ const int v_lines_in = WebPRescalerImport(
+ p->scaler_v, uv_mb_h - uv_j, io->v + (size_t)uv_j * io->uv_stride,
+ io->uv_stride);
(void)v_lines_in; // remove a gcc warning
assert(u_lines_in == v_lines_in);
uv_j += u_lines_in;
@@ -403,7 +409,7 @@ static int EmitRescaledRGB(const VP8Io* const io, WebPDecParams* const p) {
static int ExportAlpha(WebPDecParams* const p, int y_pos, int max_lines_out) {
const WebPRGBABuffer* const buf = &p->output->u.RGBA;
- uint8_t* const base_rgba = buf->rgba + y_pos * buf->stride;
+ uint8_t* const base_rgba = buf->rgba + (size_t)y_pos * buf->stride;
const WEBP_CSP_MODE colorspace = p->output->colorspace;
const int alpha_first =
(colorspace == MODE_ARGB || colorspace == MODE_Argb);
@@ -431,7 +437,7 @@ static int ExportAlpha(WebPDecParams* const p, int y_pos, int max_lines_out) {
static int ExportAlphaRGBA4444(WebPDecParams* const p, int y_pos,
int max_lines_out) {
const WebPRGBABuffer* const buf = &p->output->u.RGBA;
- uint8_t* const base_rgba = buf->rgba + y_pos * buf->stride;
+ uint8_t* const base_rgba = buf->rgba + (size_t)y_pos * buf->stride;
#if (WEBP_SWAP_16BIT_CSP == 1)
uint8_t* alpha_dst = base_rgba;
#else
@@ -470,7 +476,7 @@ static int EmitRescaledAlphaRGB(const VP8Io* const io, WebPDecParams* const p,
int lines_left = expected_num_out_lines;
const int y_end = p->last_y + lines_left;
while (lines_left > 0) {
- const int row_offset = scaler->src_y - io->mb_y;
+ const int64_t row_offset = (int64_t)scaler->src_y - io->mb_y;
WebPRescalerImport(scaler, io->mb_h + io->mb_y - scaler->src_y,
io->a + row_offset * io->width, io->width);
lines_left -= p->emit_alpha_row(p, y_end - lines_left, lines_left);
@@ -485,51 +491,58 @@ static int InitRGBRescaler(const VP8Io* const io, WebPDecParams* const p) {
const int out_height = io->scaled_height;
const int uv_in_width = (io->mb_w + 1) >> 1;
const int uv_in_height = (io->mb_h + 1) >> 1;
- const size_t work_size = 2 * out_width; // scratch memory for one rescaler
+ // scratch memory for one rescaler
+ const size_t work_size = 2 * (size_t)out_width;
rescaler_t* work; // rescalers work area
uint8_t* tmp; // tmp storage for scaled YUV444 samples before RGB conversion
- size_t tmp_size1, tmp_size2, total_size, rescaler_size;
+ uint64_t tmp_size1, tmp_size2, total_size;
+ size_t rescaler_size;
WebPRescaler* scalers;
const int num_rescalers = has_alpha ? 4 : 3;
- tmp_size1 = 3 * work_size;
- tmp_size2 = 3 * out_width;
- if (has_alpha) {
- tmp_size1 += work_size;
- tmp_size2 += out_width;
- }
+ tmp_size1 = (uint64_t)num_rescalers * work_size;
+ tmp_size2 = (uint64_t)num_rescalers * out_width;
total_size = tmp_size1 * sizeof(*work) + tmp_size2 * sizeof(*tmp);
rescaler_size = num_rescalers * sizeof(*p->scaler_y) + WEBP_ALIGN_CST;
+ total_size += rescaler_size;
+ if (!CheckSizeOverflow(total_size)) {
+ return 0;
+ }
- p->memory = WebPSafeMalloc(1ULL, total_size + rescaler_size);
+ p->memory = WebPSafeMalloc(1ULL, (size_t)total_size);
if (p->memory == NULL) {
return 0; // memory error
}
work = (rescaler_t*)p->memory;
tmp = (uint8_t*)(work + tmp_size1);
- scalers = (WebPRescaler*)WEBP_ALIGN((const uint8_t*)work + total_size);
+ scalers = (WebPRescaler*)WEBP_ALIGN(
+ (const uint8_t*)work + total_size - rescaler_size);
p->scaler_y = &scalers[0];
p->scaler_u = &scalers[1];
p->scaler_v = &scalers[2];
p->scaler_a = has_alpha ? &scalers[3] : NULL;
- WebPRescalerInit(p->scaler_y, io->mb_w, io->mb_h,
- tmp + 0 * out_width, out_width, out_height, 0, 1,
- work + 0 * work_size);
- WebPRescalerInit(p->scaler_u, uv_in_width, uv_in_height,
- tmp + 1 * out_width, out_width, out_height, 0, 1,
- work + 1 * work_size);
- WebPRescalerInit(p->scaler_v, uv_in_width, uv_in_height,
- tmp + 2 * out_width, out_width, out_height, 0, 1,
- work + 2 * work_size);
+ if (!WebPRescalerInit(p->scaler_y, io->mb_w, io->mb_h,
+ tmp + 0 * out_width, out_width, out_height, 0, 1,
+ work + 0 * work_size) ||
+ !WebPRescalerInit(p->scaler_u, uv_in_width, uv_in_height,
+ tmp + 1 * out_width, out_width, out_height, 0, 1,
+ work + 1 * work_size) ||
+ !WebPRescalerInit(p->scaler_v, uv_in_width, uv_in_height,
+ tmp + 2 * out_width, out_width, out_height, 0, 1,
+ work + 2 * work_size)) {
+ return 0;
+ }
p->emit = EmitRescaledRGB;
WebPInitYUV444Converters();
if (has_alpha) {
- WebPRescalerInit(p->scaler_a, io->mb_w, io->mb_h,
- tmp + 3 * out_width, out_width, out_height, 0, 1,
- work + 3 * work_size);
+ if (!WebPRescalerInit(p->scaler_a, io->mb_w, io->mb_h,
+ tmp + 3 * out_width, out_width, out_height, 0, 1,
+ work + 3 * work_size)) {
+ return 0;
+ }
p->emit_alpha = EmitRescaledAlphaRGB;
if (p->output->colorspace == MODE_RGBA_4444 ||
p->output->colorspace == MODE_rgbA_4444) {
diff --git a/thirdparty/libwebp/src/dec/vp8_dec.c b/thirdparty/libwebp/src/dec/vp8_dec.c
index 57efb69041..5f405e4c2a 100644
--- a/thirdparty/libwebp/src/dec/vp8_dec.c
+++ b/thirdparty/libwebp/src/dec/vp8_dec.c
@@ -335,7 +335,7 @@ int VP8GetHeaders(VP8Decoder* const dec, VP8Io* const io) {
io->scaled_width = io->width;
io->scaled_height = io->height;
- io->mb_w = io->width; // sanity check
+ io->mb_w = io->width; // for soundness
io->mb_h = io->height; // ditto
VP8ResetProba(&dec->proba_);
@@ -494,13 +494,11 @@ static int GetCoeffsAlt(VP8BitReader* const br,
return 16;
}
-static WEBP_TSAN_IGNORE_FUNCTION void InitGetCoeffs(void) {
- if (GetCoeffs == NULL) {
- if (VP8GetCPUInfo != NULL && VP8GetCPUInfo(kSlowSSSE3)) {
- GetCoeffs = GetCoeffsAlt;
- } else {
- GetCoeffs = GetCoeffsFast;
- }
+WEBP_DSP_INIT_FUNC(InitGetCoeffs) {
+ if (VP8GetCPUInfo != NULL && VP8GetCPUInfo(kSlowSSSE3)) {
+ GetCoeffs = GetCoeffsAlt;
+ } else {
+ GetCoeffs = GetCoeffsFast;
}
}
diff --git a/thirdparty/libwebp/src/dec/vp8i_dec.h b/thirdparty/libwebp/src/dec/vp8i_dec.h
index 600a684410..20526a87c4 100644
--- a/thirdparty/libwebp/src/dec/vp8i_dec.h
+++ b/thirdparty/libwebp/src/dec/vp8i_dec.h
@@ -31,8 +31,8 @@ extern "C" {
// version numbers
#define DEC_MAJ_VERSION 1
-#define DEC_MIN_VERSION 1
-#define DEC_REV_VERSION 0
+#define DEC_MIN_VERSION 2
+#define DEC_REV_VERSION 1
// YUV-cache parameters. Cache is 32-bytes wide (= one cacheline).
// Constraints are: We need to store one 16x16 block of luma samples (y),
diff --git a/thirdparty/libwebp/src/dec/vp8l_dec.c b/thirdparty/libwebp/src/dec/vp8l_dec.c
index 93615d4ed2..73c3b54fff 100644
--- a/thirdparty/libwebp/src/dec/vp8l_dec.c
+++ b/thirdparty/libwebp/src/dec/vp8l_dec.c
@@ -559,8 +559,11 @@ static int AllocateAndInitRescaler(VP8LDecoder* const dec, VP8Io* const io) {
memory += work_size * sizeof(*work);
scaled_data = (uint32_t*)memory;
- WebPRescalerInit(dec->rescaler, in_width, in_height, (uint8_t*)scaled_data,
- out_width, out_height, 0, num_channels, work);
+ if (!WebPRescalerInit(dec->rescaler, in_width, in_height,
+ (uint8_t*)scaled_data, out_width, out_height,
+ 0, num_channels, work)) {
+ return 0;
+ }
return 1;
}
#endif // WEBP_REDUCE_SIZE
@@ -574,13 +577,14 @@ static int AllocateAndInitRescaler(VP8LDecoder* const dec, VP8Io* const io) {
static int Export(WebPRescaler* const rescaler, WEBP_CSP_MODE colorspace,
int rgba_stride, uint8_t* const rgba) {
uint32_t* const src = (uint32_t*)rescaler->dst;
+ uint8_t* dst = rgba;
const int dst_width = rescaler->dst_width;
int num_lines_out = 0;
while (WebPRescalerHasPendingOutput(rescaler)) {
- uint8_t* const dst = rgba + num_lines_out * rgba_stride;
WebPRescalerExportRow(rescaler);
WebPMultARGBRow(src, dst_width, 1);
VP8LConvertFromBGRA(src, dst_width, colorspace, dst);
+ dst += rgba_stride;
++num_lines_out;
}
return num_lines_out;
@@ -594,8 +598,8 @@ static int EmitRescaledRowsRGBA(const VP8LDecoder* const dec,
int num_lines_in = 0;
int num_lines_out = 0;
while (num_lines_in < mb_h) {
- uint8_t* const row_in = in + num_lines_in * in_stride;
- uint8_t* const row_out = out + num_lines_out * out_stride;
+ uint8_t* const row_in = in + (uint64_t)num_lines_in * in_stride;
+ uint8_t* const row_out = out + (uint64_t)num_lines_out * out_stride;
const int lines_left = mb_h - num_lines_in;
const int needed_lines = WebPRescaleNeededLines(dec->rescaler, lines_left);
int lines_imported;
@@ -796,7 +800,8 @@ static void ProcessRows(VP8LDecoder* const dec, int row) {
const WebPDecBuffer* const output = dec->output_;
if (WebPIsRGBMode(output->colorspace)) { // convert to RGBA
const WebPRGBABuffer* const buf = &output->u.RGBA;
- uint8_t* const rgba = buf->rgba + dec->last_out_row_ * buf->stride;
+ uint8_t* const rgba =
+ buf->rgba + (int64_t)dec->last_out_row_ * buf->stride;
const int num_rows_out =
#if !defined(WEBP_REDUCE_SIZE)
io->use_scaling ?
@@ -947,7 +952,6 @@ static WEBP_INLINE void CopyBlock8b(uint8_t* const dst, int dist, int length) {
break;
default:
goto Copy;
- break;
}
CopySmallPattern8b(src, dst, length, pattern);
return;
@@ -1515,7 +1519,7 @@ static int AllocateInternalBuffers32b(VP8LDecoder* const dec, int final_width) {
assert(dec->width_ <= final_width);
dec->pixels_ = (uint32_t*)WebPSafeMalloc(total_num_pixels, sizeof(uint32_t));
if (dec->pixels_ == NULL) {
- dec->argb_cache_ = NULL; // for sanity check
+ dec->argb_cache_ = NULL; // for soundness
dec->status_ = VP8_STATUS_OUT_OF_MEMORY;
return 0;
}
@@ -1525,7 +1529,7 @@ static int AllocateInternalBuffers32b(VP8LDecoder* const dec, int final_width) {
static int AllocateInternalBuffers8b(VP8LDecoder* const dec) {
const uint64_t total_num_pixels = (uint64_t)dec->width_ * dec->height_;
- dec->argb_cache_ = NULL; // for sanity check
+ dec->argb_cache_ = NULL; // for soundness
dec->pixels_ = (uint32_t*)WebPSafeMalloc(total_num_pixels, sizeof(uint8_t));
if (dec->pixels_ == NULL) {
dec->status_ = VP8_STATUS_OUT_OF_MEMORY;
@@ -1667,7 +1671,6 @@ int VP8LDecodeImage(VP8LDecoder* const dec) {
VP8Io* io = NULL;
WebPDecParams* params = NULL;
- // Sanity checks.
if (dec == NULL) return 0;
assert(dec->hdr_.huffman_tables_ != NULL);
diff --git a/thirdparty/libwebp/src/dec/webp_dec.c b/thirdparty/libwebp/src/dec/webp_dec.c
index 42d098874d..77a54c55d2 100644
--- a/thirdparty/libwebp/src/dec/webp_dec.c
+++ b/thirdparty/libwebp/src/dec/webp_dec.c
@@ -785,6 +785,13 @@ VP8StatusCode WebPDecode(const uint8_t* data, size_t data_size,
//------------------------------------------------------------------------------
// Cropping and rescaling.
+int WebPCheckCropDimensions(int image_width, int image_height,
+ int x, int y, int w, int h) {
+ return !(x < 0 || y < 0 || w <= 0 || h <= 0 ||
+ x >= image_width || w > image_width || w > image_width - x ||
+ y >= image_height || h > image_height || h > image_height - y);
+}
+
int WebPIoInitFromOptions(const WebPDecoderOptions* const options,
VP8Io* const io, WEBP_CSP_MODE src_colorspace) {
const int W = io->width;
@@ -792,7 +799,7 @@ int WebPIoInitFromOptions(const WebPDecoderOptions* const options,
int x = 0, y = 0, w = W, h = H;
// Cropping
- io->use_cropping = (options != NULL) && (options->use_cropping > 0);
+ io->use_cropping = (options != NULL) && options->use_cropping;
if (io->use_cropping) {
w = options->crop_width;
h = options->crop_height;
@@ -802,7 +809,7 @@ int WebPIoInitFromOptions(const WebPDecoderOptions* const options,
x &= ~1;
y &= ~1;
}
- if (x < 0 || y < 0 || w <= 0 || h <= 0 || x + w > W || y + h > H) {
+ if (!WebPCheckCropDimensions(W, H, x, y, w, h)) {
return 0; // out of frame boundary error
}
}
@@ -814,7 +821,7 @@ int WebPIoInitFromOptions(const WebPDecoderOptions* const options,
io->mb_h = h;
// Scaling
- io->use_scaling = (options != NULL) && (options->use_scaling > 0);
+ io->use_scaling = (options != NULL) && options->use_scaling;
if (io->use_scaling) {
int scaled_width = options->scaled_width;
int scaled_height = options->scaled_height;
@@ -835,8 +842,8 @@ int WebPIoInitFromOptions(const WebPDecoderOptions* const options,
if (io->use_scaling) {
// disable filter (only for large downscaling ratio).
- io->bypass_filtering = (io->scaled_width < W * 3 / 4) &&
- (io->scaled_height < H * 3 / 4);
+ io->bypass_filtering |= (io->scaled_width < W * 3 / 4) &&
+ (io->scaled_height < H * 3 / 4);
io->fancy_upsampling = 0;
}
return 1;
diff --git a/thirdparty/libwebp/src/dec/webpi_dec.h b/thirdparty/libwebp/src/dec/webpi_dec.h
index 24baff5d27..3b97388c71 100644
--- a/thirdparty/libwebp/src/dec/webpi_dec.h
+++ b/thirdparty/libwebp/src/dec/webpi_dec.h
@@ -77,6 +77,10 @@ VP8StatusCode WebPParseHeaders(WebPHeaderStructure* const headers);
//------------------------------------------------------------------------------
// Misc utils
+// Returns true if crop dimensions are within image bounds.
+int WebPCheckCropDimensions(int image_width, int image_height,
+ int x, int y, int w, int h);
+
// Initializes VP8Io with custom setup, io and teardown functions. The default
// hooks will use the supplied 'params' as io->opaque handle.
void WebPInitCustomIo(WebPDecParams* const params, VP8Io* const io);
diff --git a/thirdparty/libwebp/src/demux/anim_decode.c b/thirdparty/libwebp/src/demux/anim_decode.c
index 05dd707371..2bf4dcffe0 100644
--- a/thirdparty/libwebp/src/demux/anim_decode.c
+++ b/thirdparty/libwebp/src/demux/anim_decode.c
@@ -87,11 +87,19 @@ WebPAnimDecoder* WebPAnimDecoderNewInternal(
int abi_version) {
WebPAnimDecoderOptions options;
WebPAnimDecoder* dec = NULL;
+ WebPBitstreamFeatures features;
if (webp_data == NULL ||
WEBP_ABI_IS_INCOMPATIBLE(abi_version, WEBP_DEMUX_ABI_VERSION)) {
return NULL;
}
+ // Validate the bitstream before doing expensive allocations. The demuxer may
+ // be more tolerant than the decoder.
+ if (WebPGetFeatures(webp_data->bytes, webp_data->size, &features) !=
+ VP8_STATUS_OK) {
+ return NULL;
+ }
+
// Note: calloc() so that the pointer members are initialized to NULL.
dec = (WebPAnimDecoder*)WebPSafeCalloc(1ULL, sizeof(*dec));
if (dec == NULL) goto Error;
@@ -145,7 +153,7 @@ static int ZeroFillCanvas(uint8_t* buf, uint32_t canvas_width,
uint32_t canvas_height) {
const uint64_t size =
(uint64_t)canvas_width * canvas_height * NUM_CHANNELS * sizeof(*buf);
- if (size != (size_t)size) return 0;
+ if (!CheckSizeOverflow(size)) return 0;
memset(buf, 0, (size_t)size);
return 1;
}
@@ -166,7 +174,7 @@ static void ZeroFillFrameRect(uint8_t* buf, int buf_stride, int x_offset,
static int CopyCanvas(const uint8_t* src, uint8_t* dst,
uint32_t width, uint32_t height) {
const uint64_t size = (uint64_t)width * height * NUM_CHANNELS;
- if (size != (size_t)size) return 0;
+ if (!CheckSizeOverflow(size)) return 0;
assert(src != NULL && dst != NULL);
memcpy(dst, src, (size_t)size);
return 1;
@@ -346,12 +354,15 @@ int WebPAnimDecoderGetNext(WebPAnimDecoder* dec,
{
const uint8_t* in = iter.fragment.bytes;
const size_t in_size = iter.fragment.size;
- const size_t out_offset =
- (iter.y_offset * width + iter.x_offset) * NUM_CHANNELS;
+ const uint32_t stride = width * NUM_CHANNELS; // at most 25 + 2 bits
+ const uint64_t out_offset = (uint64_t)iter.y_offset * stride +
+ (uint64_t)iter.x_offset * NUM_CHANNELS; // 53b
+ const uint64_t size = (uint64_t)iter.height * stride; // at most 25 + 27b
WebPDecoderConfig* const config = &dec->config_;
WebPRGBABuffer* const buf = &config->output.u.RGBA;
- buf->stride = NUM_CHANNELS * width;
- buf->size = buf->stride * iter.height;
+ if ((size_t)size != size) goto Error;
+ buf->stride = (int)stride;
+ buf->size = (size_t)size;
buf->rgba = dec->curr_frame_ + out_offset;
if (WebPDecode(in, in_size, config) != VP8_STATUS_OK) {
diff --git a/thirdparty/libwebp/src/demux/demux.c b/thirdparty/libwebp/src/demux/demux.c
index 1b3cc2e0a8..547a7725de 100644
--- a/thirdparty/libwebp/src/demux/demux.c
+++ b/thirdparty/libwebp/src/demux/demux.c
@@ -24,8 +24,8 @@
#include "src/webp/format_constants.h"
#define DMUX_MAJ_VERSION 1
-#define DMUX_MIN_VERSION 1
-#define DMUX_REV_VERSION 0
+#define DMUX_MIN_VERSION 2
+#define DMUX_REV_VERSION 1
typedef struct {
size_t start_; // start location of the data
@@ -221,12 +221,16 @@ static ParseStatus StoreFrame(int frame_num, uint32_t min_size,
const size_t chunk_start_offset = mem->start_;
const uint32_t fourcc = ReadLE32(mem);
const uint32_t payload_size = ReadLE32(mem);
- const uint32_t payload_size_padded = payload_size + (payload_size & 1);
- const size_t payload_available = (payload_size_padded > MemDataSize(mem))
- ? MemDataSize(mem) : payload_size_padded;
- const size_t chunk_size = CHUNK_HEADER_SIZE + payload_available;
+ uint32_t payload_size_padded;
+ size_t payload_available;
+ size_t chunk_size;
if (payload_size > MAX_CHUNK_PAYLOAD) return PARSE_ERROR;
+
+ payload_size_padded = payload_size + (payload_size & 1);
+ payload_available = (payload_size_padded > MemDataSize(mem))
+ ? MemDataSize(mem) : payload_size_padded;
+ chunk_size = CHUNK_HEADER_SIZE + payload_available;
if (SizeIsInvalid(mem, payload_size_padded)) return PARSE_ERROR;
if (payload_size_padded > MemDataSize(mem)) status = PARSE_NEED_MORE_DATA;
@@ -312,6 +316,7 @@ static ParseStatus ParseAnimationFrame(
int bits;
MemBuffer* const mem = &dmux->mem_;
Frame* frame;
+ size_t start_offset;
ParseStatus status =
NewFrame(mem, ANMF_CHUNK_SIZE, frame_chunk_size, &frame);
if (status != PARSE_OK) return status;
@@ -332,7 +337,11 @@ static ParseStatus ParseAnimationFrame(
// Store a frame only if the animation flag is set there is some data for
// this frame is available.
+ start_offset = mem->start_;
status = StoreFrame(dmux->num_frames_ + 1, anmf_payload_size, mem, frame);
+ if (status != PARSE_ERROR && mem->start_ - start_offset > anmf_payload_size) {
+ status = PARSE_ERROR;
+ }
if (status != PARSE_ERROR && is_animation && frame->frame_num_ > 0) {
added_frame = AddFrame(dmux, frame);
if (added_frame) {
@@ -446,9 +455,11 @@ static ParseStatus ParseVP8XChunks(WebPDemuxer* const dmux) {
const size_t chunk_start_offset = mem->start_;
const uint32_t fourcc = ReadLE32(mem);
const uint32_t chunk_size = ReadLE32(mem);
- const uint32_t chunk_size_padded = chunk_size + (chunk_size & 1);
+ uint32_t chunk_size_padded;
if (chunk_size > MAX_CHUNK_PAYLOAD) return PARSE_ERROR;
+
+ chunk_size_padded = chunk_size + (chunk_size & 1);
if (SizeIsInvalid(mem, chunk_size_padded)) return PARSE_ERROR;
switch (fourcc) {
diff --git a/thirdparty/libwebp/src/dsp/alpha_processing.c b/thirdparty/libwebp/src/dsp/alpha_processing.c
index 819d1391f2..1892929a43 100644
--- a/thirdparty/libwebp/src/dsp/alpha_processing.c
+++ b/thirdparty/libwebp/src/dsp/alpha_processing.c
@@ -157,7 +157,8 @@ void WebPMultARGBRow_C(uint32_t* const ptr, int width, int inverse) {
}
}
-void WebPMultRow_C(uint8_t* const ptr, const uint8_t* const alpha,
+void WebPMultRow_C(uint8_t* WEBP_RESTRICT const ptr,
+ const uint8_t* WEBP_RESTRICT const alpha,
int width, int inverse) {
int x;
for (x = 0; x < width; ++x) {
@@ -178,7 +179,8 @@ void WebPMultRow_C(uint8_t* const ptr, const uint8_t* const alpha,
#undef MFIX
void (*WebPMultARGBRow)(uint32_t* const ptr, int width, int inverse);
-void (*WebPMultRow)(uint8_t* const ptr, const uint8_t* const alpha,
+void (*WebPMultRow)(uint8_t* WEBP_RESTRICT const ptr,
+ const uint8_t* WEBP_RESTRICT const alpha,
int width, int inverse);
//------------------------------------------------------------------------------
@@ -193,8 +195,8 @@ void WebPMultARGBRows(uint8_t* ptr, int stride, int width, int num_rows,
}
}
-void WebPMultRows(uint8_t* ptr, int stride,
- const uint8_t* alpha, int alpha_stride,
+void WebPMultRows(uint8_t* WEBP_RESTRICT ptr, int stride,
+ const uint8_t* WEBP_RESTRICT alpha, int alpha_stride,
int width, int num_rows, int inverse) {
int n;
for (n = 0; n < num_rows; ++n) {
@@ -290,9 +292,9 @@ static void ApplyAlphaMultiply_16b_C(uint8_t* rgba4444,
}
#if !WEBP_NEON_OMIT_C_CODE
-static int DispatchAlpha_C(const uint8_t* alpha, int alpha_stride,
+static int DispatchAlpha_C(const uint8_t* WEBP_RESTRICT alpha, int alpha_stride,
int width, int height,
- uint8_t* dst, int dst_stride) {
+ uint8_t* WEBP_RESTRICT dst, int dst_stride) {
uint32_t alpha_mask = 0xff;
int i, j;
@@ -309,9 +311,10 @@ static int DispatchAlpha_C(const uint8_t* alpha, int alpha_stride,
return (alpha_mask != 0xff);
}
-static void DispatchAlphaToGreen_C(const uint8_t* alpha, int alpha_stride,
- int width, int height,
- uint32_t* dst, int dst_stride) {
+static void DispatchAlphaToGreen_C(const uint8_t* WEBP_RESTRICT alpha,
+ int alpha_stride, int width, int height,
+ uint32_t* WEBP_RESTRICT dst,
+ int dst_stride) {
int i, j;
for (j = 0; j < height; ++j) {
for (i = 0; i < width; ++i) {
@@ -322,9 +325,9 @@ static void DispatchAlphaToGreen_C(const uint8_t* alpha, int alpha_stride,
}
}
-static int ExtractAlpha_C(const uint8_t* argb, int argb_stride,
+static int ExtractAlpha_C(const uint8_t* WEBP_RESTRICT argb, int argb_stride,
int width, int height,
- uint8_t* alpha, int alpha_stride) {
+ uint8_t* WEBP_RESTRICT alpha, int alpha_stride) {
uint8_t alpha_mask = 0xff;
int i, j;
@@ -340,7 +343,8 @@ static int ExtractAlpha_C(const uint8_t* argb, int argb_stride,
return (alpha_mask == 0xff);
}
-static void ExtractGreen_C(const uint32_t* argb, uint8_t* alpha, int size) {
+static void ExtractGreen_C(const uint32_t* WEBP_RESTRICT argb,
+ uint8_t* WEBP_RESTRICT alpha, int size) {
int i;
for (i = 0; i < size; ++i) alpha[i] = argb[i] >> 8;
}
@@ -359,6 +363,11 @@ static int HasAlpha32b_C(const uint8_t* src, int length) {
return 0;
}
+static void AlphaReplace_C(uint32_t* src, int length, uint32_t color) {
+ int x;
+ for (x = 0; x < length; ++x) if ((src[x] >> 24) == 0) src[x] = color;
+}
+
//------------------------------------------------------------------------------
// Simple channel manipulations.
@@ -367,8 +376,11 @@ static WEBP_INLINE uint32_t MakeARGB32(int a, int r, int g, int b) {
}
#ifdef WORDS_BIGENDIAN
-static void PackARGB_C(const uint8_t* a, const uint8_t* r, const uint8_t* g,
- const uint8_t* b, int len, uint32_t* out) {
+static void PackARGB_C(const uint8_t* WEBP_RESTRICT a,
+ const uint8_t* WEBP_RESTRICT r,
+ const uint8_t* WEBP_RESTRICT g,
+ const uint8_t* WEBP_RESTRICT b,
+ int len, uint32_t* WEBP_RESTRICT out) {
int i;
for (i = 0; i < len; ++i) {
out[i] = MakeARGB32(a[4 * i], r[4 * i], g[4 * i], b[4 * i]);
@@ -376,8 +388,10 @@ static void PackARGB_C(const uint8_t* a, const uint8_t* r, const uint8_t* g,
}
#endif
-static void PackRGB_C(const uint8_t* r, const uint8_t* g, const uint8_t* b,
- int len, int step, uint32_t* out) {
+static void PackRGB_C(const uint8_t* WEBP_RESTRICT r,
+ const uint8_t* WEBP_RESTRICT g,
+ const uint8_t* WEBP_RESTRICT b,
+ int len, int step, uint32_t* WEBP_RESTRICT out) {
int i, offset = 0;
for (i = 0; i < len; ++i) {
out[i] = MakeARGB32(0xff, r[offset], g[offset], b[offset]);
@@ -387,19 +401,26 @@ static void PackRGB_C(const uint8_t* r, const uint8_t* g, const uint8_t* b,
void (*WebPApplyAlphaMultiply)(uint8_t*, int, int, int, int);
void (*WebPApplyAlphaMultiply4444)(uint8_t*, int, int, int);
-int (*WebPDispatchAlpha)(const uint8_t*, int, int, int, uint8_t*, int);
-void (*WebPDispatchAlphaToGreen)(const uint8_t*, int, int, int, uint32_t*, int);
-int (*WebPExtractAlpha)(const uint8_t*, int, int, int, uint8_t*, int);
-void (*WebPExtractGreen)(const uint32_t* argb, uint8_t* alpha, int size);
+int (*WebPDispatchAlpha)(const uint8_t* WEBP_RESTRICT, int, int, int,
+ uint8_t* WEBP_RESTRICT, int);
+void (*WebPDispatchAlphaToGreen)(const uint8_t* WEBP_RESTRICT, int, int, int,
+ uint32_t* WEBP_RESTRICT, int);
+int (*WebPExtractAlpha)(const uint8_t* WEBP_RESTRICT, int, int, int,
+ uint8_t* WEBP_RESTRICT, int);
+void (*WebPExtractGreen)(const uint32_t* WEBP_RESTRICT argb,
+ uint8_t* WEBP_RESTRICT alpha, int size);
#ifdef WORDS_BIGENDIAN
void (*WebPPackARGB)(const uint8_t* a, const uint8_t* r, const uint8_t* g,
const uint8_t* b, int, uint32_t*);
#endif
-void (*WebPPackRGB)(const uint8_t* r, const uint8_t* g, const uint8_t* b,
- int len, int step, uint32_t* out);
+void (*WebPPackRGB)(const uint8_t* WEBP_RESTRICT r,
+ const uint8_t* WEBP_RESTRICT g,
+ const uint8_t* WEBP_RESTRICT b,
+ int len, int step, uint32_t* WEBP_RESTRICT out);
int (*WebPHasAlpha8b)(const uint8_t* src, int length);
int (*WebPHasAlpha32b)(const uint8_t* src, int length);
+void (*WebPAlphaReplace)(uint32_t* src, int length, uint32_t color);
//------------------------------------------------------------------------------
// Init function
@@ -428,13 +449,14 @@ WEBP_DSP_INIT_FUNC(WebPInitAlphaProcessing) {
WebPHasAlpha8b = HasAlpha8b_C;
WebPHasAlpha32b = HasAlpha32b_C;
+ WebPAlphaReplace = AlphaReplace_C;
// If defined, use CPUInfo() to overwrite some pointers with faster versions.
if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_SSE2)
+#if defined(WEBP_HAVE_SSE2)
if (VP8GetCPUInfo(kSSE2)) {
WebPInitAlphaProcessingSSE2();
-#if defined(WEBP_USE_SSE41)
+#if defined(WEBP_HAVE_SSE41)
if (VP8GetCPUInfo(kSSE4_1)) {
WebPInitAlphaProcessingSSE41();
}
@@ -448,7 +470,7 @@ WEBP_DSP_INIT_FUNC(WebPInitAlphaProcessing) {
#endif
}
-#if defined(WEBP_USE_NEON)
+#if defined(WEBP_HAVE_NEON)
if (WEBP_NEON_OMIT_C_CODE ||
(VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) {
WebPInitAlphaProcessingNEON();
@@ -469,4 +491,5 @@ WEBP_DSP_INIT_FUNC(WebPInitAlphaProcessing) {
assert(WebPPackRGB != NULL);
assert(WebPHasAlpha8b != NULL);
assert(WebPHasAlpha32b != NULL);
+ assert(WebPAlphaReplace != NULL);
}
diff --git a/thirdparty/libwebp/src/dsp/alpha_processing_neon.c b/thirdparty/libwebp/src/dsp/alpha_processing_neon.c
index 9d55421704..9e0ace9421 100644
--- a/thirdparty/libwebp/src/dsp/alpha_processing_neon.c
+++ b/thirdparty/libwebp/src/dsp/alpha_processing_neon.c
@@ -80,9 +80,9 @@ static void ApplyAlphaMultiply_NEON(uint8_t* rgba, int alpha_first,
//------------------------------------------------------------------------------
-static int DispatchAlpha_NEON(const uint8_t* alpha, int alpha_stride,
- int width, int height,
- uint8_t* dst, int dst_stride) {
+static int DispatchAlpha_NEON(const uint8_t* WEBP_RESTRICT alpha,
+ int alpha_stride, int width, int height,
+ uint8_t* WEBP_RESTRICT dst, int dst_stride) {
uint32_t alpha_mask = 0xffffffffu;
uint8x8_t mask8 = vdup_n_u8(0xff);
uint32_t tmp[2];
@@ -112,9 +112,10 @@ static int DispatchAlpha_NEON(const uint8_t* alpha, int alpha_stride,
return (alpha_mask != 0xffffffffu);
}
-static void DispatchAlphaToGreen_NEON(const uint8_t* alpha, int alpha_stride,
- int width, int height,
- uint32_t* dst, int dst_stride) {
+static void DispatchAlphaToGreen_NEON(const uint8_t* WEBP_RESTRICT alpha,
+ int alpha_stride, int width, int height,
+ uint32_t* WEBP_RESTRICT dst,
+ int dst_stride) {
int i, j;
uint8x8x4_t greens; // leave A/R/B channels zero'd.
greens.val[0] = vdup_n_u8(0);
@@ -131,9 +132,9 @@ static void DispatchAlphaToGreen_NEON(const uint8_t* alpha, int alpha_stride,
}
}
-static int ExtractAlpha_NEON(const uint8_t* argb, int argb_stride,
+static int ExtractAlpha_NEON(const uint8_t* WEBP_RESTRICT argb, int argb_stride,
int width, int height,
- uint8_t* alpha, int alpha_stride) {
+ uint8_t* WEBP_RESTRICT alpha, int alpha_stride) {
uint32_t alpha_mask = 0xffffffffu;
uint8x8_t mask8 = vdup_n_u8(0xff);
uint32_t tmp[2];
@@ -161,8 +162,8 @@ static int ExtractAlpha_NEON(const uint8_t* argb, int argb_stride,
return (alpha_mask == 0xffffffffu);
}
-static void ExtractGreen_NEON(const uint32_t* argb,
- uint8_t* alpha, int size) {
+static void ExtractGreen_NEON(const uint32_t* WEBP_RESTRICT argb,
+ uint8_t* WEBP_RESTRICT alpha, int size) {
int i;
for (i = 0; i + 16 <= size; i += 16) {
const uint8x16x4_t rgbX = vld4q_u8((const uint8_t*)(argb + i));
diff --git a/thirdparty/libwebp/src/dsp/alpha_processing_sse2.c b/thirdparty/libwebp/src/dsp/alpha_processing_sse2.c
index 2871c56d84..a5f8c9f7c7 100644
--- a/thirdparty/libwebp/src/dsp/alpha_processing_sse2.c
+++ b/thirdparty/libwebp/src/dsp/alpha_processing_sse2.c
@@ -18,9 +18,9 @@
//------------------------------------------------------------------------------
-static int DispatchAlpha_SSE2(const uint8_t* alpha, int alpha_stride,
- int width, int height,
- uint8_t* dst, int dst_stride) {
+static int DispatchAlpha_SSE2(const uint8_t* WEBP_RESTRICT alpha,
+ int alpha_stride, int width, int height,
+ uint8_t* WEBP_RESTRICT dst, int dst_stride) {
// alpha_and stores an 'and' operation of all the alpha[] values. The final
// value is not 0xff if any of the alpha[] is not equal to 0xff.
uint32_t alpha_and = 0xff;
@@ -72,9 +72,10 @@ static int DispatchAlpha_SSE2(const uint8_t* alpha, int alpha_stride,
return (alpha_and != 0xff);
}
-static void DispatchAlphaToGreen_SSE2(const uint8_t* alpha, int alpha_stride,
- int width, int height,
- uint32_t* dst, int dst_stride) {
+static void DispatchAlphaToGreen_SSE2(const uint8_t* WEBP_RESTRICT alpha,
+ int alpha_stride, int width, int height,
+ uint32_t* WEBP_RESTRICT dst,
+ int dst_stride) {
int i, j;
const __m128i zero = _mm_setzero_si128();
const int limit = width & ~15;
@@ -98,9 +99,9 @@ static void DispatchAlphaToGreen_SSE2(const uint8_t* alpha, int alpha_stride,
}
}
-static int ExtractAlpha_SSE2(const uint8_t* argb, int argb_stride,
+static int ExtractAlpha_SSE2(const uint8_t* WEBP_RESTRICT argb, int argb_stride,
int width, int height,
- uint8_t* alpha, int alpha_stride) {
+ uint8_t* WEBP_RESTRICT alpha, int alpha_stride) {
// alpha_and stores an 'and' operation of all the alpha[] values. The final
// value is not 0xff if any of the alpha[] is not equal to 0xff.
uint32_t alpha_and = 0xff;
@@ -265,6 +266,27 @@ static int HasAlpha32b_SSE2(const uint8_t* src, int length) {
return 0;
}
+static void AlphaReplace_SSE2(uint32_t* src, int length, uint32_t color) {
+ const __m128i m_color = _mm_set1_epi32(color);
+ const __m128i zero = _mm_setzero_si128();
+ int i = 0;
+ for (; i + 8 <= length; i += 8) {
+ const __m128i a0 = _mm_loadu_si128((const __m128i*)(src + i + 0));
+ const __m128i a1 = _mm_loadu_si128((const __m128i*)(src + i + 4));
+ const __m128i b0 = _mm_srai_epi32(a0, 24);
+ const __m128i b1 = _mm_srai_epi32(a1, 24);
+ const __m128i c0 = _mm_cmpeq_epi32(b0, zero);
+ const __m128i c1 = _mm_cmpeq_epi32(b1, zero);
+ const __m128i d0 = _mm_and_si128(c0, m_color);
+ const __m128i d1 = _mm_and_si128(c1, m_color);
+ const __m128i e0 = _mm_andnot_si128(c0, a0);
+ const __m128i e1 = _mm_andnot_si128(c1, a1);
+ _mm_storeu_si128((__m128i*)(src + i + 0), _mm_or_si128(d0, e0));
+ _mm_storeu_si128((__m128i*)(src + i + 4), _mm_or_si128(d1, e1));
+ }
+ for (; i < length; ++i) if ((src[i] >> 24) == 0) src[i] = color;
+}
+
// -----------------------------------------------------------------------------
// Apply alpha value to rows
@@ -296,7 +318,8 @@ static void MultARGBRow_SSE2(uint32_t* const ptr, int width, int inverse) {
if (width > 0) WebPMultARGBRow_C(ptr + x, width, inverse);
}
-static void MultRow_SSE2(uint8_t* const ptr, const uint8_t* const alpha,
+static void MultRow_SSE2(uint8_t* WEBP_RESTRICT const ptr,
+ const uint8_t* WEBP_RESTRICT const alpha,
int width, int inverse) {
int x = 0;
if (!inverse) {
@@ -334,6 +357,7 @@ WEBP_TSAN_IGNORE_FUNCTION void WebPInitAlphaProcessingSSE2(void) {
WebPHasAlpha8b = HasAlpha8b_SSE2;
WebPHasAlpha32b = HasAlpha32b_SSE2;
+ WebPAlphaReplace = AlphaReplace_SSE2;
}
#else // !WEBP_USE_SSE2
diff --git a/thirdparty/libwebp/src/dsp/alpha_processing_sse41.c b/thirdparty/libwebp/src/dsp/alpha_processing_sse41.c
index 56040f9c88..cdf877ce49 100644
--- a/thirdparty/libwebp/src/dsp/alpha_processing_sse41.c
+++ b/thirdparty/libwebp/src/dsp/alpha_processing_sse41.c
@@ -19,9 +19,9 @@
//------------------------------------------------------------------------------
-static int ExtractAlpha_SSE41(const uint8_t* argb, int argb_stride,
- int width, int height,
- uint8_t* alpha, int alpha_stride) {
+static int ExtractAlpha_SSE41(const uint8_t* WEBP_RESTRICT argb,
+ int argb_stride, int width, int height,
+ uint8_t* WEBP_RESTRICT alpha, int alpha_stride) {
// alpha_and stores an 'and' operation of all the alpha[] values. The final
// value is not 0xff if any of the alpha[] is not equal to 0xff.
uint32_t alpha_and = 0xff;
diff --git a/thirdparty/libwebp/src/dsp/cost.c b/thirdparty/libwebp/src/dsp/cost.c
index cc681cdd4b..460ec4f2a7 100644
--- a/thirdparty/libwebp/src/dsp/cost.c
+++ b/thirdparty/libwebp/src/dsp/cost.c
@@ -395,12 +395,12 @@ WEBP_DSP_INIT_FUNC(VP8EncDspCostInit) {
VP8EncDspCostInitMIPSdspR2();
}
#endif
-#if defined(WEBP_USE_SSE2)
+#if defined(WEBP_HAVE_SSE2)
if (VP8GetCPUInfo(kSSE2)) {
VP8EncDspCostInitSSE2();
}
#endif
-#if defined(WEBP_USE_NEON)
+#if defined(WEBP_HAVE_NEON)
if (VP8GetCPUInfo(kNEON)) {
VP8EncDspCostInitNEON();
}
diff --git a/thirdparty/libwebp/src/dsp/cpu.c b/thirdparty/libwebp/src/dsp/cpu.c
index 0fa5b6a5ce..3145e190a4 100644
--- a/thirdparty/libwebp/src/dsp/cpu.c
+++ b/thirdparty/libwebp/src/dsp/cpu.c
@@ -55,12 +55,18 @@ static WEBP_INLINE void GetCPUInfo(int cpu_info[4], int info_type) {
: "=a"(cpu_info[0]), "=b"(cpu_info[1]), "=c"(cpu_info[2]), "=d"(cpu_info[3])
: "a"(info_type), "c"(0));
}
-#elif (defined(_M_X64) || defined(_M_IX86)) && \
- defined(_MSC_FULL_VER) && _MSC_FULL_VER >= 150030729 // >= VS2008 SP1
+#elif defined(_MSC_VER) && (defined(_M_X64) || defined(_M_IX86))
+
+#if defined(_MSC_FULL_VER) && _MSC_FULL_VER >= 150030729 // >= VS2008 SP1
#include <intrin.h>
#define GetCPUInfo(info, type) __cpuidex(info, type, 0) // set ecx=0
-#elif defined(WEBP_MSC_SSE2)
+#define WEBP_HAVE_MSC_CPUID
+#elif _MSC_VER > 1310
+#include <intrin.h>
#define GetCPUInfo __cpuid
+#define WEBP_HAVE_MSC_CPUID
+#endif
+
#endif
// NaCl has no support for xgetbv or the raw opcode.
@@ -94,7 +100,7 @@ static WEBP_INLINE uint64_t xgetbv(void) {
#define xgetbv() 0U // no AVX for older x64 or unrecognized toolchains.
#endif
-#if defined(__i386__) || defined(__x86_64__) || defined(WEBP_MSC_SSE2)
+#if defined(__i386__) || defined(__x86_64__) || defined(WEBP_HAVE_MSC_CPUID)
// helper function for run-time detection of slow SSSE3 platforms
static int CheckSlowModel(int info) {
@@ -179,9 +185,34 @@ static int AndroidCPUInfo(CPUFeature feature) {
return 0;
}
VP8CPUInfo VP8GetCPUInfo = AndroidCPUInfo;
-#elif defined(WEBP_USE_NEON)
-// define a dummy function to enable turning off NEON at runtime by setting
-// VP8DecGetCPUInfo = NULL
+#elif defined(EMSCRIPTEN) // also needs to be before generic NEON test
+// Use compile flags as an indicator of SIMD support instead of a runtime check.
+static int wasmCPUInfo(CPUFeature feature) {
+ switch (feature) {
+#ifdef WEBP_HAVE_SSE2
+ case kSSE2:
+ return 1;
+#endif
+#ifdef WEBP_HAVE_SSE41
+ case kSSE3:
+ case kSlowSSSE3:
+ case kSSE4_1:
+ return 1;
+#endif
+#ifdef WEBP_HAVE_NEON
+ case kNEON:
+ return 1;
+#endif
+ default:
+ break;
+ }
+ return 0;
+}
+VP8CPUInfo VP8GetCPUInfo = wasmCPUInfo;
+#elif defined(WEBP_HAVE_NEON)
+// In most cases this function doesn't check for NEON support (it's assumed by
+// the configuration), but enables turning off NEON at runtime, for testing
+// purposes, by setting VP8DecGetCPUInfo = NULL.
static int armCPUInfo(CPUFeature feature) {
if (feature != kNEON) return 0;
#if defined(__linux__) && defined(WEBP_HAVE_NEON_RTCD)
diff --git a/thirdparty/libwebp/src/dsp/dec.c b/thirdparty/libwebp/src/dsp/dec.c
index 1119842dd3..537c701282 100644
--- a/thirdparty/libwebp/src/dsp/dec.c
+++ b/thirdparty/libwebp/src/dsp/dec.c
@@ -807,10 +807,10 @@ WEBP_DSP_INIT_FUNC(VP8DspInit) {
// If defined, use CPUInfo() to overwrite some pointers with faster versions.
if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_SSE2)
+#if defined(WEBP_HAVE_SSE2)
if (VP8GetCPUInfo(kSSE2)) {
VP8DspInitSSE2();
-#if defined(WEBP_USE_SSE41)
+#if defined(WEBP_HAVE_SSE41)
if (VP8GetCPUInfo(kSSE4_1)) {
VP8DspInitSSE41();
}
@@ -834,7 +834,7 @@ WEBP_DSP_INIT_FUNC(VP8DspInit) {
#endif
}
-#if defined(WEBP_USE_NEON)
+#if defined(WEBP_HAVE_NEON)
if (WEBP_NEON_OMIT_C_CODE ||
(VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) {
VP8DspInitNEON();
diff --git a/thirdparty/libwebp/src/dsp/dec_neon.c b/thirdparty/libwebp/src/dsp/dec_neon.c
index 239ec4167e..fa851707e2 100644
--- a/thirdparty/libwebp/src/dsp/dec_neon.c
+++ b/thirdparty/libwebp/src/dsp/dec_neon.c
@@ -1283,12 +1283,12 @@ static void DC4_NEON(uint8_t* dst) { // DC
const uint8x8_t A = vld1_u8(dst - BPS); // top row
const uint16x4_t p0 = vpaddl_u8(A); // cascading summation of the top
const uint16x4_t p1 = vpadd_u16(p0, p0);
- const uint16x8_t L0 = vmovl_u8(vld1_u8(dst + 0 * BPS - 1));
- const uint16x8_t L1 = vmovl_u8(vld1_u8(dst + 1 * BPS - 1));
- const uint16x8_t L2 = vmovl_u8(vld1_u8(dst + 2 * BPS - 1));
- const uint16x8_t L3 = vmovl_u8(vld1_u8(dst + 3 * BPS - 1));
- const uint16x8_t s0 = vaddq_u16(L0, L1);
- const uint16x8_t s1 = vaddq_u16(L2, L3);
+ const uint8x8_t L0 = vld1_u8(dst + 0 * BPS - 1);
+ const uint8x8_t L1 = vld1_u8(dst + 1 * BPS - 1);
+ const uint8x8_t L2 = vld1_u8(dst + 2 * BPS - 1);
+ const uint8x8_t L3 = vld1_u8(dst + 3 * BPS - 1);
+ const uint16x8_t s0 = vaddl_u8(L0, L1);
+ const uint16x8_t s1 = vaddl_u8(L2, L3);
const uint16x8_t s01 = vaddq_u16(s0, s1);
const uint16x8_t sum = vaddq_u16(s01, vcombine_u16(p1, p1));
const uint8x8_t dc0 = vrshrn_n_u16(sum, 3); // (sum + 4) >> 3
@@ -1429,8 +1429,7 @@ static WEBP_INLINE void DC8_NEON(uint8_t* dst, int do_top, int do_left) {
if (do_top) {
const uint8x8_t A = vld1_u8(dst - BPS); // top row
#if defined(__aarch64__)
- const uint16x8_t B = vmovl_u8(A);
- const uint16_t p2 = vaddvq_u16(B);
+ const uint16_t p2 = vaddlv_u8(A);
sum_top = vdupq_n_u16(p2);
#else
const uint16x4_t p0 = vpaddl_u8(A); // cascading summation of the top
@@ -1441,18 +1440,18 @@ static WEBP_INLINE void DC8_NEON(uint8_t* dst, int do_top, int do_left) {
}
if (do_left) {
- const uint16x8_t L0 = vmovl_u8(vld1_u8(dst + 0 * BPS - 1));
- const uint16x8_t L1 = vmovl_u8(vld1_u8(dst + 1 * BPS - 1));
- const uint16x8_t L2 = vmovl_u8(vld1_u8(dst + 2 * BPS - 1));
- const uint16x8_t L3 = vmovl_u8(vld1_u8(dst + 3 * BPS - 1));
- const uint16x8_t L4 = vmovl_u8(vld1_u8(dst + 4 * BPS - 1));
- const uint16x8_t L5 = vmovl_u8(vld1_u8(dst + 5 * BPS - 1));
- const uint16x8_t L6 = vmovl_u8(vld1_u8(dst + 6 * BPS - 1));
- const uint16x8_t L7 = vmovl_u8(vld1_u8(dst + 7 * BPS - 1));
- const uint16x8_t s0 = vaddq_u16(L0, L1);
- const uint16x8_t s1 = vaddq_u16(L2, L3);
- const uint16x8_t s2 = vaddq_u16(L4, L5);
- const uint16x8_t s3 = vaddq_u16(L6, L7);
+ const uint8x8_t L0 = vld1_u8(dst + 0 * BPS - 1);
+ const uint8x8_t L1 = vld1_u8(dst + 1 * BPS - 1);
+ const uint8x8_t L2 = vld1_u8(dst + 2 * BPS - 1);
+ const uint8x8_t L3 = vld1_u8(dst + 3 * BPS - 1);
+ const uint8x8_t L4 = vld1_u8(dst + 4 * BPS - 1);
+ const uint8x8_t L5 = vld1_u8(dst + 5 * BPS - 1);
+ const uint8x8_t L6 = vld1_u8(dst + 6 * BPS - 1);
+ const uint8x8_t L7 = vld1_u8(dst + 7 * BPS - 1);
+ const uint16x8_t s0 = vaddl_u8(L0, L1);
+ const uint16x8_t s1 = vaddl_u8(L2, L3);
+ const uint16x8_t s2 = vaddl_u8(L4, L5);
+ const uint16x8_t s3 = vaddl_u8(L6, L7);
const uint16x8_t s01 = vaddq_u16(s0, s1);
const uint16x8_t s23 = vaddq_u16(s2, s3);
sum_left = vaddq_u16(s01, s23);
@@ -1512,29 +1511,34 @@ static WEBP_INLINE void DC16_NEON(uint8_t* dst, int do_top, int do_left) {
if (do_top) {
const uint8x16_t A = vld1q_u8(dst - BPS); // top row
+#if defined(__aarch64__)
+ const uint16_t p3 = vaddlvq_u8(A);
+ sum_top = vdupq_n_u16(p3);
+#else
const uint16x8_t p0 = vpaddlq_u8(A); // cascading summation of the top
const uint16x4_t p1 = vadd_u16(vget_low_u16(p0), vget_high_u16(p0));
const uint16x4_t p2 = vpadd_u16(p1, p1);
const uint16x4_t p3 = vpadd_u16(p2, p2);
sum_top = vcombine_u16(p3, p3);
+#endif
}
if (do_left) {
int i;
sum_left = vdupq_n_u16(0);
for (i = 0; i < 16; i += 8) {
- const uint16x8_t L0 = vmovl_u8(vld1_u8(dst + (i + 0) * BPS - 1));
- const uint16x8_t L1 = vmovl_u8(vld1_u8(dst + (i + 1) * BPS - 1));
- const uint16x8_t L2 = vmovl_u8(vld1_u8(dst + (i + 2) * BPS - 1));
- const uint16x8_t L3 = vmovl_u8(vld1_u8(dst + (i + 3) * BPS - 1));
- const uint16x8_t L4 = vmovl_u8(vld1_u8(dst + (i + 4) * BPS - 1));
- const uint16x8_t L5 = vmovl_u8(vld1_u8(dst + (i + 5) * BPS - 1));
- const uint16x8_t L6 = vmovl_u8(vld1_u8(dst + (i + 6) * BPS - 1));
- const uint16x8_t L7 = vmovl_u8(vld1_u8(dst + (i + 7) * BPS - 1));
- const uint16x8_t s0 = vaddq_u16(L0, L1);
- const uint16x8_t s1 = vaddq_u16(L2, L3);
- const uint16x8_t s2 = vaddq_u16(L4, L5);
- const uint16x8_t s3 = vaddq_u16(L6, L7);
+ const uint8x8_t L0 = vld1_u8(dst + (i + 0) * BPS - 1);
+ const uint8x8_t L1 = vld1_u8(dst + (i + 1) * BPS - 1);
+ const uint8x8_t L2 = vld1_u8(dst + (i + 2) * BPS - 1);
+ const uint8x8_t L3 = vld1_u8(dst + (i + 3) * BPS - 1);
+ const uint8x8_t L4 = vld1_u8(dst + (i + 4) * BPS - 1);
+ const uint8x8_t L5 = vld1_u8(dst + (i + 5) * BPS - 1);
+ const uint8x8_t L6 = vld1_u8(dst + (i + 6) * BPS - 1);
+ const uint8x8_t L7 = vld1_u8(dst + (i + 7) * BPS - 1);
+ const uint16x8_t s0 = vaddl_u8(L0, L1);
+ const uint16x8_t s1 = vaddl_u8(L2, L3);
+ const uint16x8_t s2 = vaddl_u8(L4, L5);
+ const uint16x8_t s3 = vaddl_u8(L6, L7);
const uint16x8_t s01 = vaddq_u16(s0, s1);
const uint16x8_t s23 = vaddq_u16(s2, s3);
const uint16x8_t sum = vaddq_u16(s01, s23);
diff --git a/thirdparty/libwebp/src/dsp/dsp.h b/thirdparty/libwebp/src/dsp/dsp.h
index a784de334a..513e159bb3 100644
--- a/thirdparty/libwebp/src/dsp/dsp.h
+++ b/thirdparty/libwebp/src/dsp/dsp.h
@@ -27,6 +27,23 @@ extern "C" {
#define BPS 32 // this is the common stride for enc/dec
//------------------------------------------------------------------------------
+// WEBP_RESTRICT
+
+// Declares a pointer with the restrict type qualifier if available.
+// This allows code to hint to the compiler that only this pointer references a
+// particular object or memory region within the scope of the block in which it
+// is declared. This may allow for improved optimizations due to the lack of
+// pointer aliasing. See also:
+// https://en.cppreference.com/w/c/language/restrict
+#if defined(__GNUC__)
+#define WEBP_RESTRICT __restrict__
+#elif defined(_MSC_VER)
+#define WEBP_RESTRICT __restrict
+#else
+#define WEBP_RESTRICT
+#endif
+
+//------------------------------------------------------------------------------
// CPU detection
#if defined(__GNUC__)
@@ -51,9 +68,7 @@ extern "C" {
# define __has_builtin(x) 0
#endif
-// for now, none of the optimizations below are available in emscripten
-#if !defined(EMSCRIPTEN)
-
+#if !defined(HAVE_CONFIG_H)
#if defined(_MSC_VER) && _MSC_VER > 1310 && \
(defined(_M_X64) || defined(_M_IX86))
#define WEBP_MSC_SSE2 // Visual C++ SSE2 targets
@@ -63,23 +78,37 @@ extern "C" {
(defined(_M_X64) || defined(_M_IX86))
#define WEBP_MSC_SSE41 // Visual C++ SSE4.1 targets
#endif
+#endif
// WEBP_HAVE_* are used to indicate the presence of the instruction set in dsp
// files without intrinsics, allowing the corresponding Init() to be called.
// Files containing intrinsics will need to be built targeting the instruction
// set so should succeed on one of the earlier tests.
-#if defined(__SSE2__) || defined(WEBP_MSC_SSE2) || defined(WEBP_HAVE_SSE2)
+#if (defined(__SSE2__) || defined(WEBP_MSC_SSE2)) && \
+ (!defined(HAVE_CONFIG_H) || defined(WEBP_HAVE_SSE2))
#define WEBP_USE_SSE2
#endif
-#if defined(__SSE4_1__) || defined(WEBP_MSC_SSE41) || defined(WEBP_HAVE_SSE41)
+#if defined(WEBP_USE_SSE2) && !defined(WEBP_HAVE_SSE2)
+#define WEBP_HAVE_SSE2
+#endif
+
+#if (defined(__SSE4_1__) || defined(WEBP_MSC_SSE41)) && \
+ (!defined(HAVE_CONFIG_H) || defined(WEBP_HAVE_SSE41))
#define WEBP_USE_SSE41
#endif
+#if defined(WEBP_USE_SSE41) && !defined(WEBP_HAVE_SSE41)
+#define WEBP_HAVE_SSE41
+#endif
+
+#undef WEBP_MSC_SSE41
+#undef WEBP_MSC_SSE2
+
// The intrinsics currently cause compiler errors with arm-nacl-gcc and the
// inline assembly would need to be modified for use with Native Client.
-#if (defined(__ARM_NEON__) || \
- defined(__aarch64__) || defined(WEBP_HAVE_NEON)) && \
+#if ((defined(__ARM_NEON__) || defined(__aarch64__)) && \
+ (!defined(HAVE_CONFIG_H) || defined(WEBP_HAVE_NEON))) && \
!defined(__native_client__)
#define WEBP_USE_NEON
#endif
@@ -95,6 +124,10 @@ extern "C" {
#define WEBP_USE_INTRINSICS
#endif
+#if defined(WEBP_USE_NEON) && !defined(WEBP_HAVE_NEON)
+#define WEBP_HAVE_NEON
+#endif
+
#if defined(__mips__) && !defined(__mips64) && \
defined(__mips_isa_rev) && (__mips_isa_rev >= 1) && (__mips_isa_rev < 6)
#define WEBP_USE_MIPS32
@@ -110,13 +143,11 @@ extern "C" {
#define WEBP_USE_MSA
#endif
-#endif /* EMSCRIPTEN */
-
#ifndef WEBP_DSP_OMIT_C_CODE
#define WEBP_DSP_OMIT_C_CODE 1
#endif
-#if (defined(__aarch64__) || defined(__ARM_NEON__)) && WEBP_DSP_OMIT_C_CODE
+#if defined(WEBP_USE_NEON) && WEBP_DSP_OMIT_C_CODE
#define WEBP_NEON_OMIT_C_CODE 1
#else
#define WEBP_NEON_OMIT_C_CODE 0
@@ -193,6 +224,12 @@ extern "C" {
#endif
#endif
+// If 'ptr' is NULL, returns NULL. Otherwise returns 'ptr + off'.
+// Prevents undefined behavior sanitizer nullptr-with-nonzero-offset warning.
+#if !defined(WEBP_OFFSET_PTR)
+#define WEBP_OFFSET_PTR(ptr, off) (((ptr) == NULL) ? NULL : ((ptr) + (off)))
+#endif
+
// Regularize the definition of WEBP_SWAP_16BIT_CSP (backward compatibility)
#if !defined(WEBP_SWAP_16BIT_CSP)
#define WEBP_SWAP_16BIT_CSP 0
@@ -572,26 +609,29 @@ extern void (*WebPApplyAlphaMultiply4444)(
// Dispatch the values from alpha[] plane to the ARGB destination 'dst'.
// Returns true if alpha[] plane has non-trivial values different from 0xff.
-extern int (*WebPDispatchAlpha)(const uint8_t* alpha, int alpha_stride,
- int width, int height,
- uint8_t* dst, int dst_stride);
+extern int (*WebPDispatchAlpha)(const uint8_t* WEBP_RESTRICT alpha,
+ int alpha_stride, int width, int height,
+ uint8_t* WEBP_RESTRICT dst, int dst_stride);
// Transfer packed 8b alpha[] values to green channel in dst[], zero'ing the
// A/R/B values. 'dst_stride' is the stride for dst[] in uint32_t units.
-extern void (*WebPDispatchAlphaToGreen)(const uint8_t* alpha, int alpha_stride,
- int width, int height,
- uint32_t* dst, int dst_stride);
+extern void (*WebPDispatchAlphaToGreen)(const uint8_t* WEBP_RESTRICT alpha,
+ int alpha_stride, int width, int height,
+ uint32_t* WEBP_RESTRICT dst,
+ int dst_stride);
// Extract the alpha values from 32b values in argb[] and pack them into alpha[]
// (this is the opposite of WebPDispatchAlpha).
// Returns true if there's only trivial 0xff alpha values.
-extern int (*WebPExtractAlpha)(const uint8_t* argb, int argb_stride,
- int width, int height,
- uint8_t* alpha, int alpha_stride);
+extern int (*WebPExtractAlpha)(const uint8_t* WEBP_RESTRICT argb,
+ int argb_stride, int width, int height,
+ uint8_t* WEBP_RESTRICT alpha,
+ int alpha_stride);
// Extract the green values from 32b values in argb[] and pack them into alpha[]
// (this is the opposite of WebPDispatchAlphaToGreen).
-extern void (*WebPExtractGreen)(const uint32_t* argb, uint8_t* alpha, int size);
+extern void (*WebPExtractGreen)(const uint32_t* WEBP_RESTRICT argb,
+ uint8_t* WEBP_RESTRICT alpha, int size);
// Pre-Multiply operation transforms x into x * A / 255 (where x=Y,R,G or B).
// Un-Multiply operation transforms x into x * 255 / A.
@@ -604,34 +644,42 @@ void WebPMultARGBRows(uint8_t* ptr, int stride, int width, int num_rows,
int inverse);
// Same for a row of single values, with side alpha values.
-extern void (*WebPMultRow)(uint8_t* const ptr, const uint8_t* const alpha,
+extern void (*WebPMultRow)(uint8_t* WEBP_RESTRICT const ptr,
+ const uint8_t* WEBP_RESTRICT const alpha,
int width, int inverse);
// Same a WebPMultRow(), but for several 'num_rows' rows.
-void WebPMultRows(uint8_t* ptr, int stride,
- const uint8_t* alpha, int alpha_stride,
+void WebPMultRows(uint8_t* WEBP_RESTRICT ptr, int stride,
+ const uint8_t* WEBP_RESTRICT alpha, int alpha_stride,
int width, int num_rows, int inverse);
// Plain-C versions, used as fallback by some implementations.
-void WebPMultRow_C(uint8_t* const ptr, const uint8_t* const alpha,
+void WebPMultRow_C(uint8_t* WEBP_RESTRICT const ptr,
+ const uint8_t* WEBP_RESTRICT const alpha,
int width, int inverse);
void WebPMultARGBRow_C(uint32_t* const ptr, int width, int inverse);
#ifdef WORDS_BIGENDIAN
// ARGB packing function: a/r/g/b input is rgba or bgra order.
-extern void (*WebPPackARGB)(const uint8_t* a, const uint8_t* r,
- const uint8_t* g, const uint8_t* b, int len,
- uint32_t* out);
+extern void (*WebPPackARGB)(const uint8_t* WEBP_RESTRICT a,
+ const uint8_t* WEBP_RESTRICT r,
+ const uint8_t* WEBP_RESTRICT g,
+ const uint8_t* WEBP_RESTRICT b,
+ int len, uint32_t* WEBP_RESTRICT out);
#endif
// RGB packing function. 'step' can be 3 or 4. r/g/b input is rgb or bgr order.
-extern void (*WebPPackRGB)(const uint8_t* r, const uint8_t* g, const uint8_t* b,
- int len, int step, uint32_t* out);
+extern void (*WebPPackRGB)(const uint8_t* WEBP_RESTRICT r,
+ const uint8_t* WEBP_RESTRICT g,
+ const uint8_t* WEBP_RESTRICT b,
+ int len, int step, uint32_t* WEBP_RESTRICT out);
// This function returns true if src[i] contains a value different from 0xff.
extern int (*WebPHasAlpha8b)(const uint8_t* src, int length);
// This function returns true if src[4*i] contains a value different from 0xff.
extern int (*WebPHasAlpha32b)(const uint8_t* src, int length);
+// replaces transparent values in src[] by 'color'.
+extern void (*WebPAlphaReplace)(uint32_t* src, int length, uint32_t color);
// To be called first before using the above.
void WebPInitAlphaProcessing(void);
diff --git a/thirdparty/libwebp/src/dsp/enc.c b/thirdparty/libwebp/src/dsp/enc.c
index 2fddbc4c52..ea47a3fd95 100644
--- a/thirdparty/libwebp/src/dsp/enc.c
+++ b/thirdparty/libwebp/src/dsp/enc.c
@@ -773,10 +773,10 @@ WEBP_DSP_INIT_FUNC(VP8EncDspInit) {
// If defined, use CPUInfo() to overwrite some pointers with faster versions.
if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_SSE2)
+#if defined(WEBP_HAVE_SSE2)
if (VP8GetCPUInfo(kSSE2)) {
VP8EncDspInitSSE2();
-#if defined(WEBP_USE_SSE41)
+#if defined(WEBP_HAVE_SSE41)
if (VP8GetCPUInfo(kSSE4_1)) {
VP8EncDspInitSSE41();
}
@@ -800,7 +800,7 @@ WEBP_DSP_INIT_FUNC(VP8EncDspInit) {
#endif
}
-#if defined(WEBP_USE_NEON)
+#if defined(WEBP_HAVE_NEON)
if (WEBP_NEON_OMIT_C_CODE ||
(VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) {
VP8EncDspInitNEON();
diff --git a/thirdparty/libwebp/src/dsp/filters.c b/thirdparty/libwebp/src/dsp/filters.c
index 9e910d99c9..4506567ba3 100644
--- a/thirdparty/libwebp/src/dsp/filters.c
+++ b/thirdparty/libwebp/src/dsp/filters.c
@@ -254,7 +254,7 @@ WEBP_DSP_INIT_FUNC(VP8FiltersInit) {
#endif
if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_SSE2)
+#if defined(WEBP_HAVE_SSE2)
if (VP8GetCPUInfo(kSSE2)) {
VP8FiltersInitSSE2();
}
@@ -271,7 +271,7 @@ WEBP_DSP_INIT_FUNC(VP8FiltersInit) {
#endif
}
-#if defined(WEBP_USE_NEON)
+#if defined(WEBP_HAVE_NEON)
if (WEBP_NEON_OMIT_C_CODE ||
(VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) {
VP8FiltersInitNEON();
diff --git a/thirdparty/libwebp/src/dsp/filters_sse2.c b/thirdparty/libwebp/src/dsp/filters_sse2.c
index 4b3f2d020f..5c33ec15e2 100644
--- a/thirdparty/libwebp/src/dsp/filters_sse2.c
+++ b/thirdparty/libwebp/src/dsp/filters_sse2.c
@@ -320,7 +320,12 @@ extern void VP8FiltersInitSSE2(void);
WEBP_TSAN_IGNORE_FUNCTION void VP8FiltersInitSSE2(void) {
WebPUnfilters[WEBP_FILTER_HORIZONTAL] = HorizontalUnfilter_SSE2;
+#if defined(CHROMIUM)
+ // TODO(crbug.com/654974)
+ (void)VerticalUnfilter_SSE2;
+#else
WebPUnfilters[WEBP_FILTER_VERTICAL] = VerticalUnfilter_SSE2;
+#endif
WebPUnfilters[WEBP_FILTER_GRADIENT] = GradientUnfilter_SSE2;
WebPFilters[WEBP_FILTER_HORIZONTAL] = HorizontalFilter_SSE2;
diff --git a/thirdparty/libwebp/src/dsp/lossless.c b/thirdparty/libwebp/src/dsp/lossless.c
index aad5f43ec9..d8bbb02b35 100644
--- a/thirdparty/libwebp/src/dsp/lossless.c
+++ b/thirdparty/libwebp/src/dsp/lossless.c
@@ -107,62 +107,62 @@ static WEBP_INLINE uint32_t Select(uint32_t a, uint32_t b, uint32_t c) {
//------------------------------------------------------------------------------
// Predictors
-static uint32_t Predictor0_C(uint32_t left, const uint32_t* const top) {
+uint32_t VP8LPredictor0_C(uint32_t left, const uint32_t* const top) {
(void)top;
(void)left;
return ARGB_BLACK;
}
-static uint32_t Predictor1_C(uint32_t left, const uint32_t* const top) {
+uint32_t VP8LPredictor1_C(uint32_t left, const uint32_t* const top) {
(void)top;
return left;
}
-static uint32_t Predictor2_C(uint32_t left, const uint32_t* const top) {
+uint32_t VP8LPredictor2_C(uint32_t left, const uint32_t* const top) {
(void)left;
return top[0];
}
-static uint32_t Predictor3_C(uint32_t left, const uint32_t* const top) {
+uint32_t VP8LPredictor3_C(uint32_t left, const uint32_t* const top) {
(void)left;
return top[1];
}
-static uint32_t Predictor4_C(uint32_t left, const uint32_t* const top) {
+uint32_t VP8LPredictor4_C(uint32_t left, const uint32_t* const top) {
(void)left;
return top[-1];
}
-static uint32_t Predictor5_C(uint32_t left, const uint32_t* const top) {
+uint32_t VP8LPredictor5_C(uint32_t left, const uint32_t* const top) {
const uint32_t pred = Average3(left, top[0], top[1]);
return pred;
}
-static uint32_t Predictor6_C(uint32_t left, const uint32_t* const top) {
+uint32_t VP8LPredictor6_C(uint32_t left, const uint32_t* const top) {
const uint32_t pred = Average2(left, top[-1]);
return pred;
}
-static uint32_t Predictor7_C(uint32_t left, const uint32_t* const top) {
+uint32_t VP8LPredictor7_C(uint32_t left, const uint32_t* const top) {
const uint32_t pred = Average2(left, top[0]);
return pred;
}
-static uint32_t Predictor8_C(uint32_t left, const uint32_t* const top) {
+uint32_t VP8LPredictor8_C(uint32_t left, const uint32_t* const top) {
const uint32_t pred = Average2(top[-1], top[0]);
(void)left;
return pred;
}
-static uint32_t Predictor9_C(uint32_t left, const uint32_t* const top) {
+uint32_t VP8LPredictor9_C(uint32_t left, const uint32_t* const top) {
const uint32_t pred = Average2(top[0], top[1]);
(void)left;
return pred;
}
-static uint32_t Predictor10_C(uint32_t left, const uint32_t* const top) {
+uint32_t VP8LPredictor10_C(uint32_t left, const uint32_t* const top) {
const uint32_t pred = Average4(left, top[-1], top[0], top[1]);
return pred;
}
-static uint32_t Predictor11_C(uint32_t left, const uint32_t* const top) {
+uint32_t VP8LPredictor11_C(uint32_t left, const uint32_t* const top) {
const uint32_t pred = Select(top[0], left, top[-1]);
return pred;
}
-static uint32_t Predictor12_C(uint32_t left, const uint32_t* const top) {
+uint32_t VP8LPredictor12_C(uint32_t left, const uint32_t* const top) {
const uint32_t pred = ClampedAddSubtractFull(left, top[0], top[-1]);
return pred;
}
-static uint32_t Predictor13_C(uint32_t left, const uint32_t* const top) {
+uint32_t VP8LPredictor13_C(uint32_t left, const uint32_t* const top) {
const uint32_t pred = ClampedAddSubtractHalf(left, top[0], top[-1]);
return pred;
}
@@ -182,18 +182,18 @@ static void PredictorAdd1_C(const uint32_t* in, const uint32_t* upper,
out[i] = left = VP8LAddPixels(in[i], left);
}
}
-GENERATE_PREDICTOR_ADD(Predictor2_C, PredictorAdd2_C)
-GENERATE_PREDICTOR_ADD(Predictor3_C, PredictorAdd3_C)
-GENERATE_PREDICTOR_ADD(Predictor4_C, PredictorAdd4_C)
-GENERATE_PREDICTOR_ADD(Predictor5_C, PredictorAdd5_C)
-GENERATE_PREDICTOR_ADD(Predictor6_C, PredictorAdd6_C)
-GENERATE_PREDICTOR_ADD(Predictor7_C, PredictorAdd7_C)
-GENERATE_PREDICTOR_ADD(Predictor8_C, PredictorAdd8_C)
-GENERATE_PREDICTOR_ADD(Predictor9_C, PredictorAdd9_C)
-GENERATE_PREDICTOR_ADD(Predictor10_C, PredictorAdd10_C)
-GENERATE_PREDICTOR_ADD(Predictor11_C, PredictorAdd11_C)
-GENERATE_PREDICTOR_ADD(Predictor12_C, PredictorAdd12_C)
-GENERATE_PREDICTOR_ADD(Predictor13_C, PredictorAdd13_C)
+GENERATE_PREDICTOR_ADD(VP8LPredictor2_C, PredictorAdd2_C)
+GENERATE_PREDICTOR_ADD(VP8LPredictor3_C, PredictorAdd3_C)
+GENERATE_PREDICTOR_ADD(VP8LPredictor4_C, PredictorAdd4_C)
+GENERATE_PREDICTOR_ADD(VP8LPredictor5_C, PredictorAdd5_C)
+GENERATE_PREDICTOR_ADD(VP8LPredictor6_C, PredictorAdd6_C)
+GENERATE_PREDICTOR_ADD(VP8LPredictor7_C, PredictorAdd7_C)
+GENERATE_PREDICTOR_ADD(VP8LPredictor8_C, PredictorAdd8_C)
+GENERATE_PREDICTOR_ADD(VP8LPredictor9_C, PredictorAdd9_C)
+GENERATE_PREDICTOR_ADD(VP8LPredictor10_C, PredictorAdd10_C)
+GENERATE_PREDICTOR_ADD(VP8LPredictor11_C, PredictorAdd11_C)
+GENERATE_PREDICTOR_ADD(VP8LPredictor12_C, PredictorAdd12_C)
+GENERATE_PREDICTOR_ADD(VP8LPredictor13_C, PredictorAdd13_C)
//------------------------------------------------------------------------------
@@ -562,7 +562,6 @@ VP8LPredictorFunc VP8LPredictors[16];
// exposed plain-C implementations
VP8LPredictorAddSubFunc VP8LPredictorsAdd_C[16];
-VP8LPredictorFunc VP8LPredictors_C[16];
VP8LTransformColorInverseFunc VP8LTransformColorInverse;
@@ -576,6 +575,7 @@ VP8LMapARGBFunc VP8LMapColor32b;
VP8LMapAlphaFunc VP8LMapColor8b;
extern void VP8LDspInitSSE2(void);
+extern void VP8LDspInitSSE41(void);
extern void VP8LDspInitNEON(void);
extern void VP8LDspInitMIPSdspR2(void);
extern void VP8LDspInitMSA(void);
@@ -600,8 +600,7 @@ extern void VP8LDspInitMSA(void);
} while (0);
WEBP_DSP_INIT_FUNC(VP8LDspInit) {
- COPY_PREDICTOR_ARRAY(Predictor, VP8LPredictors)
- COPY_PREDICTOR_ARRAY(Predictor, VP8LPredictors_C)
+ COPY_PREDICTOR_ARRAY(VP8LPredictor, VP8LPredictors)
COPY_PREDICTOR_ARRAY(PredictorAdd, VP8LPredictorsAdd)
COPY_PREDICTOR_ARRAY(PredictorAdd, VP8LPredictorsAdd_C)
@@ -623,9 +622,14 @@ WEBP_DSP_INIT_FUNC(VP8LDspInit) {
// If defined, use CPUInfo() to overwrite some pointers with faster versions.
if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_SSE2)
+#if defined(WEBP_HAVE_SSE2)
if (VP8GetCPUInfo(kSSE2)) {
VP8LDspInitSSE2();
+#if defined(WEBP_HAVE_SSE41)
+ if (VP8GetCPUInfo(kSSE4_1)) {
+ VP8LDspInitSSE41();
+ }
+#endif
}
#endif
#if defined(WEBP_USE_MIPS_DSP_R2)
@@ -640,7 +644,7 @@ WEBP_DSP_INIT_FUNC(VP8LDspInit) {
#endif
}
-#if defined(WEBP_USE_NEON)
+#if defined(WEBP_HAVE_NEON)
if (WEBP_NEON_OMIT_C_CODE ||
(VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) {
VP8LDspInitNEON();
diff --git a/thirdparty/libwebp/src/dsp/lossless.h b/thirdparty/libwebp/src/dsp/lossless.h
index f709cc86b2..ebd316d1ed 100644
--- a/thirdparty/libwebp/src/dsp/lossless.h
+++ b/thirdparty/libwebp/src/dsp/lossless.h
@@ -30,7 +30,22 @@ extern "C" {
typedef uint32_t (*VP8LPredictorFunc)(uint32_t left, const uint32_t* const top);
extern VP8LPredictorFunc VP8LPredictors[16];
-extern VP8LPredictorFunc VP8LPredictors_C[16];
+
+uint32_t VP8LPredictor0_C(uint32_t left, const uint32_t* const top);
+uint32_t VP8LPredictor1_C(uint32_t left, const uint32_t* const top);
+uint32_t VP8LPredictor2_C(uint32_t left, const uint32_t* const top);
+uint32_t VP8LPredictor3_C(uint32_t left, const uint32_t* const top);
+uint32_t VP8LPredictor4_C(uint32_t left, const uint32_t* const top);
+uint32_t VP8LPredictor5_C(uint32_t left, const uint32_t* const top);
+uint32_t VP8LPredictor6_C(uint32_t left, const uint32_t* const top);
+uint32_t VP8LPredictor7_C(uint32_t left, const uint32_t* const top);
+uint32_t VP8LPredictor8_C(uint32_t left, const uint32_t* const top);
+uint32_t VP8LPredictor9_C(uint32_t left, const uint32_t* const top);
+uint32_t VP8LPredictor10_C(uint32_t left, const uint32_t* const top);
+uint32_t VP8LPredictor11_C(uint32_t left, const uint32_t* const top);
+uint32_t VP8LPredictor12_C(uint32_t left, const uint32_t* const top);
+uint32_t VP8LPredictor13_C(uint32_t left, const uint32_t* const top);
+
// These Add/Sub function expects upper[-1] and out[-1] to be readable.
typedef void (*VP8LPredictorAddSubFunc)(const uint32_t* in,
const uint32_t* upper, int num_pixels,
diff --git a/thirdparty/libwebp/src/dsp/lossless_common.h b/thirdparty/libwebp/src/dsp/lossless_common.h
index 9c2ebe6809..96a106f9ee 100644
--- a/thirdparty/libwebp/src/dsp/lossless_common.h
+++ b/thirdparty/libwebp/src/dsp/lossless_common.h
@@ -184,19 +184,6 @@ static void PREDICTOR_ADD(const uint32_t* in, const uint32_t* upper, \
} \
}
-// It subtracts the prediction from the input pixel and stores the residual
-// in the output pixel.
-#define GENERATE_PREDICTOR_SUB(PREDICTOR, PREDICTOR_SUB) \
-static void PREDICTOR_SUB(const uint32_t* in, const uint32_t* upper, \
- int num_pixels, uint32_t* out) { \
- int x; \
- assert(upper != NULL); \
- for (x = 0; x < num_pixels; ++x) { \
- const uint32_t pred = (PREDICTOR)(in[x - 1], upper + x); \
- out[x] = VP8LSubPixels(in[x], pred); \
- } \
-}
-
#ifdef __cplusplus
} // extern "C"
#endif
diff --git a/thirdparty/libwebp/src/dsp/lossless_enc.c b/thirdparty/libwebp/src/dsp/lossless_enc.c
index 9c36055afc..c3e8537ade 100644
--- a/thirdparty/libwebp/src/dsp/lossless_enc.c
+++ b/thirdparty/libwebp/src/dsp/lossless_enc.c
@@ -329,6 +329,15 @@ const uint8_t kPrefixEncodeExtraBitsValue[PREFIX_LOOKUP_IDX_MAX] = {
static float FastSLog2Slow_C(uint32_t v) {
assert(v >= LOG_LOOKUP_IDX_MAX);
if (v < APPROX_LOG_WITH_CORRECTION_MAX) {
+#if !defined(WEBP_HAVE_SLOW_CLZ_CTZ)
+ // use clz if available
+ const int log_cnt = BitsLog2Floor(v) - 7;
+ const uint32_t y = 1 << log_cnt;
+ int correction = 0;
+ const float v_f = (float)v;
+ const uint32_t orig_v = v;
+ v >>= log_cnt;
+#else
int log_cnt = 0;
uint32_t y = 1;
int correction = 0;
@@ -339,6 +348,7 @@ static float FastSLog2Slow_C(uint32_t v) {
v = v >> 1;
y = y << 1;
} while (v >= LOG_LOOKUP_IDX_MAX);
+#endif
// vf = (2^log_cnt) * Xf; where y = 2^log_cnt and Xf < 256
// Xf = floor(Xf) * (1 + (v % y) / v)
// log2(Xf) = log2(floor(Xf)) + log2(1 + (v % y) / v)
@@ -355,6 +365,14 @@ static float FastSLog2Slow_C(uint32_t v) {
static float FastLog2Slow_C(uint32_t v) {
assert(v >= LOG_LOOKUP_IDX_MAX);
if (v < APPROX_LOG_WITH_CORRECTION_MAX) {
+#if !defined(WEBP_HAVE_SLOW_CLZ_CTZ)
+ // use clz if available
+ const int log_cnt = BitsLog2Floor(v) - 7;
+ const uint32_t y = 1 << log_cnt;
+ const uint32_t orig_v = v;
+ double log_2;
+ v >>= log_cnt;
+#else
int log_cnt = 0;
uint32_t y = 1;
const uint32_t orig_v = v;
@@ -364,6 +382,7 @@ static float FastLog2Slow_C(uint32_t v) {
v = v >> 1;
y = y << 1;
} while (v >= LOG_LOOKUP_IDX_MAX);
+#endif
log_2 = kLog2Table[v] + log_cnt;
if (orig_v >= APPROX_LOG_MAX) {
// Since the division is still expensive, add this correction factor only
@@ -702,140 +721,6 @@ void VP8LHistogramAdd(const VP8LHistogram* const a,
//------------------------------------------------------------------------------
// Image transforms.
-static WEBP_INLINE uint32_t Average2(uint32_t a0, uint32_t a1) {
- return (((a0 ^ a1) & 0xfefefefeu) >> 1) + (a0 & a1);
-}
-
-static WEBP_INLINE uint32_t Average3(uint32_t a0, uint32_t a1, uint32_t a2) {
- return Average2(Average2(a0, a2), a1);
-}
-
-static WEBP_INLINE uint32_t Average4(uint32_t a0, uint32_t a1,
- uint32_t a2, uint32_t a3) {
- return Average2(Average2(a0, a1), Average2(a2, a3));
-}
-
-static WEBP_INLINE uint32_t Clip255(uint32_t a) {
- if (a < 256) {
- return a;
- }
- // return 0, when a is a negative integer.
- // return 255, when a is positive.
- return ~a >> 24;
-}
-
-static WEBP_INLINE int AddSubtractComponentFull(int a, int b, int c) {
- return Clip255(a + b - c);
-}
-
-static WEBP_INLINE uint32_t ClampedAddSubtractFull(uint32_t c0, uint32_t c1,
- uint32_t c2) {
- const int a = AddSubtractComponentFull(c0 >> 24, c1 >> 24, c2 >> 24);
- const int r = AddSubtractComponentFull((c0 >> 16) & 0xff,
- (c1 >> 16) & 0xff,
- (c2 >> 16) & 0xff);
- const int g = AddSubtractComponentFull((c0 >> 8) & 0xff,
- (c1 >> 8) & 0xff,
- (c2 >> 8) & 0xff);
- const int b = AddSubtractComponentFull(c0 & 0xff, c1 & 0xff, c2 & 0xff);
- return ((uint32_t)a << 24) | (r << 16) | (g << 8) | b;
-}
-
-static WEBP_INLINE int AddSubtractComponentHalf(int a, int b) {
- return Clip255(a + (a - b) / 2);
-}
-
-static WEBP_INLINE uint32_t ClampedAddSubtractHalf(uint32_t c0, uint32_t c1,
- uint32_t c2) {
- const uint32_t ave = Average2(c0, c1);
- const int a = AddSubtractComponentHalf(ave >> 24, c2 >> 24);
- const int r = AddSubtractComponentHalf((ave >> 16) & 0xff, (c2 >> 16) & 0xff);
- const int g = AddSubtractComponentHalf((ave >> 8) & 0xff, (c2 >> 8) & 0xff);
- const int b = AddSubtractComponentHalf((ave >> 0) & 0xff, (c2 >> 0) & 0xff);
- return ((uint32_t)a << 24) | (r << 16) | (g << 8) | b;
-}
-
-// gcc-4.9 on ARM generates incorrect code in Select() when Sub3() is inlined.
-#if defined(__arm__) && \
- (LOCAL_GCC_VERSION == 0x409 || LOCAL_GCC_VERSION == 0x408)
-# define LOCAL_INLINE __attribute__ ((noinline))
-#else
-# define LOCAL_INLINE WEBP_INLINE
-#endif
-
-static LOCAL_INLINE int Sub3(int a, int b, int c) {
- const int pb = b - c;
- const int pa = a - c;
- return abs(pb) - abs(pa);
-}
-
-#undef LOCAL_INLINE
-
-static WEBP_INLINE uint32_t Select(uint32_t a, uint32_t b, uint32_t c) {
- const int pa_minus_pb =
- Sub3((a >> 24) , (b >> 24) , (c >> 24) ) +
- Sub3((a >> 16) & 0xff, (b >> 16) & 0xff, (c >> 16) & 0xff) +
- Sub3((a >> 8) & 0xff, (b >> 8) & 0xff, (c >> 8) & 0xff) +
- Sub3((a ) & 0xff, (b ) & 0xff, (c ) & 0xff);
- return (pa_minus_pb <= 0) ? a : b;
-}
-
-//------------------------------------------------------------------------------
-// Predictors
-
-static uint32_t Predictor2(uint32_t left, const uint32_t* const top) {
- (void)left;
- return top[0];
-}
-static uint32_t Predictor3(uint32_t left, const uint32_t* const top) {
- (void)left;
- return top[1];
-}
-static uint32_t Predictor4(uint32_t left, const uint32_t* const top) {
- (void)left;
- return top[-1];
-}
-static uint32_t Predictor5(uint32_t left, const uint32_t* const top) {
- const uint32_t pred = Average3(left, top[0], top[1]);
- return pred;
-}
-static uint32_t Predictor6(uint32_t left, const uint32_t* const top) {
- const uint32_t pred = Average2(left, top[-1]);
- return pred;
-}
-static uint32_t Predictor7(uint32_t left, const uint32_t* const top) {
- const uint32_t pred = Average2(left, top[0]);
- return pred;
-}
-static uint32_t Predictor8(uint32_t left, const uint32_t* const top) {
- const uint32_t pred = Average2(top[-1], top[0]);
- (void)left;
- return pred;
-}
-static uint32_t Predictor9(uint32_t left, const uint32_t* const top) {
- const uint32_t pred = Average2(top[0], top[1]);
- (void)left;
- return pred;
-}
-static uint32_t Predictor10(uint32_t left, const uint32_t* const top) {
- const uint32_t pred = Average4(left, top[-1], top[0], top[1]);
- return pred;
-}
-static uint32_t Predictor11(uint32_t left, const uint32_t* const top) {
- const uint32_t pred = Select(top[0], left, top[-1]);
- return pred;
-}
-static uint32_t Predictor12(uint32_t left, const uint32_t* const top) {
- const uint32_t pred = ClampedAddSubtractFull(left, top[0], top[-1]);
- return pred;
-}
-static uint32_t Predictor13(uint32_t left, const uint32_t* const top) {
- const uint32_t pred = ClampedAddSubtractHalf(left, top[0], top[-1]);
- return pred;
-}
-
-//------------------------------------------------------------------------------
-
static void PredictorSub0_C(const uint32_t* in, const uint32_t* upper,
int num_pixels, uint32_t* out) {
int i;
@@ -850,18 +735,33 @@ static void PredictorSub1_C(const uint32_t* in, const uint32_t* upper,
(void)upper;
}
-GENERATE_PREDICTOR_SUB(Predictor2, PredictorSub2_C)
-GENERATE_PREDICTOR_SUB(Predictor3, PredictorSub3_C)
-GENERATE_PREDICTOR_SUB(Predictor4, PredictorSub4_C)
-GENERATE_PREDICTOR_SUB(Predictor5, PredictorSub5_C)
-GENERATE_PREDICTOR_SUB(Predictor6, PredictorSub6_C)
-GENERATE_PREDICTOR_SUB(Predictor7, PredictorSub7_C)
-GENERATE_PREDICTOR_SUB(Predictor8, PredictorSub8_C)
-GENERATE_PREDICTOR_SUB(Predictor9, PredictorSub9_C)
-GENERATE_PREDICTOR_SUB(Predictor10, PredictorSub10_C)
-GENERATE_PREDICTOR_SUB(Predictor11, PredictorSub11_C)
-GENERATE_PREDICTOR_SUB(Predictor12, PredictorSub12_C)
-GENERATE_PREDICTOR_SUB(Predictor13, PredictorSub13_C)
+// It subtracts the prediction from the input pixel and stores the residual
+// in the output pixel.
+#define GENERATE_PREDICTOR_SUB(PREDICTOR_I) \
+static void PredictorSub##PREDICTOR_I##_C(const uint32_t* in, \
+ const uint32_t* upper, \
+ int num_pixels, uint32_t* out) { \
+ int x; \
+ assert(upper != NULL); \
+ for (x = 0; x < num_pixels; ++x) { \
+ const uint32_t pred = \
+ VP8LPredictor##PREDICTOR_I##_C(in[x - 1], upper + x); \
+ out[x] = VP8LSubPixels(in[x], pred); \
+ } \
+}
+
+GENERATE_PREDICTOR_SUB(2)
+GENERATE_PREDICTOR_SUB(3)
+GENERATE_PREDICTOR_SUB(4)
+GENERATE_PREDICTOR_SUB(5)
+GENERATE_PREDICTOR_SUB(6)
+GENERATE_PREDICTOR_SUB(7)
+GENERATE_PREDICTOR_SUB(8)
+GENERATE_PREDICTOR_SUB(9)
+GENERATE_PREDICTOR_SUB(10)
+GENERATE_PREDICTOR_SUB(11)
+GENERATE_PREDICTOR_SUB(12)
+GENERATE_PREDICTOR_SUB(13)
//------------------------------------------------------------------------------
@@ -962,10 +862,10 @@ WEBP_DSP_INIT_FUNC(VP8LEncDspInit) {
// If defined, use CPUInfo() to overwrite some pointers with faster versions.
if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_SSE2)
+#if defined(WEBP_HAVE_SSE2)
if (VP8GetCPUInfo(kSSE2)) {
VP8LEncDspInitSSE2();
-#if defined(WEBP_USE_SSE41)
+#if defined(WEBP_HAVE_SSE41)
if (VP8GetCPUInfo(kSSE4_1)) {
VP8LEncDspInitSSE41();
}
@@ -989,7 +889,7 @@ WEBP_DSP_INIT_FUNC(VP8LEncDspInit) {
#endif
}
-#if defined(WEBP_USE_NEON)
+#if defined(WEBP_HAVE_NEON)
if (WEBP_NEON_OMIT_C_CODE ||
(VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) {
VP8LEncDspInitNEON();
diff --git a/thirdparty/libwebp/src/dsp/lossless_enc_sse2.c b/thirdparty/libwebp/src/dsp/lossless_enc_sse2.c
index e676f6fdc9..b2f83b871c 100644
--- a/thirdparty/libwebp/src/dsp/lossless_enc_sse2.c
+++ b/thirdparty/libwebp/src/dsp/lossless_enc_sse2.c
@@ -232,76 +232,55 @@ static void AddVectorEq_SSE2(const uint32_t* a, uint32_t* out, int size) {
//------------------------------------------------------------------------------
// Entropy
-// Checks whether the X or Y contribution is worth computing and adding.
-// Used in loop unrolling.
-#define ANALYZE_X_OR_Y(x_or_y, j) \
- do { \
- if ((x_or_y)[i + (j)] != 0) retval -= VP8LFastSLog2((x_or_y)[i + (j)]); \
- } while (0)
-
-// Checks whether the X + Y contribution is worth computing and adding.
-// Used in loop unrolling.
-#define ANALYZE_XY(j) \
- do { \
- if (tmp[j] != 0) { \
- retval -= VP8LFastSLog2(tmp[j]); \
- ANALYZE_X_OR_Y(X, j); \
- } \
- } while (0)
+// TODO(https://crbug.com/webp/499): this function produces different results
+// from the C code due to use of double/float resulting in output differences
+// when compared to -noasm.
+#if !(defined(WEBP_HAVE_SLOW_CLZ_CTZ) || defined(__i386__) || defined(_M_IX86))
static float CombinedShannonEntropy_SSE2(const int X[256], const int Y[256]) {
int i;
double retval = 0.;
- int sumX, sumXY;
- int32_t tmp[4];
- __m128i zero = _mm_setzero_si128();
- // Sums up X + Y, 4 ints at a time (and will merge it at the end for sumXY).
- __m128i sumXY_128 = zero;
- __m128i sumX_128 = zero;
-
- for (i = 0; i < 256; i += 4) {
- const __m128i x = _mm_loadu_si128((const __m128i*)(X + i));
- const __m128i y = _mm_loadu_si128((const __m128i*)(Y + i));
-
- // Check if any X is non-zero: this actually provides a speedup as X is
- // usually sparse.
- if (_mm_movemask_epi8(_mm_cmpeq_epi32(x, zero)) != 0xFFFF) {
- const __m128i xy_128 = _mm_add_epi32(x, y);
- sumXY_128 = _mm_add_epi32(sumXY_128, xy_128);
-
- sumX_128 = _mm_add_epi32(sumX_128, x);
-
- // Analyze the different X + Y.
- _mm_storeu_si128((__m128i*)tmp, xy_128);
-
- ANALYZE_XY(0);
- ANALYZE_XY(1);
- ANALYZE_XY(2);
- ANALYZE_XY(3);
- } else {
- // X is fully 0, so only deal with Y.
- sumXY_128 = _mm_add_epi32(sumXY_128, y);
-
- ANALYZE_X_OR_Y(Y, 0);
- ANALYZE_X_OR_Y(Y, 1);
- ANALYZE_X_OR_Y(Y, 2);
- ANALYZE_X_OR_Y(Y, 3);
+ int sumX = 0, sumXY = 0;
+ const __m128i zero = _mm_setzero_si128();
+
+ for (i = 0; i < 256; i += 16) {
+ const __m128i x0 = _mm_loadu_si128((const __m128i*)(X + i + 0));
+ const __m128i y0 = _mm_loadu_si128((const __m128i*)(Y + i + 0));
+ const __m128i x1 = _mm_loadu_si128((const __m128i*)(X + i + 4));
+ const __m128i y1 = _mm_loadu_si128((const __m128i*)(Y + i + 4));
+ const __m128i x2 = _mm_loadu_si128((const __m128i*)(X + i + 8));
+ const __m128i y2 = _mm_loadu_si128((const __m128i*)(Y + i + 8));
+ const __m128i x3 = _mm_loadu_si128((const __m128i*)(X + i + 12));
+ const __m128i y3 = _mm_loadu_si128((const __m128i*)(Y + i + 12));
+ const __m128i x4 = _mm_packs_epi16(_mm_packs_epi32(x0, x1),
+ _mm_packs_epi32(x2, x3));
+ const __m128i y4 = _mm_packs_epi16(_mm_packs_epi32(y0, y1),
+ _mm_packs_epi32(y2, y3));
+ const int32_t mx = _mm_movemask_epi8(_mm_cmpgt_epi8(x4, zero));
+ int32_t my = _mm_movemask_epi8(_mm_cmpgt_epi8(y4, zero)) | mx;
+ while (my) {
+ const int32_t j = BitsCtz(my);
+ int xy;
+ if ((mx >> j) & 1) {
+ const int x = X[i + j];
+ sumXY += x;
+ retval -= VP8LFastSLog2(x);
+ }
+ xy = X[i + j] + Y[i + j];
+ sumX += xy;
+ retval -= VP8LFastSLog2(xy);
+ my &= my - 1;
}
}
-
- // Sum up sumX_128 to get sumX.
- _mm_storeu_si128((__m128i*)tmp, sumX_128);
- sumX = tmp[3] + tmp[2] + tmp[1] + tmp[0];
-
- // Sum up sumXY_128 to get sumXY.
- _mm_storeu_si128((__m128i*)tmp, sumXY_128);
- sumXY = tmp[3] + tmp[2] + tmp[1] + tmp[0];
-
retval += VP8LFastSLog2(sumX) + VP8LFastSLog2(sumXY);
return (float)retval;
}
-#undef ANALYZE_X_OR_Y
-#undef ANALYZE_XY
+
+#else
+
+#define DONT_USE_COMBINED_SHANNON_ENTROPY_SSE2_FUNC // won't be faster
+
+#endif
//------------------------------------------------------------------------------
@@ -460,20 +439,22 @@ static void PredictorSub0_SSE2(const uint32_t* in, const uint32_t* upper,
(void)upper;
}
-#define GENERATE_PREDICTOR_1(X, IN) \
-static void PredictorSub##X##_SSE2(const uint32_t* in, const uint32_t* upper, \
- int num_pixels, uint32_t* out) { \
- int i; \
- for (i = 0; i + 4 <= num_pixels; i += 4) { \
- const __m128i src = _mm_loadu_si128((const __m128i*)&in[i]); \
- const __m128i pred = _mm_loadu_si128((const __m128i*)&(IN)); \
- const __m128i res = _mm_sub_epi8(src, pred); \
- _mm_storeu_si128((__m128i*)&out[i], res); \
- } \
- if (i != num_pixels) { \
- VP8LPredictorsSub_C[(X)](in + i, upper + i, num_pixels - i, out + i); \
- } \
-}
+#define GENERATE_PREDICTOR_1(X, IN) \
+ static void PredictorSub##X##_SSE2(const uint32_t* const in, \
+ const uint32_t* const upper, \
+ int num_pixels, uint32_t* const out) { \
+ int i; \
+ for (i = 0; i + 4 <= num_pixels; i += 4) { \
+ const __m128i src = _mm_loadu_si128((const __m128i*)&in[i]); \
+ const __m128i pred = _mm_loadu_si128((const __m128i*)&(IN)); \
+ const __m128i res = _mm_sub_epi8(src, pred); \
+ _mm_storeu_si128((__m128i*)&out[i], res); \
+ } \
+ if (i != num_pixels) { \
+ VP8LPredictorsSub_C[(X)](in + i, WEBP_OFFSET_PTR(upper, i), \
+ num_pixels - i, out + i); \
+ } \
+ }
GENERATE_PREDICTOR_1(1, in[i - 1]) // Predictor1: L
GENERATE_PREDICTOR_1(2, upper[i]) // Predictor2: T
@@ -657,7 +638,9 @@ WEBP_TSAN_IGNORE_FUNCTION void VP8LEncDspInitSSE2(void) {
VP8LCollectColorRedTransforms = CollectColorRedTransforms_SSE2;
VP8LAddVector = AddVector_SSE2;
VP8LAddVectorEq = AddVectorEq_SSE2;
+#if !defined(DONT_USE_COMBINED_SHANNON_ENTROPY_SSE2_FUNC)
VP8LCombinedShannonEntropy = CombinedShannonEntropy_SSE2;
+#endif
VP8LVectorMismatch = VectorMismatch_SSE2;
VP8LBundleColorMap = BundleColorMap_SSE2;
diff --git a/thirdparty/libwebp/src/dsp/lossless_enc_sse41.c b/thirdparty/libwebp/src/dsp/lossless_enc_sse41.c
index 719d8ed25e..ad358a6f25 100644
--- a/thirdparty/libwebp/src/dsp/lossless_enc_sse41.c
+++ b/thirdparty/libwebp/src/dsp/lossless_enc_sse41.c
@@ -44,46 +44,47 @@ static void SubtractGreenFromBlueAndRed_SSE41(uint32_t* argb_data,
//------------------------------------------------------------------------------
// Color Transform
-#define SPAN 8
+#define MK_CST_16(HI, LO) \
+ _mm_set1_epi32((int)(((uint32_t)(HI) << 16) | ((LO) & 0xffff)))
+
static void CollectColorBlueTransforms_SSE41(const uint32_t* argb, int stride,
int tile_width, int tile_height,
int green_to_blue, int red_to_blue,
int histo[]) {
- const __m128i mults_r = _mm_set1_epi16(CST_5b(red_to_blue));
- const __m128i mults_g = _mm_set1_epi16(CST_5b(green_to_blue));
- const __m128i mask_g = _mm_set1_epi16((short)0xff00); // green mask
- const __m128i mask_gb = _mm_set1_epi32(0xffff); // green/blue mask
- const __m128i mask_b = _mm_set1_epi16(0x00ff); // blue mask
- const __m128i shuffler_lo = _mm_setr_epi8(-1, 2, -1, 6, -1, 10, -1, 14, -1,
- -1, -1, -1, -1, -1, -1, -1);
- const __m128i shuffler_hi = _mm_setr_epi8(-1, -1, -1, -1, -1, -1, -1, -1, -1,
- 2, -1, 6, -1, 10, -1, 14);
- int y;
- for (y = 0; y < tile_height; ++y) {
- const uint32_t* const src = argb + y * stride;
- int i, x;
- for (x = 0; x + SPAN <= tile_width; x += SPAN) {
- uint16_t values[SPAN];
- const __m128i in0 = _mm_loadu_si128((__m128i*)&src[x + 0]);
- const __m128i in1 = _mm_loadu_si128((__m128i*)&src[x + SPAN / 2]);
- const __m128i r0 = _mm_shuffle_epi8(in0, shuffler_lo);
- const __m128i r1 = _mm_shuffle_epi8(in1, shuffler_hi);
- const __m128i r = _mm_or_si128(r0, r1); // r 0
- const __m128i gb0 = _mm_and_si128(in0, mask_gb);
- const __m128i gb1 = _mm_and_si128(in1, mask_gb);
- const __m128i gb = _mm_packus_epi32(gb0, gb1); // g b
- const __m128i g = _mm_and_si128(gb, mask_g); // g 0
- const __m128i A = _mm_mulhi_epi16(r, mults_r); // x dbr
- const __m128i B = _mm_mulhi_epi16(g, mults_g); // x dbg
- const __m128i C = _mm_sub_epi8(gb, B); // x b'
- const __m128i D = _mm_sub_epi8(C, A); // x b''
- const __m128i E = _mm_and_si128(D, mask_b); // 0 b''
- _mm_storeu_si128((__m128i*)values, E);
- for (i = 0; i < SPAN; ++i) ++histo[values[i]];
+ const __m128i mult =
+ MK_CST_16(CST_5b(red_to_blue) + 256,CST_5b(green_to_blue));
+ const __m128i perm =
+ _mm_setr_epi8(-1, 1, -1, 2, -1, 5, -1, 6, -1, 9, -1, 10, -1, 13, -1, 14);
+ if (tile_width >= 4) {
+ int y;
+ for (y = 0; y < tile_height; ++y) {
+ const uint32_t* const src = argb + y * stride;
+ const __m128i A1 = _mm_loadu_si128((const __m128i*)src);
+ const __m128i B1 = _mm_shuffle_epi8(A1, perm);
+ const __m128i C1 = _mm_mulhi_epi16(B1, mult);
+ const __m128i D1 = _mm_sub_epi16(A1, C1);
+ __m128i E = _mm_add_epi16(_mm_srli_epi32(D1, 16), D1);
+ int x;
+ for (x = 4; x + 4 <= tile_width; x += 4) {
+ const __m128i A2 = _mm_loadu_si128((const __m128i*)(src + x));
+ __m128i B2, C2, D2;
+ ++histo[_mm_extract_epi8(E, 0)];
+ B2 = _mm_shuffle_epi8(A2, perm);
+ ++histo[_mm_extract_epi8(E, 4)];
+ C2 = _mm_mulhi_epi16(B2, mult);
+ ++histo[_mm_extract_epi8(E, 8)];
+ D2 = _mm_sub_epi16(A2, C2);
+ ++histo[_mm_extract_epi8(E, 12)];
+ E = _mm_add_epi16(_mm_srli_epi32(D2, 16), D2);
+ }
+ ++histo[_mm_extract_epi8(E, 0)];
+ ++histo[_mm_extract_epi8(E, 4)];
+ ++histo[_mm_extract_epi8(E, 8)];
+ ++histo[_mm_extract_epi8(E, 12)];
}
}
{
- const int left_over = tile_width & (SPAN - 1);
+ const int left_over = tile_width & 3;
if (left_over > 0) {
VP8LCollectColorBlueTransforms_C(argb + tile_width - left_over, stride,
left_over, tile_height,
@@ -95,33 +96,37 @@ static void CollectColorBlueTransforms_SSE41(const uint32_t* argb, int stride,
static void CollectColorRedTransforms_SSE41(const uint32_t* argb, int stride,
int tile_width, int tile_height,
int green_to_red, int histo[]) {
- const __m128i mults_g = _mm_set1_epi16(CST_5b(green_to_red));
- const __m128i mask_g = _mm_set1_epi32(0x00ff00); // green mask
- const __m128i mask = _mm_set1_epi16(0xff);
-
- int y;
- for (y = 0; y < tile_height; ++y) {
- const uint32_t* const src = argb + y * stride;
- int i, x;
- for (x = 0; x + SPAN <= tile_width; x += SPAN) {
- uint16_t values[SPAN];
- const __m128i in0 = _mm_loadu_si128((__m128i*)&src[x + 0]);
- const __m128i in1 = _mm_loadu_si128((__m128i*)&src[x + SPAN / 2]);
- const __m128i g0 = _mm_and_si128(in0, mask_g); // 0 0 | g 0
- const __m128i g1 = _mm_and_si128(in1, mask_g);
- const __m128i g = _mm_packus_epi32(g0, g1); // g 0
- const __m128i A0 = _mm_srli_epi32(in0, 16); // 0 0 | x r
- const __m128i A1 = _mm_srli_epi32(in1, 16);
- const __m128i A = _mm_packus_epi32(A0, A1); // x r
- const __m128i B = _mm_mulhi_epi16(g, mults_g); // x dr
- const __m128i C = _mm_sub_epi8(A, B); // x r'
- const __m128i D = _mm_and_si128(C, mask); // 0 r'
- _mm_storeu_si128((__m128i*)values, D);
- for (i = 0; i < SPAN; ++i) ++histo[values[i]];
+
+ const __m128i mult = MK_CST_16(0, CST_5b(green_to_red));
+ const __m128i mask_g = _mm_set1_epi32(0x0000ff00);
+ if (tile_width >= 4) {
+ int y;
+ for (y = 0; y < tile_height; ++y) {
+ const uint32_t* const src = argb + y * stride;
+ const __m128i A1 = _mm_loadu_si128((const __m128i*)src);
+ const __m128i B1 = _mm_and_si128(A1, mask_g);
+ const __m128i C1 = _mm_madd_epi16(B1, mult);
+ __m128i D = _mm_sub_epi16(A1, C1);
+ int x;
+ for (x = 4; x + 4 <= tile_width; x += 4) {
+ const __m128i A2 = _mm_loadu_si128((const __m128i*)(src + x));
+ __m128i B2, C2;
+ ++histo[_mm_extract_epi8(D, 2)];
+ B2 = _mm_and_si128(A2, mask_g);
+ ++histo[_mm_extract_epi8(D, 6)];
+ C2 = _mm_madd_epi16(B2, mult);
+ ++histo[_mm_extract_epi8(D, 10)];
+ ++histo[_mm_extract_epi8(D, 14)];
+ D = _mm_sub_epi16(A2, C2);
+ }
+ ++histo[_mm_extract_epi8(D, 2)];
+ ++histo[_mm_extract_epi8(D, 6)];
+ ++histo[_mm_extract_epi8(D, 10)];
+ ++histo[_mm_extract_epi8(D, 14)];
}
}
{
- const int left_over = tile_width & (SPAN - 1);
+ const int left_over = tile_width & 3;
if (left_over > 0) {
VP8LCollectColorRedTransforms_C(argb + tile_width - left_over, stride,
left_over, tile_height, green_to_red,
@@ -130,6 +135,8 @@ static void CollectColorRedTransforms_SSE41(const uint32_t* argb, int stride,
}
}
+#undef MK_CST_16
+
//------------------------------------------------------------------------------
// Entry point
diff --git a/thirdparty/libwebp/src/dsp/lossless_sse2.c b/thirdparty/libwebp/src/dsp/lossless_sse2.c
index aef0cee1b3..3a0eb440db 100644
--- a/thirdparty/libwebp/src/dsp/lossless_sse2.c
+++ b/thirdparty/libwebp/src/dsp/lossless_sse2.c
@@ -18,7 +18,6 @@
#include "src/dsp/common_sse2.h"
#include "src/dsp/lossless.h"
#include "src/dsp/lossless_common.h"
-#include <assert.h>
#include <emmintrin.h>
//------------------------------------------------------------------------------
diff --git a/thirdparty/libwebp/src/dsp/lossless_sse41.c b/thirdparty/libwebp/src/dsp/lossless_sse41.c
new file mode 100644
index 0000000000..b0d6daa7fe
--- /dev/null
+++ b/thirdparty/libwebp/src/dsp/lossless_sse41.c
@@ -0,0 +1,132 @@
+// Copyright 2021 Google Inc. All Rights Reserved.
+//
+// Use of this source code is governed by a BSD-style license
+// that can be found in the COPYING file in the root of the source
+// tree. An additional intellectual property rights grant can be found
+// in the file PATENTS. All contributing project authors may
+// be found in the AUTHORS file in the root of the source tree.
+// -----------------------------------------------------------------------------
+//
+// SSE41 variant of methods for lossless decoder
+
+#include "src/dsp/dsp.h"
+
+#if defined(WEBP_USE_SSE41)
+
+#include "src/dsp/common_sse41.h"
+#include "src/dsp/lossless.h"
+#include "src/dsp/lossless_common.h"
+
+//------------------------------------------------------------------------------
+// Color-space conversion functions
+
+static void TransformColorInverse_SSE41(const VP8LMultipliers* const m,
+ const uint32_t* const src,
+ int num_pixels, uint32_t* dst) {
+// sign-extended multiplying constants, pre-shifted by 5.
+#define CST(X) (((int16_t)(m->X << 8)) >> 5) // sign-extend
+ const __m128i mults_rb = _mm_set1_epi32((uint32_t)CST(green_to_red_) << 16 |
+ (CST(green_to_blue_) & 0xffff));
+ const __m128i mults_b2 = _mm_set1_epi32(CST(red_to_blue_));
+#undef CST
+ const __m128i mask_ag = _mm_set1_epi32(0xff00ff00);
+ const __m128i perm1 = _mm_setr_epi8(-1, 1, -1, 1, -1, 5, -1, 5,
+ -1, 9, -1, 9, -1, 13, -1, 13);
+ const __m128i perm2 = _mm_setr_epi8(-1, 2, -1, -1, -1, 6, -1, -1,
+ -1, 10, -1, -1, -1, 14, -1, -1);
+ int i;
+ for (i = 0; i + 4 <= num_pixels; i += 4) {
+ const __m128i A = _mm_loadu_si128((const __m128i*)(src + i));
+ const __m128i B = _mm_shuffle_epi8(A, perm1); // argb -> g0g0
+ const __m128i C = _mm_mulhi_epi16(B, mults_rb);
+ const __m128i D = _mm_add_epi8(A, C);
+ const __m128i E = _mm_shuffle_epi8(D, perm2);
+ const __m128i F = _mm_mulhi_epi16(E, mults_b2);
+ const __m128i G = _mm_add_epi8(D, F);
+ const __m128i out = _mm_blendv_epi8(G, A, mask_ag);
+ _mm_storeu_si128((__m128i*)&dst[i], out);
+ }
+ // Fall-back to C-version for left-overs.
+ if (i != num_pixels) {
+ VP8LTransformColorInverse_C(m, src + i, num_pixels - i, dst + i);
+ }
+}
+
+//------------------------------------------------------------------------------
+
+#define ARGB_TO_RGB_SSE41 do { \
+ while (num_pixels >= 16) { \
+ const __m128i in0 = _mm_loadu_si128(in + 0); \
+ const __m128i in1 = _mm_loadu_si128(in + 1); \
+ const __m128i in2 = _mm_loadu_si128(in + 2); \
+ const __m128i in3 = _mm_loadu_si128(in + 3); \
+ const __m128i a0 = _mm_shuffle_epi8(in0, perm0); \
+ const __m128i a1 = _mm_shuffle_epi8(in1, perm1); \
+ const __m128i a2 = _mm_shuffle_epi8(in2, perm2); \
+ const __m128i a3 = _mm_shuffle_epi8(in3, perm3); \
+ const __m128i b0 = _mm_blend_epi16(a0, a1, 0xc0); \
+ const __m128i b1 = _mm_blend_epi16(a1, a2, 0xf0); \
+ const __m128i b2 = _mm_blend_epi16(a2, a3, 0xfc); \
+ _mm_storeu_si128(out + 0, b0); \
+ _mm_storeu_si128(out + 1, b1); \
+ _mm_storeu_si128(out + 2, b2); \
+ in += 4; \
+ out += 3; \
+ num_pixels -= 16; \
+ } \
+} while (0)
+
+static void ConvertBGRAToRGB_SSE41(const uint32_t* src, int num_pixels,
+ uint8_t* dst) {
+ const __m128i* in = (const __m128i*)src;
+ __m128i* out = (__m128i*)dst;
+ const __m128i perm0 = _mm_setr_epi8(2, 1, 0, 6, 5, 4, 10, 9,
+ 8, 14, 13, 12, -1, -1, -1, -1);
+ const __m128i perm1 = _mm_shuffle_epi32(perm0, 0x39);
+ const __m128i perm2 = _mm_shuffle_epi32(perm0, 0x4e);
+ const __m128i perm3 = _mm_shuffle_epi32(perm0, 0x93);
+
+ ARGB_TO_RGB_SSE41;
+
+ // left-overs
+ if (num_pixels > 0) {
+ VP8LConvertBGRAToRGB_C((const uint32_t*)in, num_pixels, (uint8_t*)out);
+ }
+}
+
+static void ConvertBGRAToBGR_SSE41(const uint32_t* src,
+ int num_pixels, uint8_t* dst) {
+ const __m128i* in = (const __m128i*)src;
+ __m128i* out = (__m128i*)dst;
+ const __m128i perm0 = _mm_setr_epi8(0, 1, 2, 4, 5, 6, 8, 9, 10,
+ 12, 13, 14, -1, -1, -1, -1);
+ const __m128i perm1 = _mm_shuffle_epi32(perm0, 0x39);
+ const __m128i perm2 = _mm_shuffle_epi32(perm0, 0x4e);
+ const __m128i perm3 = _mm_shuffle_epi32(perm0, 0x93);
+
+ ARGB_TO_RGB_SSE41;
+
+ // left-overs
+ if (num_pixels > 0) {
+ VP8LConvertBGRAToBGR_C((const uint32_t*)in, num_pixels, (uint8_t*)out);
+ }
+}
+
+#undef ARGB_TO_RGB_SSE41
+
+//------------------------------------------------------------------------------
+// Entry point
+
+extern void VP8LDspInitSSE41(void);
+
+WEBP_TSAN_IGNORE_FUNCTION void VP8LDspInitSSE41(void) {
+ VP8LTransformColorInverse = TransformColorInverse_SSE41;
+ VP8LConvertBGRAToRGB = ConvertBGRAToRGB_SSE41;
+ VP8LConvertBGRAToBGR = ConvertBGRAToBGR_SSE41;
+}
+
+#else // !WEBP_USE_SSE41
+
+WEBP_DSP_INIT_STUB(VP8LDspInitSSE41)
+
+#endif // WEBP_USE_SSE41
diff --git a/thirdparty/libwebp/src/dsp/rescaler.c b/thirdparty/libwebp/src/dsp/rescaler.c
index c5a01e82df..14620ce4f1 100644
--- a/thirdparty/libwebp/src/dsp/rescaler.c
+++ b/thirdparty/libwebp/src/dsp/rescaler.c
@@ -38,8 +38,9 @@ void WebPRescalerImportRowExpand_C(WebPRescaler* const wrk,
int x_out = channel;
// simple bilinear interpolation
int accum = wrk->x_add;
- int left = src[x_in];
- int right = (wrk->src_width > 1) ? src[x_in + x_stride] : left;
+ rescaler_t left = (rescaler_t)src[x_in];
+ rescaler_t right =
+ (wrk->src_width > 1) ? (rescaler_t)src[x_in + x_stride] : left;
x_in += x_stride;
while (1) {
wrk->frow[x_out] = right * wrk->x_add + (left - right) * accum;
@@ -50,7 +51,7 @@ void WebPRescalerImportRowExpand_C(WebPRescaler* const wrk,
left = right;
x_in += x_stride;
assert(x_in < wrk->src_width * x_stride);
- right = src[x_in];
+ right = (rescaler_t)src[x_in];
accum += wrk->x_add;
}
}
@@ -213,7 +214,7 @@ WEBP_DSP_INIT_FUNC(WebPRescalerDspInit) {
WebPRescalerImportRowShrink = WebPRescalerImportRowShrink_C;
if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_SSE2)
+#if defined(WEBP_HAVE_SSE2)
if (VP8GetCPUInfo(kSSE2)) {
WebPRescalerDspInitSSE2();
}
@@ -235,7 +236,7 @@ WEBP_DSP_INIT_FUNC(WebPRescalerDspInit) {
#endif
}
-#if defined(WEBP_USE_NEON)
+#if defined(WEBP_HAVE_NEON)
if (WEBP_NEON_OMIT_C_CODE ||
(VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) {
WebPRescalerDspInitNEON();
diff --git a/thirdparty/libwebp/src/dsp/ssim.c b/thirdparty/libwebp/src/dsp/ssim.c
index 989ce8254c..f85c2e6e5b 100644
--- a/thirdparty/libwebp/src/dsp/ssim.c
+++ b/thirdparty/libwebp/src/dsp/ssim.c
@@ -150,7 +150,7 @@ WEBP_DSP_INIT_FUNC(VP8SSIMDspInit) {
#endif
if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_SSE2)
+#if defined(WEBP_HAVE_SSE2)
if (VP8GetCPUInfo(kSSE2)) {
VP8SSIMDspInitSSE2();
}
diff --git a/thirdparty/libwebp/src/dsp/upsampling.c b/thirdparty/libwebp/src/dsp/upsampling.c
index 9b60da5bbb..87f771f3eb 100644
--- a/thirdparty/libwebp/src/dsp/upsampling.c
+++ b/thirdparty/libwebp/src/dsp/upsampling.c
@@ -233,12 +233,12 @@ WEBP_DSP_INIT_FUNC(WebPInitYUV444Converters) {
WebPYUV444Converters[MODE_rgbA_4444] = WebPYuv444ToRgba4444_C;
if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_SSE2)
+#if defined(WEBP_HAVE_SSE2)
if (VP8GetCPUInfo(kSSE2)) {
WebPInitYUV444ConvertersSSE2();
}
#endif
-#if defined(WEBP_USE_SSE41)
+#if defined(WEBP_HAVE_SSE41)
if (VP8GetCPUInfo(kSSE4_1)) {
WebPInitYUV444ConvertersSSE41();
}
@@ -278,12 +278,12 @@ WEBP_DSP_INIT_FUNC(WebPInitUpsamplers) {
// If defined, use CPUInfo() to overwrite some pointers with faster versions.
if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_SSE2)
+#if defined(WEBP_HAVE_SSE2)
if (VP8GetCPUInfo(kSSE2)) {
WebPInitUpsamplersSSE2();
}
#endif
-#if defined(WEBP_USE_SSE41)
+#if defined(WEBP_HAVE_SSE41)
if (VP8GetCPUInfo(kSSE4_1)) {
WebPInitUpsamplersSSE41();
}
@@ -300,7 +300,7 @@ WEBP_DSP_INIT_FUNC(WebPInitUpsamplers) {
#endif
}
-#if defined(WEBP_USE_NEON)
+#if defined(WEBP_HAVE_NEON)
if (WEBP_NEON_OMIT_C_CODE ||
(VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) {
WebPInitUpsamplersNEON();
diff --git a/thirdparty/libwebp/src/dsp/yuv.c b/thirdparty/libwebp/src/dsp/yuv.c
index 14e67fc28e..48466f8b11 100644
--- a/thirdparty/libwebp/src/dsp/yuv.c
+++ b/thirdparty/libwebp/src/dsp/yuv.c
@@ -90,16 +90,16 @@ WEBP_DSP_INIT_FUNC(WebPInitSamplers) {
// If defined, use CPUInfo() to overwrite some pointers with faster versions.
if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_SSE2)
+#if defined(WEBP_HAVE_SSE2)
if (VP8GetCPUInfo(kSSE2)) {
WebPInitSamplersSSE2();
}
-#endif // WEBP_USE_SSE2
-#if defined(WEBP_USE_SSE41)
+#endif // WEBP_HAVE_SSE2
+#if defined(WEBP_HAVE_SSE41)
if (VP8GetCPUInfo(kSSE4_1)) {
WebPInitSamplersSSE41();
}
-#endif // WEBP_USE_SSE41
+#endif // WEBP_HAVE_SSE41
#if defined(WEBP_USE_MIPS32)
if (VP8GetCPUInfo(kMIPS32)) {
WebPInitSamplersMIPS32();
@@ -276,26 +276,26 @@ WEBP_DSP_INIT_FUNC(WebPInitConvertARGBToYUV) {
#endif
if (VP8GetCPUInfo != NULL) {
-#if defined(WEBP_USE_SSE2)
+#if defined(WEBP_HAVE_SSE2)
if (VP8GetCPUInfo(kSSE2)) {
WebPInitConvertARGBToYUVSSE2();
WebPInitSharpYUVSSE2();
}
-#endif // WEBP_USE_SSE2
-#if defined(WEBP_USE_SSE41)
+#endif // WEBP_HAVE_SSE2
+#if defined(WEBP_HAVE_SSE41)
if (VP8GetCPUInfo(kSSE4_1)) {
WebPInitConvertARGBToYUVSSE41();
}
-#endif // WEBP_USE_SSE41
+#endif // WEBP_HAVE_SSE41
}
-#if defined(WEBP_USE_NEON)
+#if defined(WEBP_HAVE_NEON)
if (WEBP_NEON_OMIT_C_CODE ||
(VP8GetCPUInfo != NULL && VP8GetCPUInfo(kNEON))) {
WebPInitConvertARGBToYUVNEON();
WebPInitSharpYUVNEON();
}
-#endif // WEBP_USE_NEON
+#endif // WEBP_HAVE_NEON
assert(WebPConvertARGBToY != NULL);
assert(WebPConvertARGBToUV != NULL);
diff --git a/thirdparty/libwebp/src/enc/alpha_enc.c b/thirdparty/libwebp/src/enc/alpha_enc.c
index dce9ca957d..0b54f3e6ec 100644
--- a/thirdparty/libwebp/src/enc/alpha_enc.c
+++ b/thirdparty/libwebp/src/enc/alpha_enc.c
@@ -303,7 +303,7 @@ static int EncodeAlpha(VP8Encoder* const enc,
int ok = 1;
const int reduce_levels = (quality < 100);
- // quick sanity checks
+ // quick correctness checks
assert((uint64_t)data_size == (uint64_t)width * height); // as per spec
assert(enc != NULL && pic != NULL && pic->a != NULL);
assert(output != NULL && output_size != NULL);
@@ -361,7 +361,7 @@ static int EncodeAlpha(VP8Encoder* const enc,
//------------------------------------------------------------------------------
// Main calls
-static int CompressAlphaJob(void* arg1, void* dummy) {
+static int CompressAlphaJob(void* arg1, void* unused) {
VP8Encoder* const enc = (VP8Encoder*)arg1;
const WebPConfig* config = enc->config_;
uint8_t* alpha_data = NULL;
@@ -375,13 +375,13 @@ static int CompressAlphaJob(void* arg1, void* dummy) {
filter, effort_level, &alpha_data, &alpha_size)) {
return 0;
}
- if (alpha_size != (uint32_t)alpha_size) { // Sanity check.
+ if (alpha_size != (uint32_t)alpha_size) { // Soundness check.
WebPSafeFree(alpha_data);
return 0;
}
enc->alpha_data_size_ = (uint32_t)alpha_size;
enc->alpha_data_ = alpha_data;
- (void)dummy;
+ (void)unused;
return 1;
}
diff --git a/thirdparty/libwebp/src/enc/analysis_enc.c b/thirdparty/libwebp/src/enc/analysis_enc.c
index 687757ae03..ebb784261c 100644
--- a/thirdparty/libwebp/src/enc/analysis_enc.c
+++ b/thirdparty/libwebp/src/enc/analysis_enc.c
@@ -126,16 +126,6 @@ static void InitHistogram(VP8Histogram* const histo) {
histo->last_non_zero = 1;
}
-static void MergeHistograms(const VP8Histogram* const in,
- VP8Histogram* const out) {
- if (in->max_value > out->max_value) {
- out->max_value = in->max_value;
- }
- if (in->last_non_zero > out->last_non_zero) {
- out->last_non_zero = in->last_non_zero;
- }
-}
-
//------------------------------------------------------------------------------
// Simplified k-Means, to assign Nb segments based on alpha-histogram
@@ -285,49 +275,6 @@ static int FastMBAnalyze(VP8EncIterator* const it) {
return 0;
}
-static int MBAnalyzeBestIntra4Mode(VP8EncIterator* const it,
- int best_alpha) {
- uint8_t modes[16];
- const int max_mode = MAX_INTRA4_MODE;
- int i4_alpha;
- VP8Histogram total_histo;
- int cur_histo = 0;
- InitHistogram(&total_histo);
-
- VP8IteratorStartI4(it);
- do {
- int mode;
- int best_mode_alpha = DEFAULT_ALPHA;
- VP8Histogram histos[2];
- const uint8_t* const src = it->yuv_in_ + Y_OFF_ENC + VP8Scan[it->i4_];
-
- VP8MakeIntra4Preds(it);
- for (mode = 0; mode < max_mode; ++mode) {
- int alpha;
-
- InitHistogram(&histos[cur_histo]);
- VP8CollectHistogram(src, it->yuv_p_ + VP8I4ModeOffsets[mode],
- 0, 1, &histos[cur_histo]);
- alpha = GetAlpha(&histos[cur_histo]);
- if (IS_BETTER_ALPHA(alpha, best_mode_alpha)) {
- best_mode_alpha = alpha;
- modes[it->i4_] = mode;
- cur_histo ^= 1; // keep track of best histo so far.
- }
- }
- // accumulate best histogram
- MergeHistograms(&histos[cur_histo ^ 1], &total_histo);
- // Note: we reuse the original samples for predictors
- } while (VP8IteratorRotateI4(it, it->yuv_in_ + Y_OFF_ENC));
-
- i4_alpha = GetAlpha(&total_histo);
- if (IS_BETTER_ALPHA(i4_alpha, best_alpha)) {
- VP8SetIntra4Mode(it, modes);
- best_alpha = i4_alpha;
- }
- return best_alpha;
-}
-
static int MBAnalyzeBestUVMode(VP8EncIterator* const it) {
int best_alpha = DEFAULT_ALPHA;
int smallest_alpha = 0;
@@ -371,13 +318,6 @@ static void MBAnalyze(VP8EncIterator* const it,
best_alpha = FastMBAnalyze(it);
} else {
best_alpha = MBAnalyzeBestIntra16Mode(it);
- if (enc->method_ >= 5) {
- // We go and make a fast decision for intra4/intra16.
- // It's usually not a good and definitive pick, but helps seeding the
- // stats about level bit-cost.
- // TODO(skal): improve criterion.
- best_alpha = MBAnalyzeBestIntra4Mode(it, best_alpha);
- }
}
best_uv_alpha = MBAnalyzeBestUVMode(it);
diff --git a/thirdparty/libwebp/src/enc/backward_references_enc.c b/thirdparty/libwebp/src/enc/backward_references_enc.c
index d445b40fc5..519b36a091 100644
--- a/thirdparty/libwebp/src/enc/backward_references_enc.c
+++ b/thirdparty/libwebp/src/enc/backward_references_enc.c
@@ -11,13 +11,14 @@
//
#include <assert.h>
+#include <float.h>
#include <math.h>
-#include "src/enc/backward_references_enc.h"
-#include "src/enc/histogram_enc.h"
+#include "src/dsp/dsp.h"
#include "src/dsp/lossless.h"
#include "src/dsp/lossless_common.h"
-#include "src/dsp/dsp.h"
+#include "src/enc/backward_references_enc.h"
+#include "src/enc/histogram_enc.h"
#include "src/utils/color_cache_utils.h"
#include "src/utils/utils.h"
@@ -103,6 +104,20 @@ void VP8LBackwardRefsClear(VP8LBackwardRefs* const refs) {
}
}
+// Swaps the content of two VP8LBackwardRefs.
+static void BackwardRefsSwap(VP8LBackwardRefs* const refs1,
+ VP8LBackwardRefs* const refs2) {
+ const int point_to_refs1 =
+ (refs1->tail_ != NULL && refs1->tail_ == &refs1->refs_);
+ const int point_to_refs2 =
+ (refs2->tail_ != NULL && refs2->tail_ == &refs2->refs_);
+ const VP8LBackwardRefs tmp = *refs1;
+ *refs1 = *refs2;
+ *refs2 = tmp;
+ if (point_to_refs2) refs1->tail_ = &refs1->refs_;
+ if (point_to_refs1) refs2->tail_ = &refs2->refs_;
+}
+
void VP8LBackwardRefsInit(VP8LBackwardRefs* const refs, int block_size) {
assert(refs != NULL);
memset(refs, 0, sizeof(*refs));
@@ -154,6 +169,22 @@ static PixOrCopyBlock* BackwardRefsNewBlock(VP8LBackwardRefs* const refs) {
return b;
}
+// Return 1 on success, 0 on error.
+static int BackwardRefsClone(const VP8LBackwardRefs* const from,
+ VP8LBackwardRefs* const to) {
+ const PixOrCopyBlock* block_from = from->refs_;
+ VP8LClearBackwardRefs(to);
+ while (block_from != NULL) {
+ PixOrCopyBlock* const block_to = BackwardRefsNewBlock(to);
+ if (block_to == NULL) return 0;
+ memcpy(block_to->start_, block_from->start_,
+ block_from->size_ * sizeof(PixOrCopy));
+ block_to->size_ = block_from->size_;
+ block_from = block_from->next_;
+ }
+ return 1;
+}
+
extern void VP8LBackwardRefsCursorAdd(VP8LBackwardRefs* const refs,
const PixOrCopy v);
void VP8LBackwardRefsCursorAdd(VP8LBackwardRefs* const refs,
@@ -753,12 +784,18 @@ static int CalculateBestCacheSize(const uint32_t* argb, int quality,
}
}
} else {
+ int code, extra_bits, extra_bits_value;
// We should compute the contribution of the (distance,length)
// histograms but those are the same independently from the cache size.
// As those constant contributions are in the end added to the other
- // histogram contributions, we can safely ignore them.
+ // histogram contributions, we can ignore them, except for the length
+ // prefix that is part of the literal_ histogram.
int len = PixOrCopyLength(v);
uint32_t argb_prev = *argb ^ 0xffffffffu;
+ VP8LPrefixEncode(len, &code, &extra_bits, &extra_bits_value);
+ for (i = 0; i <= cache_bits_max; ++i) {
+ ++histos[i]->literal_[NUM_LITERAL_CODES + code];
+ }
// Update the color caches.
do {
if (*argb != argb_prev) {
@@ -842,16 +879,21 @@ extern int VP8LBackwardReferencesTraceBackwards(
int xsize, int ysize, const uint32_t* const argb, int cache_bits,
const VP8LHashChain* const hash_chain,
const VP8LBackwardRefs* const refs_src, VP8LBackwardRefs* const refs_dst);
-static VP8LBackwardRefs* GetBackwardReferences(
- int width, int height, const uint32_t* const argb, int quality,
- int lz77_types_to_try, int* const cache_bits,
- const VP8LHashChain* const hash_chain, VP8LBackwardRefs* best,
- VP8LBackwardRefs* worst) {
- const int cache_bits_initial = *cache_bits;
- double bit_cost_best = -1;
+static int GetBackwardReferences(int width, int height,
+ const uint32_t* const argb, int quality,
+ int lz77_types_to_try, int cache_bits_max,
+ int do_no_cache,
+ const VP8LHashChain* const hash_chain,
+ VP8LBackwardRefs* const refs,
+ int* const cache_bits_best) {
VP8LHistogram* histo = NULL;
- int lz77_type, lz77_type_best = 0;
+ int i, lz77_type;
+ // Index 0 is for a color cache, index 1 for no cache (if needed).
+ int lz77_types_best[2] = {0, 0};
+ double bit_costs_best[2] = {DBL_MAX, DBL_MAX};
VP8LHashChain hash_chain_box;
+ VP8LBackwardRefs* const refs_tmp = &refs[do_no_cache ? 2 : 1];
+ int status = 0;
memset(&hash_chain_box, 0, sizeof(hash_chain_box));
histo = VP8LAllocateHistogram(MAX_COLOR_CACHE_BITS);
@@ -860,86 +902,129 @@ static VP8LBackwardRefs* GetBackwardReferences(
for (lz77_type = 1; lz77_types_to_try;
lz77_types_to_try &= ~lz77_type, lz77_type <<= 1) {
int res = 0;
- double bit_cost;
- int cache_bits_tmp = cache_bits_initial;
+ double bit_cost = 0.;
if ((lz77_types_to_try & lz77_type) == 0) continue;
switch (lz77_type) {
case kLZ77RLE:
- res = BackwardReferencesRle(width, height, argb, 0, worst);
+ res = BackwardReferencesRle(width, height, argb, 0, refs_tmp);
break;
case kLZ77Standard:
// Compute LZ77 with no cache (0 bits), as the ideal LZ77 with a color
// cache is not that different in practice.
- res = BackwardReferencesLz77(width, height, argb, 0, hash_chain, worst);
+ res = BackwardReferencesLz77(width, height, argb, 0, hash_chain,
+ refs_tmp);
break;
case kLZ77Box:
if (!VP8LHashChainInit(&hash_chain_box, width * height)) goto Error;
res = BackwardReferencesLz77Box(width, height, argb, 0, hash_chain,
- &hash_chain_box, worst);
+ &hash_chain_box, refs_tmp);
break;
default:
assert(0);
}
if (!res) goto Error;
- // Next, try with a color cache and update the references.
- if (!CalculateBestCacheSize(argb, quality, worst, &cache_bits_tmp)) {
- goto Error;
- }
- if (cache_bits_tmp > 0) {
- if (!BackwardRefsWithLocalCache(argb, cache_bits_tmp, worst)) {
- goto Error;
+ // Start with the no color cache case.
+ for (i = 1; i >= 0; --i) {
+ int cache_bits = (i == 1) ? 0 : cache_bits_max;
+
+ if (i == 1 && !do_no_cache) continue;
+
+ if (i == 0) {
+ // Try with a color cache.
+ if (!CalculateBestCacheSize(argb, quality, refs_tmp, &cache_bits)) {
+ goto Error;
+ }
+ if (cache_bits > 0) {
+ if (!BackwardRefsWithLocalCache(argb, cache_bits, refs_tmp)) {
+ goto Error;
+ }
+ }
}
- }
- // Keep the best backward references.
- VP8LHistogramCreate(histo, worst, cache_bits_tmp);
- bit_cost = VP8LHistogramEstimateBits(histo);
- if (lz77_type_best == 0 || bit_cost < bit_cost_best) {
- VP8LBackwardRefs* const tmp = worst;
- worst = best;
- best = tmp;
- bit_cost_best = bit_cost;
- *cache_bits = cache_bits_tmp;
- lz77_type_best = lz77_type;
+ if (i == 0 && do_no_cache && cache_bits == 0) {
+ // No need to re-compute bit_cost as it was computed at i == 1.
+ } else {
+ VP8LHistogramCreate(histo, refs_tmp, cache_bits);
+ bit_cost = VP8LHistogramEstimateBits(histo);
+ }
+
+ if (bit_cost < bit_costs_best[i]) {
+ if (i == 1) {
+ // Do not swap as the full cache analysis would have the wrong
+ // VP8LBackwardRefs to start with.
+ if (!BackwardRefsClone(refs_tmp, &refs[1])) goto Error;
+ } else {
+ BackwardRefsSwap(refs_tmp, &refs[0]);
+ }
+ bit_costs_best[i] = bit_cost;
+ lz77_types_best[i] = lz77_type;
+ if (i == 0) *cache_bits_best = cache_bits;
+ }
}
}
- assert(lz77_type_best > 0);
+ assert(lz77_types_best[0] > 0);
+ assert(!do_no_cache || lz77_types_best[1] > 0);
// Improve on simple LZ77 but only for high quality (TraceBackwards is
// costly).
- if ((lz77_type_best == kLZ77Standard || lz77_type_best == kLZ77Box) &&
- quality >= 25) {
- const VP8LHashChain* const hash_chain_tmp =
- (lz77_type_best == kLZ77Standard) ? hash_chain : &hash_chain_box;
- if (VP8LBackwardReferencesTraceBackwards(width, height, argb, *cache_bits,
- hash_chain_tmp, best, worst)) {
- double bit_cost_trace;
- VP8LHistogramCreate(histo, worst, *cache_bits);
- bit_cost_trace = VP8LHistogramEstimateBits(histo);
- if (bit_cost_trace < bit_cost_best) best = worst;
+ for (i = 1; i >= 0; --i) {
+ if (i == 1 && !do_no_cache) continue;
+ if ((lz77_types_best[i] == kLZ77Standard ||
+ lz77_types_best[i] == kLZ77Box) &&
+ quality >= 25) {
+ const VP8LHashChain* const hash_chain_tmp =
+ (lz77_types_best[i] == kLZ77Standard) ? hash_chain : &hash_chain_box;
+ const int cache_bits = (i == 1) ? 0 : *cache_bits_best;
+ if (VP8LBackwardReferencesTraceBackwards(width, height, argb, cache_bits,
+ hash_chain_tmp, &refs[i],
+ refs_tmp)) {
+ double bit_cost_trace;
+ VP8LHistogramCreate(histo, refs_tmp, cache_bits);
+ bit_cost_trace = VP8LHistogramEstimateBits(histo);
+ if (bit_cost_trace < bit_costs_best[i]) {
+ BackwardRefsSwap(refs_tmp, &refs[i]);
+ }
+ }
}
- }
- BackwardReferences2DLocality(width, best);
+ BackwardReferences2DLocality(width, &refs[i]);
+
+ if (i == 1 && lz77_types_best[0] == lz77_types_best[1] &&
+ *cache_bits_best == 0) {
+ // If the best cache size is 0 and we have the same best LZ77, just copy
+ // the data over and stop here.
+ if (!BackwardRefsClone(&refs[1], &refs[0])) goto Error;
+ break;
+ }
+ }
+ status = 1;
Error:
VP8LHashChainClear(&hash_chain_box);
VP8LFreeHistogram(histo);
- return best;
+ return status;
}
-VP8LBackwardRefs* VP8LGetBackwardReferences(
+WebPEncodingError VP8LGetBackwardReferences(
int width, int height, const uint32_t* const argb, int quality,
- int low_effort, int lz77_types_to_try, int* const cache_bits,
- const VP8LHashChain* const hash_chain, VP8LBackwardRefs* const refs_tmp1,
- VP8LBackwardRefs* const refs_tmp2) {
+ int low_effort, int lz77_types_to_try, int cache_bits_max, int do_no_cache,
+ const VP8LHashChain* const hash_chain, VP8LBackwardRefs* const refs,
+ int* const cache_bits_best) {
if (low_effort) {
- return GetBackwardReferencesLowEffort(width, height, argb, cache_bits,
- hash_chain, refs_tmp1);
+ VP8LBackwardRefs* refs_best;
+ *cache_bits_best = cache_bits_max;
+ refs_best = GetBackwardReferencesLowEffort(
+ width, height, argb, cache_bits_best, hash_chain, refs);
+ if (refs_best == NULL) return VP8_ENC_ERROR_OUT_OF_MEMORY;
+ // Set it in first position.
+ BackwardRefsSwap(refs_best, &refs[0]);
} else {
- return GetBackwardReferences(width, height, argb, quality,
- lz77_types_to_try, cache_bits, hash_chain,
- refs_tmp1, refs_tmp2);
+ if (!GetBackwardReferences(width, height, argb, quality, lz77_types_to_try,
+ cache_bits_max, do_no_cache, hash_chain, refs,
+ cache_bits_best)) {
+ return VP8_ENC_ERROR_OUT_OF_MEMORY;
+ }
}
+ return VP8_ENC_OK;
}
diff --git a/thirdparty/libwebp/src/enc/backward_references_enc.h b/thirdparty/libwebp/src/enc/backward_references_enc.h
index 103ddfdcb7..4c0267b41e 100644
--- a/thirdparty/libwebp/src/enc/backward_references_enc.h
+++ b/thirdparty/libwebp/src/enc/backward_references_enc.h
@@ -16,6 +16,7 @@
#include <assert.h>
#include <stdlib.h>
#include "src/webp/types.h"
+#include "src/webp/encode.h"
#include "src/webp/format_constants.h"
#ifdef __cplusplus
@@ -218,14 +219,19 @@ enum VP8LLZ77Type {
// Evaluates best possible backward references for specified quality.
// The input cache_bits to 'VP8LGetBackwardReferences' sets the maximum cache
// bits to use (passing 0 implies disabling the local color cache).
-// The optimal cache bits is evaluated and set for the *cache_bits parameter.
-// The return value is the pointer to the best of the two backward refs viz,
-// refs[0] or refs[1].
-VP8LBackwardRefs* VP8LGetBackwardReferences(
+// The optimal cache bits is evaluated and set for the *cache_bits_best
+// parameter with the matching refs_best.
+// If do_no_cache == 0, refs is an array of 2 values and the best
+// VP8LBackwardRefs is put in the first element.
+// If do_no_cache != 0, refs is an array of 3 values and the best
+// VP8LBackwardRefs is put in the first element, the best value with no-cache in
+// the second element.
+// In both cases, the last element is used as temporary internally.
+WebPEncodingError VP8LGetBackwardReferences(
int width, int height, const uint32_t* const argb, int quality,
- int low_effort, int lz77_types_to_try, int* const cache_bits,
- const VP8LHashChain* const hash_chain, VP8LBackwardRefs* const refs_tmp1,
- VP8LBackwardRefs* const refs_tmp2);
+ int low_effort, int lz77_types_to_try, int cache_bits_max, int do_no_cache,
+ const VP8LHashChain* const hash_chain, VP8LBackwardRefs* const refs,
+ int* const cache_bits_best);
#ifdef __cplusplus
}
diff --git a/thirdparty/libwebp/src/enc/config_enc.c b/thirdparty/libwebp/src/enc/config_enc.c
index 9d4828978e..3518b41403 100644
--- a/thirdparty/libwebp/src/enc/config_enc.c
+++ b/thirdparty/libwebp/src/enc/config_enc.c
@@ -39,6 +39,8 @@ int WebPConfigInitInternal(WebPConfig* config,
config->partitions = 0;
config->segments = 4;
config->pass = 1;
+ config->qmin = 0;
+ config->qmax = 100;
config->show_compressed = 0;
config->preprocessing = 0;
config->autofilter = 0;
@@ -106,6 +108,9 @@ int WebPValidateConfig(const WebPConfig* config) {
if (config->filter_type < 0 || config->filter_type > 1) return 0;
if (config->autofilter < 0 || config->autofilter > 1) return 0;
if (config->pass < 1 || config->pass > 10) return 0;
+ if (config->qmin < 0 || config->qmax > 100 || config->qmin > config->qmax) {
+ return 0;
+ }
if (config->show_compressed < 0 || config->show_compressed > 1) return 0;
if (config->preprocessing < 0 || config->preprocessing > 7) return 0;
if (config->partitions < 0 || config->partitions > 3) return 0;
diff --git a/thirdparty/libwebp/src/enc/frame_enc.c b/thirdparty/libwebp/src/enc/frame_enc.c
index 1aec376e44..af538d83ba 100644
--- a/thirdparty/libwebp/src/enc/frame_enc.c
+++ b/thirdparty/libwebp/src/enc/frame_enc.c
@@ -31,10 +31,15 @@
// we allow 2k of extra head-room in PARTITION0 limit.
#define PARTITION0_SIZE_LIMIT ((VP8_MAX_PARTITION0_SIZE - 2048ULL) << 11)
+static float Clamp(float v, float min, float max) {
+ return (v < min) ? min : (v > max) ? max : v;
+}
+
typedef struct { // struct for organizing convergence in either size or PSNR
int is_first;
float dq;
float q, last_q;
+ float qmin, qmax;
double value, last_value; // PSNR or size
double target;
int do_size_search;
@@ -47,7 +52,9 @@ static int InitPassStats(const VP8Encoder* const enc, PassStats* const s) {
s->is_first = 1;
s->dq = 10.f;
- s->q = s->last_q = enc->config_->quality;
+ s->qmin = 1.f * enc->config_->qmin;
+ s->qmax = 1.f * enc->config_->qmax;
+ s->q = s->last_q = Clamp(enc->config_->quality, s->qmin, s->qmax);
s->target = do_size_search ? (double)target_size
: (target_PSNR > 0.) ? target_PSNR
: 40.; // default, just in case
@@ -56,10 +63,6 @@ static int InitPassStats(const VP8Encoder* const enc, PassStats* const s) {
return do_size_search;
}
-static float Clamp(float v, float min, float max) {
- return (v < min) ? min : (v > max) ? max : v;
-}
-
static float ComputeNextQ(PassStats* const s) {
float dq;
if (s->is_first) {
@@ -75,7 +78,7 @@ static float ComputeNextQ(PassStats* const s) {
s->dq = Clamp(dq, -30.f, 30.f);
s->last_q = s->q;
s->last_value = s->value;
- s->q = Clamp(s->q + s->dq, 0.f, 100.f);
+ s->q = Clamp(s->q + s->dq, s->qmin, s->qmax);
return s->q;
}
@@ -848,9 +851,10 @@ int VP8EncTokenLoop(VP8Encoder* const enc) {
}
#if (DEBUG_SEARCH > 0)
- printf("#%2d metric:%.1lf -> %.1lf last_q=%.2lf q=%.2lf dq=%.2lf\n",
+ printf("#%2d metric:%.1lf -> %.1lf last_q=%.2lf q=%.2lf dq=%.2lf "
+ " range:[%.1f, %.1f]\n",
num_pass_left, stats.last_value, stats.value,
- stats.last_q, stats.q, stats.dq);
+ stats.last_q, stats.q, stats.dq, stats.qmin, stats.qmax);
#endif
if (enc->max_i4_header_bits_ > 0 && size_p0 > PARTITION0_SIZE_LIMIT) {
++num_pass_left;
diff --git a/thirdparty/libwebp/src/enc/histogram_enc.c b/thirdparty/libwebp/src/enc/histogram_enc.c
index a4e6bf3a98..38a0cebcab 100644
--- a/thirdparty/libwebp/src/enc/histogram_enc.c
+++ b/thirdparty/libwebp/src/enc/histogram_enc.c
@@ -208,6 +208,7 @@ void VP8LHistogramAddSinglePixOrCopy(VP8LHistogram* const histo,
} else if (PixOrCopyIsCacheIdx(v)) {
const int literal_ix =
NUM_LITERAL_CODES + NUM_LENGTH_CODES + PixOrCopyCacheIdx(v);
+ assert(histo->palette_code_bits_ != 0);
++histo->literal_[literal_ix];
} else {
int code, extra_bits;
@@ -1170,13 +1171,15 @@ static void RemoveEmptyHistograms(VP8LHistogramSet* const image_histo) {
int VP8LGetHistoImageSymbols(int xsize, int ysize,
const VP8LBackwardRefs* const refs,
int quality, int low_effort,
- int histo_bits, int cache_bits,
+ int histogram_bits, int cache_bits,
VP8LHistogramSet* const image_histo,
VP8LHistogram* const tmp_histo,
uint16_t* const histogram_symbols) {
int ok = 0;
- const int histo_xsize = histo_bits ? VP8LSubSampleSize(xsize, histo_bits) : 1;
- const int histo_ysize = histo_bits ? VP8LSubSampleSize(ysize, histo_bits) : 1;
+ const int histo_xsize =
+ histogram_bits ? VP8LSubSampleSize(xsize, histogram_bits) : 1;
+ const int histo_ysize =
+ histogram_bits ? VP8LSubSampleSize(ysize, histogram_bits) : 1;
const int image_histo_raw_size = histo_xsize * histo_ysize;
VP8LHistogramSet* const orig_histo =
VP8LAllocateHistogramSet(image_histo_raw_size, cache_bits);
@@ -1192,7 +1195,7 @@ int VP8LGetHistoImageSymbols(int xsize, int ysize,
if (orig_histo == NULL || map_tmp == NULL) goto Error;
// Construct the histograms from backward references.
- HistogramBuild(xsize, histo_bits, refs, orig_histo);
+ HistogramBuild(xsize, histogram_bits, refs, orig_histo);
// Copies the histograms and computes its bit_cost.
// histogram_symbols is optimized
HistogramCopyAndAnalyze(orig_histo, image_histo, &num_used,
diff --git a/thirdparty/libwebp/src/enc/histogram_enc.h b/thirdparty/libwebp/src/enc/histogram_enc.h
index 54c2d21783..c3428b5d55 100644
--- a/thirdparty/libwebp/src/enc/histogram_enc.h
+++ b/thirdparty/libwebp/src/enc/histogram_enc.h
@@ -64,8 +64,8 @@ void VP8LHistogramCreate(VP8LHistogram* const p,
const VP8LBackwardRefs* const refs,
int palette_code_bits);
-// Return the size of the histogram for a given palette_code_bits.
-int VP8LGetHistogramSize(int palette_code_bits);
+// Return the size of the histogram for a given cache_bits.
+int VP8LGetHistogramSize(int cache_bits);
// Set the palette_code_bits and reset the stats.
// If init_arrays is true, the arrays are also filled with 0's.
@@ -110,7 +110,7 @@ int VP8LGetHistoImageSymbols(int xsize, int ysize,
const VP8LBackwardRefs* const refs,
int quality, int low_effort,
int histogram_bits, int cache_bits,
- VP8LHistogramSet* const image_in,
+ VP8LHistogramSet* const image_histo,
VP8LHistogram* const tmp_histo,
uint16_t* const histogram_symbols);
diff --git a/thirdparty/libwebp/src/enc/picture_csp_enc.c b/thirdparty/libwebp/src/enc/picture_csp_enc.c
index 718e014ed2..35eede9635 100644
--- a/thirdparty/libwebp/src/enc/picture_csp_enc.c
+++ b/thirdparty/libwebp/src/enc/picture_csp_enc.c
@@ -61,16 +61,14 @@ static int CheckNonOpaque(const uint8_t* alpha, int width, int height,
// Checking for the presence of non-opaque alpha.
int WebPPictureHasTransparency(const WebPPicture* picture) {
if (picture == NULL) return 0;
- if (!picture->use_argb) {
- return CheckNonOpaque(picture->a, picture->width, picture->height,
- 1, picture->a_stride);
- } else {
+ if (picture->use_argb) {
const int alpha_offset = ALPHA_OFFSET;
return CheckNonOpaque((const uint8_t*)picture->argb + alpha_offset,
picture->width, picture->height,
4, picture->argb_stride * sizeof(*picture->argb));
}
- return 0;
+ return CheckNonOpaque(picture->a, picture->width, picture->height,
+ 1, picture->a_stride);
}
//------------------------------------------------------------------------------
@@ -90,8 +88,9 @@ int WebPPictureHasTransparency(const WebPPicture* picture) {
static int kLinearToGammaTab[kGammaTabSize + 1];
static uint16_t kGammaToLinearTab[256];
static volatile int kGammaTablesOk = 0;
+static void InitGammaTables(void);
-static WEBP_TSAN_IGNORE_FUNCTION void InitGammaTables(void) {
+WEBP_DSP_INIT_FUNC(InitGammaTables) {
if (!kGammaTablesOk) {
int v;
const double scale = (double)(1 << kGammaTabFix) / kGammaScale;
@@ -181,8 +180,9 @@ static uint32_t kLinearToGammaTabS[kGammaTabSize + 2];
#define GAMMA_TO_LINEAR_BITS 14
static uint32_t kGammaToLinearTabS[MAX_Y_T + 1]; // size scales with Y_FIX
static volatile int kGammaTablesSOk = 0;
+static void InitGammaTablesS(void);
-static WEBP_TSAN_IGNORE_FUNCTION void InitGammaTablesS(void) {
+WEBP_DSP_INIT_FUNC(InitGammaTablesS) {
assert(2 * GAMMA_TO_LINEAR_BITS < 32); // we use uint32_t intermediate values
if (!kGammaTablesSOk) {
int v;
diff --git a/thirdparty/libwebp/src/enc/picture_rescale_enc.c b/thirdparty/libwebp/src/enc/picture_rescale_enc.c
index 58a6ae7b9d..a75f5d9c06 100644
--- a/thirdparty/libwebp/src/enc/picture_rescale_enc.c
+++ b/thirdparty/libwebp/src/enc/picture_rescale_enc.c
@@ -164,22 +164,25 @@ int WebPPictureCrop(WebPPicture* pic,
//------------------------------------------------------------------------------
// Simple picture rescaler
-static void RescalePlane(const uint8_t* src,
- int src_width, int src_height, int src_stride,
- uint8_t* dst,
- int dst_width, int dst_height, int dst_stride,
- rescaler_t* const work,
- int num_channels) {
+static int RescalePlane(const uint8_t* src,
+ int src_width, int src_height, int src_stride,
+ uint8_t* dst,
+ int dst_width, int dst_height, int dst_stride,
+ rescaler_t* const work,
+ int num_channels) {
WebPRescaler rescaler;
int y = 0;
- WebPRescalerInit(&rescaler, src_width, src_height,
- dst, dst_width, dst_height, dst_stride,
- num_channels, work);
+ if (!WebPRescalerInit(&rescaler, src_width, src_height,
+ dst, dst_width, dst_height, dst_stride,
+ num_channels, work)) {
+ return 0;
+ }
while (y < src_height) {
y += WebPRescalerImport(&rescaler, src_height - y,
src + y * src_stride, src_stride);
WebPRescalerExport(&rescaler);
}
+ return 1;
}
static void AlphaMultiplyARGB(WebPPicture* const pic, int inverse) {
@@ -222,25 +225,28 @@ int WebPPictureRescale(WebPPicture* pic, int width, int height) {
// If present, we need to rescale alpha first (for AlphaMultiplyY).
if (pic->a != NULL) {
WebPInitAlphaProcessing();
- RescalePlane(pic->a, prev_width, prev_height, pic->a_stride,
- tmp.a, width, height, tmp.a_stride, work, 1);
+ if (!RescalePlane(pic->a, prev_width, prev_height, pic->a_stride,
+ tmp.a, width, height, tmp.a_stride, work, 1)) {
+ return 0;
+ }
}
// We take transparency into account on the luma plane only. That's not
// totally exact blending, but still is a good approximation.
AlphaMultiplyY(pic, 0);
- RescalePlane(pic->y, prev_width, prev_height, pic->y_stride,
- tmp.y, width, height, tmp.y_stride, work, 1);
+ if (!RescalePlane(pic->y, prev_width, prev_height, pic->y_stride,
+ tmp.y, width, height, tmp.y_stride, work, 1) ||
+ !RescalePlane(pic->u,
+ HALVE(prev_width), HALVE(prev_height), pic->uv_stride,
+ tmp.u,
+ HALVE(width), HALVE(height), tmp.uv_stride, work, 1) ||
+ !RescalePlane(pic->v,
+ HALVE(prev_width), HALVE(prev_height), pic->uv_stride,
+ tmp.v,
+ HALVE(width), HALVE(height), tmp.uv_stride, work, 1)) {
+ return 0;
+ }
AlphaMultiplyY(&tmp, 1);
-
- RescalePlane(pic->u,
- HALVE(prev_width), HALVE(prev_height), pic->uv_stride,
- tmp.u,
- HALVE(width), HALVE(height), tmp.uv_stride, work, 1);
- RescalePlane(pic->v,
- HALVE(prev_width), HALVE(prev_height), pic->uv_stride,
- tmp.v,
- HALVE(width), HALVE(height), tmp.uv_stride, work, 1);
} else {
work = (rescaler_t*)WebPSafeMalloc(2ULL * width * 4, sizeof(*work));
if (work == NULL) {
@@ -252,11 +258,12 @@ int WebPPictureRescale(WebPPicture* pic, int width, int height) {
// the premultiplication afterward (while preserving the alpha channel).
WebPInitAlphaProcessing();
AlphaMultiplyARGB(pic, 0);
- RescalePlane((const uint8_t*)pic->argb, prev_width, prev_height,
- pic->argb_stride * 4,
- (uint8_t*)tmp.argb, width, height,
- tmp.argb_stride * 4,
- work, 4);
+ if (!RescalePlane((const uint8_t*)pic->argb, prev_width, prev_height,
+ pic->argb_stride * 4,
+ (uint8_t*)tmp.argb, width, height,
+ tmp.argb_stride * 4, work, 4)) {
+ return 0;
+ }
AlphaMultiplyARGB(&tmp, 1);
}
WebPPictureFree(pic);
diff --git a/thirdparty/libwebp/src/enc/picture_tools_enc.c b/thirdparty/libwebp/src/enc/picture_tools_enc.c
index d0e8a495da..38cb01534a 100644
--- a/thirdparty/libwebp/src/enc/picture_tools_enc.c
+++ b/thirdparty/libwebp/src/enc/picture_tools_enc.c
@@ -83,6 +83,19 @@ static int SmoothenBlock(const uint8_t* a_ptr, int a_stride, uint8_t* y_ptr,
return (count == 0);
}
+void WebPReplaceTransparentPixels(WebPPicture* const pic, uint32_t color) {
+ if (pic != NULL && pic->use_argb) {
+ int y = pic->height;
+ uint32_t* argb = pic->argb;
+ color &= 0xffffffu; // force alpha=0
+ WebPInitAlphaProcessing();
+ while (y-- > 0) {
+ WebPAlphaReplace(argb, pic->width, color);
+ argb += pic->argb_stride;
+ }
+ }
+}
+
void WebPCleanupTransparentArea(WebPPicture* pic) {
int x, y, w, h;
if (pic == NULL) return;
@@ -165,24 +178,6 @@ void WebPCleanupTransparentArea(WebPPicture* pic) {
#undef SIZE
#undef SIZE2
-void WebPCleanupTransparentAreaLossless(WebPPicture* const pic) {
- int x, y, w, h;
- uint32_t* argb;
- assert(pic != NULL && pic->use_argb);
- w = pic->width;
- h = pic->height;
- argb = pic->argb;
-
- for (y = 0; y < h; ++y) {
- for (x = 0; x < w; ++x) {
- if ((argb[x] & 0xff000000) == 0) {
- argb[x] = 0x00000000;
- }
- }
- argb += pic->argb_stride;
- }
-}
-
//------------------------------------------------------------------------------
// Blend color and remove transparency info
diff --git a/thirdparty/libwebp/src/enc/syntax_enc.c b/thirdparty/libwebp/src/enc/syntax_enc.c
index a9e5a6cf0f..e18cf650ca 100644
--- a/thirdparty/libwebp/src/enc/syntax_enc.c
+++ b/thirdparty/libwebp/src/enc/syntax_enc.c
@@ -349,7 +349,7 @@ int VP8EncWrite(VP8Encoder* const enc) {
(enc->alpha_data_size_ & 1);
riff_size += CHUNK_HEADER_SIZE + padded_alpha_size;
}
- // Sanity check.
+ // RIFF size should fit in 32-bits.
if (riff_size > 0xfffffffeU) {
return WebPEncodingSetError(pic, VP8_ENC_ERROR_FILE_TOO_BIG);
}
diff --git a/thirdparty/libwebp/src/enc/vp8i_enc.h b/thirdparty/libwebp/src/enc/vp8i_enc.h
index fedcaeea27..67e9509367 100644
--- a/thirdparty/libwebp/src/enc/vp8i_enc.h
+++ b/thirdparty/libwebp/src/enc/vp8i_enc.h
@@ -31,8 +31,8 @@ extern "C" {
// version numbers
#define ENC_MAJ_VERSION 1
-#define ENC_MIN_VERSION 1
-#define ENC_REV_VERSION 0
+#define ENC_MIN_VERSION 2
+#define ENC_REV_VERSION 1
enum { MAX_LF_LEVELS = 64, // Maximum loop filter level
MAX_VARIABLE_LEVEL = 67, // last (inclusive) level with variable cost
@@ -286,8 +286,7 @@ int VP8IteratorNext(VP8EncIterator* const it);
// save the yuv_out_ boundary values to top_/left_ arrays for next iterations.
void VP8IteratorSaveBoundary(VP8EncIterator* const it);
// Report progression based on macroblock rows. Return 0 for user-abort request.
-int VP8IteratorProgress(const VP8EncIterator* const it,
- int final_delta_percent);
+int VP8IteratorProgress(const VP8EncIterator* const it, int delta);
// Intra4x4 iterations
void VP8IteratorStartI4(VP8EncIterator* const it);
// returns true if not done.
@@ -505,9 +504,9 @@ int WebPPictureAllocARGB(WebPPicture* const picture, int width, int height);
// Returns false in case of error (invalid param, out-of-memory).
int WebPPictureAllocYUVA(WebPPicture* const picture, int width, int height);
-// Clean-up the RGB samples under fully transparent area, to help lossless
-// compressibility (no guarantee, though). Assumes that pic->use_argb is true.
-void WebPCleanupTransparentAreaLossless(WebPPicture* const pic);
+// Replace samples that are fully transparent by 'color' to help compressibility
+// (no guarantee, though). Assumes pic->use_argb is true.
+void WebPReplaceTransparentPixels(WebPPicture* const pic, uint32_t color);
//------------------------------------------------------------------------------
diff --git a/thirdparty/libwebp/src/enc/vp8l_enc.c b/thirdparty/libwebp/src/enc/vp8l_enc.c
index 2efd403f77..e330e716f1 100644
--- a/thirdparty/libwebp/src/enc/vp8l_enc.c
+++ b/thirdparty/libwebp/src/enc/vp8l_enc.c
@@ -65,25 +65,22 @@ static WEBP_INLINE void SwapColor(uint32_t* const col1, uint32_t* const col2) {
*col2 = tmp;
}
-static void GreedyMinimizeDeltas(uint32_t palette[], int num_colors) {
- // Find greedily always the closest color of the predicted color to minimize
- // deltas in the palette. This reduces storage needs since the
- // palette is stored with delta encoding.
- uint32_t predict = 0x00000000;
- int i, k;
- for (i = 0; i < num_colors; ++i) {
- int best_ix = i;
- uint32_t best_score = ~0U;
- for (k = i; k < num_colors; ++k) {
- const uint32_t cur_score = PaletteColorDistance(palette[k], predict);
- if (best_score > cur_score) {
- best_score = cur_score;
- best_ix = k;
- }
+static WEBP_INLINE int SearchColorNoIdx(const uint32_t sorted[], uint32_t color,
+ int num_colors) {
+ int low = 0, hi = num_colors;
+ if (sorted[low] == color) return low; // loop invariant: sorted[low] != color
+ while (1) {
+ const int mid = (low + hi) >> 1;
+ if (sorted[mid] == color) {
+ return mid;
+ } else if (sorted[mid] < color) {
+ low = mid;
+ } else {
+ hi = mid;
}
- SwapColor(&palette[best_ix], &palette[i]);
- predict = palette[i];
}
+ assert(0);
+ return 0;
}
// The palette has been sorted by alpha. This function checks if the other
@@ -92,7 +89,8 @@ static void GreedyMinimizeDeltas(uint32_t palette[], int num_colors) {
// no benefit to re-organize them greedily. A monotonic development
// would be spotted in green-only situations (like lossy alpha) or gray-scale
// images.
-static int PaletteHasNonMonotonousDeltas(uint32_t palette[], int num_colors) {
+static int PaletteHasNonMonotonousDeltas(const uint32_t* const palette,
+ int num_colors) {
uint32_t predict = 0x000000;
int i;
uint8_t sign_found = 0x00;
@@ -115,28 +113,215 @@ static int PaletteHasNonMonotonousDeltas(uint32_t palette[], int num_colors) {
return (sign_found & (sign_found << 1)) != 0; // two consequent signs.
}
+static void PaletteSortMinimizeDeltas(const uint32_t* const palette_sorted,
+ int num_colors, uint32_t* const palette) {
+ uint32_t predict = 0x00000000;
+ int i, k;
+ memcpy(palette, palette_sorted, num_colors * sizeof(*palette));
+ if (!PaletteHasNonMonotonousDeltas(palette_sorted, num_colors)) return;
+ // Find greedily always the closest color of the predicted color to minimize
+ // deltas in the palette. This reduces storage needs since the
+ // palette is stored with delta encoding.
+ for (i = 0; i < num_colors; ++i) {
+ int best_ix = i;
+ uint32_t best_score = ~0U;
+ for (k = i; k < num_colors; ++k) {
+ const uint32_t cur_score = PaletteColorDistance(palette[k], predict);
+ if (best_score > cur_score) {
+ best_score = cur_score;
+ best_ix = k;
+ }
+ }
+ SwapColor(&palette[best_ix], &palette[i]);
+ predict = palette[i];
+ }
+}
+
+// Sort palette in increasing order and prepare an inverse mapping array.
+static void PrepareMapToPalette(const uint32_t palette[], uint32_t num_colors,
+ uint32_t sorted[], uint32_t idx_map[]) {
+ uint32_t i;
+ memcpy(sorted, palette, num_colors * sizeof(*sorted));
+ qsort(sorted, num_colors, sizeof(*sorted), PaletteCompareColorsForQsort);
+ for (i = 0; i < num_colors; ++i) {
+ idx_map[SearchColorNoIdx(sorted, palette[i], num_colors)] = i;
+ }
+}
+
// -----------------------------------------------------------------------------
-// Palette
+// Modified Zeng method from "A Survey on Palette Reordering
+// Methods for Improving the Compression of Color-Indexed Images" by Armando J.
+// Pinho and Antonio J. R. Neves.
+
+// Finds the biggest cooccurrence in the matrix.
+static void CoOccurrenceFindMax(const uint32_t* const cooccurrence,
+ uint32_t num_colors, uint8_t* const c1,
+ uint8_t* const c2) {
+ // Find the index that is most frequently located adjacent to other
+ // (different) indexes.
+ uint32_t best_sum = 0u;
+ uint32_t i, j, best_cooccurrence;
+ *c1 = 0u;
+ for (i = 0; i < num_colors; ++i) {
+ uint32_t sum = 0;
+ for (j = 0; j < num_colors; ++j) sum += cooccurrence[i * num_colors + j];
+ if (sum > best_sum) {
+ best_sum = sum;
+ *c1 = i;
+ }
+ }
+ // Find the index that is most frequently found adjacent to *c1.
+ *c2 = 0u;
+ best_cooccurrence = 0u;
+ for (i = 0; i < num_colors; ++i) {
+ if (cooccurrence[*c1 * num_colors + i] > best_cooccurrence) {
+ best_cooccurrence = cooccurrence[*c1 * num_colors + i];
+ *c2 = i;
+ }
+ }
+ assert(*c1 != *c2);
+}
-// If number of colors in the image is less than or equal to MAX_PALETTE_SIZE,
-// creates a palette and returns true, else returns false.
-static int AnalyzeAndCreatePalette(const WebPPicture* const pic,
- int low_effort,
- uint32_t palette[MAX_PALETTE_SIZE],
- int* const palette_size) {
- const int num_colors = WebPGetColorPalette(pic, palette);
- if (num_colors > MAX_PALETTE_SIZE) {
- *palette_size = 0;
- return 0;
+// Builds the cooccurrence matrix
+static WebPEncodingError CoOccurrenceBuild(const WebPPicture* const pic,
+ const uint32_t* const palette,
+ uint32_t num_colors,
+ uint32_t* cooccurrence) {
+ uint32_t *lines, *line_top, *line_current, *line_tmp;
+ int x, y;
+ const uint32_t* src = pic->argb;
+ uint32_t prev_pix = ~src[0];
+ uint32_t prev_idx = 0u;
+ uint32_t idx_map[MAX_PALETTE_SIZE] = {0};
+ uint32_t palette_sorted[MAX_PALETTE_SIZE];
+ lines = (uint32_t*)WebPSafeMalloc(2 * pic->width, sizeof(*lines));
+ if (lines == NULL) return VP8_ENC_ERROR_OUT_OF_MEMORY;
+ line_top = &lines[0];
+ line_current = &lines[pic->width];
+ PrepareMapToPalette(palette, num_colors, palette_sorted, idx_map);
+ for (y = 0; y < pic->height; ++y) {
+ for (x = 0; x < pic->width; ++x) {
+ const uint32_t pix = src[x];
+ if (pix != prev_pix) {
+ prev_idx = idx_map[SearchColorNoIdx(palette_sorted, pix, num_colors)];
+ prev_pix = pix;
+ }
+ line_current[x] = prev_idx;
+ // 4-connectivity is what works best as mentioned in "On the relation
+ // between Memon's and the modified Zeng's palette reordering methods".
+ if (x > 0 && prev_idx != line_current[x - 1]) {
+ const uint32_t left_idx = line_current[x - 1];
+ ++cooccurrence[prev_idx * num_colors + left_idx];
+ ++cooccurrence[left_idx * num_colors + prev_idx];
+ }
+ if (y > 0 && prev_idx != line_top[x]) {
+ const uint32_t top_idx = line_top[x];
+ ++cooccurrence[prev_idx * num_colors + top_idx];
+ ++cooccurrence[top_idx * num_colors + prev_idx];
+ }
+ }
+ line_tmp = line_top;
+ line_top = line_current;
+ line_current = line_tmp;
+ src += pic->argb_stride;
+ }
+ WebPSafeFree(lines);
+ return VP8_ENC_OK;
+}
+
+struct Sum {
+ uint8_t index;
+ uint32_t sum;
+};
+
+// Implements the modified Zeng method from "A Survey on Palette Reordering
+// Methods for Improving the Compression of Color-Indexed Images" by Armando J.
+// Pinho and Antonio J. R. Neves.
+static WebPEncodingError PaletteSortModifiedZeng(
+ const WebPPicture* const pic, const uint32_t* const palette_sorted,
+ uint32_t num_colors, uint32_t* const palette) {
+ uint32_t i, j, ind;
+ uint8_t remapping[MAX_PALETTE_SIZE];
+ uint32_t* cooccurrence;
+ struct Sum sums[MAX_PALETTE_SIZE];
+ uint32_t first, last;
+ uint32_t num_sums;
+ // TODO(vrabaud) check whether one color images should use palette or not.
+ if (num_colors <= 1) return VP8_ENC_OK;
+ // Build the co-occurrence matrix.
+ cooccurrence =
+ (uint32_t*)WebPSafeCalloc(num_colors * num_colors, sizeof(*cooccurrence));
+ if (cooccurrence == NULL) return VP8_ENC_ERROR_OUT_OF_MEMORY;
+ if (CoOccurrenceBuild(pic, palette_sorted, num_colors, cooccurrence) !=
+ VP8_ENC_OK) {
+ WebPSafeFree(cooccurrence);
+ return VP8_ENC_ERROR_OUT_OF_MEMORY;
+ }
+
+ // Initialize the mapping list with the two best indices.
+ CoOccurrenceFindMax(cooccurrence, num_colors, &remapping[0], &remapping[1]);
+
+ // We need to append and prepend to the list of remapping. To this end, we
+ // actually define the next start/end of the list as indices in a vector (with
+ // a wrap around when the end is reached).
+ first = 0;
+ last = 1;
+ num_sums = num_colors - 2; // -2 because we know the first two values
+ if (num_sums > 0) {
+ // Initialize the sums with the first two remappings and find the best one
+ struct Sum* best_sum = &sums[0];
+ best_sum->index = 0u;
+ best_sum->sum = 0u;
+ for (i = 0, j = 0; i < num_colors; ++i) {
+ if (i == remapping[0] || i == remapping[1]) continue;
+ sums[j].index = i;
+ sums[j].sum = cooccurrence[i * num_colors + remapping[0]] +
+ cooccurrence[i * num_colors + remapping[1]];
+ if (sums[j].sum > best_sum->sum) best_sum = &sums[j];
+ ++j;
+ }
+
+ while (num_sums > 0) {
+ const uint8_t best_index = best_sum->index;
+ // Compute delta to know if we need to prepend or append the best index.
+ int32_t delta = 0;
+ const int32_t n = num_colors - num_sums;
+ for (ind = first, j = 0; (ind + j) % num_colors != last + 1; ++j) {
+ const uint16_t l_j = remapping[(ind + j) % num_colors];
+ delta += (n - 1 - 2 * (int32_t)j) *
+ (int32_t)cooccurrence[best_index * num_colors + l_j];
+ }
+ if (delta > 0) {
+ first = (first == 0) ? num_colors - 1 : first - 1;
+ remapping[first] = best_index;
+ } else {
+ ++last;
+ remapping[last] = best_index;
+ }
+ // Remove best_sum from sums.
+ *best_sum = sums[num_sums - 1];
+ --num_sums;
+ // Update all the sums and find the best one.
+ best_sum = &sums[0];
+ for (i = 0; i < num_sums; ++i) {
+ sums[i].sum += cooccurrence[best_index * num_colors + sums[i].index];
+ if (sums[i].sum > best_sum->sum) best_sum = &sums[i];
+ }
+ }
}
- *palette_size = num_colors;
- qsort(palette, num_colors, sizeof(*palette), PaletteCompareColorsForQsort);
- if (!low_effort && PaletteHasNonMonotonousDeltas(palette, num_colors)) {
- GreedyMinimizeDeltas(palette, num_colors);
+ assert((last + 1) % num_colors == first);
+ WebPSafeFree(cooccurrence);
+
+ // Re-map the palette.
+ for (i = 0; i < num_colors; ++i) {
+ palette[i] = palette_sorted[remapping[(first + i) % num_colors]];
}
- return 1;
+ return VP8_ENC_OK;
}
+// -----------------------------------------------------------------------------
+// Palette
+
// These five modes are evaluated and their respective entropy is computed.
typedef enum {
kDirect = 0,
@@ -144,10 +329,18 @@ typedef enum {
kSubGreen = 2,
kSpatialSubGreen = 3,
kPalette = 4,
- kNumEntropyIx = 5
+ kPaletteAndSpatial = 5,
+ kNumEntropyIx = 6
} EntropyIx;
typedef enum {
+ kSortedDefault = 0,
+ kMinimizeDelta = 1,
+ kModifiedZeng = 2,
+ kUnusedPalette = 3,
+} PaletteSorting;
+
+typedef enum {
kHistoAlpha = 0,
kHistoAlphaPred,
kHistoGreen,
@@ -354,14 +547,21 @@ static int GetTransformBits(int method, int histo_bits) {
}
// Set of parameters to be used in each iteration of the cruncher.
-#define CRUNCH_CONFIGS_LZ77_MAX 2
+#define CRUNCH_SUBCONFIGS_MAX 2
+typedef struct {
+ int lz77_;
+ int do_no_cache_;
+} CrunchSubConfig;
typedef struct {
int entropy_idx_;
- int lz77s_types_to_try_[CRUNCH_CONFIGS_LZ77_MAX];
- int lz77s_types_to_try_size_;
+ PaletteSorting palette_sorting_type_;
+ CrunchSubConfig sub_configs_[CRUNCH_SUBCONFIGS_MAX];
+ int sub_configs_size_;
} CrunchConfig;
-#define CRUNCH_CONFIGS_MAX kNumEntropyIx
+// +2 because we add a palette sorting configuration for kPalette and
+// kPaletteAndSpatial.
+#define CRUNCH_CONFIGS_MAX (kNumEntropyIx + 2)
static int EncoderAnalyze(VP8LEncoder* const enc,
CrunchConfig crunch_configs[CRUNCH_CONFIGS_MAX],
@@ -376,11 +576,20 @@ static int EncoderAnalyze(VP8LEncoder* const enc,
int i;
int use_palette;
int n_lz77s;
+ // If set to 0, analyze the cache with the computed cache value. If 1, also
+ // analyze with no-cache.
+ int do_no_cache = 0;
assert(pic != NULL && pic->argb != NULL);
- use_palette =
- AnalyzeAndCreatePalette(pic, low_effort,
- enc->palette_, &enc->palette_size_);
+ // Check whether a palette is possible.
+ enc->palette_size_ = WebPGetColorPalette(pic, enc->palette_sorted_);
+ use_palette = (enc->palette_size_ <= MAX_PALETTE_SIZE);
+ if (!use_palette) {
+ enc->palette_size_ = 0;
+ } else {
+ qsort(enc->palette_sorted_, enc->palette_size_,
+ sizeof(*enc->palette_sorted_), PaletteCompareColorsForQsort);
+ }
// Empirical bit sizes.
enc->histo_bits_ = GetHistoBits(method, use_palette,
@@ -390,6 +599,8 @@ static int EncoderAnalyze(VP8LEncoder* const enc,
if (low_effort) {
// AnalyzeEntropy is somewhat slow.
crunch_configs[0].entropy_idx_ = use_palette ? kPalette : kSpatialSubGreen;
+ crunch_configs[0].palette_sorting_type_ =
+ use_palette ? kSortedDefault : kUnusedPalette;
n_lz77s = 1;
*crunch_configs_size = 1;
} else {
@@ -402,29 +613,59 @@ static int EncoderAnalyze(VP8LEncoder* const enc,
return 0;
}
if (method == 6 && config->quality == 100) {
+ do_no_cache = 1;
// Go brute force on all transforms.
*crunch_configs_size = 0;
for (i = 0; i < kNumEntropyIx; ++i) {
- if (i != kPalette || use_palette) {
+ // We can only apply kPalette or kPaletteAndSpatial if we can indeed use
+ // a palette.
+ if ((i != kPalette && i != kPaletteAndSpatial) || use_palette) {
assert(*crunch_configs_size < CRUNCH_CONFIGS_MAX);
- crunch_configs[(*crunch_configs_size)++].entropy_idx_ = i;
+ crunch_configs[(*crunch_configs_size)].entropy_idx_ = i;
+ if (use_palette && (i == kPalette || i == kPaletteAndSpatial)) {
+ crunch_configs[(*crunch_configs_size)].palette_sorting_type_ =
+ kMinimizeDelta;
+ ++*crunch_configs_size;
+ // Also add modified Zeng's method.
+ crunch_configs[(*crunch_configs_size)].entropy_idx_ = i;
+ crunch_configs[(*crunch_configs_size)].palette_sorting_type_ =
+ kModifiedZeng;
+ } else {
+ crunch_configs[(*crunch_configs_size)].palette_sorting_type_ =
+ kUnusedPalette;
+ }
+ ++*crunch_configs_size;
}
}
} else {
// Only choose the guessed best transform.
*crunch_configs_size = 1;
crunch_configs[0].entropy_idx_ = min_entropy_ix;
+ crunch_configs[0].palette_sorting_type_ =
+ use_palette ? kMinimizeDelta : kUnusedPalette;
+ if (config->quality >= 75 && method == 5) {
+ // Test with and without color cache.
+ do_no_cache = 1;
+ // If we have a palette, also check in combination with spatial.
+ if (min_entropy_ix == kPalette) {
+ *crunch_configs_size = 2;
+ crunch_configs[1].entropy_idx_ = kPaletteAndSpatial;
+ crunch_configs[1].palette_sorting_type_ = kMinimizeDelta;
+ }
+ }
}
}
// Fill in the different LZ77s.
- assert(n_lz77s <= CRUNCH_CONFIGS_LZ77_MAX);
+ assert(n_lz77s <= CRUNCH_SUBCONFIGS_MAX);
for (i = 0; i < *crunch_configs_size; ++i) {
int j;
for (j = 0; j < n_lz77s; ++j) {
- crunch_configs[i].lz77s_types_to_try_[j] =
+ assert(j < CRUNCH_SUBCONFIGS_MAX);
+ crunch_configs[i].sub_configs_[j].lz77_ =
(j == 0) ? kLZ77Standard | kLZ77RLE : kLZ77Box;
+ crunch_configs[i].sub_configs_[j].do_no_cache_ = do_no_cache;
}
- crunch_configs[i].lz77s_types_to_try_size_ = n_lz77s;
+ crunch_configs[i].sub_configs_size_ = n_lz77s;
}
return 1;
}
@@ -440,7 +681,7 @@ static int EncoderInit(VP8LEncoder* const enc) {
int i;
if (!VP8LHashChainInit(&enc->hash_chain_, pix_cnt)) return 0;
- for (i = 0; i < 3; ++i) VP8LBackwardRefsInit(&enc->refs_[i], refs_block_size);
+ for (i = 0; i < 4; ++i) VP8LBackwardRefsInit(&enc->refs_[i], refs_block_size);
return 1;
}
@@ -769,13 +1010,10 @@ static WebPEncodingError StoreImageToBitMask(
}
// Special case of EncodeImageInternal() for cache-bits=0, histo_bits=31
-static WebPEncodingError EncodeImageNoHuffman(VP8LBitWriter* const bw,
- const uint32_t* const argb,
- VP8LHashChain* const hash_chain,
- VP8LBackwardRefs* const refs_tmp1,
- VP8LBackwardRefs* const refs_tmp2,
- int width, int height,
- int quality, int low_effort) {
+static WebPEncodingError EncodeImageNoHuffman(
+ VP8LBitWriter* const bw, const uint32_t* const argb,
+ VP8LHashChain* const hash_chain, VP8LBackwardRefs* const refs_array,
+ int width, int height, int quality, int low_effort) {
int i;
int max_tokens = 0;
WebPEncodingError err = VP8_ENC_OK;
@@ -798,13 +1036,11 @@ static WebPEncodingError EncodeImageNoHuffman(VP8LBitWriter* const bw,
err = VP8_ENC_ERROR_OUT_OF_MEMORY;
goto Error;
}
- refs = VP8LGetBackwardReferences(width, height, argb, quality, 0,
- kLZ77Standard | kLZ77RLE, &cache_bits,
- hash_chain, refs_tmp1, refs_tmp2);
- if (refs == NULL) {
- err = VP8_ENC_ERROR_OUT_OF_MEMORY;
- goto Error;
- }
+ err = VP8LGetBackwardReferences(
+ width, height, argb, quality, /*low_effort=*/0, kLZ77Standard | kLZ77RLE,
+ cache_bits, /*do_no_cache=*/0, hash_chain, refs_array, &cache_bits);
+ if (err != VP8_ENC_OK) goto Error;
+ refs = &refs_array[0];
histogram_image = VP8LAllocateHistogramSet(1, cache_bits);
if (histogram_image == NULL) {
err = VP8_ENC_ERROR_OUT_OF_MEMORY;
@@ -860,11 +1096,11 @@ static WebPEncodingError EncodeImageNoHuffman(VP8LBitWriter* const bw,
static WebPEncodingError EncodeImageInternal(
VP8LBitWriter* const bw, const uint32_t* const argb,
- VP8LHashChain* const hash_chain, VP8LBackwardRefs refs_array[3], int width,
+ VP8LHashChain* const hash_chain, VP8LBackwardRefs refs_array[4], int width,
int height, int quality, int low_effort, int use_cache,
const CrunchConfig* const config, int* cache_bits, int histogram_bits,
size_t init_byte_position, int* const hdr_size, int* const data_size) {
- WebPEncodingError err = VP8_ENC_OK;
+ WebPEncodingError err = VP8_ENC_ERROR_OUT_OF_MEMORY;
const uint32_t histogram_image_xysize =
VP8LSubSampleSize(width, histogram_bits) *
VP8LSubSampleSize(height, histogram_bits);
@@ -876,103 +1112,103 @@ static WebPEncodingError EncodeImageInternal(
3ULL * CODE_LENGTH_CODES, sizeof(*huff_tree));
HuffmanTreeToken* tokens = NULL;
HuffmanTreeCode* huffman_codes = NULL;
- VP8LBackwardRefs* refs_best;
- VP8LBackwardRefs* refs_tmp;
uint16_t* const histogram_symbols =
(uint16_t*)WebPSafeMalloc(histogram_image_xysize,
sizeof(*histogram_symbols));
- int lz77s_idx;
+ int sub_configs_idx;
+ int cache_bits_init, write_histogram_image;
VP8LBitWriter bw_init = *bw, bw_best;
int hdr_size_tmp;
+ VP8LHashChain hash_chain_histogram; // histogram image hash chain
+ size_t bw_size_best = ~(size_t)0;
assert(histogram_bits >= MIN_HUFFMAN_BITS);
assert(histogram_bits <= MAX_HUFFMAN_BITS);
assert(hdr_size != NULL);
assert(data_size != NULL);
- if (histogram_symbols == NULL) {
- err = VP8_ENC_ERROR_OUT_OF_MEMORY;
+ // Make sure we can allocate the different objects.
+ memset(&hash_chain_histogram, 0, sizeof(hash_chain_histogram));
+ if (huff_tree == NULL || histogram_symbols == NULL ||
+ !VP8LHashChainInit(&hash_chain_histogram, histogram_image_xysize) ||
+ !VP8LHashChainFill(hash_chain, quality, argb, width, height,
+ low_effort)) {
goto Error;
}
-
if (use_cache) {
// If the value is different from zero, it has been set during the
// palette analysis.
- if (*cache_bits == 0) *cache_bits = MAX_COLOR_CACHE_BITS;
+ cache_bits_init = (*cache_bits == 0) ? MAX_COLOR_CACHE_BITS : *cache_bits;
} else {
- *cache_bits = 0;
+ cache_bits_init = 0;
}
- // 'best_refs' is the reference to the best backward refs and points to one
- // of refs_array[0] or refs_array[1].
- // Calculate backward references from ARGB image.
- if (huff_tree == NULL ||
- !VP8LHashChainFill(hash_chain, quality, argb, width, height,
- low_effort) ||
- !VP8LBitWriterInit(&bw_best, 0) ||
- (config->lz77s_types_to_try_size_ > 1 &&
+ // If several iterations will happen, clone into bw_best.
+ if (!VP8LBitWriterInit(&bw_best, 0) ||
+ ((config->sub_configs_size_ > 1 ||
+ config->sub_configs_[0].do_no_cache_) &&
!VP8LBitWriterClone(bw, &bw_best))) {
- err = VP8_ENC_ERROR_OUT_OF_MEMORY;
goto Error;
}
- for (lz77s_idx = 0; lz77s_idx < config->lz77s_types_to_try_size_;
- ++lz77s_idx) {
- refs_best = VP8LGetBackwardReferences(
- width, height, argb, quality, low_effort,
- config->lz77s_types_to_try_[lz77s_idx], cache_bits, hash_chain,
- &refs_array[0], &refs_array[1]);
- if (refs_best == NULL) {
- err = VP8_ENC_ERROR_OUT_OF_MEMORY;
- goto Error;
- }
- // Keep the best references aside and use the other element from the first
- // two as a temporary for later usage.
- refs_tmp = &refs_array[refs_best == &refs_array[0] ? 1 : 0];
-
- histogram_image =
- VP8LAllocateHistogramSet(histogram_image_xysize, *cache_bits);
- tmp_histo = VP8LAllocateHistogram(*cache_bits);
- if (histogram_image == NULL || tmp_histo == NULL) {
- err = VP8_ENC_ERROR_OUT_OF_MEMORY;
- goto Error;
- }
-
- // Build histogram image and symbols from backward references.
- if (!VP8LGetHistoImageSymbols(width, height, refs_best, quality, low_effort,
- histogram_bits, *cache_bits, histogram_image,
- tmp_histo, histogram_symbols)) {
- err = VP8_ENC_ERROR_OUT_OF_MEMORY;
- goto Error;
- }
- // Create Huffman bit lengths and codes for each histogram image.
- histogram_image_size = histogram_image->size;
- bit_array_size = 5 * histogram_image_size;
- huffman_codes = (HuffmanTreeCode*)WebPSafeCalloc(bit_array_size,
- sizeof(*huffman_codes));
- // Note: some histogram_image entries may point to tmp_histos[], so the
- // latter need to outlive the following call to GetHuffBitLengthsAndCodes().
- if (huffman_codes == NULL ||
- !GetHuffBitLengthsAndCodes(histogram_image, huffman_codes)) {
- err = VP8_ENC_ERROR_OUT_OF_MEMORY;
- goto Error;
- }
- // Free combined histograms.
- VP8LFreeHistogramSet(histogram_image);
- histogram_image = NULL;
-
- // Free scratch histograms.
- VP8LFreeHistogram(tmp_histo);
- tmp_histo = NULL;
+ for (sub_configs_idx = 0; sub_configs_idx < config->sub_configs_size_;
+ ++sub_configs_idx) {
+ const CrunchSubConfig* const sub_config =
+ &config->sub_configs_[sub_configs_idx];
+ int cache_bits_best, i_cache;
+ err = VP8LGetBackwardReferences(width, height, argb, quality, low_effort,
+ sub_config->lz77_, cache_bits_init,
+ sub_config->do_no_cache_, hash_chain,
+ &refs_array[0], &cache_bits_best);
+ if (err != VP8_ENC_OK) goto Error;
- // Color Cache parameters.
- if (*cache_bits > 0) {
- VP8LPutBits(bw, 1, 1);
- VP8LPutBits(bw, *cache_bits, 4);
- } else {
- VP8LPutBits(bw, 0, 1);
- }
+ for (i_cache = 0; i_cache < (sub_config->do_no_cache_ ? 2 : 1); ++i_cache) {
+ const int cache_bits_tmp = (i_cache == 0) ? cache_bits_best : 0;
+ // Speed-up: no need to study the no-cache case if it was already studied
+ // in i_cache == 0.
+ if (i_cache == 1 && cache_bits_best == 0) break;
+
+ // Reset the bit writer for this iteration.
+ VP8LBitWriterReset(&bw_init, bw);
+
+ // Build histogram image and symbols from backward references.
+ histogram_image =
+ VP8LAllocateHistogramSet(histogram_image_xysize, cache_bits_tmp);
+ tmp_histo = VP8LAllocateHistogram(cache_bits_tmp);
+ if (histogram_image == NULL || tmp_histo == NULL ||
+ !VP8LGetHistoImageSymbols(width, height, &refs_array[i_cache],
+ quality, low_effort, histogram_bits,
+ cache_bits_tmp, histogram_image, tmp_histo,
+ histogram_symbols)) {
+ goto Error;
+ }
+ // Create Huffman bit lengths and codes for each histogram image.
+ histogram_image_size = histogram_image->size;
+ bit_array_size = 5 * histogram_image_size;
+ huffman_codes = (HuffmanTreeCode*)WebPSafeCalloc(bit_array_size,
+ sizeof(*huffman_codes));
+ // Note: some histogram_image entries may point to tmp_histos[], so the
+ // latter need to outlive the following call to
+ // GetHuffBitLengthsAndCodes().
+ if (huffman_codes == NULL ||
+ !GetHuffBitLengthsAndCodes(histogram_image, huffman_codes)) {
+ goto Error;
+ }
+ // Free combined histograms.
+ VP8LFreeHistogramSet(histogram_image);
+ histogram_image = NULL;
+
+ // Free scratch histograms.
+ VP8LFreeHistogram(tmp_histo);
+ tmp_histo = NULL;
+
+ // Color Cache parameters.
+ if (cache_bits_tmp > 0) {
+ VP8LPutBits(bw, 1, 1);
+ VP8LPutBits(bw, cache_bits_tmp, 4);
+ } else {
+ VP8LPutBits(bw, 0, 1);
+ }
- // Huffman image + meta huffman.
- {
- const int write_histogram_image = (histogram_image_size > 1);
+ // Huffman image + meta huffman.
+ write_histogram_image = (histogram_image_size > 1);
VP8LPutBits(bw, write_histogram_image, 1);
if (write_histogram_image) {
uint32_t* const histogram_argb =
@@ -980,10 +1216,7 @@ static WebPEncodingError EncodeImageInternal(
sizeof(*histogram_argb));
int max_index = 0;
uint32_t i;
- if (histogram_argb == NULL) {
- err = VP8_ENC_ERROR_OUT_OF_MEMORY;
- goto Error;
- }
+ if (histogram_argb == NULL) goto Error;
for (i = 0; i < histogram_image_xysize; ++i) {
const int symbol_index = histogram_symbols[i] & 0xffff;
histogram_argb[i] = (symbol_index << 8);
@@ -995,65 +1228,64 @@ static WebPEncodingError EncodeImageInternal(
VP8LPutBits(bw, histogram_bits - 2, 3);
err = EncodeImageNoHuffman(
- bw, histogram_argb, hash_chain, refs_tmp, &refs_array[2],
+ bw, histogram_argb, &hash_chain_histogram, &refs_array[2],
VP8LSubSampleSize(width, histogram_bits),
VP8LSubSampleSize(height, histogram_bits), quality, low_effort);
WebPSafeFree(histogram_argb);
if (err != VP8_ENC_OK) goto Error;
}
- }
- // Store Huffman codes.
- {
- int i;
- int max_tokens = 0;
- // Find maximum number of symbols for the huffman tree-set.
- for (i = 0; i < 5 * histogram_image_size; ++i) {
- HuffmanTreeCode* const codes = &huffman_codes[i];
- if (max_tokens < codes->num_symbols) {
- max_tokens = codes->num_symbols;
+ // Store Huffman codes.
+ {
+ int i;
+ int max_tokens = 0;
+ // Find maximum number of symbols for the huffman tree-set.
+ for (i = 0; i < 5 * histogram_image_size; ++i) {
+ HuffmanTreeCode* const codes = &huffman_codes[i];
+ if (max_tokens < codes->num_symbols) {
+ max_tokens = codes->num_symbols;
+ }
+ }
+ tokens = (HuffmanTreeToken*)WebPSafeMalloc(max_tokens, sizeof(*tokens));
+ if (tokens == NULL) goto Error;
+ for (i = 0; i < 5 * histogram_image_size; ++i) {
+ HuffmanTreeCode* const codes = &huffman_codes[i];
+ StoreHuffmanCode(bw, huff_tree, tokens, codes);
+ ClearHuffmanTreeIfOnlyOneSymbol(codes);
}
}
- tokens = (HuffmanTreeToken*)WebPSafeMalloc(max_tokens, sizeof(*tokens));
- if (tokens == NULL) {
- err = VP8_ENC_ERROR_OUT_OF_MEMORY;
- goto Error;
+ // Store actual literals.
+ hdr_size_tmp = (int)(VP8LBitWriterNumBytes(bw) - init_byte_position);
+ err = StoreImageToBitMask(bw, width, histogram_bits, &refs_array[i_cache],
+ histogram_symbols, huffman_codes);
+ if (err != VP8_ENC_OK) goto Error;
+ // Keep track of the smallest image so far.
+ if (VP8LBitWriterNumBytes(bw) < bw_size_best) {
+ bw_size_best = VP8LBitWriterNumBytes(bw);
+ *cache_bits = cache_bits_tmp;
+ *hdr_size = hdr_size_tmp;
+ *data_size =
+ (int)(VP8LBitWriterNumBytes(bw) - init_byte_position - *hdr_size);
+ VP8LBitWriterSwap(bw, &bw_best);
}
- for (i = 0; i < 5 * histogram_image_size; ++i) {
- HuffmanTreeCode* const codes = &huffman_codes[i];
- StoreHuffmanCode(bw, huff_tree, tokens, codes);
- ClearHuffmanTreeIfOnlyOneSymbol(codes);
+ WebPSafeFree(tokens);
+ tokens = NULL;
+ if (huffman_codes != NULL) {
+ WebPSafeFree(huffman_codes->codes);
+ WebPSafeFree(huffman_codes);
+ huffman_codes = NULL;
}
}
- // Store actual literals.
- hdr_size_tmp = (int)(VP8LBitWriterNumBytes(bw) - init_byte_position);
- err = StoreImageToBitMask(bw, width, histogram_bits, refs_best,
- histogram_symbols, huffman_codes);
- // Keep track of the smallest image so far.
- if (lz77s_idx == 0 ||
- VP8LBitWriterNumBytes(bw) < VP8LBitWriterNumBytes(&bw_best)) {
- *hdr_size = hdr_size_tmp;
- *data_size =
- (int)(VP8LBitWriterNumBytes(bw) - init_byte_position - *hdr_size);
- VP8LBitWriterSwap(bw, &bw_best);
- }
- // Reset the bit writer for the following iteration if any.
- if (config->lz77s_types_to_try_size_ > 1) VP8LBitWriterReset(&bw_init, bw);
- WebPSafeFree(tokens);
- tokens = NULL;
- if (huffman_codes != NULL) {
- WebPSafeFree(huffman_codes->codes);
- WebPSafeFree(huffman_codes);
- huffman_codes = NULL;
- }
}
VP8LBitWriterSwap(bw, &bw_best);
+ err = VP8_ENC_OK;
Error:
WebPSafeFree(tokens);
WebPSafeFree(huff_tree);
VP8LFreeHistogramSet(histogram_image);
VP8LFreeHistogram(tmp_histo);
+ VP8LHashChainClear(&hash_chain_histogram);
if (huffman_codes != NULL) {
WebPSafeFree(huffman_codes->codes);
WebPSafeFree(huffman_codes);
@@ -1095,8 +1327,7 @@ static WebPEncodingError ApplyPredictFilter(const VP8LEncoder* const enc,
VP8LPutBits(bw, pred_bits - 2, 3);
return EncodeImageNoHuffman(
bw, enc->transform_data_, (VP8LHashChain*)&enc->hash_chain_,
- (VP8LBackwardRefs*)&enc->refs_[0], // cast const away
- (VP8LBackwardRefs*)&enc->refs_[1], transform_width, transform_height,
+ (VP8LBackwardRefs*)&enc->refs_[0], transform_width, transform_height,
quality, low_effort);
}
@@ -1116,8 +1347,7 @@ static WebPEncodingError ApplyCrossColorFilter(const VP8LEncoder* const enc,
VP8LPutBits(bw, ccolor_transform_bits - 2, 3);
return EncodeImageNoHuffman(
bw, enc->transform_data_, (VP8LHashChain*)&enc->hash_chain_,
- (VP8LBackwardRefs*)&enc->refs_[0], // cast const away
- (VP8LBackwardRefs*)&enc->refs_[1], transform_width, transform_height,
+ (VP8LBackwardRefs*)&enc->refs_[0], transform_width, transform_height,
quality, low_effort);
}
@@ -1272,22 +1502,6 @@ static WebPEncodingError MakeInputImageCopy(VP8LEncoder* const enc) {
// -----------------------------------------------------------------------------
-static WEBP_INLINE int SearchColorNoIdx(const uint32_t sorted[], uint32_t color,
- int hi) {
- int low = 0;
- if (sorted[low] == color) return low; // loop invariant: sorted[low] != color
- while (1) {
- const int mid = (low + hi) >> 1;
- if (sorted[mid] == color) {
- return mid;
- } else if (sorted[mid] < color) {
- low = mid;
- } else {
- hi = mid;
- }
- }
-}
-
#define APPLY_PALETTE_GREEDY_MAX 4
static WEBP_INLINE uint32_t SearchColorGreedy(const uint32_t palette[],
@@ -1322,17 +1536,6 @@ static WEBP_INLINE uint32_t ApplyPaletteHash2(uint32_t color) {
(32 - PALETTE_INV_SIZE_BITS);
}
-// Sort palette in increasing order and prepare an inverse mapping array.
-static void PrepareMapToPalette(const uint32_t palette[], int num_colors,
- uint32_t sorted[], uint32_t idx_map[]) {
- int i;
- memcpy(sorted, palette, num_colors * sizeof(*sorted));
- qsort(sorted, num_colors, sizeof(*sorted), PaletteCompareColorsForQsort);
- for (i = 0; i < num_colors; ++i) {
- idx_map[SearchColorNoIdx(sorted, palette[i], num_colors)] = i;
- }
-}
-
// Use 1 pixel cache for ARGB pixels.
#define APPLY_PALETTE_FOR(COLOR_INDEX) do { \
uint32_t prev_pix = palette[0]; \
@@ -1464,8 +1667,8 @@ static WebPEncodingError EncodePalette(VP8LBitWriter* const bw, int low_effort,
}
tmp_palette[0] = palette[0];
return EncodeImageNoHuffman(bw, tmp_palette, &enc->hash_chain_,
- &enc->refs_[0], &enc->refs_[1], palette_size, 1,
- 20 /* quality */, low_effort);
+ &enc->refs_[0], palette_size, 1, /*quality=*/20,
+ low_effort);
}
// -----------------------------------------------------------------------------
@@ -1491,7 +1694,7 @@ static void VP8LEncoderDelete(VP8LEncoder* enc) {
if (enc != NULL) {
int i;
VP8LHashChainClear(&enc->hash_chain_);
- for (i = 0; i < 3; ++i) VP8LBackwardRefsClear(&enc->refs_[i]);
+ for (i = 0; i < 4; ++i) VP8LBackwardRefsClear(&enc->refs_[i]);
ClearTransformBuffer(enc);
WebPSafeFree(enc);
}
@@ -1541,7 +1744,7 @@ static int EncodeStreamHook(void* input, void* data2) {
int data_size = 0;
int use_delta_palette = 0;
int idx;
- size_t best_size = 0;
+ size_t best_size = ~(size_t)0;
VP8LBitWriter bw_init = *bw, bw_best;
(void)data2;
@@ -1553,12 +1756,15 @@ static int EncodeStreamHook(void* input, void* data2) {
for (idx = 0; idx < num_crunch_configs; ++idx) {
const int entropy_idx = crunch_configs[idx].entropy_idx_;
- enc->use_palette_ = (entropy_idx == kPalette);
+ enc->use_palette_ =
+ (entropy_idx == kPalette) || (entropy_idx == kPaletteAndSpatial);
enc->use_subtract_green_ =
(entropy_idx == kSubGreen) || (entropy_idx == kSpatialSubGreen);
- enc->use_predict_ =
- (entropy_idx == kSpatial) || (entropy_idx == kSpatialSubGreen);
- if (low_effort) {
+ enc->use_predict_ = (entropy_idx == kSpatial) ||
+ (entropy_idx == kSpatialSubGreen) ||
+ (entropy_idx == kPaletteAndSpatial);
+ // When using a palette, R/B==0, hence no need to test for cross-color.
+ if (low_effort || enc->use_palette_) {
enc->use_cross_color_ = 0;
} else {
enc->use_cross_color_ = red_and_blue_always_zero ? 0 : enc->use_predict_;
@@ -1590,6 +1796,19 @@ static int EncodeStreamHook(void* input, void* data2) {
// Encode palette
if (enc->use_palette_) {
+ if (crunch_configs[idx].palette_sorting_type_ == kSortedDefault) {
+ // Nothing to do, we have already sorted the palette.
+ memcpy(enc->palette_, enc->palette_sorted_,
+ enc->palette_size_ * sizeof(*enc->palette_));
+ } else if (crunch_configs[idx].palette_sorting_type_ == kMinimizeDelta) {
+ PaletteSortMinimizeDeltas(enc->palette_sorted_, enc->palette_size_,
+ enc->palette_);
+ } else {
+ assert(crunch_configs[idx].palette_sorting_type_ == kModifiedZeng);
+ err = PaletteSortModifiedZeng(enc->pic_, enc->palette_sorted_,
+ enc->palette_size_, enc->palette_);
+ if (err != VP8_ENC_OK) goto Error;
+ }
err = EncodePalette(bw, low_effort, enc);
if (err != VP8_ENC_OK) goto Error;
err = MapImageFromPalette(enc, use_delta_palette);
@@ -1640,7 +1859,7 @@ static int EncodeStreamHook(void* input, void* data2) {
if (err != VP8_ENC_OK) goto Error;
// If we are better than what we already have.
- if (idx == 0 || VP8LBitWriterNumBytes(bw) < best_size) {
+ if (VP8LBitWriterNumBytes(bw) < best_size) {
best_size = VP8LBitWriterNumBytes(bw);
// Store the BitWriter.
VP8LBitWriterSwap(bw, &bw_best);
@@ -1754,6 +1973,8 @@ WebPEncodingError VP8LEncodeStream(const WebPConfig* const config,
enc_side->palette_size_ = enc_main->palette_size_;
memcpy(enc_side->palette_, enc_main->palette_,
sizeof(enc_main->palette_));
+ memcpy(enc_side->palette_sorted_, enc_main->palette_sorted_,
+ sizeof(enc_main->palette_sorted_));
param->enc_ = enc_side;
}
// Create the workers.
@@ -1816,7 +2037,7 @@ Error:
}
#undef CRUNCH_CONFIGS_MAX
-#undef CRUNCH_CONFIGS_LZ77_MAX
+#undef CRUNCH_SUBCONFIGS_MAX
int VP8LEncodeImage(const WebPConfig* const config,
const WebPPicture* const picture) {
diff --git a/thirdparty/libwebp/src/enc/vp8li_enc.h b/thirdparty/libwebp/src/enc/vp8li_enc.h
index d2d0fc509c..00de48946c 100644
--- a/thirdparty/libwebp/src/enc/vp8li_enc.h
+++ b/thirdparty/libwebp/src/enc/vp8li_enc.h
@@ -69,9 +69,11 @@ typedef struct {
int use_palette_;
int palette_size_;
uint32_t palette_[MAX_PALETTE_SIZE];
+ // Sorted version of palette_ for cache purposes.
+ uint32_t palette_sorted_[MAX_PALETTE_SIZE];
// Some 'scratch' (potentially large) objects.
- struct VP8LBackwardRefs refs_[3]; // Backward Refs array for temporaries.
+ struct VP8LBackwardRefs refs_[4]; // Backward Refs array for temporaries.
VP8LHashChain hash_chain_; // HashChain data for constructing
// backward references.
} VP8LEncoder;
diff --git a/thirdparty/libwebp/src/enc/webp_enc.c b/thirdparty/libwebp/src/enc/webp_enc.c
index 9f4b10c26c..ce2db2e94b 100644
--- a/thirdparty/libwebp/src/enc/webp_enc.c
+++ b/thirdparty/libwebp/src/enc/webp_enc.c
@@ -400,7 +400,7 @@ int WebPEncode(const WebPConfig* config, WebPPicture* pic) {
}
if (!config->exact) {
- WebPCleanupTransparentAreaLossless(pic);
+ WebPReplaceTransparentPixels(pic, 0x000000);
}
ok = VP8LEncodeImage(config, pic); // Sets pic->error in case of problem.
diff --git a/thirdparty/libwebp/src/mux/anim_encode.c b/thirdparty/libwebp/src/mux/anim_encode.c
index 7be99068f6..7078d9ae6b 100644
--- a/thirdparty/libwebp/src/mux/anim_encode.c
+++ b/thirdparty/libwebp/src/mux/anim_encode.c
@@ -248,9 +248,6 @@ WebPAnimEncoder* WebPAnimEncoderNewInternal(
enc = (WebPAnimEncoder*)WebPSafeCalloc(1, sizeof(*enc));
if (enc == NULL) return NULL;
- // sanity inits, so we can call WebPAnimEncoderDelete():
- enc->encoded_frames_ = NULL;
- enc->mux_ = NULL;
MarkNoError(enc);
// Dimensions and options.
@@ -421,7 +418,7 @@ static void MinimizeChangeRectangle(const WebPPicture* const src,
const int max_allowed_diff_lossy = QualityToMaxDiff(quality);
const int max_allowed_diff = is_lossless ? 0 : max_allowed_diff_lossy;
- // Sanity checks.
+ // Assumption/correctness checks.
assert(src->width == dst->width && src->height == dst->height);
assert(rect->x_offset_ + rect->width_ <= dst->width);
assert(rect->y_offset_ + rect->height_ <= dst->height);
@@ -949,7 +946,8 @@ static int IncreasePreviousDuration(WebPAnimEncoder* const enc, int duration) {
int new_duration;
assert(enc->count_ >= 1);
- assert(prev_enc_frame->sub_frame_.duration ==
+ assert(!prev_enc_frame->is_key_frame_ ||
+ prev_enc_frame->sub_frame_.duration ==
prev_enc_frame->key_frame_.duration);
assert(prev_enc_frame->sub_frame_.duration ==
(prev_enc_frame->sub_frame_.duration & (MAX_DURATION - 1)));
@@ -966,7 +964,7 @@ static int IncreasePreviousDuration(WebPAnimEncoder* const enc, int duration) {
0x10, 0x88, 0x88, 0x08
};
const WebPData lossless_1x1 = {
- lossless_1x1_bytes, sizeof(lossless_1x1_bytes)
+ lossless_1x1_bytes, sizeof(lossless_1x1_bytes)
};
const uint8_t lossy_1x1_bytes[] = {
0x52, 0x49, 0x46, 0x46, 0x40, 0x00, 0x00, 0x00, 0x57, 0x45, 0x42, 0x50,
@@ -1358,6 +1356,12 @@ int WebPAnimEncoderAdd(WebPAnimEncoder* enc, WebPPicture* frame, int timestamp,
if (!IncreasePreviousDuration(enc, (int)prev_frame_duration)) {
return 0;
}
+ // IncreasePreviousDuration() may add a frame to avoid exceeding
+ // MAX_DURATION which could cause CacheFrame() to over read encoded_frames_
+ // before the next flush.
+ if (enc->count_ == enc->size_ && !FlushFrames(enc)) {
+ return 0;
+ }
} else {
enc->first_timestamp_ = timestamp;
}
diff --git a/thirdparty/libwebp/src/mux/muxedit.c b/thirdparty/libwebp/src/mux/muxedit.c
index ccf14b2a0c..02c3edecd7 100644
--- a/thirdparty/libwebp/src/mux/muxedit.c
+++ b/thirdparty/libwebp/src/mux/muxedit.c
@@ -235,7 +235,6 @@ WebPMuxError WebPMuxSetImage(WebPMux* mux, const WebPData* bitstream,
WebPMuxImage wpi;
WebPMuxError err;
- // Sanity checks.
if (mux == NULL || bitstream == NULL || bitstream->bytes == NULL ||
bitstream->size > MAX_CHUNK_PAYLOAD) {
return WEBP_MUX_INVALID_ARGUMENT;
@@ -267,7 +266,6 @@ WebPMuxError WebPMuxPushFrame(WebPMux* mux, const WebPMuxFrameInfo* info,
WebPMuxImage wpi;
WebPMuxError err;
- // Sanity checks.
if (mux == NULL || info == NULL) return WEBP_MUX_INVALID_ARGUMENT;
if (info->id != WEBP_CHUNK_ANMF) return WEBP_MUX_INVALID_ARGUMENT;
diff --git a/thirdparty/libwebp/src/mux/muxi.h b/thirdparty/libwebp/src/mux/muxi.h
index ad3e1bdb97..330da66754 100644
--- a/thirdparty/libwebp/src/mux/muxi.h
+++ b/thirdparty/libwebp/src/mux/muxi.h
@@ -28,8 +28,8 @@ extern "C" {
// Defines and constants.
#define MUX_MAJ_VERSION 1
-#define MUX_MIN_VERSION 1
-#define MUX_REV_VERSION 0
+#define MUX_MIN_VERSION 2
+#define MUX_REV_VERSION 1
// Chunk object.
typedef struct WebPChunk WebPChunk;
diff --git a/thirdparty/libwebp/src/mux/muxread.c b/thirdparty/libwebp/src/mux/muxread.c
index ae3b876bc5..80050396e1 100644
--- a/thirdparty/libwebp/src/mux/muxread.c
+++ b/thirdparty/libwebp/src/mux/muxread.c
@@ -56,7 +56,7 @@ static WebPMuxError ChunkVerifyAndAssign(WebPChunk* chunk,
uint32_t chunk_size;
WebPData chunk_data;
- // Sanity checks.
+ // Correctness checks.
if (data_size < CHUNK_HEADER_SIZE) return WEBP_MUX_NOT_ENOUGH_DATA;
chunk_size = GetLE32(data + TAG_SIZE);
if (chunk_size > MAX_CHUNK_PAYLOAD) return WEBP_MUX_BAD_DATA;
@@ -155,7 +155,6 @@ static int MuxImageParse(const WebPChunk* const chunk, int copy_data,
break;
default:
goto Fail;
- break;
}
subchunk_size = ChunkDiskSize(&subchunk);
bytes += subchunk_size;
@@ -187,7 +186,6 @@ WebPMux* WebPMuxCreateInternal(const WebPData* bitstream, int copy_data,
WebPChunk** chunk_list_ends[WEBP_CHUNK_NIL + 1] = { NULL };
ChunkInit(&chunk);
- // Sanity checks.
if (WEBP_ABI_IS_INCOMPATIBLE(version, WEBP_MUX_ABI_VERSION)) {
return NULL; // version mismatch
}
@@ -264,7 +262,6 @@ WebPMux* WebPMuxCreateInternal(const WebPData* bitstream, int copy_data,
if (!MuxImageParse(&chunk, copy_data, wpi)) goto Err;
ChunkRelease(&chunk);
goto PushImage;
- break;
default: // A non-image chunk.
if (wpi->is_partial_) goto Err; // Encountered a non-image chunk before
// getting all chunks of an image.
@@ -483,7 +480,6 @@ WebPMuxError WebPMuxGetFrame(
WebPMuxError err;
WebPMuxImage* wpi;
- // Sanity checks.
if (mux == NULL || frame == NULL) {
return WEBP_MUX_INVALID_ARGUMENT;
}
diff --git a/thirdparty/libwebp/src/utils/bit_reader_inl_utils.h b/thirdparty/libwebp/src/utils/bit_reader_inl_utils.h
index 46b3880706..404b9a6d8c 100644
--- a/thirdparty/libwebp/src/utils/bit_reader_inl_utils.h
+++ b/thirdparty/libwebp/src/utils/bit_reader_inl_utils.h
@@ -55,7 +55,7 @@ void VP8LoadFinalBytes(VP8BitReader* const br);
// makes sure br->value_ has at least BITS bits worth of data
static WEBP_UBSAN_IGNORE_UNDEF WEBP_INLINE
-void VP8LoadNewBytes(VP8BitReader* const br) {
+void VP8LoadNewBytes(VP8BitReader* WEBP_RESTRICT const br) {
assert(br != NULL && br->buf_ != NULL);
// Read 'BITS' bits at a time if possible.
if (br->buf_ < br->buf_max_) {
@@ -104,7 +104,7 @@ void VP8LoadNewBytes(VP8BitReader* const br) {
}
// Read a bit with proba 'prob'. Speed-critical function!
-static WEBP_INLINE int VP8GetBit(VP8BitReader* const br,
+static WEBP_INLINE int VP8GetBit(VP8BitReader* WEBP_RESTRICT const br,
int prob, const char label[]) {
// Don't move this declaration! It makes a big speed difference to store
// 'range' *before* calling VP8LoadNewBytes(), even if this function doesn't
@@ -137,7 +137,8 @@ static WEBP_INLINE int VP8GetBit(VP8BitReader* const br,
// simplified version of VP8GetBit() for prob=0x80 (note shift is always 1 here)
static WEBP_UBSAN_IGNORE_UNSIGNED_OVERFLOW WEBP_INLINE
-int VP8GetSigned(VP8BitReader* const br, int v, const char label[]) {
+int VP8GetSigned(VP8BitReader* WEBP_RESTRICT const br, int v,
+ const char label[]) {
if (br->bits_ < 0) {
VP8LoadNewBytes(br);
}
@@ -155,7 +156,7 @@ int VP8GetSigned(VP8BitReader* const br, int v, const char label[]) {
}
}
-static WEBP_INLINE int VP8GetBitAlt(VP8BitReader* const br,
+static WEBP_INLINE int VP8GetBitAlt(VP8BitReader* WEBP_RESTRICT const br,
int prob, const char label[]) {
// Don't move this declaration! It makes a big speed difference to store
// 'range' *before* calling VP8LoadNewBytes(), even if this function doesn't
diff --git a/thirdparty/libwebp/src/utils/bit_reader_utils.c b/thirdparty/libwebp/src/utils/bit_reader_utils.c
index 60271c0ae0..857cd60988 100644
--- a/thirdparty/libwebp/src/utils/bit_reader_utils.c
+++ b/thirdparty/libwebp/src/utils/bit_reader_utils.c
@@ -41,14 +41,7 @@ void VP8InitBitReader(VP8BitReader* const br,
br->bits_ = -8; // to load the very first 8bits
br->eof_ = 0;
VP8BitReaderSetBuffer(br, start, size);
-// -- GODOT -- begin
-#ifdef JAVASCRIPT_ENABLED // html5 required aligned reads
- while(((uintptr_t)br->buf_ & 1) != 0 && !br->eof_)
- VP8LoadFinalBytes(br);
-#else
VP8LoadNewBytes(br);
-#endif
-// -- GODOT -- end
}
void VP8RemapBitReader(VP8BitReader* const br, ptrdiff_t offset) {
diff --git a/thirdparty/libwebp/src/utils/bit_reader_utils.h b/thirdparty/libwebp/src/utils/bit_reader_utils.h
index 199dacf224..e64156e318 100644
--- a/thirdparty/libwebp/src/utils/bit_reader_utils.h
+++ b/thirdparty/libwebp/src/utils/bit_reader_utils.h
@@ -58,12 +58,6 @@ extern "C" {
// BITS can be any multiple of 8 from 8 to 56 (inclusive).
// Pick values that fit natural register size.
-// -- GODOT -- start
-#ifdef JAVASCRIPT_ENABLED
-#define BITS 16
-#else
-// -- GODOT -- end
-
#if defined(__i386__) || defined(_M_IX86) // x86 32bit
#define BITS 24
#elif defined(__x86_64__) || defined(_M_X64) // x86 64bit
@@ -78,10 +72,6 @@ extern "C" {
#define BITS 24
#endif
-// -- GODOT -- start
-#endif
-// -- GODOT -- end
-
//------------------------------------------------------------------------------
// Derived types and constants:
// bit_t = natural register type for storing 'value_' (which is BITS+8 bits)
diff --git a/thirdparty/libwebp/src/utils/bit_writer_utils.c b/thirdparty/libwebp/src/utils/bit_writer_utils.c
index bef0e31ca5..2f408508f1 100644
--- a/thirdparty/libwebp/src/utils/bit_writer_utils.c
+++ b/thirdparty/libwebp/src/utils/bit_writer_utils.c
@@ -278,7 +278,7 @@ void VP8LPutBitsFlushBits(VP8LBitWriter* const bw) {
// If needed, make some room by flushing some bits out.
if (bw->cur_ + VP8L_WRITER_BYTES > bw->end_) {
const uint64_t extra_size = (bw->end_ - bw->buf_) + MIN_EXTRA_SIZE;
- if (extra_size != (size_t)extra_size ||
+ if (!CheckSizeOverflow(extra_size) ||
!VP8LBitWriterResize(bw, (size_t)extra_size)) {
bw->cur_ = bw->buf_;
bw->error_ = 1;
@@ -314,7 +314,7 @@ void VP8LPutBitsInternal(VP8LBitWriter* const bw, uint32_t bits, int n_bits) {
while (used >= VP8L_WRITER_BITS) {
if (bw->cur_ + VP8L_WRITER_BYTES > bw->end_) {
const uint64_t extra_size = (bw->end_ - bw->buf_) + MIN_EXTRA_SIZE;
- if (extra_size != (size_t)extra_size ||
+ if (!CheckSizeOverflow(extra_size) ||
!VP8LBitWriterResize(bw, (size_t)extra_size)) {
bw->cur_ = bw->buf_;
bw->error_ = 1;
diff --git a/thirdparty/libwebp/src/utils/color_cache_utils.c b/thirdparty/libwebp/src/utils/color_cache_utils.c
index b09f538e8b..7b5222b6e5 100644
--- a/thirdparty/libwebp/src/utils/color_cache_utils.c
+++ b/thirdparty/libwebp/src/utils/color_cache_utils.c
@@ -20,22 +20,22 @@
//------------------------------------------------------------------------------
// VP8LColorCache.
-int VP8LColorCacheInit(VP8LColorCache* const cc, int hash_bits) {
+int VP8LColorCacheInit(VP8LColorCache* const color_cache, int hash_bits) {
const int hash_size = 1 << hash_bits;
- assert(cc != NULL);
+ assert(color_cache != NULL);
assert(hash_bits > 0);
- cc->colors_ = (uint32_t*)WebPSafeCalloc((uint64_t)hash_size,
- sizeof(*cc->colors_));
- if (cc->colors_ == NULL) return 0;
- cc->hash_shift_ = 32 - hash_bits;
- cc->hash_bits_ = hash_bits;
+ color_cache->colors_ = (uint32_t*)WebPSafeCalloc(
+ (uint64_t)hash_size, sizeof(*color_cache->colors_));
+ if (color_cache->colors_ == NULL) return 0;
+ color_cache->hash_shift_ = 32 - hash_bits;
+ color_cache->hash_bits_ = hash_bits;
return 1;
}
-void VP8LColorCacheClear(VP8LColorCache* const cc) {
- if (cc != NULL) {
- WebPSafeFree(cc->colors_);
- cc->colors_ = NULL;
+void VP8LColorCacheClear(VP8LColorCache* const color_cache) {
+ if (color_cache != NULL) {
+ WebPSafeFree(color_cache->colors_);
+ color_cache->colors_ = NULL;
}
}
diff --git a/thirdparty/libwebp/src/utils/huffman_encode_utils.c b/thirdparty/libwebp/src/utils/huffman_encode_utils.c
index 6f3b1bbe02..fd7a47d8f7 100644
--- a/thirdparty/libwebp/src/utils/huffman_encode_utils.c
+++ b/thirdparty/libwebp/src/utils/huffman_encode_utils.c
@@ -404,8 +404,7 @@ static void ConvertBitDepthsToSymbols(HuffmanTreeCode* const tree) {
// Main entry point
void VP8LCreateHuffmanTree(uint32_t* const histogram, int tree_depth_limit,
- uint8_t* const buf_rle,
- HuffmanTree* const huff_tree,
+ uint8_t* const buf_rle, HuffmanTree* const huff_tree,
HuffmanTreeCode* const huff_code) {
const int num_symbols = huff_code->num_symbols;
memset(buf_rle, 0, num_symbols * sizeof(*buf_rle));
diff --git a/thirdparty/libwebp/src/utils/huffman_encode_utils.h b/thirdparty/libwebp/src/utils/huffman_encode_utils.h
index 3e6763ce49..3f7f1d8074 100644
--- a/thirdparty/libwebp/src/utils/huffman_encode_utils.h
+++ b/thirdparty/libwebp/src/utils/huffman_encode_utils.h
@@ -51,7 +51,7 @@ int VP8LCreateCompressedHuffmanTree(const HuffmanTreeCode* const tree,
// huffman code tree.
void VP8LCreateHuffmanTree(uint32_t* const histogram, int tree_depth_limit,
uint8_t* const buf_rle, HuffmanTree* const huff_tree,
- HuffmanTreeCode* const tree);
+ HuffmanTreeCode* const huff_code);
#ifdef __cplusplus
}
diff --git a/thirdparty/libwebp/src/utils/rescaler_utils.c b/thirdparty/libwebp/src/utils/rescaler_utils.c
index 4bcae24af5..a0581a14b1 100644
--- a/thirdparty/libwebp/src/utils/rescaler_utils.c
+++ b/thirdparty/libwebp/src/utils/rescaler_utils.c
@@ -12,66 +12,74 @@
// Author: Skal (pascal.massimino@gmail.com)
#include <assert.h>
+#include <limits.h>
#include <stdlib.h>
#include <string.h>
#include "src/dsp/dsp.h"
#include "src/utils/rescaler_utils.h"
+#include "src/utils/utils.h"
//------------------------------------------------------------------------------
-void WebPRescalerInit(WebPRescaler* const wrk, int src_width, int src_height,
- uint8_t* const dst,
- int dst_width, int dst_height, int dst_stride,
- int num_channels, rescaler_t* const work) {
+int WebPRescalerInit(WebPRescaler* const rescaler,
+ int src_width, int src_height,
+ uint8_t* const dst,
+ int dst_width, int dst_height, int dst_stride,
+ int num_channels, rescaler_t* const work) {
const int x_add = src_width, x_sub = dst_width;
const int y_add = src_height, y_sub = dst_height;
- wrk->x_expand = (src_width < dst_width);
- wrk->y_expand = (src_height < dst_height);
- wrk->src_width = src_width;
- wrk->src_height = src_height;
- wrk->dst_width = dst_width;
- wrk->dst_height = dst_height;
- wrk->src_y = 0;
- wrk->dst_y = 0;
- wrk->dst = dst;
- wrk->dst_stride = dst_stride;
- wrk->num_channels = num_channels;
+ const uint64_t total_size = 2ull * dst_width * num_channels * sizeof(*work);
+ if (!CheckSizeOverflow(total_size)) return 0;
+
+ rescaler->x_expand = (src_width < dst_width);
+ rescaler->y_expand = (src_height < dst_height);
+ rescaler->src_width = src_width;
+ rescaler->src_height = src_height;
+ rescaler->dst_width = dst_width;
+ rescaler->dst_height = dst_height;
+ rescaler->src_y = 0;
+ rescaler->dst_y = 0;
+ rescaler->dst = dst;
+ rescaler->dst_stride = dst_stride;
+ rescaler->num_channels = num_channels;
// for 'x_expand', we use bilinear interpolation
- wrk->x_add = wrk->x_expand ? (x_sub - 1) : x_add;
- wrk->x_sub = wrk->x_expand ? (x_add - 1) : x_sub;
- if (!wrk->x_expand) { // fx_scale is not used otherwise
- wrk->fx_scale = WEBP_RESCALER_FRAC(1, wrk->x_sub);
+ rescaler->x_add = rescaler->x_expand ? (x_sub - 1) : x_add;
+ rescaler->x_sub = rescaler->x_expand ? (x_add - 1) : x_sub;
+ if (!rescaler->x_expand) { // fx_scale is not used otherwise
+ rescaler->fx_scale = WEBP_RESCALER_FRAC(1, rescaler->x_sub);
}
// vertical scaling parameters
- wrk->y_add = wrk->y_expand ? y_add - 1 : y_add;
- wrk->y_sub = wrk->y_expand ? y_sub - 1 : y_sub;
- wrk->y_accum = wrk->y_expand ? wrk->y_sub : wrk->y_add;
- if (!wrk->y_expand) {
+ rescaler->y_add = rescaler->y_expand ? y_add - 1 : y_add;
+ rescaler->y_sub = rescaler->y_expand ? y_sub - 1 : y_sub;
+ rescaler->y_accum = rescaler->y_expand ? rescaler->y_sub : rescaler->y_add;
+ if (!rescaler->y_expand) {
// This is WEBP_RESCALER_FRAC(dst_height, x_add * y_add) without the cast.
- // Its value is <= WEBP_RESCALER_ONE, because dst_height <= wrk->y_add, and
- // wrk->x_add >= 1;
- const uint64_t ratio =
- (uint64_t)dst_height * WEBP_RESCALER_ONE / (wrk->x_add * wrk->y_add);
+ // Its value is <= WEBP_RESCALER_ONE, because dst_height <= rescaler->y_add
+ // and rescaler->x_add >= 1;
+ const uint64_t num = (uint64_t)dst_height * WEBP_RESCALER_ONE;
+ const uint64_t den = (uint64_t)rescaler->x_add * rescaler->y_add;
+ const uint64_t ratio = num / den;
if (ratio != (uint32_t)ratio) {
// When ratio == WEBP_RESCALER_ONE, we can't represent the ratio with the
// current fixed-point precision. This happens when src_height ==
- // wrk->y_add (which == src_height), and wrk->x_add == 1.
+ // rescaler->y_add (which == src_height), and rescaler->x_add == 1.
// => We special-case fxy_scale = 0, in WebPRescalerExportRow().
- wrk->fxy_scale = 0;
+ rescaler->fxy_scale = 0;
} else {
- wrk->fxy_scale = (uint32_t)ratio;
+ rescaler->fxy_scale = (uint32_t)ratio;
}
- wrk->fy_scale = WEBP_RESCALER_FRAC(1, wrk->y_sub);
+ rescaler->fy_scale = WEBP_RESCALER_FRAC(1, rescaler->y_sub);
} else {
- wrk->fy_scale = WEBP_RESCALER_FRAC(1, wrk->x_add);
- // wrk->fxy_scale is unused here.
+ rescaler->fy_scale = WEBP_RESCALER_FRAC(1, rescaler->x_add);
+ // rescaler->fxy_scale is unused here.
}
- wrk->irow = work;
- wrk->frow = work + num_channels * dst_width;
- memset(work, 0, 2 * dst_width * num_channels * sizeof(*work));
+ rescaler->irow = work;
+ rescaler->frow = work + num_channels * dst_width;
+ memset(work, 0, (size_t)total_size);
WebPRescalerDspInit();
+ return 1;
}
int WebPRescalerGetScaledDimensions(int src_width, int src_height,
@@ -82,6 +90,7 @@ int WebPRescalerGetScaledDimensions(int src_width, int src_height,
{
int width = *scaled_width;
int height = *scaled_height;
+ const int max_size = INT_MAX / 2;
// if width is unspecified, scale original proportionally to height ratio.
if (width == 0 && src_height > 0) {
@@ -94,7 +103,7 @@ int WebPRescalerGetScaledDimensions(int src_width, int src_height,
(int)(((uint64_t)src_height * width + src_width - 1) / src_width);
}
// Check if the overall dimensions still make sense.
- if (width <= 0 || height <= 0) {
+ if (width <= 0 || height <= 0 || width > max_size || height > max_size) {
return 0;
}
@@ -107,31 +116,34 @@ int WebPRescalerGetScaledDimensions(int src_width, int src_height,
//------------------------------------------------------------------------------
// all-in-one calls
-int WebPRescaleNeededLines(const WebPRescaler* const wrk, int max_num_lines) {
- const int num_lines = (wrk->y_accum + wrk->y_sub - 1) / wrk->y_sub;
+int WebPRescaleNeededLines(const WebPRescaler* const rescaler,
+ int max_num_lines) {
+ const int num_lines =
+ (rescaler->y_accum + rescaler->y_sub - 1) / rescaler->y_sub;
return (num_lines > max_num_lines) ? max_num_lines : num_lines;
}
-int WebPRescalerImport(WebPRescaler* const wrk, int num_lines,
+int WebPRescalerImport(WebPRescaler* const rescaler, int num_lines,
const uint8_t* src, int src_stride) {
int total_imported = 0;
- while (total_imported < num_lines && !WebPRescalerHasPendingOutput(wrk)) {
- if (wrk->y_expand) {
- rescaler_t* const tmp = wrk->irow;
- wrk->irow = wrk->frow;
- wrk->frow = tmp;
+ while (total_imported < num_lines &&
+ !WebPRescalerHasPendingOutput(rescaler)) {
+ if (rescaler->y_expand) {
+ rescaler_t* const tmp = rescaler->irow;
+ rescaler->irow = rescaler->frow;
+ rescaler->frow = tmp;
}
- WebPRescalerImportRow(wrk, src);
- if (!wrk->y_expand) { // Accumulate the contribution of the new row.
+ WebPRescalerImportRow(rescaler, src);
+ if (!rescaler->y_expand) { // Accumulate the contribution of the new row.
int x;
- for (x = 0; x < wrk->num_channels * wrk->dst_width; ++x) {
- wrk->irow[x] += wrk->frow[x];
+ for (x = 0; x < rescaler->num_channels * rescaler->dst_width; ++x) {
+ rescaler->irow[x] += rescaler->frow[x];
}
}
- ++wrk->src_y;
+ ++rescaler->src_y;
src += src_stride;
++total_imported;
- wrk->y_accum -= wrk->y_sub;
+ rescaler->y_accum -= rescaler->y_sub;
}
return total_imported;
}
diff --git a/thirdparty/libwebp/src/utils/rescaler_utils.h b/thirdparty/libwebp/src/utils/rescaler_utils.h
index ca41e42c4a..ef201ef86c 100644
--- a/thirdparty/libwebp/src/utils/rescaler_utils.h
+++ b/thirdparty/libwebp/src/utils/rescaler_utils.h
@@ -47,12 +47,13 @@ struct WebPRescaler {
};
// Initialize a rescaler given scratch area 'work' and dimensions of src & dst.
-void WebPRescalerInit(WebPRescaler* const rescaler,
- int src_width, int src_height,
- uint8_t* const dst,
- int dst_width, int dst_height, int dst_stride,
- int num_channels,
- rescaler_t* const work);
+// Returns false in case of error.
+int WebPRescalerInit(WebPRescaler* const rescaler,
+ int src_width, int src_height,
+ uint8_t* const dst,
+ int dst_width, int dst_height, int dst_stride,
+ int num_channels,
+ rescaler_t* const work);
// If either 'scaled_width' or 'scaled_height' (but not both) is 0 the value
// will be calculated preserving the aspect ratio, otherwise the values are
diff --git a/thirdparty/libwebp/src/utils/utils.c b/thirdparty/libwebp/src/utils/utils.c
index 764f752b82..9e464c16ce 100644
--- a/thirdparty/libwebp/src/utils/utils.c
+++ b/thirdparty/libwebp/src/utils/utils.c
@@ -101,6 +101,9 @@ static void Increment(int* const v) {
#if defined(MALLOC_LIMIT)
{
const char* const malloc_limit_str = getenv("MALLOC_LIMIT");
+#if MALLOC_LIMIT > 1
+ mem_limit = (size_t)MALLOC_LIMIT;
+#endif
if (malloc_limit_str != NULL) {
mem_limit = atoi(malloc_limit_str);
}
@@ -169,16 +172,16 @@ static int CheckSizeArgumentsOverflow(uint64_t nmemb, size_t size) {
const uint64_t total_size = nmemb * size;
if (nmemb == 0) return 1;
if ((uint64_t)size > WEBP_MAX_ALLOCABLE_MEMORY / nmemb) return 0;
- if (total_size != (size_t)total_size) return 0;
+ if (!CheckSizeOverflow(total_size)) return 0;
#if defined(PRINT_MEM_INFO) && defined(MALLOC_FAIL_AT)
if (countdown_to_fail > 0 && --countdown_to_fail == 0) {
return 0; // fake fail!
}
#endif
-#if defined(MALLOC_LIMIT)
+#if defined(PRINT_MEM_INFO) && defined(MALLOC_LIMIT)
if (mem_limit > 0) {
const uint64_t new_total_mem = (uint64_t)total_mem + total_size;
- if (new_total_mem != (size_t)new_total_mem ||
+ if (!CheckSizeOverflow(new_total_mem) ||
new_total_mem > mem_limit) {
return 0; // fake fail!
}
@@ -231,7 +234,7 @@ void WebPFree(void* ptr) {
void WebPCopyPlane(const uint8_t* src, int src_stride,
uint8_t* dst, int dst_stride, int width, int height) {
assert(src != NULL && dst != NULL);
- assert(src_stride >= width && dst_stride >= width);
+ assert(abs(src_stride) >= width && abs(dst_stride) >= width);
while (height-- > 0) {
memcpy(dst, src, width);
src += src_stride;
diff --git a/thirdparty/libwebp/src/utils/utils.h b/thirdparty/libwebp/src/utils/utils.h
index 2a3ec92678..ef04f108fe 100644
--- a/thirdparty/libwebp/src/utils/utils.h
+++ b/thirdparty/libwebp/src/utils/utils.h
@@ -42,6 +42,10 @@ extern "C" {
#endif
#endif // WEBP_MAX_ALLOCABLE_MEMORY
+static WEBP_INLINE int CheckSizeOverflow(uint64_t size) {
+ return size == (size_t)size;
+}
+
// size-checking safe malloc/calloc: verify that the requested size is not too
// large, or return NULL. You don't need to call these for constructs like
// malloc(sizeof(foo)), but only if there's picture-dependent size involved
@@ -107,24 +111,33 @@ static WEBP_INLINE void PutLE32(uint8_t* const data, uint32_t val) {
PutLE16(data + 2, (int)(val >> 16));
}
-// Returns (int)floor(log2(n)). n must be > 0.
// use GNU builtins where available.
#if defined(__GNUC__) && \
((__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || __GNUC__ >= 4)
+// Returns (int)floor(log2(n)). n must be > 0.
static WEBP_INLINE int BitsLog2Floor(uint32_t n) {
return 31 ^ __builtin_clz(n);
}
+// counts the number of trailing zero
+static WEBP_INLINE int BitsCtz(uint32_t n) { return __builtin_ctz(n); }
#elif defined(_MSC_VER) && _MSC_VER > 1310 && \
(defined(_M_X64) || defined(_M_IX86))
#include <intrin.h>
#pragma intrinsic(_BitScanReverse)
+#pragma intrinsic(_BitScanForward)
static WEBP_INLINE int BitsLog2Floor(uint32_t n) {
- unsigned long first_set_bit;
+ unsigned long first_set_bit; // NOLINT (runtime/int)
_BitScanReverse(&first_set_bit, n);
return first_set_bit;
}
-#else // default: use the C-version.
+static WEBP_INLINE int BitsCtz(uint32_t n) {
+ unsigned long first_set_bit; // NOLINT (runtime/int)
+ _BitScanForward(&first_set_bit, n);
+ return first_set_bit;
+}
+#else // default: use the (slow) C-version.
+#define WEBP_HAVE_SLOW_CLZ_CTZ // signal that the Clz/Ctz function are slow
// Returns 31 ^ clz(n) = log2(n). This is the default C-implementation, either
// based on table or not. Can be used as fallback if clz() is not available.
#define WEBP_NEED_LOG_TABLE_8BIT
@@ -139,6 +152,15 @@ static WEBP_INLINE int WebPLog2FloorC(uint32_t n) {
}
static WEBP_INLINE int BitsLog2Floor(uint32_t n) { return WebPLog2FloorC(n); }
+
+static WEBP_INLINE int BitsCtz(uint32_t n) {
+ int i;
+ for (i = 0; i < 32; ++i, n >>= 1) {
+ if (n & 1) return i;
+ }
+ return 32;
+}
+
#endif
//------------------------------------------------------------------------------
diff --git a/thirdparty/libwebp/src/webp/decode.h b/thirdparty/libwebp/src/webp/decode.h
index 80dd0ef0cc..44fcd64a84 100644
--- a/thirdparty/libwebp/src/webp/decode.h
+++ b/thirdparty/libwebp/src/webp/decode.h
@@ -453,7 +453,7 @@ struct WebPDecoderOptions {
int scaled_width, scaled_height; // final resolution
int use_threads; // if true, use multi-threaded decoding
int dithering_strength; // dithering strength (0=Off, 100=full)
- int flip; // flip output vertically
+ int flip; // if true, flip output vertically
int alpha_dithering_strength; // alpha dithering strength in [0..100]
uint32_t pad[5]; // padding for later use
diff --git a/thirdparty/libwebp/src/webp/encode.h b/thirdparty/libwebp/src/webp/encode.h
index 655166e7d4..b4c599df87 100644
--- a/thirdparty/libwebp/src/webp/encode.h
+++ b/thirdparty/libwebp/src/webp/encode.h
@@ -148,7 +148,8 @@ struct WebPConfig {
int use_delta_palette; // reserved for future lossless feature
int use_sharp_yuv; // if needed, use sharp (and slow) RGB->YUV conversion
- uint32_t pad[2]; // padding for later use
+ int qmin; // minimum permissible quality factor
+ int qmax; // maximum permissible quality factor
};
// Enumerate some predefined settings for WebPConfig, depending on the type
@@ -291,6 +292,11 @@ typedef enum WebPEncodingError {
#define WEBP_MAX_DIMENSION 16383
// Main exchange structure (input samples, output bytes, statistics)
+//
+// Once WebPPictureInit() has been called, it's ok to make all the INPUT fields
+// (use_argb, y/u/v, argb, ...) point to user-owned data, even if
+// WebPPictureAlloc() has been called. Depending on the value use_argb,
+// it's guaranteed that either *argb or *y/*u/*v content will be kept untouched.
struct WebPPicture {
// INPUT
//////////////
diff --git a/thirdparty/meshoptimizer/clusterizer.cpp b/thirdparty/meshoptimizer/clusterizer.cpp
index f8aad7b49c..b1f7b359c1 100644
--- a/thirdparty/meshoptimizer/clusterizer.cpp
+++ b/thirdparty/meshoptimizer/clusterizer.cpp
@@ -368,8 +368,7 @@ static size_t kdtreeBuild(size_t offset, KDNode* nodes, size_t node_count, const
}
// split axis is one where the variance is largest
- unsigned int axis = vars[0] >= vars[1] && vars[0] >= vars[2] ? 0 : vars[1] >= vars[2] ? 1
- : 2;
+ unsigned int axis = vars[0] >= vars[1] && vars[0] >= vars[2] ? 0 : vars[1] >= vars[2] ? 1 : 2;
float split = mean[axis];
size_t middle = kdtreePartition(indices, count, points, stride, axis, split);
diff --git a/thirdparty/meshoptimizer/meshoptimizer.h b/thirdparty/meshoptimizer/meshoptimizer.h
index e44b99ce52..a420eb1098 100644
--- a/thirdparty/meshoptimizer/meshoptimizer.h
+++ b/thirdparty/meshoptimizer/meshoptimizer.h
@@ -278,9 +278,30 @@ MESHOPTIMIZER_API int meshopt_decodeVertexBuffer(void* destination, size_t verte
* meshopt_decodeFilterExp decodes exponential encoding of floating-point data with 8-bit exponent and 24-bit integer mantissa as 2^E*M.
* Each 32-bit component is decoded in isolation; stride must be divisible by 4.
*/
-MESHOPTIMIZER_EXPERIMENTAL void meshopt_decodeFilterOct(void* buffer, size_t vertex_count, size_t vertex_size);
-MESHOPTIMIZER_EXPERIMENTAL void meshopt_decodeFilterQuat(void* buffer, size_t vertex_count, size_t vertex_size);
-MESHOPTIMIZER_EXPERIMENTAL void meshopt_decodeFilterExp(void* buffer, size_t vertex_count, size_t vertex_size);
+MESHOPTIMIZER_EXPERIMENTAL void meshopt_decodeFilterOct(void* buffer, size_t count, size_t stride);
+MESHOPTIMIZER_EXPERIMENTAL void meshopt_decodeFilterQuat(void* buffer, size_t count, size_t stride);
+MESHOPTIMIZER_EXPERIMENTAL void meshopt_decodeFilterExp(void* buffer, size_t count, size_t stride);
+
+/**
+ * Vertex buffer filter encoders
+ * These functions can be used to encode data in a format that meshopt_decodeFilter can decode
+ *
+ * meshopt_encodeFilterOct encodes unit vectors with K-bit (K <= 16) signed X/Y as an output.
+ * Each component is stored as an 8-bit or 16-bit normalized integer; stride must be equal to 4 or 8. W is preserved as is.
+ * Input data must contain 4 floats for every vector (count*4 total).
+ *
+ * meshopt_encodeFilterQuat encodes unit quaternions with K-bit (4 <= K <= 16) component encoding.
+ * Each component is stored as an 16-bit integer; stride must be equal to 8.
+ * Input data must contain 4 floats for every quaternion (count*4 total).
+ *
+ * meshopt_encodeFilterExp encodes arbitrary (finite) floating-point data with 8-bit exponent and K-bit integer mantissa (1 <= K <= 24).
+ * Mantissa is shared between all components of a given vector as defined by stride; stride must be divisible by 4.
+ * Input data must contain stride/4 floats for every vector (count*stride/4 total).
+ * When individual (scalar) encoding is desired, simply pass stride=4 and adjust count accordingly.
+ */
+MESHOPTIMIZER_EXPERIMENTAL void meshopt_encodeFilterOct(void* destination, size_t count, size_t stride, int bits, const float* data);
+MESHOPTIMIZER_EXPERIMENTAL void meshopt_encodeFilterQuat(void* destination, size_t count, size_t stride, int bits, const float* data);
+MESHOPTIMIZER_EXPERIMENTAL void meshopt_encodeFilterExp(void* destination, size_t count, size_t stride, int bits, const float* data);
/**
* Experimental: Mesh simplifier
@@ -305,7 +326,7 @@ MESHOPTIMIZER_EXPERIMENTAL size_t meshopt_simplifyWithAttributes(unsigned int* d
/**
* Experimental: Mesh simplifier (sloppy)
- * Reduces the number of triangles in the mesh, sacrificing mesh apperance for simplification performance
+ * Reduces the number of triangles in the mesh, sacrificing mesh appearance for simplification performance
* The algorithm doesn't preserve mesh topology but can stop short of the target goal based on target error.
* Returns the number of indices after simplification, with destination containing new index data
* The resulting index buffer references vertices from the original vertex buffer.
diff --git a/thirdparty/meshoptimizer/simplifier.cpp b/thirdparty/meshoptimizer/simplifier.cpp
index cf5db4e119..ccc99edb1a 100644
--- a/thirdparty/meshoptimizer/simplifier.cpp
+++ b/thirdparty/meshoptimizer/simplifier.cpp
@@ -358,7 +358,7 @@ static void classifyVertices(unsigned char* result, unsigned int* loop, unsigned
#if TRACE
printf("locked: many open edges %d, disconnected seam %d, many seam edges %d, many wedges %d\n",
- int(stats[0]), int(stats[1]), int(stats[2]), int(stats[3]));
+ int(stats[0]), int(stats[1]), int(stats[2]), int(stats[3]));
#endif
}
@@ -1114,8 +1114,8 @@ static size_t performEdgeCollapses(unsigned int* collapse_remap, unsigned char*
float error_goal_perfect = edge_collapse_goal < collapse_count ? collapses[collapse_order[edge_collapse_goal]].error : 0.f;
printf("removed %d triangles, error %e (goal %e); evaluated %d/%d collapses (done %d, skipped %d, invalid %d)\n",
- int(triangle_collapses), sqrtf(result_error), sqrtf(error_goal_perfect),
- int(stats[0]), int(collapse_count), int(edge_collapses), int(stats[1]), int(stats[2]));
+ int(triangle_collapses), sqrtf(result_error), sqrtf(error_goal_perfect),
+ int(stats[0]), int(collapse_count), int(edge_collapses), int(stats[1]), int(stats[2]));
#endif
return edge_collapses;
@@ -1473,7 +1473,7 @@ size_t meshopt_simplifyWithAttributes(unsigned int* destination, const unsigned
kinds[vertex_kind[i]] += remap[i] == i;
printf("kinds: manifold %d, border %d, seam %d, complex %d, locked %d\n",
- int(kinds[Kind_Manifold]), int(kinds[Kind_Border]), int(kinds[Kind_Seam]), int(kinds[Kind_Complex]), int(kinds[Kind_Locked]));
+ int(kinds[Kind_Manifold]), int(kinds[Kind_Border]), int(kinds[Kind_Seam]), int(kinds[Kind_Complex]), int(kinds[Kind_Locked]));
#endif
Vector3* vertex_positions = allocator.allocate<Vector3>(vertex_count);
@@ -1649,9 +1649,9 @@ size_t meshopt_simplifySloppy(unsigned int* destination, const unsigned int* ind
#if TRACE
printf("pass %d (%s): grid size %d, triangles %d, %s\n",
- pass, (pass == 0) ? "guess" : (pass <= kInterpolationPasses) ? "lerp" : "binary",
- grid_size, int(triangles),
- (triangles <= target_index_count / 3) ? "under" : "over");
+ pass, (pass == 0) ? "guess" : (pass <= kInterpolationPasses) ? "lerp" : "binary",
+ grid_size, int(triangles),
+ (triangles <= target_index_count / 3) ? "under" : "over");
#endif
float tip = interpolate(float(target_index_count / 3), float(min_grid), float(min_triangles), float(grid_size), float(triangles), float(max_grid), float(max_triangles));
@@ -1778,9 +1778,9 @@ size_t meshopt_simplifyPoints(unsigned int* destination, const float* vertex_pos
#if TRACE
printf("pass %d (%s): grid size %d, vertices %d, %s\n",
- pass, (pass == 0) ? "guess" : (pass <= kInterpolationPasses) ? "lerp" : "binary",
- grid_size, int(vertices),
- (vertices <= target_vertex_count) ? "under" : "over");
+ pass, (pass == 0) ? "guess" : (pass <= kInterpolationPasses) ? "lerp" : "binary",
+ grid_size, int(vertices),
+ (vertices <= target_vertex_count) ? "under" : "over");
#endif
float tip = interpolate(float(target_vertex_count), float(min_grid), float(min_vertices), float(grid_size), float(vertices), float(max_grid), float(max_vertices));
diff --git a/thirdparty/meshoptimizer/vertexcodec.cpp b/thirdparty/meshoptimizer/vertexcodec.cpp
index 5f3ec204ab..7925ea862c 100644
--- a/thirdparty/meshoptimizer/vertexcodec.cpp
+++ b/thirdparty/meshoptimizer/vertexcodec.cpp
@@ -77,6 +77,8 @@
#endif
#ifdef SIMD_WASM
+#undef __DEPRECATED
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
#include <wasm_simd128.h>
#endif
@@ -1028,7 +1030,7 @@ static unsigned int getCpuFeatures()
return cpuinfo[2];
}
-unsigned int cpuid = getCpuFeatures();
+static unsigned int cpuid = getCpuFeatures();
#endif
} // namespace meshopt
diff --git a/thirdparty/meshoptimizer/vertexfilter.cpp b/thirdparty/meshoptimizer/vertexfilter.cpp
index 39946f46ed..606a280aa9 100644
--- a/thirdparty/meshoptimizer/vertexfilter.cpp
+++ b/thirdparty/meshoptimizer/vertexfilter.cpp
@@ -52,6 +52,7 @@
#endif
#ifdef SIMD_WASM
+#undef __DEPRECATED
#include <wasm_simd128.h>
#endif
@@ -160,7 +161,8 @@ static void decodeFilterExp(unsigned int* data, size_t count)
#endif
#if defined(SIMD_SSE) || defined(SIMD_NEON) || defined(SIMD_WASM)
-template <typename T> static void dispatchSimd(void (*process)(T*, size_t), T* data, size_t count, size_t stride)
+template <typename T>
+static void dispatchSimd(void (*process)(T*, size_t), T* data, size_t count, size_t stride)
{
assert(stride <= 4);
@@ -791,52 +793,170 @@ static void decodeFilterExpSimd(unsigned int* data, size_t count)
} // namespace meshopt
-void meshopt_decodeFilterOct(void* buffer, size_t vertex_count, size_t vertex_size)
+void meshopt_decodeFilterOct(void* buffer, size_t count, size_t stride)
{
using namespace meshopt;
- assert(vertex_size == 4 || vertex_size == 8);
+ assert(stride == 4 || stride == 8);
#if defined(SIMD_SSE) || defined(SIMD_NEON) || defined(SIMD_WASM)
- if (vertex_size == 4)
- dispatchSimd(decodeFilterOctSimd, static_cast<signed char*>(buffer), vertex_count, 4);
+ if (stride == 4)
+ dispatchSimd(decodeFilterOctSimd, static_cast<signed char*>(buffer), count, 4);
else
- dispatchSimd(decodeFilterOctSimd, static_cast<short*>(buffer), vertex_count, 4);
+ dispatchSimd(decodeFilterOctSimd, static_cast<short*>(buffer), count, 4);
#else
- if (vertex_size == 4)
- decodeFilterOct(static_cast<signed char*>(buffer), vertex_count);
+ if (stride == 4)
+ decodeFilterOct(static_cast<signed char*>(buffer), count);
else
- decodeFilterOct(static_cast<short*>(buffer), vertex_count);
+ decodeFilterOct(static_cast<short*>(buffer), count);
#endif
}
-void meshopt_decodeFilterQuat(void* buffer, size_t vertex_count, size_t vertex_size)
+void meshopt_decodeFilterQuat(void* buffer, size_t count, size_t stride)
{
using namespace meshopt;
- assert(vertex_size == 8);
- (void)vertex_size;
+ assert(stride == 8);
+ (void)stride;
#if defined(SIMD_SSE) || defined(SIMD_NEON) || defined(SIMD_WASM)
- dispatchSimd(decodeFilterQuatSimd, static_cast<short*>(buffer), vertex_count, 4);
+ dispatchSimd(decodeFilterQuatSimd, static_cast<short*>(buffer), count, 4);
#else
- decodeFilterQuat(static_cast<short*>(buffer), vertex_count);
+ decodeFilterQuat(static_cast<short*>(buffer), count);
#endif
}
-void meshopt_decodeFilterExp(void* buffer, size_t vertex_count, size_t vertex_size)
+void meshopt_decodeFilterExp(void* buffer, size_t count, size_t stride)
{
using namespace meshopt;
- assert(vertex_size % 4 == 0);
+ assert(stride > 0 && stride % 4 == 0);
#if defined(SIMD_SSE) || defined(SIMD_NEON) || defined(SIMD_WASM)
- dispatchSimd(decodeFilterExpSimd, static_cast<unsigned int*>(buffer), vertex_count * (vertex_size / 4), 1);
+ dispatchSimd(decodeFilterExpSimd, static_cast<unsigned int*>(buffer), count * (stride / 4), 1);
#else
- decodeFilterExp(static_cast<unsigned int*>(buffer), vertex_count * (vertex_size / 4));
+ decodeFilterExp(static_cast<unsigned int*>(buffer), count * (stride / 4));
#endif
}
+void meshopt_encodeFilterOct(void* destination, size_t count, size_t stride, int bits, const float* data)
+{
+ assert(stride == 4 || stride == 8);
+ assert(bits >= 1 && bits <= 16);
+
+ signed char* d8 = static_cast<signed char*>(destination);
+ short* d16 = static_cast<short*>(destination);
+
+ int bytebits = int(stride * 2);
+
+ for (size_t i = 0; i < count; ++i)
+ {
+ const float* n = &data[i * 4];
+
+ // octahedral encoding of a unit vector
+ float nx = n[0], ny = n[1], nz = n[2], nw = n[3];
+ float nl = fabsf(nx) + fabsf(ny) + fabsf(nz);
+ float ns = nl == 0.f ? 0.f : 1.f / nl;
+
+ nx *= ns;
+ ny *= ns;
+
+ float u = (nz >= 0.f) ? nx : (1 - fabsf(ny)) * (nx >= 0.f ? 1.f : -1.f);
+ float v = (nz >= 0.f) ? ny : (1 - fabsf(nx)) * (ny >= 0.f ? 1.f : -1.f);
+
+ int fu = meshopt_quantizeSnorm(u, bits);
+ int fv = meshopt_quantizeSnorm(v, bits);
+ int fo = meshopt_quantizeSnorm(1.f, bits);
+ int fw = meshopt_quantizeSnorm(nw, bytebits);
+
+ if (stride == 4)
+ {
+ d8[i * 4 + 0] = (signed char)(fu);
+ d8[i * 4 + 1] = (signed char)(fv);
+ d8[i * 4 + 2] = (signed char)(fo);
+ d8[i * 4 + 3] = (signed char)(fw);
+ }
+ else
+ {
+ d16[i * 4 + 0] = short(fu);
+ d16[i * 4 + 1] = short(fv);
+ d16[i * 4 + 2] = short(fo);
+ d16[i * 4 + 3] = short(fw);
+ }
+ }
+}
+
+void meshopt_encodeFilterQuat(void* destination_, size_t count, size_t stride, int bits, const float* data)
+{
+ assert(stride == 8);
+ assert(bits >= 4 && bits <= 16);
+ (void)stride;
+
+ short* destination = static_cast<short*>(destination_);
+
+ const float scaler = sqrtf(2.f);
+
+ for (size_t i = 0; i < count; ++i)
+ {
+ const float* q = &data[i * 4];
+ short* d = &destination[i * 4];
+
+ // establish maximum quaternion component
+ int qc = 0;
+ qc = fabsf(q[1]) > fabsf(q[qc]) ? 1 : qc;
+ qc = fabsf(q[2]) > fabsf(q[qc]) ? 2 : qc;
+ qc = fabsf(q[3]) > fabsf(q[qc]) ? 3 : qc;
+
+ // we use double-cover properties to discard the sign
+ float sign = q[qc] < 0.f ? -1.f : 1.f;
+
+ // note: we always encode a cyclical swizzle to be able to recover the order via rotation
+ d[0] = short(meshopt_quantizeSnorm(q[(qc + 1) & 3] * scaler * sign, bits));
+ d[1] = short(meshopt_quantizeSnorm(q[(qc + 2) & 3] * scaler * sign, bits));
+ d[2] = short(meshopt_quantizeSnorm(q[(qc + 3) & 3] * scaler * sign, bits));
+ d[3] = short((meshopt_quantizeSnorm(1.f, bits) & ~3) | qc);
+ }
+}
+
+void meshopt_encodeFilterExp(void* destination_, size_t count, size_t stride, int bits, const float* data)
+{
+ assert(stride > 0 && stride % 4 == 0);
+ assert(bits >= 1 && bits <= 24);
+
+ unsigned int* destination = static_cast<unsigned int*>(destination_);
+ size_t stride_float = stride / sizeof(float);
+
+ for (size_t i = 0; i < count; ++i)
+ {
+ const float* v = &data[i * stride_float];
+ unsigned int* d = &destination[i * stride_float];
+
+ // use maximum exponent to encode values; this guarantess that mantissa is [-1, 1]
+ int exp = -100;
+
+ for (size_t j = 0; j < stride_float; ++j)
+ {
+ int e;
+ frexp(v[j], &e);
+
+ exp = (exp < e) ? e : exp;
+ }
+
+ // note that we additionally scale the mantissa to make it a K-bit signed integer (K-1 bits for magnitude)
+ exp -= (bits - 1);
+
+ // compute renormalized rounded mantissa for each component
+ int mmask = (1 << 24) - 1;
+
+ for (size_t j = 0; j < stride_float; ++j)
+ {
+ int m = int(ldexp(v[j], -exp) + (v[j] >= 0 ? 0.5f : -0.5f));
+
+ d[j] = (m & mmask) | (unsigned(exp) << 24);
+ }
+ }
+}
+
#undef SIMD_SSE
#undef SIMD_NEON
#undef SIMD_WASM
diff --git a/thirdparty/miniupnpc/LICENSE b/thirdparty/miniupnpc/LICENSE
index 6ddd381baa..fe9118c07e 100644
--- a/thirdparty/miniupnpc/LICENSE
+++ b/thirdparty/miniupnpc/LICENSE
@@ -1,4 +1,4 @@
-MiniUPnPc
+MiniUPnP Project
Copyright (c) 2005-2020, Thomas BERNARD
All rights reserved.
@@ -24,4 +24,3 @@ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
-
diff --git a/thirdparty/miniupnpc/miniupnpc/igd_desc_parse.h b/thirdparty/miniupnpc/include/igd_desc_parse.h
index 0de546b697..0de546b697 100644
--- a/thirdparty/miniupnpc/miniupnpc/igd_desc_parse.h
+++ b/thirdparty/miniupnpc/include/igd_desc_parse.h
diff --git a/thirdparty/miniupnpc/miniupnpc/miniupnpc.h b/thirdparty/miniupnpc/include/miniupnpc.h
index 3aef8ea443..a10bd950a8 100644
--- a/thirdparty/miniupnpc/miniupnpc/miniupnpc.h
+++ b/thirdparty/miniupnpc/include/miniupnpc.h
@@ -1,4 +1,4 @@
-/* $Id: miniupnpc.h,v 1.58 2021/03/02 23:49:52 nanard Exp $ */
+/* $Id: miniupnpc.h,v 1.59 2021/09/28 21:39:17 nanard Exp $ */
/* vim: tabstop=4 shiftwidth=4 noexpandtab
* Project: miniupnp
* http://miniupnp.free.fr/
@@ -20,7 +20,7 @@
#define UPNPDISCOVER_MEMORY_ERROR (-102)
/* versions : */
-#define MINIUPNPC_VERSION "2.2.2"
+#define MINIUPNPC_VERSION "2.2.3"
#define MINIUPNPC_API_VERSION 17
/* Source port:
diff --git a/thirdparty/miniupnpc/miniupnpc/miniupnpc_declspec.h b/thirdparty/miniupnpc/include/miniupnpc_declspec.h
index 40adb922ec..40adb922ec 100644
--- a/thirdparty/miniupnpc/miniupnpc/miniupnpc_declspec.h
+++ b/thirdparty/miniupnpc/include/miniupnpc_declspec.h
diff --git a/thirdparty/miniupnpc/miniupnpc/miniupnpctypes.h b/thirdparty/miniupnpc/include/miniupnpctypes.h
index 307ce39699..26ed4f0059 100644
--- a/thirdparty/miniupnpc/miniupnpc/miniupnpctypes.h
+++ b/thirdparty/miniupnpc/include/miniupnpctypes.h
@@ -1,13 +1,15 @@
/* $Id: miniupnpctypes.h,v 1.1 2011/02/15 11:10:40 nanard Exp $ */
/* Miniupnp project : http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org
* Author : Thomas Bernard
- * Copyright (c) 2011 Thomas Bernard
+ * Copyright (c) 2021 Thomas Bernard
* This software is subject to the conditions detailed in the
* LICENCE file provided within this distribution */
#ifndef MINIUPNPCTYPES_H_INCLUDED
#define MINIUPNPCTYPES_H_INCLUDED
-#if (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)
+/* Use unsigned long long when available :
+ * strtoull is C99 */
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
#define UNSIGNED_INTEGER unsigned long long
#define STRTOUI strtoull
#else
diff --git a/thirdparty/miniupnpc/miniupnpc/miniwget.h b/thirdparty/miniupnpc/include/miniwget.h
index f5572c2544..f5572c2544 100644
--- a/thirdparty/miniupnpc/miniupnpc/miniwget.h
+++ b/thirdparty/miniupnpc/include/miniwget.h
diff --git a/thirdparty/miniupnpc/miniupnpc/portlistingparse.h b/thirdparty/miniupnpc/include/portlistingparse.h
index e3957a3f4c..e3957a3f4c 100644
--- a/thirdparty/miniupnpc/miniupnpc/portlistingparse.h
+++ b/thirdparty/miniupnpc/include/portlistingparse.h
diff --git a/thirdparty/miniupnpc/miniupnpc/upnpcommands.h b/thirdparty/miniupnpc/include/upnpcommands.h
index 1b6d447732..1b6d447732 100644
--- a/thirdparty/miniupnpc/miniupnpc/upnpcommands.h
+++ b/thirdparty/miniupnpc/include/upnpcommands.h
diff --git a/thirdparty/miniupnpc/miniupnpc/upnpdev.h b/thirdparty/miniupnpc/include/upnpdev.h
index 9b2cb431ba..171d495be3 100644
--- a/thirdparty/miniupnpc/miniupnpc/upnpdev.h
+++ b/thirdparty/miniupnpc/include/upnpdev.h
@@ -1,8 +1,8 @@
-/* $Id: upnpdev.h,v 1.3 2020/05/29 15:57:42 nanard Exp $ */
+/* $Id: upnpdev.h,v 1.4 2021/08/21 09:45:01 nanard Exp $ */
/* Project : miniupnp
* Web : http://miniupnp.free.fr/ or https://miniupnp.tuxfamily.org/
* Author : Thomas BERNARD
- * copyright (c) 2005-2020 Thomas Bernard
+ * copyright (c) 2005-2021 Thomas Bernard
* This software is subjet to the conditions detailed in the
* provided LICENSE file. */
#ifndef UPNPDEV_H_INCLUDED
@@ -20,7 +20,7 @@ struct UPNPDev {
char * st;
char * usn;
unsigned int scope_id;
-#if defined(__STDC_VERSION) && __STDC_VERSION__ >= 199901L
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
/* C99 flexible array member */
char buffer[];
#elif defined(__GNUC__)
diff --git a/thirdparty/miniupnpc/miniupnpc/upnpreplyparse.h b/thirdparty/miniupnpc/include/upnpreplyparse.h
index 6badd15b26..6badd15b26 100644
--- a/thirdparty/miniupnpc/miniupnpc/upnpreplyparse.h
+++ b/thirdparty/miniupnpc/include/upnpreplyparse.h
diff --git a/thirdparty/miniupnpc/miniupnpc/addr_is_reserved.c b/thirdparty/miniupnpc/src/addr_is_reserved.c
index 7e586d7da2..18c6424201 100644
--- a/thirdparty/miniupnpc/miniupnpc/addr_is_reserved.c
+++ b/thirdparty/miniupnpc/src/addr_is_reserved.c
@@ -56,7 +56,7 @@ int addr_is_reserved(const char * addr_str)
uint32_t addr_n, address;
size_t i;
-#if defined(_WIN32) && (!defined(_WIN32_WINNT_VISTA) || (_WIN32_WINNT < _WIN32_WINNT_VISTA))
+#if defined(_WIN32) && _WIN32_WINNT < 0x0600 // _WIN32_WINNT_VISTA
addr_n = inet_addr(addr_str);
if (addr_n == INADDR_NONE)
return 1;
diff --git a/thirdparty/miniupnpc/miniupnpc/addr_is_reserved.h b/thirdparty/miniupnpc/src/addr_is_reserved.h
index f8b5d66a09..f8b5d66a09 100644
--- a/thirdparty/miniupnpc/miniupnpc/addr_is_reserved.h
+++ b/thirdparty/miniupnpc/src/addr_is_reserved.h
diff --git a/thirdparty/miniupnpc/miniupnpc/codelength.h b/thirdparty/miniupnpc/src/codelength.h
index ea0b005ffe..ea0b005ffe 100644
--- a/thirdparty/miniupnpc/miniupnpc/codelength.h
+++ b/thirdparty/miniupnpc/src/codelength.h
diff --git a/thirdparty/miniupnpc/miniupnpc/connecthostport.c b/thirdparty/miniupnpc/src/connecthostport.c
index 79f832b8db..79f832b8db 100644
--- a/thirdparty/miniupnpc/miniupnpc/connecthostport.c
+++ b/thirdparty/miniupnpc/src/connecthostport.c
diff --git a/thirdparty/miniupnpc/miniupnpc/connecthostport.h b/thirdparty/miniupnpc/src/connecthostport.h
index 701816b5b6..701816b5b6 100644
--- a/thirdparty/miniupnpc/miniupnpc/connecthostport.h
+++ b/thirdparty/miniupnpc/src/connecthostport.h
diff --git a/thirdparty/miniupnpc/miniupnpc/igd_desc_parse.c b/thirdparty/miniupnpc/src/igd_desc_parse.c
index d2999ad011..d2999ad011 100644
--- a/thirdparty/miniupnpc/miniupnpc/igd_desc_parse.c
+++ b/thirdparty/miniupnpc/src/igd_desc_parse.c
diff --git a/thirdparty/miniupnpc/miniupnpc/minisoap.c b/thirdparty/miniupnpc/src/minisoap.c
index 78606672d5..78606672d5 100644
--- a/thirdparty/miniupnpc/miniupnpc/minisoap.c
+++ b/thirdparty/miniupnpc/src/minisoap.c
diff --git a/thirdparty/miniupnpc/miniupnpc/minisoap.h b/thirdparty/miniupnpc/src/minisoap.h
index d6a45d03ba..d6a45d03ba 100644
--- a/thirdparty/miniupnpc/miniupnpc/minisoap.h
+++ b/thirdparty/miniupnpc/src/minisoap.h
diff --git a/thirdparty/miniupnpc/miniupnpc/minissdpc.c b/thirdparty/miniupnpc/src/minissdpc.c
index 5d3a0fd049..edebb1600a 100644
--- a/thirdparty/miniupnpc/miniupnpc/minissdpc.c
+++ b/thirdparty/miniupnpc/src/minissdpc.c
@@ -1,4 +1,4 @@
-/* $Id: minissdpc.c,v 1.47 2021/03/02 23:38:30 nanard Exp $ */
+/* $Id: minissdpc.c,v 1.49 2021/05/13 11:00:36 nanard Exp $ */
/* vim: tabstop=4 shiftwidth=4 noexpandtab
* Project : miniupnp
* Web : http://miniupnp.free.fr/ or https://miniupnp.tuxfamily.org/
@@ -460,7 +460,7 @@ parseMSEARCHReply(const char * reply, int size,
static int upnp_gettimeofday(struct timeval * tv)
{
#if defined(_WIN32)
-#if defined(_WIN32_WINNT_VISTA) && (_WIN32_WINNT >= _WIN32_WINNT_VISTA)
+#if _WIN32_WINNT >= 0x0600 // _WIN32_WINNT_VISTA
ULONGLONG ts = GetTickCount64();
#else
DWORD ts = GetTickCount();
@@ -469,14 +469,29 @@ static int upnp_gettimeofday(struct timeval * tv)
tv->tv_usec = (ts % 1000) * 1000;
return 0; /* success */
#elif defined(CLOCK_MONOTONIC_FAST) || defined(CLOCK_MONOTONIC)
- struct timespec ts;
- int ret_code = clock_gettime(UPNP_CLOCKID, &ts);
- if (ret_code == 0)
+#if defined(__APPLE__)
+#if defined(__clang__)
+ if (__builtin_available(macOS 10.12, iOS 10.0, tvOS 10.0, watchOS 3.0, *)) {
+#else /* !defined(__clang__) */
+ if (clock_gettime != NULL) {
+#endif /* defined(__clang__) */
+#endif /* defined(__APPLE__) */
+ struct timespec ts;
+ int ret_code = clock_gettime(UPNP_CLOCKID, &ts);
+ if (ret_code == 0)
+ {
+ tv->tv_sec = ts.tv_sec;
+ tv->tv_usec = ts.tv_nsec / 1000;
+ }
+ return ret_code;
+#if defined(__APPLE__)
+ }
+ else
{
- tv->tv_sec = ts.tv_sec;
- tv->tv_usec = ts.tv_nsec / 1000;
+ /* fall-back for earlier Apple platforms */
+ return gettimeofday(tv, NULL);
}
- return ret_code;
+#endif /* defined(__APPLE__) */
#else
return gettimeofday(tv, NULL);
#endif
@@ -705,7 +720,7 @@ ssdpDiscoverDevices(const char * const deviceTypes[],
}
}
- if(multicastif)
+ if(multicastif && multicastif[0] != '\0')
{
if(ipv6) {
#if !defined(_WIN32)
@@ -732,7 +747,7 @@ ssdpDiscoverDevices(const char * const deviceTypes[],
} else {
struct in_addr mc_if;
#if defined(_WIN32)
-#if defined(_WIN32_WINNT_VISTA) && (_WIN32_WINNT >= _WIN32_WINNT_VISTA)
+#if _WIN32_WINNT >= 0x0600 // _WIN32_WINNT_VISTA
InetPtonA(AF_INET, multicastif, &mc_if);
#else
mc_if.s_addr = inet_addr(multicastif); /* old Windows SDK do not support InetPtoA() */
diff --git a/thirdparty/miniupnpc/miniupnpc/minissdpc.h b/thirdparty/miniupnpc/src/minissdpc.h
index c99f929b9e..c99f929b9e 100644
--- a/thirdparty/miniupnpc/miniupnpc/minissdpc.h
+++ b/thirdparty/miniupnpc/src/minissdpc.h
diff --git a/thirdparty/miniupnpc/miniupnpc/miniupnpc.c b/thirdparty/miniupnpc/src/miniupnpc.c
index 696af93237..696af93237 100644
--- a/thirdparty/miniupnpc/miniupnpc/miniupnpc.c
+++ b/thirdparty/miniupnpc/src/miniupnpc.c
diff --git a/thirdparty/miniupnpc/miniupnpc/miniupnpc_socketdef.h b/thirdparty/miniupnpc/src/miniupnpc_socketdef.h
index 5986e58c76..5986e58c76 100644
--- a/thirdparty/miniupnpc/miniupnpc/miniupnpc_socketdef.h
+++ b/thirdparty/miniupnpc/src/miniupnpc_socketdef.h
diff --git a/thirdparty/miniupnpc/miniupnpc/miniupnpcstrings.h b/thirdparty/miniupnpc/src/miniupnpcstrings.h
index 7b3d04074a..eefbc8dbdd 100644
--- a/thirdparty/miniupnpc/miniupnpc/miniupnpcstrings.h
+++ b/thirdparty/miniupnpc/src/miniupnpcstrings.h
@@ -4,7 +4,7 @@
#include "core/version.h"
#define OS_STRING VERSION_NAME "/1.0"
-#define MINIUPNPC_VERSION_STRING "2.2.2"
+#define MINIUPNPC_VERSION_STRING "2.2.3"
#if 0
/* according to "UPnP Device Architecture 1.0" */
diff --git a/thirdparty/miniupnpc/miniupnpc/miniwget.c b/thirdparty/miniupnpc/src/miniwget.c
index d5b7970632..d5b7970632 100644
--- a/thirdparty/miniupnpc/miniupnpc/miniwget.c
+++ b/thirdparty/miniupnpc/src/miniwget.c
diff --git a/thirdparty/miniupnpc/miniupnpc/miniwget_private.h b/thirdparty/miniupnpc/src/miniwget_private.h
index e4eaac8085..e4eaac8085 100644
--- a/thirdparty/miniupnpc/miniupnpc/miniwget_private.h
+++ b/thirdparty/miniupnpc/src/miniwget_private.h
diff --git a/thirdparty/miniupnpc/miniupnpc/minixml.c b/thirdparty/miniupnpc/src/minixml.c
index ed2d3c759c..ed2d3c759c 100644
--- a/thirdparty/miniupnpc/miniupnpc/minixml.c
+++ b/thirdparty/miniupnpc/src/minixml.c
diff --git a/thirdparty/miniupnpc/miniupnpc/minixml.h b/thirdparty/miniupnpc/src/minixml.h
index 2e60397388..2e60397388 100644
--- a/thirdparty/miniupnpc/miniupnpc/minixml.h
+++ b/thirdparty/miniupnpc/src/minixml.h
diff --git a/thirdparty/miniupnpc/miniupnpc/minixmlvalid.c b/thirdparty/miniupnpc/src/minixmlvalid.c
index dad1488122..dad1488122 100644
--- a/thirdparty/miniupnpc/miniupnpc/minixmlvalid.c
+++ b/thirdparty/miniupnpc/src/minixmlvalid.c
diff --git a/thirdparty/miniupnpc/miniupnpc/portlistingparse.c b/thirdparty/miniupnpc/src/portlistingparse.c
index 162cf8b7ec..162cf8b7ec 100644
--- a/thirdparty/miniupnpc/miniupnpc/portlistingparse.c
+++ b/thirdparty/miniupnpc/src/portlistingparse.c
diff --git a/thirdparty/miniupnpc/miniupnpc/receivedata.c b/thirdparty/miniupnpc/src/receivedata.c
index 7f187f6e56..7f187f6e56 100644
--- a/thirdparty/miniupnpc/miniupnpc/receivedata.c
+++ b/thirdparty/miniupnpc/src/receivedata.c
diff --git a/thirdparty/miniupnpc/miniupnpc/receivedata.h b/thirdparty/miniupnpc/src/receivedata.h
index c9fdc561f8..c9fdc561f8 100644
--- a/thirdparty/miniupnpc/miniupnpc/receivedata.h
+++ b/thirdparty/miniupnpc/src/receivedata.h
diff --git a/thirdparty/miniupnpc/miniupnpc/upnpcommands.c b/thirdparty/miniupnpc/src/upnpcommands.c
index 1e1ee6786f..1e1ee6786f 100644
--- a/thirdparty/miniupnpc/miniupnpc/upnpcommands.c
+++ b/thirdparty/miniupnpc/src/upnpcommands.c
diff --git a/thirdparty/miniupnpc/miniupnpc/upnpdev.c b/thirdparty/miniupnpc/src/upnpdev.c
index d89a9934c3..d89a9934c3 100644
--- a/thirdparty/miniupnpc/miniupnpc/upnpdev.c
+++ b/thirdparty/miniupnpc/src/upnpdev.c
diff --git a/thirdparty/miniupnpc/miniupnpc/upnpreplyparse.c b/thirdparty/miniupnpc/src/upnpreplyparse.c
index 4d06f0585d..4d06f0585d 100644
--- a/thirdparty/miniupnpc/miniupnpc/upnpreplyparse.c
+++ b/thirdparty/miniupnpc/src/upnpreplyparse.c
diff --git a/thirdparty/miniupnpc/miniupnpc/win32_snprintf.h b/thirdparty/miniupnpc/src/win32_snprintf.h
index 1fc284ecff..1fc284ecff 100644
--- a/thirdparty/miniupnpc/miniupnpc/win32_snprintf.h
+++ b/thirdparty/miniupnpc/src/win32_snprintf.h
diff --git a/thirdparty/pcre2/AUTHORS b/thirdparty/pcre2/AUTHORS
index f001cb770e..bec8a1e5ad 100644
--- a/thirdparty/pcre2/AUTHORS
+++ b/thirdparty/pcre2/AUTHORS
@@ -5,10 +5,10 @@ Written by: Philip Hazel
Email local part: Philip.Hazel
Email domain: gmail.com
-University of Cambridge Computing Service,
+Retired from University of Cambridge Computing Service,
Cambridge, England.
-Copyright (c) 1997-2020 University of Cambridge
+Copyright (c) 1997-2021 University of Cambridge
All rights reserved
@@ -19,7 +19,7 @@ Written by: Zoltan Herczeg
Email local part: hzmester
Emain domain: freemail.hu
-Copyright(c) 2010-2020 Zoltan Herczeg
+Copyright(c) 2010-2021 Zoltan Herczeg
All rights reserved.
@@ -30,7 +30,7 @@ Written by: Zoltan Herczeg
Email local part: hzmester
Emain domain: freemail.hu
-Copyright(c) 2009-2020 Zoltan Herczeg
+Copyright(c) 2009-2021 Zoltan Herczeg
All rights reserved.
####
diff --git a/thirdparty/pcre2/LICENCE b/thirdparty/pcre2/LICENCE
index 155d073127..b1ec61be44 100644
--- a/thirdparty/pcre2/LICENCE
+++ b/thirdparty/pcre2/LICENCE
@@ -23,10 +23,10 @@ Written by: Philip Hazel
Email local part: Philip.Hazel
Email domain: gmail.com
-University of Cambridge Computing Service,
+Retired from University of Cambridge Computing Service,
Cambridge, England.
-Copyright (c) 1997-2020 University of Cambridge
+Copyright (c) 1997-2021 University of Cambridge
All rights reserved.
@@ -37,7 +37,7 @@ Written by: Zoltan Herczeg
Email local part: hzmester
Email domain: freemail.hu
-Copyright(c) 2010-2020 Zoltan Herczeg
+Copyright(c) 2010-2021 Zoltan Herczeg
All rights reserved.
@@ -48,7 +48,7 @@ Written by: Zoltan Herczeg
Email local part: hzmester
Email domain: freemail.hu
-Copyright(c) 2009-2020 Zoltan Herczeg
+Copyright(c) 2009-2021 Zoltan Herczeg
All rights reserved.
diff --git a/thirdparty/pcre2/src/config.h b/thirdparty/pcre2/src/config.h
index 10f4104790..a13593715e 100644
--- a/thirdparty/pcre2/src/config.h
+++ b/thirdparty/pcre2/src/config.h
@@ -85,8 +85,8 @@ sure both macros are undefined; an emulation function will then be used. */
/* Define to 1 if you have the `memmove' function. */
/* #undef HAVE_MEMMOVE */
-/* Define to 1 if you have the <memory.h> header file. */
-/* #undef HAVE_MEMORY_H */
+/* Define to 1 if you have the <minix/config.h> header file. */
+/* #undef HAVE_MINIX_CONFIG_H */
/* Define to 1 if you have the `mkostemp' function. */
/* #undef HAVE_MKOSTEMP */
@@ -103,12 +103,18 @@ sure both macros are undefined; an emulation function will then be used. */
/* Define to 1 if you have the <readline/readline.h> header file. */
/* #undef HAVE_READLINE_READLINE_H */
+/* Define to 1 if you have the `realpath' function. */
+/* #undef HAVE_REALPATH */
+
/* Define to 1 if you have the `secure_getenv' function. */
/* #undef HAVE_SECURE_GETENV */
/* Define to 1 if you have the <stdint.h> header file. */
/* #undef HAVE_STDINT_H */
+/* Define to 1 if you have the <stdio.h> header file. */
+/* #undef HAVE_STDIO_H */
+
/* Define to 1 if you have the <stdlib.h> header file. */
/* #undef HAVE_STDLIB_H */
@@ -136,6 +142,9 @@ sure both macros are undefined; an emulation function will then be used. */
/* Define to 1 if the compiler supports simple visibility declarations. */
/* #undef HAVE_VISIBILITY */
+/* Define to 1 if you have the <wchar.h> header file. */
+/* #undef HAVE_WCHAR_H */
+
/* Define to 1 if you have the <windows.h> header file. */
/* #undef HAVE_WINDOWS_H */
@@ -224,7 +233,7 @@ sure both macros are undefined; an emulation function will then be used. */
#define PACKAGE_NAME "PCRE2"
/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "PCRE2 10.36"
+#define PACKAGE_STRING "PCRE2 10.39"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "pcre2"
@@ -233,7 +242,7 @@ sure both macros are undefined; an emulation function will then be used. */
#define PACKAGE_URL ""
/* Define to the version of this package. */
-#define PACKAGE_VERSION "10.36"
+#define PACKAGE_VERSION "10.39"
/* The value of PARENS_NEST_LIMIT specifies the maximum depth of nested
parentheses (of any kind) in a pattern. This limits the amount of system
@@ -286,7 +295,9 @@ sure both macros are undefined; an emulation function will then be used. */
unless SUPPORT_JIT is also defined. */
/* #undef SLJIT_PROT_EXECUTABLE_ALLOCATOR */
-/* Define to 1 if you have the ANSI C header files. */
+/* Define to 1 if all of the C90 standard headers exist (not just the ones
+ required in a freestanding environment). This macro is provided for
+ backward compatibility; new code need not use it. */
/* #undef STDC_HEADERS */
/* Define to any value to enable support for Just-In-Time compiling. */
@@ -340,35 +351,91 @@ sure both macros are undefined; an emulation function will then be used. */
#ifndef _ALL_SOURCE
# define _ALL_SOURCE 1
#endif
+/* Enable general extensions on macOS. */
+#ifndef _DARWIN_C_SOURCE
+# define _DARWIN_C_SOURCE 1
+#endif
+/* Enable general extensions on Solaris. */
+#ifndef __EXTENSIONS__
+# define __EXTENSIONS__ 1
+#endif
/* Enable GNU extensions on systems that have them. */
#ifndef _GNU_SOURCE
# define _GNU_SOURCE 1
#endif
-/* Enable threading extensions on Solaris. */
+/* Enable X/Open compliant socket functions that do not require linking
+ with -lxnet on HP-UX 11.11. */
+#ifndef _HPUX_ALT_XOPEN_SOCKET_API
+# define _HPUX_ALT_XOPEN_SOCKET_API 1
+#endif
+/* Identify the host operating system as Minix.
+ This macro does not affect the system headers' behavior.
+ A future release of Autoconf may stop defining this macro. */
+#ifndef _MINIX
+/* # undef _MINIX */
+#endif
+/* Enable general extensions on NetBSD.
+ Enable NetBSD compatibility extensions on Minix. */
+#ifndef _NETBSD_SOURCE
+# define _NETBSD_SOURCE 1
+#endif
+/* Enable OpenBSD compatibility extensions on NetBSD.
+ Oddly enough, this does nothing on OpenBSD. */
+#ifndef _OPENBSD_SOURCE
+# define _OPENBSD_SOURCE 1
+#endif
+/* Define to 1 if needed for POSIX-compatible behavior. */
+#ifndef _POSIX_SOURCE
+/* # undef _POSIX_SOURCE */
+#endif
+/* Define to 2 if needed for POSIX-compatible behavior. */
+#ifndef _POSIX_1_SOURCE
+/* # undef _POSIX_1_SOURCE */
+#endif
+/* Enable POSIX-compatible threading on Solaris. */
#ifndef _POSIX_PTHREAD_SEMANTICS
# define _POSIX_PTHREAD_SEMANTICS 1
#endif
+/* Enable extensions specified by ISO/IEC TS 18661-5:2014. */
+#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__
+# define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-1:2014. */
+#ifndef __STDC_WANT_IEC_60559_BFP_EXT__
+# define __STDC_WANT_IEC_60559_BFP_EXT__ 1
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-2:2015. */
+#ifndef __STDC_WANT_IEC_60559_DFP_EXT__
+# define __STDC_WANT_IEC_60559_DFP_EXT__ 1
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-4:2015. */
+#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__
+# define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-3:2015. */
+#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__
+# define __STDC_WANT_IEC_60559_TYPES_EXT__ 1
+#endif
+/* Enable extensions specified by ISO/IEC TR 24731-2:2010. */
+#ifndef __STDC_WANT_LIB_EXT2__
+# define __STDC_WANT_LIB_EXT2__ 1
+#endif
+/* Enable extensions specified by ISO/IEC 24747:2009. */
+#ifndef __STDC_WANT_MATH_SPEC_FUNCS__
+# define __STDC_WANT_MATH_SPEC_FUNCS__ 1
+#endif
/* Enable extensions on HP NonStop. */
#ifndef _TANDEM_SOURCE
# define _TANDEM_SOURCE 1
#endif
-/* Enable general extensions on Solaris. */
-#ifndef __EXTENSIONS__
-# define __EXTENSIONS__ 1
+/* Enable X/Open extensions. Define to 500 only if necessary
+ to make mbstate_t available. */
+#ifndef _XOPEN_SOURCE
+/* # undef _XOPEN_SOURCE */
#endif
/* Version number of package */
-#define VERSION "10.36"
-
-/* Define to 1 if on MINIX. */
-/* #undef _MINIX */
-
-/* Define to 2 if the system does not provide POSIX.1 features except with
- this defined. */
-/* #undef _POSIX_1_SOURCE */
-
-/* Define to 1 if you need to in order for `stat' and other things to work. */
-/* #undef _POSIX_SOURCE */
+#define VERSION "10.39"
/* Define to empty if `const' does not conform to ANSI C. */
/* #undef const */
diff --git a/thirdparty/pcre2/src/pcre2.h b/thirdparty/pcre2/src/pcre2.h
index f204ec8180..90a97d9cb7 100644
--- a/thirdparty/pcre2/src/pcre2.h
+++ b/thirdparty/pcre2/src/pcre2.h
@@ -5,7 +5,7 @@
/* This is the public header file for the PCRE library, second API, to be
#included by applications that call PCRE2 functions.
- Copyright (c) 2016-2020 University of Cambridge
+ Copyright (c) 2016-2021 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -42,9 +42,9 @@ POSSIBILITY OF SUCH DAMAGE.
/* The current PCRE version information. */
#define PCRE2_MAJOR 10
-#define PCRE2_MINOR 36
+#define PCRE2_MINOR 39
#define PCRE2_PRERELEASE
-#define PCRE2_DATE 2020-12-04
+#define PCRE2_DATE 2021-10-29
/* When an application links to a PCRE DLL in Windows, the symbols that are
imported have to be identified as such. When building PCRE2, the appropriate
@@ -84,8 +84,8 @@ set, we ensure here that it has no effect. */
/* Have to include limits.h, stdlib.h, and inttypes.h to ensure that size_t and
uint8_t, UCHAR_MAX, etc are defined. Some systems that do have inttypes.h do
not have stdint.h, which is why we use inttypes.h, which according to the C
-standard is a superset of stdint.h. If none of these headers are available,
-the relevant values must be provided by some other means. */
+standard is a superset of stdint.h. If inttypes.h is not available the build
+will break and the relevant values must be provided by some other means. */
#include <limits.h>
#include <stdlib.h>
@@ -152,6 +152,7 @@ D is inspected during pcre2_dfa_match() execution
#define PCRE2_EXTRA_MATCH_LINE 0x00000008u /* C */
#define PCRE2_EXTRA_ESCAPED_CR_IS_LF 0x00000010u /* C */
#define PCRE2_EXTRA_ALT_BSUX 0x00000020u /* C */
+#define PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK 0x00000040u /* C */
/* These are for pcre2_jit_compile(). */
@@ -311,6 +312,7 @@ pcre2_pattern_convert(). */
#define PCRE2_ERROR_SCRIPT_RUN_NOT_AVAILABLE 196
#define PCRE2_ERROR_TOO_MANY_CAPTURES 197
#define PCRE2_ERROR_CONDITION_ATOMIC_ASSERTION_EXPECTED 198
+#define PCRE2_ERROR_BACKSLASH_K_IN_LOOKAROUND 199
/* "Expected" matching error codes: no match and partial match. */
diff --git a/thirdparty/pcre2/src/pcre2_auto_possess.c b/thirdparty/pcre2/src/pcre2_auto_possess.c
index c64cf856d1..e5e0895682 100644
--- a/thirdparty/pcre2/src/pcre2_auto_possess.c
+++ b/thirdparty/pcre2/src/pcre2_auto_possess.c
@@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
Original API code Copyright (c) 1997-2012 University of Cambridge
- New API code Copyright (c) 2016-2020 University of Cambridge
+ New API code Copyright (c) 2016-2021 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -490,6 +490,7 @@ switch(c)
list[2] = (uint32_t)(end - code);
return end;
}
+
return NULL; /* Opcode not accepted */
}
@@ -1186,12 +1187,16 @@ for (;;)
c = *repeat_opcode;
if (c >= OP_CRSTAR && c <= OP_CRMINRANGE)
{
- /* end must not be NULL. */
- end = get_chr_property_list(code, utf, ucp, cb->fcc, list);
+ /* The return from get_chr_property_list() will never be NULL when
+ *code (aka c) is one of the three class opcodes. However, gcc with
+ -fanalyzer notes that a NULL return is possible, and grumbles. Hence we
+ put in a check. */
+ end = get_chr_property_list(code, utf, ucp, cb->fcc, list);
list[1] = (c & 1) == 0;
- if (compare_opcodes(end, utf, ucp, cb, list, end, &rec_limit))
+ if (end != NULL &&
+ compare_opcodes(end, utf, ucp, cb, list, end, &rec_limit))
{
switch (c)
{
diff --git a/thirdparty/pcre2/src/pcre2_compile.c b/thirdparty/pcre2/src/pcre2_compile.c
index e811f12f02..383159be76 100644
--- a/thirdparty/pcre2/src/pcre2_compile.c
+++ b/thirdparty/pcre2/src/pcre2_compile.c
@@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
Original API code Copyright (c) 1997-2012 University of Cambridge
- New API code Copyright (c) 2016-2020 University of Cambridge
+ New API code Copyright (c) 2016-2021 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -137,7 +137,7 @@ static BOOL
static int
check_lookbehinds(uint32_t *, uint32_t **, parsed_recurse_check *,
- compile_block *);
+ compile_block *, int *);
/*************************************************
@@ -782,12 +782,15 @@ are allowed. */
#define PUBLIC_COMPILE_EXTRA_OPTIONS \
(PUBLIC_LITERAL_COMPILE_EXTRA_OPTIONS| \
PCRE2_EXTRA_ALLOW_SURROGATE_ESCAPES|PCRE2_EXTRA_BAD_ESCAPE_IS_LITERAL| \
- PCRE2_EXTRA_ESCAPED_CR_IS_LF|PCRE2_EXTRA_ALT_BSUX)
+ PCRE2_EXTRA_ESCAPED_CR_IS_LF|PCRE2_EXTRA_ALT_BSUX| \
+ PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK)
/* Compile time error code numbers. They are given names so that they can more
easily be tracked. When a new number is added, the tables called eint1 and
eint2 in pcre2posix.c may need to be updated, and a new error text must be
-added to compile_error_texts in pcre2_error.c. */
+added to compile_error_texts in pcre2_error.c. Also, the error codes in
+pcre2.h.in must be updated - their values are exactly 100 greater than these
+values. */
enum { ERR0 = COMPILE_ERROR_BASE,
ERR1, ERR2, ERR3, ERR4, ERR5, ERR6, ERR7, ERR8, ERR9, ERR10,
@@ -799,7 +802,7 @@ enum { ERR0 = COMPILE_ERROR_BASE,
ERR61, ERR62, ERR63, ERR64, ERR65, ERR66, ERR67, ERR68, ERR69, ERR70,
ERR71, ERR72, ERR73, ERR74, ERR75, ERR76, ERR77, ERR78, ERR79, ERR80,
ERR81, ERR82, ERR83, ERR84, ERR85, ERR86, ERR87, ERR88, ERR89, ERR90,
- ERR91, ERR92, ERR93, ERR94, ERR95, ERR96, ERR97, ERR98 };
+ ERR91, ERR92, ERR93, ERR94, ERR95, ERR96, ERR97, ERR98, ERR99 };
/* This is a table of start-of-pattern options such as (*UTF) and settings such
as (*LIMIT_MATCH=nnnn) and (*CRLF). For completeness and backward
@@ -1398,32 +1401,47 @@ static BOOL
read_repeat_counts(PCRE2_SPTR *ptrptr, PCRE2_SPTR ptrend, uint32_t *minp,
uint32_t *maxp, int *errorcodeptr)
{
-PCRE2_SPTR p = *ptrptr;
+PCRE2_SPTR p;
BOOL yield = FALSE;
+BOOL had_comma = FALSE;
int32_t min = 0;
int32_t max = REPEAT_UNLIMITED; /* This value is larger than MAX_REPEAT_COUNT */
-/* NB read_number() initializes the error code to zero. The only error is for a
-number that is too big. */
+/* Check the syntax */
+
+*errorcodeptr = 0;
+for (p = *ptrptr;; p++)
+ {
+ uint32_t c;
+ if (p >= ptrend) return FALSE;
+ c = *p;
+ if (IS_DIGIT(c)) continue;
+ if (c == CHAR_RIGHT_CURLY_BRACKET) break;
+ if (c == CHAR_COMMA)
+ {
+ if (had_comma) return FALSE;
+ had_comma = TRUE;
+ }
+ else return FALSE;
+ }
+
+/* The only error from read_number() is for a number that is too big. */
+p = *ptrptr;
if (!read_number(&p, ptrend, -1, MAX_REPEAT_COUNT, ERR5, &min, errorcodeptr))
goto EXIT;
-if (p >= ptrend) goto EXIT;
-
if (*p == CHAR_RIGHT_CURLY_BRACKET)
{
p++;
max = min;
}
-
else
{
- if (*p++ != CHAR_COMMA || p >= ptrend) goto EXIT;
- if (*p != CHAR_RIGHT_CURLY_BRACKET)
+ if (*(++p) != CHAR_RIGHT_CURLY_BRACKET)
{
if (!read_number(&p, ptrend, -1, MAX_REPEAT_COUNT, ERR5, &max,
- errorcodeptr) || p >= ptrend || *p != CHAR_RIGHT_CURLY_BRACKET)
+ errorcodeptr))
goto EXIT;
if (max < min)
{
@@ -1438,11 +1456,10 @@ yield = TRUE;
if (minp != NULL) *minp = (uint32_t)min;
if (maxp != NULL) *maxp = (uint32_t)max;
-/* Update the pattern pointer on success, or after an error, but not when
-the result is "not a repeat quantifier". */
+/* Update the pattern pointer */
EXIT:
-if (yield || *errorcodeptr != 0) *ptrptr = p;
+*ptrptr = p;
return yield;
}
@@ -1776,19 +1793,23 @@ else
{
oldptr = ptr;
ptr--; /* Back to the digit */
- if (!read_number(&ptr, ptrend, -1, INT_MAX/10 - 1, ERR61, &s,
- errorcodeptr))
- break;
- /* \1 to \9 are always back references. \8x and \9x are too; \1x to \7x
+ /* As we know we are at a digit, the only possible error from
+ read_number() is a number that is too large to be a group number. In this
+ case we fall through handle this as not a group reference. If we have
+ read a small enough number, check for a back reference.
+
+ \1 to \9 are always back references. \8x and \9x are too; \1x to \7x
are octal escapes if there are not that many previous captures. */
- if (s < 10 || oldptr[-1] >= CHAR_8 || s <= (int)cb->bracount)
+ if (read_number(&ptr, ptrend, -1, INT_MAX/10 - 1, 0, &s, errorcodeptr) &&
+ (s < 10 || oldptr[-1] >= CHAR_8 || s <= (int)cb->bracount))
{
if (s > (int)MAX_GROUP_NUMBER) *errorcodeptr = ERR61;
else escape = -s; /* Indicates a back reference */
break;
}
+
ptr = oldptr; /* Put the pointer back and fall through */
}
@@ -7781,6 +7802,16 @@ for (;; pptr++)
}
#endif
+ /* \K is forbidden in lookarounds since 10.38 because that's what Perl has
+ done. However, there's an option, in case anyone was relying on it. */
+
+ if (cb->assert_depth > 0 && meta_arg == ESC_K &&
+ (cb->cx->extra_options & PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK) == 0)
+ {
+ *errorcodeptr = ERR99;
+ return 0;
+ }
+
/* For the rest (including \X when Unicode is supported - if not it's
faulted at parse time), the OP value is the escape value when PCRE2_UCP is
not set; if it is set, these escapes do not show up here because they are
@@ -9130,7 +9161,7 @@ for (;; pptr++)
case META_LOOKAHEAD:
case META_LOOKAHEADNOT:
case META_LOOKAHEAD_NA:
- *errcodeptr = check_lookbehinds(pptr + 1, &pptr, recurses, cb);
+ *errcodeptr = check_lookbehinds(pptr + 1, &pptr, recurses, cb, lcptr);
if (*errcodeptr != 0) return -1;
/* Ignore any qualifiers that follow a lookahead assertion. */
@@ -9470,16 +9501,16 @@ Arguments
retptr if not NULL, return the ket pointer here
recurses chain of recurse_check to catch mutual recursion
cb points to the compile block
+ lcptr points to loop counter
Returns: 0 on success, or an errorcode (cb->erroroffset will be set)
*/
static int
check_lookbehinds(uint32_t *pptr, uint32_t **retptr,
- parsed_recurse_check *recurses, compile_block *cb)
+ parsed_recurse_check *recurses, compile_block *cb, int *lcptr)
{
int errorcode = 0;
-int loopcount = 0;
int nestlevel = 0;
cb->erroroffset = PCRE2_UNSET;
@@ -9605,7 +9636,7 @@ for (; *pptr != META_END; pptr++)
case META_LOOKBEHIND:
case META_LOOKBEHINDNOT:
case META_LOOKBEHIND_NA:
- if (!set_lookbehind_lengths(&pptr, &errorcode, &loopcount, recurses, cb))
+ if (!set_lookbehind_lengths(&pptr, &errorcode, lcptr, recurses, cb))
return errorcode;
break;
}
@@ -10060,7 +10091,8 @@ lengths. */
if (has_lookbehind)
{
- errorcode = check_lookbehinds(cb.parsed_pattern, NULL, NULL, &cb);
+ int loopcount = 0;
+ errorcode = check_lookbehinds(cb.parsed_pattern, NULL, NULL, &cb, &loopcount);
if (errorcode != 0) goto HAD_CB_ERROR;
}
diff --git a/thirdparty/pcre2/src/pcre2_dfa_match.c b/thirdparty/pcre2/src/pcre2_dfa_match.c
index 625695b7cb..060dc7669a 100644
--- a/thirdparty/pcre2/src/pcre2_dfa_match.c
+++ b/thirdparty/pcre2/src/pcre2_dfa_match.c
@@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
Original API code Copyright (c) 1997-2012 University of Cambridge
- New API code Copyright (c) 2016-2020 University of Cambridge
+ New API code Copyright (c) 2016-2021 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -3256,8 +3256,8 @@ BOOL has_first_cu = FALSE;
BOOL has_req_cu = FALSE;
#if PCRE2_CODE_UNIT_WIDTH == 8
-BOOL memchr_not_found_first_cu = FALSE;
-BOOL memchr_not_found_first_cu2 = FALSE;
+PCRE2_SPTR memchr_found_first_cu = NULL;
+PCRE2_SPTR memchr_found_first_cu2 = NULL;
#endif
PCRE2_UCHAR first_cu = 0;
@@ -3648,13 +3648,7 @@ for (;;)
}
}
- /* Not anchored. Advance to a unique first code unit if there is one. In
- 8-bit mode, the use of memchr() gives a big speed up, even though we have
- to call it twice in caseless mode, in order to find the earliest occurrence
- of the character in either of its cases. If a call to memchr() that
- searches the rest of the subject fails to find one case, remember that in
- order not to keep on repeating the search. This can make a huge difference
- when the strings are very long and only one case is present. */
+ /* Not anchored. Advance to a unique first code unit if there is one. */
else
{
@@ -3662,43 +3656,68 @@ for (;;)
{
if (first_cu != first_cu2) /* Caseless */
{
+ /* In 16-bit and 32_bit modes we have to do our own search, so can
+ look for both cases at once. */
+
#if PCRE2_CODE_UNIT_WIDTH != 8
PCRE2_UCHAR smc;
while (start_match < end_subject &&
(smc = UCHAR21TEST(start_match)) != first_cu &&
- smc != first_cu2)
+ smc != first_cu2)
start_match++;
+#else
+ /* In 8-bit mode, the use of memchr() gives a big speed up, even
+ though we have to call it twice in order to find the earliest
+ occurrence of the code unit in either of its cases. Caching is used
+ to remember the positions of previously found code units. This can
+ make a huge difference when the strings are very long and only one
+ case is actually present. */
-#else /* 8-bit code units */
PCRE2_SPTR pp1 = NULL;
PCRE2_SPTR pp2 = NULL;
- PCRE2_SIZE cu2size = end_subject - start_match;
+ PCRE2_SIZE searchlength = end_subject - start_match;
- if (!memchr_not_found_first_cu)
+ /* If we haven't got a previously found position for first_cu, or if
+ the current starting position is later, we need to do a search. If
+ the code unit is not found, set it to the end. */
+
+ if (memchr_found_first_cu == NULL ||
+ start_match > memchr_found_first_cu)
{
- pp1 = memchr(start_match, first_cu, end_subject - start_match);
- if (pp1 == NULL) memchr_not_found_first_cu = TRUE;
- else cu2size = pp1 - start_match;
+ pp1 = memchr(start_match, first_cu, searchlength);
+ memchr_found_first_cu = (pp1 == NULL)? end_subject : pp1;
}
- /* If pp1 is not NULL, we have arranged to search only as far as pp1,
- to see if the other case is earlier, so we can set "not found" only
- when both searches have returned NULL. */
+ /* If the start is before a previously found position, use the
+ previous position, or NULL if a previous search failed. */
+
+ else pp1 = (memchr_found_first_cu == end_subject)? NULL :
+ memchr_found_first_cu;
- if (!memchr_not_found_first_cu2)
+ /* Do the same thing for the other case. */
+
+ if (memchr_found_first_cu2 == NULL ||
+ start_match > memchr_found_first_cu2)
{
- pp2 = memchr(start_match, first_cu2, cu2size);
- memchr_not_found_first_cu2 = (pp2 == NULL && pp1 == NULL);
+ pp2 = memchr(start_match, first_cu2, searchlength);
+ memchr_found_first_cu2 = (pp2 == NULL)? end_subject : pp2;
}
+ else pp2 = (memchr_found_first_cu2 == end_subject)? NULL :
+ memchr_found_first_cu2;
+
+ /* Set the start to the end of the subject if neither case was found.
+ Otherwise, use the earlier found point. */
+
if (pp1 == NULL)
start_match = (pp2 == NULL)? end_subject : pp2;
else
start_match = (pp2 == NULL || pp1 < pp2)? pp1 : pp2;
-#endif
+
+#endif /* 8-bit handling */
}
- /* The caseful case */
+ /* The caseful case is much simpler. */
else
{
diff --git a/thirdparty/pcre2/src/pcre2_error.c b/thirdparty/pcre2/src/pcre2_error.c
index c61648cb7f..3dee63d0db 100644
--- a/thirdparty/pcre2/src/pcre2_error.c
+++ b/thirdparty/pcre2/src/pcre2_error.c
@@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
Original API code Copyright (c) 1997-2012 University of Cambridge
- New API code Copyright (c) 2016-2019 University of Cambridge
+ New API code Copyright (c) 2016-2021 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -186,6 +186,7 @@ static const unsigned char compile_error_texts[] =
"script runs require Unicode support, which this version of PCRE2 does not have\0"
"too many capturing groups (maximum 65535)\0"
"atomic assertion expected after (?( or (?(?C)\0"
+ "\\K is not allowed in lookarounds (but see PCRE2_EXTRA_ALLOW_LOOKAROUND_BSK)\0"
;
/* Match-time and UTF error texts are in the same format. */
diff --git a/thirdparty/pcre2/src/pcre2_jit_compile.c b/thirdparty/pcre2/src/pcre2_jit_compile.c
index 1977d28aa5..db2ce65598 100644
--- a/thirdparty/pcre2/src/pcre2_jit_compile.c
+++ b/thirdparty/pcre2/src/pcre2_jit_compile.c
@@ -1226,7 +1226,7 @@ while (cc < ccend)
return TRUE;
}
-#define EARLY_FAIL_ENHANCE_MAX (1 + 1)
+#define EARLY_FAIL_ENHANCE_MAX (1 + 3)
/*
start:
@@ -1236,23 +1236,28 @@ start:
return: current number of iterators enhanced with fast fail
*/
-static int detect_early_fail(compiler_common *common, PCRE2_SPTR cc, int *private_data_start, sljit_s32 depth, int start)
+static int detect_early_fail(compiler_common *common, PCRE2_SPTR cc, int *private_data_start,
+ sljit_s32 depth, int start, BOOL fast_forward_allowed)
{
+PCRE2_SPTR begin = cc;
PCRE2_SPTR next_alt;
PCRE2_SPTR end;
PCRE2_SPTR accelerated_start;
+BOOL prev_fast_forward_allowed;
int result = 0;
int count;
-BOOL fast_forward_allowed = TRUE;
SLJIT_ASSERT(*cc == OP_ONCE || *cc == OP_BRA || *cc == OP_CBRA);
SLJIT_ASSERT(*cc != OP_CBRA || common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] != 0);
SLJIT_ASSERT(start < EARLY_FAIL_ENHANCE_MAX);
+next_alt = cc + GET(cc, 1);
+if (*next_alt == OP_ALT)
+ fast_forward_allowed = FALSE;
+
do
{
count = start;
- next_alt = cc + GET(cc, 1);
cc += 1 + LINK_SIZE + ((*cc == OP_CBRA) ? IMM2_SIZE : 0);
while (TRUE)
@@ -1475,31 +1480,20 @@ do
case OP_CBRA:
end = cc + GET(cc, 1);
- if (*end == OP_KET && PRIVATE_DATA(end) == 0)
- {
- if (*cc == OP_CBRA)
- {
- if (common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] == 0)
- break;
- cc += IMM2_SIZE;
- }
-
- cc += 1 + LINK_SIZE;
- continue;
- }
-
+ prev_fast_forward_allowed = fast_forward_allowed;
fast_forward_allowed = FALSE;
if (depth >= 4)
break;
end = bracketend(cc) - (1 + LINK_SIZE);
- if (*end != OP_KET || PRIVATE_DATA(end) != 0)
+ if (*end != OP_KET || (*cc == OP_CBRA && common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] == 0))
break;
- if (*cc == OP_CBRA && common->optimized_cbracket[GET2(cc, 1 + LINK_SIZE)] == 0)
- break;
+ count = detect_early_fail(common, cc, private_data_start, depth + 1, count, prev_fast_forward_allowed);
+
+ if (PRIVATE_DATA(cc) != 0)
+ common->private_data_ptrs[begin - common->start] = 1;
- count = detect_early_fail(common, cc, private_data_start, depth + 1, count);
if (count < EARLY_FAIL_ENHANCE_MAX)
{
cc = end + (1 + LINK_SIZE);
@@ -1521,7 +1515,7 @@ do
{
count++;
- if (fast_forward_allowed && *next_alt == OP_KET)
+ if (fast_forward_allowed)
{
common->fast_forward_bc_ptr = accelerated_start;
common->private_data_ptrs[(accelerated_start + 1) - common->start] = ((*private_data_start) << 3) | type_skip;
@@ -1555,6 +1549,8 @@ do
return EARLY_FAIL_ENHANCE_MAX;
}
+ /* Cannot be part of a repeat. */
+ common->private_data_ptrs[begin - common->start] = 1;
count++;
if (count < EARLY_FAIL_ENHANCE_MAX)
@@ -1569,8 +1565,8 @@ do
else if (result < count)
result = count;
- fast_forward_allowed = FALSE;
cc = next_alt;
+ next_alt = cc + GET(cc, 1);
}
while (*cc == OP_ALT);
@@ -1620,11 +1616,12 @@ sljit_sw length = end - begin;
sljit_s32 min, max, i;
/* Detect fixed iterations first. */
-if (end[-(1 + LINK_SIZE)] != OP_KET)
+if (end[-(1 + LINK_SIZE)] != OP_KET || PRIVATE_DATA(begin) != 0)
return FALSE;
-/* Already detected repeat. */
-if (common->private_data_ptrs[end - common->start - LINK_SIZE] != 0)
+/* /(?:AB){4,6}/ is currently converted to /(?:AB){3}(?AB){1,3}/
+ * Skip the check of the second part. */
+if (PRIVATE_DATA(end - LINK_SIZE) == 0)
return TRUE;
next = end;
@@ -1763,6 +1760,7 @@ while (cc < ccend)
if (private_data_ptr > SLJIT_MAX_LOCAL_SIZE)
break;
+ /* When the bracket is prefixed by a zero iteration, skip the repeat check (at this point). */
if (repeat_check && (*cc == OP_ONCE || *cc == OP_BRA || *cc == OP_CBRA || *cc == OP_COND))
{
if (detect_repeat(common, cc))
@@ -1813,6 +1811,7 @@ while (cc < ccend)
case OP_COND:
/* Might be a hidden SCOND. */
+ common->private_data_ptrs[cc - common->start] = 0;
alternative = cc + GET(cc, 1);
if (*alternative == OP_KETRMAX || *alternative == OP_KETRMIN)
{
@@ -4203,9 +4202,6 @@ TMP2 is not used. Otherwise TMP2 must contain the start of the subject buffer,
and it is destroyed. Does not modify STR_PTR for invalid character sequences. */
DEFINE_COMPILER;
-SLJIT_UNUSED_ARG(backtracks);
-SLJIT_UNUSED_ARG(must_be_valid);
-
#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
struct sljit_jump *jump;
#endif
@@ -4279,6 +4275,10 @@ if (common->invalid_utf && !must_be_valid)
}
#endif /* PCRE2_CODE_UNIT_WIDTH == [8|16|32] */
#endif /* SUPPORT_UNICODE */
+
+SLJIT_UNUSED_ARG(backtracks);
+SLJIT_UNUSED_ARG(must_be_valid);
+
OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));
}
@@ -8141,7 +8141,7 @@ switch(type)
}
else
OP2(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_UNUSED, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTEOL);
- add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO32));
+ add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO));
if (!common->endonly)
compile_simple_assertion_matchingpath(common, OP_EODN, cc, backtracks);
@@ -8161,7 +8161,7 @@ switch(type)
}
else
OP2(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_UNUSED, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTEOL);
- add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO32));
+ add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO));
check_partial(common, FALSE);
jump[0] = JUMP(SLJIT_JUMP);
JUMPHERE(jump[1]);
@@ -8201,14 +8201,14 @@ switch(type)
OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(jit_arguments, begin));
add_jump(compiler, backtracks, CMP(SLJIT_GREATER, STR_PTR, 0, TMP1, 0));
OP2(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_UNUSED, 0, SLJIT_MEM1(TMP2), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTBOL);
- add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO32));
+ add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO));
}
else
{
OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, begin));
add_jump(compiler, backtracks, CMP(SLJIT_GREATER, STR_PTR, 0, TMP1, 0));
OP2(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_UNUSED, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTBOL);
- add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO32));
+ add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO));
}
return cc;
@@ -8227,7 +8227,7 @@ switch(type)
jump[1] = CMP(SLJIT_GREATER, STR_PTR, 0, TMP2, 0);
OP2(SLJIT_AND32 | SLJIT_SET_Z, SLJIT_UNUSED, 0, SLJIT_MEM1(ARGUMENTS), SLJIT_OFFSETOF(jit_arguments, options), SLJIT_IMM, PCRE2_NOTBOL);
}
- add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO32));
+ add_jump(compiler, backtracks, JUMP(SLJIT_NOT_ZERO));
jump[0] = JUMP(SLJIT_JUMP);
JUMPHERE(jump[1]);
@@ -9581,11 +9581,11 @@ free_stack(common, callout_arg_size);
/* Check return value. */
OP2(SLJIT_SUB32 | SLJIT_SET_Z | SLJIT_SET_SIG_GREATER, SLJIT_UNUSED, 0, SLJIT_RETURN_REG, 0, SLJIT_IMM, 0);
-add_jump(compiler, &backtrack->topbacktracks, JUMP(SLJIT_SIG_GREATER32));
+add_jump(compiler, &backtrack->topbacktracks, JUMP(SLJIT_SIG_GREATER));
if (common->abort_label == NULL)
- add_jump(compiler, &common->abort, JUMP(SLJIT_NOT_EQUAL32) /* SIG_LESS */);
+ add_jump(compiler, &common->abort, JUMP(SLJIT_NOT_EQUAL) /* SIG_LESS */);
else
- JUMPTO(SLJIT_NOT_EQUAL32 /* SIG_LESS */, common->abort_label);
+ JUMPTO(SLJIT_NOT_EQUAL /* SIG_LESS */, common->abort_label);
return cc + callout_length;
}
@@ -11232,7 +11232,7 @@ early_fail_type = (early_fail_ptr & 0x7);
early_fail_ptr >>= 3;
/* During recursion, these optimizations are disabled. */
-if (common->early_fail_start_ptr == 0)
+if (common->early_fail_start_ptr == 0 && common->fast_forward_bc_ptr == NULL)
{
early_fail_ptr = 0;
early_fail_type = type_skip;
@@ -13661,9 +13661,11 @@ if (!common->private_data_ptrs)
memset(common->private_data_ptrs, 0, total_length * sizeof(sljit_s32));
private_data_size = common->cbra_ptr + (re->top_bracket + 1) * sizeof(sljit_sw);
-set_private_data_ptrs(common, &private_data_size, ccend);
+
if ((re->overall_options & PCRE2_ANCHORED) == 0 && (re->overall_options & PCRE2_NO_START_OPTIMIZE) == 0 && !common->has_skip_in_assert_back)
- detect_early_fail(common, common->start, &private_data_size, 0, 0);
+ detect_early_fail(common, common->start, &private_data_size, 0, 0, TRUE);
+
+set_private_data_ptrs(common, &private_data_size, ccend);
SLJIT_ASSERT(common->early_fail_start_ptr <= common->early_fail_end_ptr);
@@ -14130,6 +14132,10 @@ PCRE2_EXP_DEFN int PCRE2_CALL_CONVENTION
pcre2_jit_compile(pcre2_code *code, uint32_t options)
{
pcre2_real_code *re = (pcre2_real_code *)code;
+#ifdef SUPPORT_JIT
+executable_functions *functions;
+static int executable_allocator_is_working = 0;
+#endif
if (code == NULL)
return PCRE2_ERROR_NULL;
@@ -14164,8 +14170,7 @@ actions are needed:
*/
#ifdef SUPPORT_JIT
-executable_functions *functions = (executable_functions *)re->executable_jit;
-static int executable_allocator_is_working = 0;
+functions = (executable_functions *)re->executable_jit;
#endif
if ((options & PCRE2_JIT_INVALID_UTF) != 0)
diff --git a/thirdparty/pcre2/src/pcre2_jit_simd_inc.h b/thirdparty/pcre2/src/pcre2_jit_simd_inc.h
index 5673d338c0..aa029cce38 100644
--- a/thirdparty/pcre2/src/pcre2_jit_simd_inc.h
+++ b/thirdparty/pcre2/src/pcre2_jit_simd_inc.h
@@ -39,7 +39,29 @@ POSSIBILITY OF SUCH DAMAGE.
-----------------------------------------------------------------------------
*/
-#if (defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86) && !(defined SUPPORT_VALGRIND)
+#if !(defined SUPPORT_VALGRIND)
+
+#if ((defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86) \
+ || (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X))
+
+typedef enum {
+ vector_compare_match1,
+ vector_compare_match1i,
+ vector_compare_match2,
+} vector_compare_type;
+
+static SLJIT_INLINE sljit_u32 max_fast_forward_char_pair_offset(void)
+{
+#if PCRE2_CODE_UNIT_WIDTH == 8
+return 15;
+#elif PCRE2_CODE_UNIT_WIDTH == 16
+return 7;
+#elif PCRE2_CODE_UNIT_WIDTH == 32
+return 3;
+#else
+#error "Unsupported unit width"
+#endif
+}
#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
static struct sljit_jump *jump_if_utf_char_start(struct sljit_compiler *compiler, sljit_s32 reg)
@@ -56,6 +78,10 @@ return CMP(SLJIT_NOT_EQUAL, reg, 0, SLJIT_IMM, 0xdc00);
}
#endif
+#endif /* SLJIT_CONFIG_X86 || SLJIT_CONFIG_S390X */
+
+#if (defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86)
+
static sljit_s32 character_to_int32(PCRE2_UCHAR chr)
{
sljit_u32 value = chr;
@@ -97,13 +123,7 @@ instruction[4] = (sljit_u8)offset;
sljit_emit_op_custom(compiler, instruction, 5);
}
-typedef enum {
- sse2_compare_match1,
- sse2_compare_match1i,
- sse2_compare_match2,
-} sse2_compare_type;
-
-static void fast_forward_char_pair_sse2_compare(struct sljit_compiler *compiler, sse2_compare_type compare_type,
+static void fast_forward_char_pair_sse2_compare(struct sljit_compiler *compiler, vector_compare_type compare_type,
int step, sljit_s32 dst_ind, sljit_s32 cmp1_ind, sljit_s32 cmp2_ind, sljit_s32 tmp_ind)
{
sljit_u8 instruction[4];
@@ -112,11 +132,11 @@ instruction[1] = 0x0f;
SLJIT_ASSERT(step >= 0 && step <= 3);
-if (compare_type != sse2_compare_match2)
+if (compare_type != vector_compare_match2)
{
if (step == 0)
{
- if (compare_type == sse2_compare_match1i)
+ if (compare_type == vector_compare_match1i)
{
/* POR xmm1, xmm2/m128 */
/* instruction[0] = 0x66; */
@@ -185,14 +205,14 @@ switch (step)
static void fast_forward_char_simd(compiler_common *common, PCRE2_UCHAR char1, PCRE2_UCHAR char2, sljit_s32 offset)
{
DEFINE_COMPILER;
+sljit_u8 instruction[8];
struct sljit_label *start;
#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
struct sljit_label *restart;
#endif
struct sljit_jump *quit;
struct sljit_jump *partial_quit[2];
-sse2_compare_type compare_type = sse2_compare_match1;
-sljit_u8 instruction[8];
+vector_compare_type compare_type = vector_compare_match1;
sljit_s32 tmp1_reg_ind = sljit_get_register_index(TMP1);
sljit_s32 str_ptr_reg_ind = sljit_get_register_index(STR_PTR);
sljit_s32 data_ind = 0;
@@ -207,12 +227,12 @@ SLJIT_UNUSED_ARG(offset);
if (char1 != char2)
{
bit = char1 ^ char2;
- compare_type = sse2_compare_match1i;
+ compare_type = vector_compare_match1i;
if (!is_powerof2(bit))
{
bit = 0;
- compare_type = sse2_compare_match2;
+ compare_type = vector_compare_match2;
}
}
@@ -349,11 +369,11 @@ if (common->utf && offset > 0)
static jump_list *fast_requested_char_simd(compiler_common *common, PCRE2_UCHAR char1, PCRE2_UCHAR char2)
{
DEFINE_COMPILER;
+sljit_u8 instruction[8];
struct sljit_label *start;
struct sljit_jump *quit;
jump_list *not_found = NULL;
-sse2_compare_type compare_type = sse2_compare_match1;
-sljit_u8 instruction[8];
+vector_compare_type compare_type = vector_compare_match1;
sljit_s32 tmp1_reg_ind = sljit_get_register_index(TMP1);
sljit_s32 str_ptr_reg_ind = sljit_get_register_index(STR_PTR);
sljit_s32 data_ind = 0;
@@ -366,12 +386,12 @@ int i;
if (char1 != char2)
{
bit = char1 ^ char2;
- compare_type = sse2_compare_match1i;
+ compare_type = vector_compare_match1i;
if (!is_powerof2(bit))
{
bit = 0;
- compare_type = sse2_compare_match2;
+ compare_type = vector_compare_match2;
}
}
@@ -476,27 +496,15 @@ return not_found;
#ifndef _WIN64
-static SLJIT_INLINE sljit_u32 max_fast_forward_char_pair_offset(void)
-{
-#if PCRE2_CODE_UNIT_WIDTH == 8
-return 15;
-#elif PCRE2_CODE_UNIT_WIDTH == 16
-return 7;
-#elif PCRE2_CODE_UNIT_WIDTH == 32
-return 3;
-#else
-#error "Unsupported unit width"
-#endif
-}
-
#define JIT_HAS_FAST_FORWARD_CHAR_PAIR_SIMD (sljit_has_cpu_feature(SLJIT_HAS_SSE2))
static void fast_forward_char_pair_simd(compiler_common *common, sljit_s32 offs1,
PCRE2_UCHAR char1a, PCRE2_UCHAR char1b, sljit_s32 offs2, PCRE2_UCHAR char2a, PCRE2_UCHAR char2b)
{
DEFINE_COMPILER;
-sse2_compare_type compare1_type = sse2_compare_match1;
-sse2_compare_type compare2_type = sse2_compare_match1;
+sljit_u8 instruction[8];
+vector_compare_type compare1_type = vector_compare_match1;
+vector_compare_type compare2_type = vector_compare_match1;
sljit_u32 bit1 = 0;
sljit_u32 bit2 = 0;
sljit_u32 diff = IN_UCHARS(offs1 - offs2);
@@ -516,7 +524,6 @@ struct sljit_label *start;
struct sljit_label *restart;
#endif
struct sljit_jump *jump[2];
-sljit_u8 instruction[8];
int i;
SLJIT_ASSERT(common->mode == PCRE2_JIT_COMPLETE && offs1 > offs2);
@@ -549,13 +556,13 @@ else
bit1 = char1a ^ char1b;
if (is_powerof2(bit1))
{
- compare1_type = sse2_compare_match1i;
+ compare1_type = vector_compare_match1i;
OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, character_to_int32(char1a | bit1));
OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, character_to_int32(bit1));
}
else
{
- compare1_type = sse2_compare_match2;
+ compare1_type = vector_compare_match2;
bit1 = 0;
OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, character_to_int32(char1a));
OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, character_to_int32(char1b));
@@ -578,13 +585,13 @@ else
bit2 = char2a ^ char2b;
if (is_powerof2(bit2))
{
- compare2_type = sse2_compare_match1i;
+ compare2_type = vector_compare_match1i;
OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, character_to_int32(char2a | bit2));
OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, character_to_int32(bit2));
}
else
{
- compare2_type = sse2_compare_match2;
+ compare2_type = vector_compare_match2;
bit2 = 0;
OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, character_to_int32(char2a));
OP1(SLJIT_MOV, TMP2, 0, SLJIT_IMM, character_to_int32(char2b));
@@ -731,9 +738,6 @@ OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);
add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));
-if (common->match_end_ptr != 0)
- OP1(SLJIT_MOV, STR_END, 0, SLJIT_MEM1(SLJIT_SP), common->match_end_ptr);
-
#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
if (common->utf)
{
@@ -760,7 +764,7 @@ if (common->match_end_ptr != 0)
#undef SSE2_COMPARE_TYPE_INDEX
-#endif /* SLJIT_CONFIG_X86 && !SUPPORT_VALGRIND */
+#endif /* SLJIT_CONFIG_X86 */
#if (defined SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64 && (defined __ARM_NEON || defined __ARM_NEON__))
@@ -1121,3 +1125,734 @@ JUMPHERE(partial_quit);
}
#endif /* SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64 */
+
+#if (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X)
+
+#if PCRE2_CODE_UNIT_WIDTH == 8
+#define VECTOR_ELEMENT_SIZE 0
+#elif PCRE2_CODE_UNIT_WIDTH == 16
+#define VECTOR_ELEMENT_SIZE 1
+#elif PCRE2_CODE_UNIT_WIDTH == 32
+#define VECTOR_ELEMENT_SIZE 2
+#else
+#error "Unsupported unit width"
+#endif
+
+static void load_from_mem_vector(struct sljit_compiler *compiler, BOOL vlbb, sljit_s32 dst_vreg,
+ sljit_s32 base_reg, sljit_s32 index_reg)
+{
+sljit_u16 instruction[3];
+
+instruction[0] = (sljit_u16)(0xe700 | (dst_vreg << 4) | index_reg);
+instruction[1] = (sljit_u16)(base_reg << 12);
+instruction[2] = (sljit_u16)((0x8 << 8) | (vlbb ? 0x07 : 0x06));
+
+sljit_emit_op_custom(compiler, instruction, 6);
+}
+
+#if PCRE2_CODE_UNIT_WIDTH == 32
+
+static void replicate_imm_vector(struct sljit_compiler *compiler, int step, sljit_s32 dst_vreg,
+ PCRE2_UCHAR chr, sljit_s32 tmp_general_reg)
+{
+sljit_u16 instruction[3];
+
+SLJIT_ASSERT(step >= 0 && step <= 1);
+
+if (chr < 0x7fff)
+ {
+ if (step == 1)
+ return;
+
+ /* VREPI */
+ instruction[0] = (sljit_u16)(0xe700 | (dst_vreg << 4));
+ instruction[1] = (sljit_u16)chr;
+ instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45);
+ sljit_emit_op_custom(compiler, instruction, 6);
+ return;
+ }
+
+if (step == 0)
+ {
+ OP1(SLJIT_MOV, tmp_general_reg, 0, SLJIT_IMM, chr);
+
+ /* VLVG */
+ instruction[0] = (sljit_u16)(0xe700 | (dst_vreg << 4) | sljit_get_register_index(tmp_general_reg));
+ instruction[1] = 0;
+ instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x22);
+ sljit_emit_op_custom(compiler, instruction, 6);
+ return;
+ }
+
+/* VREP */
+instruction[0] = (sljit_u16)(0xe700 | (dst_vreg << 4) | dst_vreg);
+instruction[1] = 0;
+instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xc << 8) | 0x4d);
+sljit_emit_op_custom(compiler, instruction, 6);
+}
+
+#endif
+
+static void fast_forward_char_pair_sse2_compare(struct sljit_compiler *compiler, vector_compare_type compare_type,
+ int step, sljit_s32 dst_ind, sljit_s32 cmp1_ind, sljit_s32 cmp2_ind, sljit_s32 tmp_ind)
+{
+sljit_u16 instruction[3];
+
+SLJIT_ASSERT(step >= 0 && step <= 2);
+
+if (step == 1)
+ {
+ /* VCEQ */
+ instruction[0] = (sljit_u16)(0xe700 | (dst_ind << 4) | dst_ind);
+ instruction[1] = (sljit_u16)(cmp1_ind << 12);
+ instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xe << 8) | 0xf8);
+ sljit_emit_op_custom(compiler, instruction, 6);
+ return;
+ }
+
+if (compare_type != vector_compare_match2)
+ {
+ if (step == 0 && compare_type == vector_compare_match1i)
+ {
+ /* VO */
+ instruction[0] = (sljit_u16)(0xe700 | (dst_ind << 4) | dst_ind);
+ instruction[1] = (sljit_u16)(cmp2_ind << 12);
+ instruction[2] = (sljit_u16)((0xe << 8) | 0x6a);
+ sljit_emit_op_custom(compiler, instruction, 6);
+ }
+ return;
+ }
+
+switch (step)
+ {
+ case 0:
+ /* VCEQ */
+ instruction[0] = (sljit_u16)(0xe700 | (tmp_ind << 4) | dst_ind);
+ instruction[1] = (sljit_u16)(cmp2_ind << 12);
+ instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xe << 8) | 0xf8);
+ sljit_emit_op_custom(compiler, instruction, 6);
+ return;
+
+ case 2:
+ /* VO */
+ instruction[0] = (sljit_u16)(0xe700 | (dst_ind << 4) | dst_ind);
+ instruction[1] = (sljit_u16)(tmp_ind << 12);
+ instruction[2] = (sljit_u16)((0xe << 8) | 0x6a);
+ sljit_emit_op_custom(compiler, instruction, 6);
+ return;
+ }
+}
+
+#define JIT_HAS_FAST_FORWARD_CHAR_SIMD 1
+
+static void fast_forward_char_simd(compiler_common *common, PCRE2_UCHAR char1, PCRE2_UCHAR char2, sljit_s32 offset)
+{
+DEFINE_COMPILER;
+sljit_u16 instruction[3];
+struct sljit_label *start;
+#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
+struct sljit_label *restart;
+#endif
+struct sljit_jump *quit;
+struct sljit_jump *partial_quit[2];
+vector_compare_type compare_type = vector_compare_match1;
+sljit_s32 tmp1_reg_ind = sljit_get_register_index(TMP1);
+sljit_s32 str_ptr_reg_ind = sljit_get_register_index(STR_PTR);
+sljit_s32 data_ind = 0;
+sljit_s32 tmp_ind = 1;
+sljit_s32 cmp1_ind = 2;
+sljit_s32 cmp2_ind = 3;
+sljit_s32 zero_ind = 4;
+sljit_u32 bit = 0;
+int i;
+
+SLJIT_UNUSED_ARG(offset);
+
+if (char1 != char2)
+ {
+ bit = char1 ^ char2;
+ compare_type = vector_compare_match1i;
+
+ if (!is_powerof2(bit))
+ {
+ bit = 0;
+ compare_type = vector_compare_match2;
+ }
+ }
+
+partial_quit[0] = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);
+if (common->mode == PCRE2_JIT_COMPLETE)
+ add_jump(compiler, &common->failed_match, partial_quit[0]);
+
+/* First part (unaligned start) */
+
+OP2(SLJIT_ADD, TMP2, 0, STR_PTR, 0, SLJIT_IMM, 16);
+
+#if PCRE2_CODE_UNIT_WIDTH != 32
+
+/* VREPI */
+instruction[0] = (sljit_u16)(0xe700 | (cmp1_ind << 4));
+instruction[1] = (sljit_u16)(char1 | bit);
+instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45);
+sljit_emit_op_custom(compiler, instruction, 6);
+
+if (char1 != char2)
+ {
+ /* VREPI */
+ instruction[0] = (sljit_u16)(0xe700 | (cmp2_ind << 4));
+ instruction[1] = (sljit_u16)(bit != 0 ? bit : char2);
+ /* instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); */
+ sljit_emit_op_custom(compiler, instruction, 6);
+ }
+
+#else /* PCRE2_CODE_UNIT_WIDTH == 32 */
+
+for (int i = 0; i < 2; i++)
+ {
+ replicate_imm_vector(compiler, i, cmp1_ind, char1 | bit, TMP1);
+
+ if (char1 != char2)
+ replicate_imm_vector(compiler, i, cmp2_ind, bit != 0 ? bit : char2, TMP1);
+ }
+
+#endif /* PCRE2_CODE_UNIT_WIDTH != 32 */
+
+if (compare_type == vector_compare_match2)
+ {
+ /* VREPI */
+ instruction[0] = (sljit_u16)(0xe700 | (zero_ind << 4));
+ instruction[1] = 0;
+ instruction[2] = (sljit_u16)((0x8 << 8) | 0x45);
+ sljit_emit_op_custom(compiler, instruction, 6);
+ }
+
+#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
+restart = LABEL();
+#endif
+
+load_from_mem_vector(compiler, TRUE, data_ind, str_ptr_reg_ind, 0);
+OP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, ~15);
+
+if (compare_type != vector_compare_match2)
+ {
+ if (compare_type == vector_compare_match1i)
+ fast_forward_char_pair_sse2_compare(compiler, compare_type, 0, data_ind, cmp1_ind, cmp2_ind, tmp_ind);
+
+ /* VFEE */
+ instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind);
+ instruction[1] = (sljit_u16)((cmp1_ind << 12) | (1 << 4));
+ instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xe << 8) | 0x80);
+ sljit_emit_op_custom(compiler, instruction, 6);
+ }
+else
+ {
+ for (i = 0; i < 3; i++)
+ fast_forward_char_pair_sse2_compare(compiler, compare_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind);
+
+ /* VFENE */
+ instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind);
+ instruction[1] = (sljit_u16)((zero_ind << 12) | (1 << 4));
+ instruction[2] = (sljit_u16)((0xe << 8) | 0x81);
+ sljit_emit_op_custom(compiler, instruction, 6);
+ }
+
+/* VLGVB */
+instruction[0] = (sljit_u16)(0xe700 | (tmp1_reg_ind << 4) | data_ind);
+instruction[1] = 7;
+instruction[2] = (sljit_u16)((0x4 << 8) | 0x21);
+sljit_emit_op_custom(compiler, instruction, 6);
+
+OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);
+quit = CMP(SLJIT_LESS, STR_PTR, 0, TMP2, 0);
+
+OP2(SLJIT_SUB, STR_PTR, 0, TMP2, 0, SLJIT_IMM, 16);
+
+/* Second part (aligned) */
+start = LABEL();
+
+OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, 16);
+
+partial_quit[1] = CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0);
+if (common->mode == PCRE2_JIT_COMPLETE)
+ add_jump(compiler, &common->failed_match, partial_quit[1]);
+
+load_from_mem_vector(compiler, TRUE, data_ind, str_ptr_reg_ind, 0);
+
+if (compare_type != vector_compare_match2)
+ {
+ if (compare_type == vector_compare_match1i)
+ fast_forward_char_pair_sse2_compare(compiler, compare_type, 0, data_ind, cmp1_ind, cmp2_ind, tmp_ind);
+
+ /* VFEE */
+ instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind);
+ instruction[1] = (sljit_u16)((cmp1_ind << 12) | (1 << 4));
+ instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xe << 8) | 0x80);
+ sljit_emit_op_custom(compiler, instruction, 6);
+ }
+else
+ {
+ for (i = 0; i < 3; i++)
+ fast_forward_char_pair_sse2_compare(compiler, compare_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind);
+
+ /* VFENE */
+ instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind);
+ instruction[1] = (sljit_u16)((zero_ind << 12) | (1 << 4));
+ instruction[2] = (sljit_u16)((0xe << 8) | 0x81);
+ sljit_emit_op_custom(compiler, instruction, 6);
+ }
+
+sljit_set_current_flags(compiler, SLJIT_SET_OVERFLOW);
+JUMPTO(SLJIT_OVERFLOW, start);
+
+/* VLGVB */
+instruction[0] = (sljit_u16)(0xe700 | (tmp1_reg_ind << 4) | data_ind);
+instruction[1] = 7;
+instruction[2] = (sljit_u16)((0x4 << 8) | 0x21);
+sljit_emit_op_custom(compiler, instruction, 6);
+
+OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);
+
+JUMPHERE(quit);
+
+if (common->mode != PCRE2_JIT_COMPLETE)
+ {
+ JUMPHERE(partial_quit[0]);
+ JUMPHERE(partial_quit[1]);
+ OP2(SLJIT_SUB | SLJIT_SET_GREATER, SLJIT_UNUSED, 0, STR_PTR, 0, STR_END, 0);
+ CMOV(SLJIT_GREATER, STR_PTR, STR_END, 0);
+ }
+else
+ add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));
+
+#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
+if (common->utf && offset > 0)
+ {
+ SLJIT_ASSERT(common->mode == PCRE2_JIT_COMPLETE);
+
+ OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-offset));
+
+ quit = jump_if_utf_char_start(compiler, TMP1);
+
+ OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));
+ add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));
+
+ OP2(SLJIT_ADD, TMP2, 0, STR_PTR, 0, SLJIT_IMM, 16);
+ JUMPTO(SLJIT_JUMP, restart);
+
+ JUMPHERE(quit);
+ }
+#endif
+}
+
+#define JIT_HAS_FAST_REQUESTED_CHAR_SIMD 1
+
+static jump_list *fast_requested_char_simd(compiler_common *common, PCRE2_UCHAR char1, PCRE2_UCHAR char2)
+{
+DEFINE_COMPILER;
+sljit_u16 instruction[3];
+struct sljit_label *start;
+struct sljit_jump *quit;
+jump_list *not_found = NULL;
+vector_compare_type compare_type = vector_compare_match1;
+sljit_s32 tmp1_reg_ind = sljit_get_register_index(TMP1);
+sljit_s32 tmp3_reg_ind = sljit_get_register_index(TMP3);
+sljit_s32 data_ind = 0;
+sljit_s32 tmp_ind = 1;
+sljit_s32 cmp1_ind = 2;
+sljit_s32 cmp2_ind = 3;
+sljit_s32 zero_ind = 4;
+sljit_u32 bit = 0;
+int i;
+
+if (char1 != char2)
+ {
+ bit = char1 ^ char2;
+ compare_type = vector_compare_match1i;
+
+ if (!is_powerof2(bit))
+ {
+ bit = 0;
+ compare_type = vector_compare_match2;
+ }
+ }
+
+add_jump(compiler, &not_found, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_END, 0));
+
+/* First part (unaligned start) */
+
+OP2(SLJIT_ADD, TMP2, 0, TMP1, 0, SLJIT_IMM, 16);
+
+#if PCRE2_CODE_UNIT_WIDTH != 32
+
+/* VREPI */
+instruction[0] = (sljit_u16)(0xe700 | (cmp1_ind << 4));
+instruction[1] = (sljit_u16)(char1 | bit);
+instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45);
+sljit_emit_op_custom(compiler, instruction, 6);
+
+if (char1 != char2)
+ {
+ /* VREPI */
+ instruction[0] = (sljit_u16)(0xe700 | (cmp2_ind << 4));
+ instruction[1] = (sljit_u16)(bit != 0 ? bit : char2);
+ /* instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); */
+ sljit_emit_op_custom(compiler, instruction, 6);
+ }
+
+#else /* PCRE2_CODE_UNIT_WIDTH == 32 */
+
+for (int i = 0; i < 2; i++)
+ {
+ replicate_imm_vector(compiler, i, cmp1_ind, char1 | bit, TMP3);
+
+ if (char1 != char2)
+ replicate_imm_vector(compiler, i, cmp2_ind, bit != 0 ? bit : char2, TMP3);
+ }
+
+#endif /* PCRE2_CODE_UNIT_WIDTH != 32 */
+
+if (compare_type == vector_compare_match2)
+ {
+ /* VREPI */
+ instruction[0] = (sljit_u16)(0xe700 | (zero_ind << 4));
+ instruction[1] = 0;
+ instruction[2] = (sljit_u16)((0x8 << 8) | 0x45);
+ sljit_emit_op_custom(compiler, instruction, 6);
+ }
+
+load_from_mem_vector(compiler, TRUE, data_ind, tmp1_reg_ind, 0);
+OP2(SLJIT_AND, TMP2, 0, TMP2, 0, SLJIT_IMM, ~15);
+
+if (compare_type != vector_compare_match2)
+ {
+ if (compare_type == vector_compare_match1i)
+ fast_forward_char_pair_sse2_compare(compiler, compare_type, 0, data_ind, cmp1_ind, cmp2_ind, tmp_ind);
+
+ /* VFEE */
+ instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind);
+ instruction[1] = (sljit_u16)((cmp1_ind << 12) | (1 << 4));
+ instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xe << 8) | 0x80);
+ sljit_emit_op_custom(compiler, instruction, 6);
+ }
+else
+ {
+ for (i = 0; i < 3; i++)
+ fast_forward_char_pair_sse2_compare(compiler, compare_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind);
+
+ /* VFENE */
+ instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind);
+ instruction[1] = (sljit_u16)((zero_ind << 12) | (1 << 4));
+ instruction[2] = (sljit_u16)((0xe << 8) | 0x81);
+ sljit_emit_op_custom(compiler, instruction, 6);
+ }
+
+/* VLGVB */
+instruction[0] = (sljit_u16)(0xe700 | (tmp3_reg_ind << 4) | data_ind);
+instruction[1] = 7;
+instruction[2] = (sljit_u16)((0x4 << 8) | 0x21);
+sljit_emit_op_custom(compiler, instruction, 6);
+
+OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP3, 0);
+quit = CMP(SLJIT_LESS, TMP1, 0, TMP2, 0);
+
+OP2(SLJIT_SUB, TMP1, 0, TMP2, 0, SLJIT_IMM, 16);
+
+/* Second part (aligned) */
+start = LABEL();
+
+OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, 16);
+
+add_jump(compiler, &not_found, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_END, 0));
+
+load_from_mem_vector(compiler, TRUE, data_ind, tmp1_reg_ind, 0);
+
+if (compare_type != vector_compare_match2)
+ {
+ if (compare_type == vector_compare_match1i)
+ fast_forward_char_pair_sse2_compare(compiler, compare_type, 0, data_ind, cmp1_ind, cmp2_ind, tmp_ind);
+
+ /* VFEE */
+ instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind);
+ instruction[1] = (sljit_u16)((cmp1_ind << 12) | (1 << 4));
+ instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0xe << 8) | 0x80);
+ sljit_emit_op_custom(compiler, instruction, 6);
+ }
+else
+ {
+ for (i = 0; i < 3; i++)
+ fast_forward_char_pair_sse2_compare(compiler, compare_type, i, data_ind, cmp1_ind, cmp2_ind, tmp_ind);
+
+ /* VFENE */
+ instruction[0] = (sljit_u16)(0xe700 | (data_ind << 4) | data_ind);
+ instruction[1] = (sljit_u16)((zero_ind << 12) | (1 << 4));
+ instruction[2] = (sljit_u16)((0xe << 8) | 0x81);
+ sljit_emit_op_custom(compiler, instruction, 6);
+ }
+
+sljit_set_current_flags(compiler, SLJIT_SET_OVERFLOW);
+JUMPTO(SLJIT_OVERFLOW, start);
+
+/* VLGVB */
+instruction[0] = (sljit_u16)(0xe700 | (tmp3_reg_ind << 4) | data_ind);
+instruction[1] = 7;
+instruction[2] = (sljit_u16)((0x4 << 8) | 0x21);
+sljit_emit_op_custom(compiler, instruction, 6);
+
+OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, TMP3, 0);
+
+JUMPHERE(quit);
+add_jump(compiler, &not_found, CMP(SLJIT_GREATER_EQUAL, TMP1, 0, STR_END, 0));
+
+return not_found;
+}
+
+#define JIT_HAS_FAST_FORWARD_CHAR_PAIR_SIMD 1
+
+static void fast_forward_char_pair_simd(compiler_common *common, sljit_s32 offs1,
+ PCRE2_UCHAR char1a, PCRE2_UCHAR char1b, sljit_s32 offs2, PCRE2_UCHAR char2a, PCRE2_UCHAR char2b)
+{
+DEFINE_COMPILER;
+sljit_u16 instruction[3];
+struct sljit_label *start;
+#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
+struct sljit_label *restart;
+#endif
+struct sljit_jump *quit;
+struct sljit_jump *jump[2];
+vector_compare_type compare1_type = vector_compare_match1;
+vector_compare_type compare2_type = vector_compare_match1;
+sljit_u32 bit1 = 0;
+sljit_u32 bit2 = 0;
+sljit_s32 diff = IN_UCHARS(offs2 - offs1);
+sljit_s32 tmp1_reg_ind = sljit_get_register_index(TMP1);
+sljit_s32 tmp2_reg_ind = sljit_get_register_index(TMP2);
+sljit_s32 str_ptr_reg_ind = sljit_get_register_index(STR_PTR);
+sljit_s32 data1_ind = 0;
+sljit_s32 data2_ind = 1;
+sljit_s32 tmp1_ind = 2;
+sljit_s32 tmp2_ind = 3;
+sljit_s32 cmp1a_ind = 4;
+sljit_s32 cmp1b_ind = 5;
+sljit_s32 cmp2a_ind = 6;
+sljit_s32 cmp2b_ind = 7;
+sljit_s32 zero_ind = 8;
+int i;
+
+SLJIT_ASSERT(common->mode == PCRE2_JIT_COMPLETE && offs1 > offs2);
+SLJIT_ASSERT(-diff <= (sljit_s32)IN_UCHARS(max_fast_forward_char_pair_offset()));
+SLJIT_ASSERT(tmp1_reg_ind != 0 && tmp2_reg_ind != 0);
+
+if (char1a != char1b)
+ {
+ bit1 = char1a ^ char1b;
+ compare1_type = vector_compare_match1i;
+
+ if (!is_powerof2(bit1))
+ {
+ bit1 = 0;
+ compare1_type = vector_compare_match2;
+ }
+ }
+
+if (char2a != char2b)
+ {
+ bit2 = char2a ^ char2b;
+ compare2_type = vector_compare_match1i;
+
+ if (!is_powerof2(bit2))
+ {
+ bit2 = 0;
+ compare2_type = vector_compare_match2;
+ }
+ }
+
+/* Initialize. */
+if (common->match_end_ptr != 0)
+ {
+ OP1(SLJIT_MOV, TMP1, 0, SLJIT_MEM1(SLJIT_SP), common->match_end_ptr);
+ OP1(SLJIT_MOV, TMP3, 0, STR_END, 0);
+ OP2(SLJIT_ADD, TMP1, 0, TMP1, 0, SLJIT_IMM, IN_UCHARS(offs1 + 1));
+
+ OP2(SLJIT_SUB | SLJIT_SET_LESS, SLJIT_UNUSED, 0, TMP1, 0, STR_END, 0);
+ CMOV(SLJIT_LESS, STR_END, TMP1, 0);
+ }
+
+OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(offs1));
+add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));
+OP2(SLJIT_AND, TMP2, 0, STR_PTR, 0, SLJIT_IMM, ~15);
+
+#if PCRE2_CODE_UNIT_WIDTH != 32
+
+OP2(SLJIT_SUB, TMP1, 0, STR_PTR, 0, SLJIT_IMM, -diff);
+
+/* VREPI */
+instruction[0] = (sljit_u16)(0xe700 | (cmp1a_ind << 4));
+instruction[1] = (sljit_u16)(char1a | bit1);
+instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45);
+sljit_emit_op_custom(compiler, instruction, 6);
+
+if (char1a != char1b)
+ {
+ /* VREPI */
+ instruction[0] = (sljit_u16)(0xe700 | (cmp1b_ind << 4));
+ instruction[1] = (sljit_u16)(bit1 != 0 ? bit1 : char1b);
+ /* instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); */
+ sljit_emit_op_custom(compiler, instruction, 6);
+ }
+
+/* VREPI */
+instruction[0] = (sljit_u16)(0xe700 | (cmp2a_ind << 4));
+instruction[1] = (sljit_u16)(char2a | bit2);
+/* instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); */
+sljit_emit_op_custom(compiler, instruction, 6);
+
+if (char2a != char2b)
+ {
+ /* VREPI */
+ instruction[0] = (sljit_u16)(0xe700 | (cmp2b_ind << 4));
+ instruction[1] = (sljit_u16)(bit2 != 0 ? bit2 : char2b);
+ /* instruction[2] = (sljit_u16)((VECTOR_ELEMENT_SIZE << 12) | (0x8 << 8) | 0x45); */
+ sljit_emit_op_custom(compiler, instruction, 6);
+ }
+
+#else /* PCRE2_CODE_UNIT_WIDTH == 32 */
+
+for (int i = 0; i < 2; i++)
+ {
+ replicate_imm_vector(compiler, i, cmp1a_ind, char1a | bit1, TMP1);
+
+ if (char1a != char1b)
+ replicate_imm_vector(compiler, i, cmp1b_ind, bit1 != 0 ? bit1 : char1b, TMP1);
+
+ replicate_imm_vector(compiler, i, cmp2a_ind, char2a | bit2, TMP1);
+
+ if (char2a != char2b)
+ replicate_imm_vector(compiler, i, cmp2b_ind, bit2 != 0 ? bit2 : char2b, TMP1);
+ }
+
+OP2(SLJIT_SUB, TMP1, 0, STR_PTR, 0, SLJIT_IMM, -diff);
+
+#endif /* PCRE2_CODE_UNIT_WIDTH != 32 */
+
+/* VREPI */
+instruction[0] = (sljit_u16)(0xe700 | (zero_ind << 4));
+instruction[1] = 0;
+instruction[2] = (sljit_u16)((0x8 << 8) | 0x45);
+sljit_emit_op_custom(compiler, instruction, 6);
+
+#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
+restart = LABEL();
+#endif
+
+jump[0] = CMP(SLJIT_LESS, TMP1, 0, TMP2, 0);
+load_from_mem_vector(compiler, TRUE, data2_ind, tmp1_reg_ind, 0);
+jump[1] = JUMP(SLJIT_JUMP);
+JUMPHERE(jump[0]);
+load_from_mem_vector(compiler, FALSE, data2_ind, tmp1_reg_ind, 0);
+JUMPHERE(jump[1]);
+
+load_from_mem_vector(compiler, TRUE, data1_ind, str_ptr_reg_ind, 0);
+OP2(SLJIT_ADD, TMP2, 0, TMP2, 0, SLJIT_IMM, 16);
+
+for (i = 0; i < 3; i++)
+ {
+ fast_forward_char_pair_sse2_compare(compiler, compare1_type, i, data1_ind, cmp1a_ind, cmp1b_ind, tmp1_ind);
+ fast_forward_char_pair_sse2_compare(compiler, compare2_type, i, data2_ind, cmp2a_ind, cmp2b_ind, tmp2_ind);
+ }
+
+/* VN */
+instruction[0] = (sljit_u16)(0xe700 | (data1_ind << 4) | data1_ind);
+instruction[1] = (sljit_u16)(data2_ind << 12);
+instruction[2] = (sljit_u16)((0xe << 8) | 0x68);
+sljit_emit_op_custom(compiler, instruction, 6);
+
+/* VFENE */
+instruction[0] = (sljit_u16)(0xe700 | (data1_ind << 4) | data1_ind);
+instruction[1] = (sljit_u16)((zero_ind << 12) | (1 << 4));
+instruction[2] = (sljit_u16)((0xe << 8) | 0x81);
+sljit_emit_op_custom(compiler, instruction, 6);
+
+/* VLGVB */
+instruction[0] = (sljit_u16)(0xe700 | (tmp1_reg_ind << 4) | data1_ind);
+instruction[1] = 7;
+instruction[2] = (sljit_u16)((0x4 << 8) | 0x21);
+sljit_emit_op_custom(compiler, instruction, 6);
+
+OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP1, 0);
+quit = CMP(SLJIT_LESS, STR_PTR, 0, TMP2, 0);
+
+OP2(SLJIT_SUB, STR_PTR, 0, TMP2, 0, SLJIT_IMM, 16);
+OP1(SLJIT_MOV, TMP1, 0, SLJIT_IMM, diff);
+
+/* Main loop. */
+start = LABEL();
+
+OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, 16);
+add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));
+
+load_from_mem_vector(compiler, FALSE, data1_ind, str_ptr_reg_ind, 0);
+load_from_mem_vector(compiler, FALSE, data2_ind, str_ptr_reg_ind, tmp1_reg_ind);
+
+for (i = 0; i < 3; i++)
+ {
+ fast_forward_char_pair_sse2_compare(compiler, compare1_type, i, data1_ind, cmp1a_ind, cmp1b_ind, tmp1_ind);
+ fast_forward_char_pair_sse2_compare(compiler, compare2_type, i, data2_ind, cmp2a_ind, cmp2b_ind, tmp2_ind);
+ }
+
+/* VN */
+instruction[0] = (sljit_u16)(0xe700 | (data1_ind << 4) | data1_ind);
+instruction[1] = (sljit_u16)(data2_ind << 12);
+instruction[2] = (sljit_u16)((0xe << 8) | 0x68);
+sljit_emit_op_custom(compiler, instruction, 6);
+
+/* VFENE */
+instruction[0] = (sljit_u16)(0xe700 | (data1_ind << 4) | data1_ind);
+instruction[1] = (sljit_u16)((zero_ind << 12) | (1 << 4));
+instruction[2] = (sljit_u16)((0xe << 8) | 0x81);
+sljit_emit_op_custom(compiler, instruction, 6);
+
+sljit_set_current_flags(compiler, SLJIT_SET_OVERFLOW);
+JUMPTO(SLJIT_OVERFLOW, start);
+
+/* VLGVB */
+instruction[0] = (sljit_u16)(0xe700 | (tmp2_reg_ind << 4) | data1_ind);
+instruction[1] = 7;
+instruction[2] = (sljit_u16)((0x4 << 8) | 0x21);
+sljit_emit_op_custom(compiler, instruction, 6);
+
+OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, TMP2, 0);
+
+JUMPHERE(quit);
+
+add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));
+
+#if defined SUPPORT_UNICODE && PCRE2_CODE_UNIT_WIDTH != 32
+if (common->utf)
+ {
+ SLJIT_ASSERT(common->mode == PCRE2_JIT_COMPLETE);
+
+ OP1(MOV_UCHAR, TMP1, 0, SLJIT_MEM1(STR_PTR), IN_UCHARS(-offs1));
+
+ quit = jump_if_utf_char_start(compiler, TMP1);
+
+ OP2(SLJIT_ADD, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(1));
+ add_jump(compiler, &common->failed_match, CMP(SLJIT_GREATER_EQUAL, STR_PTR, 0, STR_END, 0));
+
+ /* TMP1 contains diff. */
+ OP2(SLJIT_AND, TMP2, 0, STR_PTR, 0, SLJIT_IMM, ~15);
+ OP2(SLJIT_SUB, TMP1, 0, STR_PTR, 0, SLJIT_IMM, -diff);
+ JUMPTO(SLJIT_JUMP, restart);
+
+ JUMPHERE(quit);
+ }
+#endif
+
+OP2(SLJIT_SUB, STR_PTR, 0, STR_PTR, 0, SLJIT_IMM, IN_UCHARS(offs1));
+
+if (common->match_end_ptr != 0)
+ OP1(SLJIT_MOV, STR_END, 0, TMP3, 0);
+}
+
+#endif /* SLJIT_CONFIG_S390X */
+
+#endif /* !SUPPORT_VALGRIND */
diff --git a/thirdparty/pcre2/src/pcre2_match.c b/thirdparty/pcre2/src/pcre2_match.c
index e3f78c2ca3..f28cdbb47a 100644
--- a/thirdparty/pcre2/src/pcre2_match.c
+++ b/thirdparty/pcre2/src/pcre2_match.c
@@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language.
Written by Philip Hazel
Original API code Copyright (c) 1997-2012 University of Cambridge
- New API code Copyright (c) 2015-2020 University of Cambridge
+ New API code Copyright (c) 2015-2021 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
@@ -818,10 +818,12 @@ fprintf(stderr, "++ op=%d\n", *Fecode);
/* N is now the frame of the recursion; the previous frame is at the
OP_RECURSE position. Go back there, copying the current subject position
- and mark, and move on past the OP_RECURSE. */
+ and mark, and the start_match position (\K might have changed it), and
+ then move on past the OP_RECURSE. */
P->eptr = Feptr;
P->mark = Fmark;
+ P->start_match = Fstart_match;
F = P;
Fecode += 1 + LINK_SIZE;
continue;
@@ -6115,8 +6117,8 @@ BOOL has_req_cu = FALSE;
BOOL startline;
#if PCRE2_CODE_UNIT_WIDTH == 8
-BOOL memchr_not_found_first_cu;
-BOOL memchr_not_found_first_cu2;
+PCRE2_SPTR memchr_found_first_cu;
+PCRE2_SPTR memchr_found_first_cu2;
#endif
PCRE2_UCHAR first_cu = 0;
@@ -6710,8 +6712,8 @@ start_partial = match_partial = NULL;
mb->hitend = FALSE;
#if PCRE2_CODE_UNIT_WIDTH == 8
-memchr_not_found_first_cu = FALSE;
-memchr_not_found_first_cu2 = FALSE;
+memchr_found_first_cu = NULL;
+memchr_found_first_cu2 = NULL;
#endif
for(;;)
@@ -6780,13 +6782,7 @@ for(;;)
}
}
- /* Not anchored. Advance to a unique first code unit if there is one. In
- 8-bit mode, the use of memchr() gives a big speed up, even though we have
- to call it twice in caseless mode, in order to find the earliest occurrence
- of the character in either of its cases. If a call to memchr() that
- searches the rest of the subject fails to find one case, remember that in
- order not to keep on repeating the search. This can make a huge difference
- when the strings are very long and only one case is present. */
+ /* Not anchored. Advance to a unique first code unit if there is one. */
else
{
@@ -6794,43 +6790,68 @@ for(;;)
{
if (first_cu != first_cu2) /* Caseless */
{
+ /* In 16-bit and 32_bit modes we have to do our own search, so can
+ look for both cases at once. */
+
#if PCRE2_CODE_UNIT_WIDTH != 8
PCRE2_UCHAR smc;
while (start_match < end_subject &&
(smc = UCHAR21TEST(start_match)) != first_cu &&
- smc != first_cu2)
+ smc != first_cu2)
start_match++;
+#else
+ /* In 8-bit mode, the use of memchr() gives a big speed up, even
+ though we have to call it twice in order to find the earliest
+ occurrence of the code unit in either of its cases. Caching is used
+ to remember the positions of previously found code units. This can
+ make a huge difference when the strings are very long and only one
+ case is actually present. */
-#else /* 8-bit code units */
PCRE2_SPTR pp1 = NULL;
PCRE2_SPTR pp2 = NULL;
- PCRE2_SIZE cu2size = end_subject - start_match;
+ PCRE2_SIZE searchlength = end_subject - start_match;
- if (!memchr_not_found_first_cu)
+ /* If we haven't got a previously found position for first_cu, or if
+ the current starting position is later, we need to do a search. If
+ the code unit is not found, set it to the end. */
+
+ if (memchr_found_first_cu == NULL ||
+ start_match > memchr_found_first_cu)
{
- pp1 = memchr(start_match, first_cu, end_subject - start_match);
- if (pp1 == NULL) memchr_not_found_first_cu = TRUE;
- else cu2size = pp1 - start_match;
+ pp1 = memchr(start_match, first_cu, searchlength);
+ memchr_found_first_cu = (pp1 == NULL)? end_subject : pp1;
}
- /* If pp1 is not NULL, we have arranged to search only as far as pp1,
- to see if the other case is earlier, so we can set "not found" only
- when both searches have returned NULL. */
+ /* If the start is before a previously found position, use the
+ previous position, or NULL if a previous search failed. */
+
+ else pp1 = (memchr_found_first_cu == end_subject)? NULL :
+ memchr_found_first_cu;
- if (!memchr_not_found_first_cu2)
+ /* Do the same thing for the other case. */
+
+ if (memchr_found_first_cu2 == NULL ||
+ start_match > memchr_found_first_cu2)
{
- pp2 = memchr(start_match, first_cu2, cu2size);
- memchr_not_found_first_cu2 = (pp2 == NULL && pp1 == NULL);
+ pp2 = memchr(start_match, first_cu2, searchlength);
+ memchr_found_first_cu2 = (pp2 == NULL)? end_subject : pp2;
}
+ else pp2 = (memchr_found_first_cu2 == end_subject)? NULL :
+ memchr_found_first_cu2;
+
+ /* Set the start to the end of the subject if neither case was found.
+ Otherwise, use the earlier found point. */
+
if (pp1 == NULL)
start_match = (pp2 == NULL)? end_subject : pp2;
else
start_match = (pp2 == NULL || pp1 < pp2)? pp1 : pp2;
-#endif
+
+#endif /* 8-bit handling */
}
- /* The caseful case */
+ /* The caseful case is much simpler. */
else
{
diff --git a/thirdparty/pcre2/src/pcre2_tables.c b/thirdparty/pcre2/src/pcre2_tables.c
index b10de45efb..c164e976e0 100644
--- a/thirdparty/pcre2/src/pcre2_tables.c
+++ b/thirdparty/pcre2/src/pcre2_tables.c
@@ -273,6 +273,7 @@ strings to make sure that UTF-8 support works on EBCDIC platforms. */
#define STRING_Cs0 STR_C STR_s "\0"
#define STRING_Cuneiform0 STR_C STR_u STR_n STR_e STR_i STR_f STR_o STR_r STR_m "\0"
#define STRING_Cypriot0 STR_C STR_y STR_p STR_r STR_i STR_o STR_t "\0"
+#define STRING_Cypro_Minoan0 STR_C STR_y STR_p STR_r STR_o STR_UNDERSCORE STR_M STR_i STR_n STR_o STR_a STR_n "\0"
#define STRING_Cyrillic0 STR_C STR_y STR_r STR_i STR_l STR_l STR_i STR_c "\0"
#define STRING_Deseret0 STR_D STR_e STR_s STR_e STR_r STR_e STR_t "\0"
#define STRING_Devanagari0 STR_D STR_e STR_v STR_a STR_n STR_a STR_g STR_a STR_r STR_i "\0"
@@ -371,6 +372,7 @@ strings to make sure that UTF-8 support works on EBCDIC platforms. */
#define STRING_Old_Sogdian0 STR_O STR_l STR_d STR_UNDERSCORE STR_S STR_o STR_g STR_d STR_i STR_a STR_n "\0"
#define STRING_Old_South_Arabian0 STR_O STR_l STR_d STR_UNDERSCORE STR_S STR_o STR_u STR_t STR_h STR_UNDERSCORE STR_A STR_r STR_a STR_b STR_i STR_a STR_n "\0"
#define STRING_Old_Turkic0 STR_O STR_l STR_d STR_UNDERSCORE STR_T STR_u STR_r STR_k STR_i STR_c "\0"
+#define STRING_Old_Uyghur0 STR_O STR_l STR_d STR_UNDERSCORE STR_U STR_y STR_g STR_h STR_u STR_r "\0"
#define STRING_Oriya0 STR_O STR_r STR_i STR_y STR_a "\0"
#define STRING_Osage0 STR_O STR_s STR_a STR_g STR_e "\0"
#define STRING_Osmanya0 STR_O STR_s STR_m STR_a STR_n STR_y STR_a "\0"
@@ -415,6 +417,7 @@ strings to make sure that UTF-8 support works on EBCDIC platforms. */
#define STRING_Tai_Viet0 STR_T STR_a STR_i STR_UNDERSCORE STR_V STR_i STR_e STR_t "\0"
#define STRING_Takri0 STR_T STR_a STR_k STR_r STR_i "\0"
#define STRING_Tamil0 STR_T STR_a STR_m STR_i STR_l "\0"
+#define STRING_Tangsa0 STR_T STR_a STR_n STR_g STR_s STR_a "\0"
#define STRING_Tangut0 STR_T STR_a STR_n STR_g STR_u STR_t "\0"
#define STRING_Telugu0 STR_T STR_e STR_l STR_u STR_g STR_u "\0"
#define STRING_Thaana0 STR_T STR_h STR_a STR_a STR_n STR_a "\0"
@@ -422,9 +425,11 @@ strings to make sure that UTF-8 support works on EBCDIC platforms. */
#define STRING_Tibetan0 STR_T STR_i STR_b STR_e STR_t STR_a STR_n "\0"
#define STRING_Tifinagh0 STR_T STR_i STR_f STR_i STR_n STR_a STR_g STR_h "\0"
#define STRING_Tirhuta0 STR_T STR_i STR_r STR_h STR_u STR_t STR_a "\0"
+#define STRING_Toto0 STR_T STR_o STR_t STR_o "\0"
#define STRING_Ugaritic0 STR_U STR_g STR_a STR_r STR_i STR_t STR_i STR_c "\0"
#define STRING_Unknown0 STR_U STR_n STR_k STR_n STR_o STR_w STR_n "\0"
#define STRING_Vai0 STR_V STR_a STR_i "\0"
+#define STRING_Vithkuqi0 STR_V STR_i STR_t STR_h STR_k STR_u STR_q STR_i "\0"
#define STRING_Wancho0 STR_W STR_a STR_n STR_c STR_h STR_o "\0"
#define STRING_Warang_Citi0 STR_W STR_a STR_r STR_a STR_n STR_g STR_UNDERSCORE STR_C STR_i STR_t STR_i "\0"
#define STRING_Xan0 STR_X STR_a STR_n "\0"
@@ -476,6 +481,7 @@ const char PRIV(utt_names)[] =
STRING_Cs0
STRING_Cuneiform0
STRING_Cypriot0
+ STRING_Cypro_Minoan0
STRING_Cyrillic0
STRING_Deseret0
STRING_Devanagari0
@@ -574,6 +580,7 @@ const char PRIV(utt_names)[] =
STRING_Old_Sogdian0
STRING_Old_South_Arabian0
STRING_Old_Turkic0
+ STRING_Old_Uyghur0
STRING_Oriya0
STRING_Osage0
STRING_Osmanya0
@@ -618,6 +625,7 @@ const char PRIV(utt_names)[] =
STRING_Tai_Viet0
STRING_Takri0
STRING_Tamil0
+ STRING_Tangsa0
STRING_Tangut0
STRING_Telugu0
STRING_Thaana0
@@ -625,9 +633,11 @@ const char PRIV(utt_names)[] =
STRING_Tibetan0
STRING_Tifinagh0
STRING_Tirhuta0
+ STRING_Toto0
STRING_Ugaritic0
STRING_Unknown0
STRING_Vai0
+ STRING_Vithkuqi0
STRING_Wancho0
STRING_Warang_Citi0
STRING_Xan0
@@ -679,172 +689,177 @@ const ucp_type_table PRIV(utt)[] = {
{ 255, PT_PC, ucp_Cs },
{ 258, PT_SC, ucp_Cuneiform },
{ 268, PT_SC, ucp_Cypriot },
- { 276, PT_SC, ucp_Cyrillic },
- { 285, PT_SC, ucp_Deseret },
- { 293, PT_SC, ucp_Devanagari },
- { 304, PT_SC, ucp_Dives_Akuru },
- { 316, PT_SC, ucp_Dogra },
- { 322, PT_SC, ucp_Duployan },
- { 331, PT_SC, ucp_Egyptian_Hieroglyphs },
- { 352, PT_SC, ucp_Elbasan },
- { 360, PT_SC, ucp_Elymaic },
- { 368, PT_SC, ucp_Ethiopic },
- { 377, PT_SC, ucp_Georgian },
- { 386, PT_SC, ucp_Glagolitic },
- { 397, PT_SC, ucp_Gothic },
- { 404, PT_SC, ucp_Grantha },
- { 412, PT_SC, ucp_Greek },
- { 418, PT_SC, ucp_Gujarati },
- { 427, PT_SC, ucp_Gunjala_Gondi },
- { 441, PT_SC, ucp_Gurmukhi },
- { 450, PT_SC, ucp_Han },
- { 454, PT_SC, ucp_Hangul },
- { 461, PT_SC, ucp_Hanifi_Rohingya },
- { 477, PT_SC, ucp_Hanunoo },
- { 485, PT_SC, ucp_Hatran },
- { 492, PT_SC, ucp_Hebrew },
- { 499, PT_SC, ucp_Hiragana },
- { 508, PT_SC, ucp_Imperial_Aramaic },
- { 525, PT_SC, ucp_Inherited },
- { 535, PT_SC, ucp_Inscriptional_Pahlavi },
- { 557, PT_SC, ucp_Inscriptional_Parthian },
- { 580, PT_SC, ucp_Javanese },
- { 589, PT_SC, ucp_Kaithi },
- { 596, PT_SC, ucp_Kannada },
- { 604, PT_SC, ucp_Katakana },
- { 613, PT_SC, ucp_Kayah_Li },
- { 622, PT_SC, ucp_Kharoshthi },
- { 633, PT_SC, ucp_Khitan_Small_Script },
- { 653, PT_SC, ucp_Khmer },
- { 659, PT_SC, ucp_Khojki },
- { 666, PT_SC, ucp_Khudawadi },
- { 676, PT_GC, ucp_L },
- { 678, PT_LAMP, 0 },
- { 681, PT_SC, ucp_Lao },
- { 685, PT_SC, ucp_Latin },
- { 691, PT_SC, ucp_Lepcha },
- { 698, PT_SC, ucp_Limbu },
- { 704, PT_SC, ucp_Linear_A },
- { 713, PT_SC, ucp_Linear_B },
- { 722, PT_SC, ucp_Lisu },
- { 727, PT_PC, ucp_Ll },
- { 730, PT_PC, ucp_Lm },
- { 733, PT_PC, ucp_Lo },
- { 736, PT_PC, ucp_Lt },
- { 739, PT_PC, ucp_Lu },
- { 742, PT_SC, ucp_Lycian },
- { 749, PT_SC, ucp_Lydian },
- { 756, PT_GC, ucp_M },
- { 758, PT_SC, ucp_Mahajani },
- { 767, PT_SC, ucp_Makasar },
- { 775, PT_SC, ucp_Malayalam },
- { 785, PT_SC, ucp_Mandaic },
- { 793, PT_SC, ucp_Manichaean },
- { 804, PT_SC, ucp_Marchen },
- { 812, PT_SC, ucp_Masaram_Gondi },
- { 826, PT_PC, ucp_Mc },
- { 829, PT_PC, ucp_Me },
- { 832, PT_SC, ucp_Medefaidrin },
- { 844, PT_SC, ucp_Meetei_Mayek },
- { 857, PT_SC, ucp_Mende_Kikakui },
- { 871, PT_SC, ucp_Meroitic_Cursive },
- { 888, PT_SC, ucp_Meroitic_Hieroglyphs },
- { 909, PT_SC, ucp_Miao },
- { 914, PT_PC, ucp_Mn },
- { 917, PT_SC, ucp_Modi },
- { 922, PT_SC, ucp_Mongolian },
- { 932, PT_SC, ucp_Mro },
- { 936, PT_SC, ucp_Multani },
- { 944, PT_SC, ucp_Myanmar },
- { 952, PT_GC, ucp_N },
- { 954, PT_SC, ucp_Nabataean },
- { 964, PT_SC, ucp_Nandinagari },
- { 976, PT_PC, ucp_Nd },
- { 979, PT_SC, ucp_New_Tai_Lue },
- { 991, PT_SC, ucp_Newa },
- { 996, PT_SC, ucp_Nko },
- { 1000, PT_PC, ucp_Nl },
- { 1003, PT_PC, ucp_No },
- { 1006, PT_SC, ucp_Nushu },
- { 1012, PT_SC, ucp_Nyiakeng_Puachue_Hmong },
- { 1035, PT_SC, ucp_Ogham },
- { 1041, PT_SC, ucp_Ol_Chiki },
- { 1050, PT_SC, ucp_Old_Hungarian },
- { 1064, PT_SC, ucp_Old_Italic },
- { 1075, PT_SC, ucp_Old_North_Arabian },
- { 1093, PT_SC, ucp_Old_Permic },
- { 1104, PT_SC, ucp_Old_Persian },
- { 1116, PT_SC, ucp_Old_Sogdian },
- { 1128, PT_SC, ucp_Old_South_Arabian },
- { 1146, PT_SC, ucp_Old_Turkic },
- { 1157, PT_SC, ucp_Oriya },
- { 1163, PT_SC, ucp_Osage },
- { 1169, PT_SC, ucp_Osmanya },
- { 1177, PT_GC, ucp_P },
- { 1179, PT_SC, ucp_Pahawh_Hmong },
- { 1192, PT_SC, ucp_Palmyrene },
- { 1202, PT_SC, ucp_Pau_Cin_Hau },
- { 1214, PT_PC, ucp_Pc },
- { 1217, PT_PC, ucp_Pd },
- { 1220, PT_PC, ucp_Pe },
- { 1223, PT_PC, ucp_Pf },
- { 1226, PT_SC, ucp_Phags_Pa },
- { 1235, PT_SC, ucp_Phoenician },
- { 1246, PT_PC, ucp_Pi },
- { 1249, PT_PC, ucp_Po },
- { 1252, PT_PC, ucp_Ps },
- { 1255, PT_SC, ucp_Psalter_Pahlavi },
- { 1271, PT_SC, ucp_Rejang },
- { 1278, PT_SC, ucp_Runic },
- { 1284, PT_GC, ucp_S },
- { 1286, PT_SC, ucp_Samaritan },
- { 1296, PT_SC, ucp_Saurashtra },
- { 1307, PT_PC, ucp_Sc },
- { 1310, PT_SC, ucp_Sharada },
- { 1318, PT_SC, ucp_Shavian },
- { 1326, PT_SC, ucp_Siddham },
- { 1334, PT_SC, ucp_SignWriting },
- { 1346, PT_SC, ucp_Sinhala },
- { 1354, PT_PC, ucp_Sk },
- { 1357, PT_PC, ucp_Sm },
- { 1360, PT_PC, ucp_So },
- { 1363, PT_SC, ucp_Sogdian },
- { 1371, PT_SC, ucp_Sora_Sompeng },
- { 1384, PT_SC, ucp_Soyombo },
- { 1392, PT_SC, ucp_Sundanese },
- { 1402, PT_SC, ucp_Syloti_Nagri },
- { 1415, PT_SC, ucp_Syriac },
- { 1422, PT_SC, ucp_Tagalog },
- { 1430, PT_SC, ucp_Tagbanwa },
- { 1439, PT_SC, ucp_Tai_Le },
- { 1446, PT_SC, ucp_Tai_Tham },
- { 1455, PT_SC, ucp_Tai_Viet },
- { 1464, PT_SC, ucp_Takri },
- { 1470, PT_SC, ucp_Tamil },
- { 1476, PT_SC, ucp_Tangut },
- { 1483, PT_SC, ucp_Telugu },
- { 1490, PT_SC, ucp_Thaana },
- { 1497, PT_SC, ucp_Thai },
- { 1502, PT_SC, ucp_Tibetan },
- { 1510, PT_SC, ucp_Tifinagh },
- { 1519, PT_SC, ucp_Tirhuta },
- { 1527, PT_SC, ucp_Ugaritic },
- { 1536, PT_SC, ucp_Unknown },
- { 1544, PT_SC, ucp_Vai },
- { 1548, PT_SC, ucp_Wancho },
- { 1555, PT_SC, ucp_Warang_Citi },
- { 1567, PT_ALNUM, 0 },
- { 1571, PT_PXSPACE, 0 },
- { 1575, PT_SPACE, 0 },
- { 1579, PT_UCNC, 0 },
- { 1583, PT_WORD, 0 },
- { 1587, PT_SC, ucp_Yezidi },
- { 1594, PT_SC, ucp_Yi },
- { 1597, PT_GC, ucp_Z },
- { 1599, PT_SC, ucp_Zanabazar_Square },
- { 1616, PT_PC, ucp_Zl },
- { 1619, PT_PC, ucp_Zp },
- { 1622, PT_PC, ucp_Zs }
+ { 276, PT_SC, ucp_Cypro_Minoan },
+ { 289, PT_SC, ucp_Cyrillic },
+ { 298, PT_SC, ucp_Deseret },
+ { 306, PT_SC, ucp_Devanagari },
+ { 317, PT_SC, ucp_Dives_Akuru },
+ { 329, PT_SC, ucp_Dogra },
+ { 335, PT_SC, ucp_Duployan },
+ { 344, PT_SC, ucp_Egyptian_Hieroglyphs },
+ { 365, PT_SC, ucp_Elbasan },
+ { 373, PT_SC, ucp_Elymaic },
+ { 381, PT_SC, ucp_Ethiopic },
+ { 390, PT_SC, ucp_Georgian },
+ { 399, PT_SC, ucp_Glagolitic },
+ { 410, PT_SC, ucp_Gothic },
+ { 417, PT_SC, ucp_Grantha },
+ { 425, PT_SC, ucp_Greek },
+ { 431, PT_SC, ucp_Gujarati },
+ { 440, PT_SC, ucp_Gunjala_Gondi },
+ { 454, PT_SC, ucp_Gurmukhi },
+ { 463, PT_SC, ucp_Han },
+ { 467, PT_SC, ucp_Hangul },
+ { 474, PT_SC, ucp_Hanifi_Rohingya },
+ { 490, PT_SC, ucp_Hanunoo },
+ { 498, PT_SC, ucp_Hatran },
+ { 505, PT_SC, ucp_Hebrew },
+ { 512, PT_SC, ucp_Hiragana },
+ { 521, PT_SC, ucp_Imperial_Aramaic },
+ { 538, PT_SC, ucp_Inherited },
+ { 548, PT_SC, ucp_Inscriptional_Pahlavi },
+ { 570, PT_SC, ucp_Inscriptional_Parthian },
+ { 593, PT_SC, ucp_Javanese },
+ { 602, PT_SC, ucp_Kaithi },
+ { 609, PT_SC, ucp_Kannada },
+ { 617, PT_SC, ucp_Katakana },
+ { 626, PT_SC, ucp_Kayah_Li },
+ { 635, PT_SC, ucp_Kharoshthi },
+ { 646, PT_SC, ucp_Khitan_Small_Script },
+ { 666, PT_SC, ucp_Khmer },
+ { 672, PT_SC, ucp_Khojki },
+ { 679, PT_SC, ucp_Khudawadi },
+ { 689, PT_GC, ucp_L },
+ { 691, PT_LAMP, 0 },
+ { 694, PT_SC, ucp_Lao },
+ { 698, PT_SC, ucp_Latin },
+ { 704, PT_SC, ucp_Lepcha },
+ { 711, PT_SC, ucp_Limbu },
+ { 717, PT_SC, ucp_Linear_A },
+ { 726, PT_SC, ucp_Linear_B },
+ { 735, PT_SC, ucp_Lisu },
+ { 740, PT_PC, ucp_Ll },
+ { 743, PT_PC, ucp_Lm },
+ { 746, PT_PC, ucp_Lo },
+ { 749, PT_PC, ucp_Lt },
+ { 752, PT_PC, ucp_Lu },
+ { 755, PT_SC, ucp_Lycian },
+ { 762, PT_SC, ucp_Lydian },
+ { 769, PT_GC, ucp_M },
+ { 771, PT_SC, ucp_Mahajani },
+ { 780, PT_SC, ucp_Makasar },
+ { 788, PT_SC, ucp_Malayalam },
+ { 798, PT_SC, ucp_Mandaic },
+ { 806, PT_SC, ucp_Manichaean },
+ { 817, PT_SC, ucp_Marchen },
+ { 825, PT_SC, ucp_Masaram_Gondi },
+ { 839, PT_PC, ucp_Mc },
+ { 842, PT_PC, ucp_Me },
+ { 845, PT_SC, ucp_Medefaidrin },
+ { 857, PT_SC, ucp_Meetei_Mayek },
+ { 870, PT_SC, ucp_Mende_Kikakui },
+ { 884, PT_SC, ucp_Meroitic_Cursive },
+ { 901, PT_SC, ucp_Meroitic_Hieroglyphs },
+ { 922, PT_SC, ucp_Miao },
+ { 927, PT_PC, ucp_Mn },
+ { 930, PT_SC, ucp_Modi },
+ { 935, PT_SC, ucp_Mongolian },
+ { 945, PT_SC, ucp_Mro },
+ { 949, PT_SC, ucp_Multani },
+ { 957, PT_SC, ucp_Myanmar },
+ { 965, PT_GC, ucp_N },
+ { 967, PT_SC, ucp_Nabataean },
+ { 977, PT_SC, ucp_Nandinagari },
+ { 989, PT_PC, ucp_Nd },
+ { 992, PT_SC, ucp_New_Tai_Lue },
+ { 1004, PT_SC, ucp_Newa },
+ { 1009, PT_SC, ucp_Nko },
+ { 1013, PT_PC, ucp_Nl },
+ { 1016, PT_PC, ucp_No },
+ { 1019, PT_SC, ucp_Nushu },
+ { 1025, PT_SC, ucp_Nyiakeng_Puachue_Hmong },
+ { 1048, PT_SC, ucp_Ogham },
+ { 1054, PT_SC, ucp_Ol_Chiki },
+ { 1063, PT_SC, ucp_Old_Hungarian },
+ { 1077, PT_SC, ucp_Old_Italic },
+ { 1088, PT_SC, ucp_Old_North_Arabian },
+ { 1106, PT_SC, ucp_Old_Permic },
+ { 1117, PT_SC, ucp_Old_Persian },
+ { 1129, PT_SC, ucp_Old_Sogdian },
+ { 1141, PT_SC, ucp_Old_South_Arabian },
+ { 1159, PT_SC, ucp_Old_Turkic },
+ { 1170, PT_SC, ucp_Old_Uyghur },
+ { 1181, PT_SC, ucp_Oriya },
+ { 1187, PT_SC, ucp_Osage },
+ { 1193, PT_SC, ucp_Osmanya },
+ { 1201, PT_GC, ucp_P },
+ { 1203, PT_SC, ucp_Pahawh_Hmong },
+ { 1216, PT_SC, ucp_Palmyrene },
+ { 1226, PT_SC, ucp_Pau_Cin_Hau },
+ { 1238, PT_PC, ucp_Pc },
+ { 1241, PT_PC, ucp_Pd },
+ { 1244, PT_PC, ucp_Pe },
+ { 1247, PT_PC, ucp_Pf },
+ { 1250, PT_SC, ucp_Phags_Pa },
+ { 1259, PT_SC, ucp_Phoenician },
+ { 1270, PT_PC, ucp_Pi },
+ { 1273, PT_PC, ucp_Po },
+ { 1276, PT_PC, ucp_Ps },
+ { 1279, PT_SC, ucp_Psalter_Pahlavi },
+ { 1295, PT_SC, ucp_Rejang },
+ { 1302, PT_SC, ucp_Runic },
+ { 1308, PT_GC, ucp_S },
+ { 1310, PT_SC, ucp_Samaritan },
+ { 1320, PT_SC, ucp_Saurashtra },
+ { 1331, PT_PC, ucp_Sc },
+ { 1334, PT_SC, ucp_Sharada },
+ { 1342, PT_SC, ucp_Shavian },
+ { 1350, PT_SC, ucp_Siddham },
+ { 1358, PT_SC, ucp_SignWriting },
+ { 1370, PT_SC, ucp_Sinhala },
+ { 1378, PT_PC, ucp_Sk },
+ { 1381, PT_PC, ucp_Sm },
+ { 1384, PT_PC, ucp_So },
+ { 1387, PT_SC, ucp_Sogdian },
+ { 1395, PT_SC, ucp_Sora_Sompeng },
+ { 1408, PT_SC, ucp_Soyombo },
+ { 1416, PT_SC, ucp_Sundanese },
+ { 1426, PT_SC, ucp_Syloti_Nagri },
+ { 1439, PT_SC, ucp_Syriac },
+ { 1446, PT_SC, ucp_Tagalog },
+ { 1454, PT_SC, ucp_Tagbanwa },
+ { 1463, PT_SC, ucp_Tai_Le },
+ { 1470, PT_SC, ucp_Tai_Tham },
+ { 1479, PT_SC, ucp_Tai_Viet },
+ { 1488, PT_SC, ucp_Takri },
+ { 1494, PT_SC, ucp_Tamil },
+ { 1500, PT_SC, ucp_Tangsa },
+ { 1507, PT_SC, ucp_Tangut },
+ { 1514, PT_SC, ucp_Telugu },
+ { 1521, PT_SC, ucp_Thaana },
+ { 1528, PT_SC, ucp_Thai },
+ { 1533, PT_SC, ucp_Tibetan },
+ { 1541, PT_SC, ucp_Tifinagh },
+ { 1550, PT_SC, ucp_Tirhuta },
+ { 1558, PT_SC, ucp_Toto },
+ { 1563, PT_SC, ucp_Ugaritic },
+ { 1572, PT_SC, ucp_Unknown },
+ { 1580, PT_SC, ucp_Vai },
+ { 1584, PT_SC, ucp_Vithkuqi },
+ { 1593, PT_SC, ucp_Wancho },
+ { 1600, PT_SC, ucp_Warang_Citi },
+ { 1612, PT_ALNUM, 0 },
+ { 1616, PT_PXSPACE, 0 },
+ { 1620, PT_SPACE, 0 },
+ { 1624, PT_UCNC, 0 },
+ { 1628, PT_WORD, 0 },
+ { 1632, PT_SC, ucp_Yezidi },
+ { 1639, PT_SC, ucp_Yi },
+ { 1642, PT_GC, ucp_Z },
+ { 1644, PT_SC, ucp_Zanabazar_Square },
+ { 1661, PT_PC, ucp_Zl },
+ { 1664, PT_PC, ucp_Zp },
+ { 1667, PT_PC, ucp_Zs }
};
const size_t PRIV(utt_size) = sizeof(PRIV(utt)) / sizeof(ucp_type_table);
diff --git a/thirdparty/pcre2/src/pcre2_ucd.c b/thirdparty/pcre2/src/pcre2_ucd.c
index 46e23ff06b..0b8ac75bd4 100644
--- a/thirdparty/pcre2/src/pcre2_ucd.c
+++ b/thirdparty/pcre2/src/pcre2_ucd.c
@@ -20,7 +20,7 @@ needed. */
/* Unicode character database. */
/* This file was autogenerated by the MultiStage2.py script. */
-/* Total size: 101044 bytes, block size: 128. */
+/* Total size: 102844 bytes, block size: 128. */
/* The tables herein are needed only when UCP support is built,
and in PCRE2 that happens automatically with UTF support.
@@ -39,7 +39,7 @@ const uint16_t PRIV(ucd_stage2)[] = {0};
const uint32_t PRIV(ucd_caseless_sets)[] = {0};
#else
-const char *PRIV(unicode_version) = "13.0.0";
+const char *PRIV(unicode_version) = "14.0.0";
/* If the 32-bit library is run in non-32-bit mode, character values
greater than 0x10ffff may be encountered. For these we set up a
@@ -116,16 +116,16 @@ set of decimal digits. It is used to ensure that all the digits in
a script run come from the same set. */
const uint32_t PRIV(ucd_digit_sets)[] = {
- 65, /* Number of subsequent values */
+ 66, /* Number of subsequent values */
0x00039, 0x00669, 0x006f9, 0x007c9, 0x0096f, 0x009ef, 0x00a6f, 0x00aef,
0x00b6f, 0x00bef, 0x00c6f, 0x00cef, 0x00d6f, 0x00def, 0x00e59, 0x00ed9,
0x00f29, 0x01049, 0x01099, 0x017e9, 0x01819, 0x0194f, 0x019d9, 0x01a89,
0x01a99, 0x01b59, 0x01bb9, 0x01c49, 0x01c59, 0x0a629, 0x0a8d9, 0x0a909,
0x0a9d9, 0x0a9f9, 0x0aa59, 0x0abf9, 0x0ff19, 0x104a9, 0x10d39, 0x1106f,
0x110f9, 0x1113f, 0x111d9, 0x112f9, 0x11459, 0x114d9, 0x11659, 0x116c9,
- 0x11739, 0x118e9, 0x11959, 0x11c59, 0x11d59, 0x11da9, 0x16a69, 0x16b59,
- 0x1d7d7, 0x1d7e1, 0x1d7eb, 0x1d7f5, 0x1d7ff, 0x1e149, 0x1e2f9, 0x1e959,
- 0x1fbf9,
+ 0x11739, 0x118e9, 0x11959, 0x11c59, 0x11d59, 0x11da9, 0x16a69, 0x16ac9,
+ 0x16b59, 0x1d7d7, 0x1d7e1, 0x1d7eb, 0x1d7f5, 0x1d7ff, 0x1e149, 0x1e2f9,
+ 0x1e959, 0x1fbf9,
};
/* This vector is a list of lists of scripts for the Script Extension
@@ -135,55 +135,59 @@ const uint8_t PRIV(ucd_script_sets)[] = {
/* 0 */ 0,
/* 1 */ 1, 11, 0,
/* 4 */ 1, 144, 0,
- /* 7 */ 1, 50, 0,
- /* 10 */ 1, 56, 0,
- /* 13 */ 3, 15, 0,
- /* 16 */ 4, 23, 0,
- /* 19 */ 6, 84, 0,
- /* 22 */ 12, 36, 0,
- /* 25 */ 13, 18, 0,
- /* 28 */ 13, 34, 0,
- /* 31 */ 13, 118, 0,
- /* 34 */ 13, 50, 0,
- /* 37 */ 15, 107, 0,
- /* 40 */ 15, 150, 0,
- /* 43 */ 15, 100, 0,
- /* 46 */ 15, 54, 0,
- /* 49 */ 17, 34, 0,
- /* 52 */ 107, 54, 0,
- /* 55 */ 21, 108, 0,
- /* 58 */ 22, 129, 0,
- /* 61 */ 23, 34, 0,
- /* 64 */ 27, 30, 0,
- /* 67 */ 29, 150, 0,
- /* 70 */ 34, 38, 0,
- /* 73 */ 38, 65, 0,
- /* 76 */ 1, 50, 56, 0,
- /* 80 */ 1, 56, 156, 0,
- /* 84 */ 3, 96, 49, 0,
- /* 88 */ 96, 39, 53, 0,
- /* 92 */ 12, 110, 36, 0,
- /* 96 */ 15, 107, 29, 0,
- /* 100 */ 15, 107, 34, 0,
- /* 104 */ 23, 27, 30, 0,
- /* 108 */ 69, 34, 39, 0,
- /* 112 */ 3, 15, 107, 29, 0,
- /* 117 */ 7, 25, 52, 51, 0,
- /* 122 */ 15, 142, 85, 111, 0,
- /* 127 */ 1, 144, 50, 56, 156, 0,
- /* 133 */ 4, 24, 23, 27, 30, 0,
- /* 139 */ 4, 24, 23, 27, 30, 61, 0,
- /* 146 */ 15, 29, 37, 44, 54, 55, 0,
- /* 153 */ 132, 1, 95, 112, 121, 144, 148, 50, 0,
- /* 162 */ 3, 15, 107, 29, 150, 44, 55, 124, 0,
- /* 171 */ 15, 142, 21, 22, 108, 85, 111, 114, 109, 102, 124, 0,
- /* 183 */ 3, 15, 107, 21, 22, 29, 34, 37, 44, 54, 55, 124, 0,
- /* 196 */ 3, 15, 107, 21, 22, 29, 34, 37, 44, 100, 54, 55, 124, 0,
- /* 210 */ 15, 142, 21, 22, 108, 29, 85, 111, 114, 150, 109, 102, 124, 0,
- /* 224 */ 15, 142, 21, 22, 108, 29, 85, 111, 37, 114, 150, 109, 102, 124, 0,
- /* 239 */ 3, 15, 142, 143, 138, 107, 21, 22, 29, 111, 37, 150, 44, 109, 48, 49, 102, 54, 55, 124, 0,
- /* 260 */ 3, 15, 142, 143, 138, 107, 21, 22, 29, 35, 111, 37, 150, 44, 109, 48, 49, 102, 54, 55, 124, 0,
- /* 282 */
+ /* 7 */ 1, 64, 0,
+ /* 10 */ 1, 50, 0,
+ /* 13 */ 1, 56, 0,
+ /* 16 */ 3, 15, 0,
+ /* 19 */ 4, 23, 0,
+ /* 22 */ 6, 84, 0,
+ /* 25 */ 12, 36, 0,
+ /* 28 */ 13, 18, 0,
+ /* 31 */ 13, 34, 0,
+ /* 34 */ 13, 118, 0,
+ /* 37 */ 13, 50, 0,
+ /* 40 */ 15, 107, 0,
+ /* 43 */ 15, 150, 0,
+ /* 46 */ 15, 100, 0,
+ /* 49 */ 15, 54, 0,
+ /* 52 */ 17, 34, 0,
+ /* 55 */ 107, 54, 0,
+ /* 58 */ 21, 108, 0,
+ /* 61 */ 22, 129, 0,
+ /* 64 */ 23, 34, 0,
+ /* 67 */ 27, 30, 0,
+ /* 70 */ 29, 150, 0,
+ /* 73 */ 34, 38, 0,
+ /* 76 */ 112, 158, 0,
+ /* 79 */ 38, 65, 0,
+ /* 82 */ 1, 50, 56, 0,
+ /* 86 */ 1, 56, 156, 0,
+ /* 90 */ 3, 96, 49, 0,
+ /* 94 */ 96, 39, 53, 0,
+ /* 98 */ 157, 12, 36, 0,
+ /* 102 */ 12, 110, 36, 0,
+ /* 106 */ 15, 107, 29, 0,
+ /* 110 */ 15, 107, 34, 0,
+ /* 114 */ 23, 27, 30, 0,
+ /* 118 */ 69, 34, 39, 0,
+ /* 122 */ 3, 15, 107, 29, 0,
+ /* 127 */ 7, 25, 52, 51, 0,
+ /* 132 */ 15, 142, 85, 111, 0,
+ /* 137 */ 4, 24, 23, 27, 30, 0,
+ /* 143 */ 1, 64, 144, 50, 56, 156, 0,
+ /* 150 */ 4, 24, 23, 27, 30, 61, 0,
+ /* 157 */ 15, 29, 37, 44, 54, 55, 0,
+ /* 164 */ 132, 1, 64, 144, 50, 56, 156, 0,
+ /* 172 */ 3, 15, 107, 29, 150, 44, 55, 124, 0,
+ /* 181 */ 132, 1, 95, 112, 158, 121, 144, 148, 50, 0,
+ /* 191 */ 15, 142, 21, 22, 108, 85, 111, 114, 109, 102, 124, 0,
+ /* 203 */ 3, 15, 107, 21, 22, 29, 34, 37, 44, 54, 55, 124, 0,
+ /* 216 */ 3, 15, 107, 21, 22, 29, 34, 37, 44, 100, 54, 55, 124, 0,
+ /* 230 */ 15, 142, 21, 22, 108, 29, 85, 111, 114, 150, 109, 102, 124, 0,
+ /* 244 */ 15, 142, 21, 22, 108, 29, 85, 111, 37, 114, 150, 109, 102, 124, 0,
+ /* 259 */ 3, 15, 142, 143, 138, 107, 21, 22, 29, 111, 37, 150, 44, 109, 48, 49, 102, 54, 55, 124, 0,
+ /* 280 */ 3, 15, 142, 143, 138, 107, 21, 22, 29, 35, 111, 37, 150, 44, 109, 48, 49, 102, 54, 55, 124, 0,
+ /* 302 */
};
/* These are the main two-stage UCD tables. The fields in each record are:
@@ -192,7 +196,7 @@ offset to multichar other cases or zero (8 bits), offset to other case
or zero (32 bits, signed), script extension (16 bits, signed), and a dummy
16-bit field to make the whole thing a multiple of 4 bytes. */
-const ucd_record PRIV(ucd_records)[] = { /* 11700 bytes, record size 12 */
+const ucd_record PRIV(ucd_records)[] = { /* 11964 bytes, record size 12 */
{ 10, 0, 2, 0, 0, 10, 256, }, /* 0 */
{ 10, 0, 2, 0, 0, 10, 0, }, /* 1 */
{ 10, 0, 1, 0, 0, 10, 0, }, /* 2 */
@@ -390,9 +394,9 @@ const ucd_record PRIV(ucd_records)[] = { /* 11700 bytes, record size 12 */
{ 13, 9, 12, 88, 1, 13, 0, }, /* 194 */
{ 13, 5, 12, 88, -1, 13, 0, }, /* 195 */
{ 13, 26, 12, 0, 0, 13, 0, }, /* 196 */
- { 13, 12, 3, 0, 0, -31, 0, }, /* 197 */
- { 13, 12, 3, 0, 0, -25, 0, }, /* 198 */
- { 28, 12, 3, 0, 0, -28, 0, }, /* 199 */
+ { 13, 12, 3, 0, 0, -34, 0, }, /* 197 */
+ { 13, 12, 3, 0, 0, -28, 0, }, /* 198 */
+ { 28, 12, 3, 0, 0, -31, 0, }, /* 199 */
{ 13, 11, 3, 0, 0, 13, 0, }, /* 200 */
{ 13, 9, 12, 0, 15, 13, 0, }, /* 201 */
{ 13, 5, 12, 0, -15, 13, 0, }, /* 202 */
@@ -413,761 +417,783 @@ const ucd_record PRIV(ucd_records)[] = { /* 11700 bytes, record size 12 */
{ 1, 25, 12, 0, 0, 1, 0, }, /* 217 */
{ 1, 21, 12, 0, 0, 1, 0, }, /* 218 */
{ 1, 23, 12, 0, 0, 1, 0, }, /* 219 */
- { 10, 21, 12, 0, 0, -127, 0, }, /* 220 */
+ { 10, 21, 12, 0, 0, -143, 0, }, /* 220 */
{ 1, 26, 12, 0, 0, 1, 0, }, /* 221 */
{ 1, 12, 3, 0, 0, 1, 0, }, /* 222 */
- { 1, 1, 2, 0, 0, -76, 0, }, /* 223 */
- { 1, 7, 12, 0, 0, 1, 0, }, /* 224 */
- { 10, 6, 12, 0, 0, -153, 0, }, /* 225 */
- { 28, 12, 3, 0, 0, -7, 0, }, /* 226 */
- { 1, 13, 12, 0, 0, -80, 0, }, /* 227 */
- { 1, 21, 12, 0, 0, -4, 0, }, /* 228 */
- { 1, 6, 12, 0, 0, 1, 0, }, /* 229 */
- { 1, 13, 12, 0, 0, 1, 0, }, /* 230 */
- { 50, 21, 12, 0, 0, 50, 0, }, /* 231 */
- { 50, 1, 4, 0, 0, 50, 0, }, /* 232 */
- { 50, 7, 12, 0, 0, 50, 0, }, /* 233 */
- { 50, 12, 3, 0, 0, 50, 0, }, /* 234 */
- { 56, 7, 12, 0, 0, 56, 0, }, /* 235 */
- { 56, 12, 3, 0, 0, 56, 0, }, /* 236 */
- { 64, 13, 12, 0, 0, 64, 0, }, /* 237 */
- { 64, 7, 12, 0, 0, 64, 0, }, /* 238 */
- { 64, 12, 3, 0, 0, 64, 0, }, /* 239 */
- { 64, 6, 12, 0, 0, 64, 0, }, /* 240 */
- { 64, 26, 12, 0, 0, 64, 0, }, /* 241 */
- { 64, 21, 12, 0, 0, 64, 0, }, /* 242 */
- { 64, 23, 12, 0, 0, 64, 0, }, /* 243 */
- { 90, 7, 12, 0, 0, 90, 0, }, /* 244 */
- { 90, 12, 3, 0, 0, 90, 0, }, /* 245 */
- { 90, 6, 12, 0, 0, 90, 0, }, /* 246 */
- { 90, 21, 12, 0, 0, 90, 0, }, /* 247 */
- { 95, 7, 12, 0, 0, 95, 0, }, /* 248 */
- { 95, 12, 3, 0, 0, 95, 0, }, /* 249 */
- { 95, 21, 12, 0, 0, 95, 0, }, /* 250 */
- { 15, 12, 3, 0, 0, 15, 0, }, /* 251 */
- { 15, 10, 5, 0, 0, 15, 0, }, /* 252 */
- { 15, 7, 12, 0, 0, 15, 0, }, /* 253 */
- { 28, 12, 3, 0, 0, -196, 0, }, /* 254 */
- { 28, 12, 3, 0, 0, -183, 0, }, /* 255 */
- { 10, 21, 12, 0, 0, -239, 0, }, /* 256 */
- { 10, 21, 12, 0, 0, -260, 0, }, /* 257 */
- { 15, 13, 12, 0, 0, -122, 0, }, /* 258 */
- { 15, 21, 12, 0, 0, 15, 0, }, /* 259 */
- { 15, 6, 12, 0, 0, 15, 0, }, /* 260 */
- { 3, 7, 12, 0, 0, 3, 0, }, /* 261 */
- { 3, 12, 3, 0, 0, 3, 0, }, /* 262 */
- { 3, 10, 5, 0, 0, 3, 0, }, /* 263 */
- { 3, 10, 3, 0, 0, 3, 0, }, /* 264 */
- { 3, 13, 12, 0, 0, -84, 0, }, /* 265 */
- { 3, 23, 12, 0, 0, 3, 0, }, /* 266 */
- { 3, 15, 12, 0, 0, 3, 0, }, /* 267 */
- { 3, 26, 12, 0, 0, 3, 0, }, /* 268 */
- { 3, 21, 12, 0, 0, 3, 0, }, /* 269 */
- { 22, 12, 3, 0, 0, 22, 0, }, /* 270 */
- { 22, 10, 5, 0, 0, 22, 0, }, /* 271 */
- { 22, 7, 12, 0, 0, 22, 0, }, /* 272 */
- { 22, 13, 12, 0, 0, -58, 0, }, /* 273 */
- { 22, 21, 12, 0, 0, 22, 0, }, /* 274 */
- { 21, 12, 3, 0, 0, 21, 0, }, /* 275 */
- { 21, 10, 5, 0, 0, 21, 0, }, /* 276 */
- { 21, 7, 12, 0, 0, 21, 0, }, /* 277 */
- { 21, 13, 12, 0, 0, -55, 0, }, /* 278 */
- { 21, 21, 12, 0, 0, 21, 0, }, /* 279 */
- { 21, 23, 12, 0, 0, 21, 0, }, /* 280 */
- { 44, 12, 3, 0, 0, 44, 0, }, /* 281 */
- { 44, 10, 5, 0, 0, 44, 0, }, /* 282 */
- { 44, 7, 12, 0, 0, 44, 0, }, /* 283 */
- { 44, 10, 3, 0, 0, 44, 0, }, /* 284 */
- { 44, 13, 12, 0, 0, 44, 0, }, /* 285 */
- { 44, 26, 12, 0, 0, 44, 0, }, /* 286 */
- { 44, 15, 12, 0, 0, 44, 0, }, /* 287 */
- { 54, 12, 3, 0, 0, 54, 0, }, /* 288 */
- { 54, 7, 12, 0, 0, 54, 0, }, /* 289 */
- { 54, 10, 3, 0, 0, 54, 0, }, /* 290 */
- { 54, 10, 5, 0, 0, 54, 0, }, /* 291 */
- { 54, 13, 12, 0, 0, -52, 0, }, /* 292 */
- { 54, 15, 12, 0, 0, -52, 0, }, /* 293 */
- { 54, 26, 12, 0, 0, -52, 0, }, /* 294 */
- { 54, 26, 12, 0, 0, 54, 0, }, /* 295 */
- { 54, 23, 12, 0, 0, 54, 0, }, /* 296 */
- { 55, 12, 3, 0, 0, 55, 0, }, /* 297 */
- { 55, 10, 5, 0, 0, 55, 0, }, /* 298 */
- { 55, 7, 12, 0, 0, 55, 0, }, /* 299 */
- { 55, 13, 12, 0, 0, 55, 0, }, /* 300 */
- { 55, 21, 12, 0, 0, 55, 0, }, /* 301 */
- { 55, 15, 12, 0, 0, 55, 0, }, /* 302 */
- { 55, 26, 12, 0, 0, 55, 0, }, /* 303 */
- { 29, 7, 12, 0, 0, 29, 0, }, /* 304 */
- { 29, 12, 3, 0, 0, 29, 0, }, /* 305 */
- { 29, 10, 5, 0, 0, 29, 0, }, /* 306 */
- { 29, 21, 12, 0, 0, 29, 0, }, /* 307 */
- { 29, 10, 3, 0, 0, 29, 0, }, /* 308 */
- { 29, 13, 12, 0, 0, -67, 0, }, /* 309 */
- { 37, 12, 3, 0, 0, 37, 0, }, /* 310 */
- { 37, 10, 5, 0, 0, 37, 0, }, /* 311 */
- { 37, 7, 12, 0, 0, 37, 0, }, /* 312 */
- { 37, 10, 3, 0, 0, 37, 0, }, /* 313 */
- { 37, 7, 4, 0, 0, 37, 0, }, /* 314 */
- { 37, 26, 12, 0, 0, 37, 0, }, /* 315 */
- { 37, 15, 12, 0, 0, 37, 0, }, /* 316 */
- { 37, 13, 12, 0, 0, 37, 0, }, /* 317 */
- { 48, 12, 3, 0, 0, 48, 0, }, /* 318 */
- { 48, 10, 5, 0, 0, 48, 0, }, /* 319 */
- { 48, 7, 12, 0, 0, 48, 0, }, /* 320 */
- { 48, 10, 3, 0, 0, 48, 0, }, /* 321 */
- { 48, 13, 12, 0, 0, 48, 0, }, /* 322 */
- { 48, 21, 12, 0, 0, 48, 0, }, /* 323 */
- { 57, 7, 12, 0, 0, 57, 0, }, /* 324 */
- { 57, 12, 3, 0, 0, 57, 0, }, /* 325 */
- { 57, 7, 5, 0, 0, 57, 0, }, /* 326 */
- { 57, 6, 12, 0, 0, 57, 0, }, /* 327 */
- { 57, 21, 12, 0, 0, 57, 0, }, /* 328 */
- { 57, 13, 12, 0, 0, 57, 0, }, /* 329 */
- { 33, 7, 12, 0, 0, 33, 0, }, /* 330 */
- { 33, 12, 3, 0, 0, 33, 0, }, /* 331 */
- { 33, 7, 5, 0, 0, 33, 0, }, /* 332 */
- { 33, 6, 12, 0, 0, 33, 0, }, /* 333 */
- { 33, 13, 12, 0, 0, 33, 0, }, /* 334 */
- { 58, 7, 12, 0, 0, 58, 0, }, /* 335 */
- { 58, 26, 12, 0, 0, 58, 0, }, /* 336 */
- { 58, 21, 12, 0, 0, 58, 0, }, /* 337 */
- { 58, 12, 3, 0, 0, 58, 0, }, /* 338 */
- { 58, 13, 12, 0, 0, 58, 0, }, /* 339 */
- { 58, 15, 12, 0, 0, 58, 0, }, /* 340 */
- { 58, 22, 12, 0, 0, 58, 0, }, /* 341 */
- { 58, 18, 12, 0, 0, 58, 0, }, /* 342 */
- { 58, 10, 5, 0, 0, 58, 0, }, /* 343 */
- { 39, 7, 12, 0, 0, 39, 0, }, /* 344 */
- { 39, 10, 12, 0, 0, 39, 0, }, /* 345 */
- { 39, 12, 3, 0, 0, 39, 0, }, /* 346 */
- { 39, 10, 5, 0, 0, 39, 0, }, /* 347 */
- { 39, 13, 12, 0, 0, -88, 0, }, /* 348 */
- { 39, 21, 12, 0, 0, 39, 0, }, /* 349 */
- { 39, 13, 12, 0, 0, 39, 0, }, /* 350 */
- { 39, 26, 12, 0, 0, 39, 0, }, /* 351 */
- { 17, 9, 12, 0, 7264, 17, 0, }, /* 352 */
- { 17, 5, 12, 0, 3008, 17, 0, }, /* 353 */
- { 10, 21, 12, 0, 0, -49, 0, }, /* 354 */
- { 17, 6, 12, 0, 0, 17, 0, }, /* 355 */
- { 24, 7, 6, 0, 0, 24, 0, }, /* 356 */
- { 24, 7, 7, 0, 0, 24, 0, }, /* 357 */
- { 24, 7, 8, 0, 0, 24, 0, }, /* 358 */
- { 16, 7, 12, 0, 0, 16, 0, }, /* 359 */
- { 16, 12, 3, 0, 0, 16, 0, }, /* 360 */
- { 16, 21, 12, 0, 0, 16, 0, }, /* 361 */
- { 16, 15, 12, 0, 0, 16, 0, }, /* 362 */
- { 16, 26, 12, 0, 0, 16, 0, }, /* 363 */
- { 9, 9, 12, 0, 38864, 9, 0, }, /* 364 */
- { 9, 9, 12, 0, 8, 9, 0, }, /* 365 */
- { 9, 5, 12, 0, -8, 9, 0, }, /* 366 */
- { 8, 17, 12, 0, 0, 8, 0, }, /* 367 */
- { 8, 7, 12, 0, 0, 8, 0, }, /* 368 */
- { 8, 26, 12, 0, 0, 8, 0, }, /* 369 */
- { 8, 21, 12, 0, 0, 8, 0, }, /* 370 */
- { 41, 29, 12, 0, 0, 41, 0, }, /* 371 */
- { 41, 7, 12, 0, 0, 41, 0, }, /* 372 */
- { 41, 22, 12, 0, 0, 41, 0, }, /* 373 */
- { 41, 18, 12, 0, 0, 41, 0, }, /* 374 */
- { 46, 7, 12, 0, 0, 46, 0, }, /* 375 */
- { 46, 14, 12, 0, 0, 46, 0, }, /* 376 */
- { 51, 7, 12, 0, 0, 51, 0, }, /* 377 */
- { 51, 12, 3, 0, 0, 51, 0, }, /* 378 */
- { 25, 7, 12, 0, 0, 25, 0, }, /* 379 */
- { 25, 12, 3, 0, 0, 25, 0, }, /* 380 */
- { 10, 21, 12, 0, 0, -117, 0, }, /* 381 */
- { 7, 7, 12, 0, 0, 7, 0, }, /* 382 */
- { 7, 12, 3, 0, 0, 7, 0, }, /* 383 */
- { 52, 7, 12, 0, 0, 52, 0, }, /* 384 */
- { 52, 12, 3, 0, 0, 52, 0, }, /* 385 */
- { 32, 7, 12, 0, 0, 32, 0, }, /* 386 */
- { 32, 12, 3, 0, 0, 32, 0, }, /* 387 */
- { 32, 10, 5, 0, 0, 32, 0, }, /* 388 */
- { 32, 21, 12, 0, 0, 32, 0, }, /* 389 */
- { 32, 6, 12, 0, 0, 32, 0, }, /* 390 */
- { 32, 23, 12, 0, 0, 32, 0, }, /* 391 */
- { 32, 13, 12, 0, 0, 32, 0, }, /* 392 */
- { 32, 15, 12, 0, 0, 32, 0, }, /* 393 */
- { 38, 21, 12, 0, 0, 38, 0, }, /* 394 */
- { 10, 21, 12, 0, 0, -73, 0, }, /* 395 */
- { 38, 17, 12, 0, 0, 38, 0, }, /* 396 */
- { 38, 12, 3, 0, 0, 38, 0, }, /* 397 */
- { 38, 1, 2, 0, 0, 38, 0, }, /* 398 */
- { 38, 13, 12, 0, 0, 38, 0, }, /* 399 */
- { 38, 7, 12, 0, 0, 38, 0, }, /* 400 */
- { 38, 6, 12, 0, 0, 38, 0, }, /* 401 */
- { 35, 7, 12, 0, 0, 35, 0, }, /* 402 */
- { 35, 12, 3, 0, 0, 35, 0, }, /* 403 */
- { 35, 10, 5, 0, 0, 35, 0, }, /* 404 */
- { 35, 26, 12, 0, 0, 35, 0, }, /* 405 */
- { 35, 21, 12, 0, 0, 35, 0, }, /* 406 */
- { 35, 13, 12, 0, 0, 35, 0, }, /* 407 */
- { 53, 7, 12, 0, 0, 53, 0, }, /* 408 */
- { 40, 7, 12, 0, 0, 40, 0, }, /* 409 */
- { 40, 13, 12, 0, 0, 40, 0, }, /* 410 */
- { 40, 15, 12, 0, 0, 40, 0, }, /* 411 */
- { 40, 26, 12, 0, 0, 40, 0, }, /* 412 */
- { 32, 26, 12, 0, 0, 32, 0, }, /* 413 */
- { 6, 7, 12, 0, 0, 6, 0, }, /* 414 */
- { 6, 12, 3, 0, 0, 6, 0, }, /* 415 */
- { 6, 10, 5, 0, 0, 6, 0, }, /* 416 */
- { 6, 21, 12, 0, 0, 6, 0, }, /* 417 */
- { 91, 7, 12, 0, 0, 91, 0, }, /* 418 */
- { 91, 10, 5, 0, 0, 91, 0, }, /* 419 */
- { 91, 12, 3, 0, 0, 91, 0, }, /* 420 */
- { 91, 10, 12, 0, 0, 91, 0, }, /* 421 */
- { 91, 13, 12, 0, 0, 91, 0, }, /* 422 */
- { 91, 21, 12, 0, 0, 91, 0, }, /* 423 */
- { 91, 6, 12, 0, 0, 91, 0, }, /* 424 */
- { 28, 11, 3, 0, 0, 28, 0, }, /* 425 */
- { 62, 12, 3, 0, 0, 62, 0, }, /* 426 */
- { 62, 10, 5, 0, 0, 62, 0, }, /* 427 */
- { 62, 7, 12, 0, 0, 62, 0, }, /* 428 */
- { 62, 10, 3, 0, 0, 62, 0, }, /* 429 */
- { 62, 13, 12, 0, 0, 62, 0, }, /* 430 */
- { 62, 21, 12, 0, 0, 62, 0, }, /* 431 */
- { 62, 26, 12, 0, 0, 62, 0, }, /* 432 */
- { 76, 12, 3, 0, 0, 76, 0, }, /* 433 */
- { 76, 10, 5, 0, 0, 76, 0, }, /* 434 */
- { 76, 7, 12, 0, 0, 76, 0, }, /* 435 */
- { 76, 13, 12, 0, 0, 76, 0, }, /* 436 */
- { 93, 7, 12, 0, 0, 93, 0, }, /* 437 */
- { 93, 12, 3, 0, 0, 93, 0, }, /* 438 */
- { 93, 10, 5, 0, 0, 93, 0, }, /* 439 */
- { 93, 21, 12, 0, 0, 93, 0, }, /* 440 */
- { 70, 7, 12, 0, 0, 70, 0, }, /* 441 */
- { 70, 10, 5, 0, 0, 70, 0, }, /* 442 */
- { 70, 12, 3, 0, 0, 70, 0, }, /* 443 */
- { 70, 21, 12, 0, 0, 70, 0, }, /* 444 */
- { 70, 13, 12, 0, 0, 70, 0, }, /* 445 */
- { 73, 13, 12, 0, 0, 73, 0, }, /* 446 */
- { 73, 7, 12, 0, 0, 73, 0, }, /* 447 */
- { 73, 6, 12, 0, 0, 73, 0, }, /* 448 */
- { 73, 21, 12, 0, 0, 73, 0, }, /* 449 */
- { 13, 5, 12, 63, -6222, 13, 0, }, /* 450 */
- { 13, 5, 12, 67, -6221, 13, 0, }, /* 451 */
- { 13, 5, 12, 71, -6212, 13, 0, }, /* 452 */
- { 13, 5, 12, 75, -6210, 13, 0, }, /* 453 */
- { 13, 5, 12, 79, -6210, 13, 0, }, /* 454 */
- { 13, 5, 12, 79, -6211, 13, 0, }, /* 455 */
- { 13, 5, 12, 84, -6204, 13, 0, }, /* 456 */
- { 13, 5, 12, 88, -6180, 13, 0, }, /* 457 */
- { 13, 5, 12, 108, 35267, 13, 0, }, /* 458 */
- { 17, 9, 12, 0, -3008, 17, 0, }, /* 459 */
- { 76, 21, 12, 0, 0, 76, 0, }, /* 460 */
- { 28, 12, 3, 0, 0, -112, 0, }, /* 461 */
- { 28, 12, 3, 0, 0, 15, 0, }, /* 462 */
- { 10, 21, 12, 0, 0, -37, 0, }, /* 463 */
- { 28, 12, 3, 0, 0, -13, 0, }, /* 464 */
- { 28, 12, 3, 0, 0, -43, 0, }, /* 465 */
- { 28, 12, 3, 0, 0, -146, 0, }, /* 466 */
- { 10, 10, 5, 0, 0, -13, 0, }, /* 467 */
- { 10, 7, 12, 0, 0, -40, 0, }, /* 468 */
- { 10, 7, 12, 0, 0, -13, 0, }, /* 469 */
- { 10, 7, 12, 0, 0, 15, 0, }, /* 470 */
- { 10, 7, 12, 0, 0, -162, 0, }, /* 471 */
- { 10, 7, 12, 0, 0, -37, 0, }, /* 472 */
- { 28, 12, 3, 0, 0, -96, 0, }, /* 473 */
- { 10, 10, 5, 0, 0, 3, 0, }, /* 474 */
- { 28, 12, 3, 0, 0, -37, 0, }, /* 475 */
- { 10, 7, 12, 0, 0, 150, 0, }, /* 476 */
- { 13, 5, 12, 0, 0, 13, 0, }, /* 477 */
- { 13, 6, 12, 0, 0, 13, 0, }, /* 478 */
- { 34, 5, 12, 0, 35332, 34, 0, }, /* 479 */
- { 34, 5, 12, 0, 3814, 34, 0, }, /* 480 */
- { 34, 5, 12, 0, 35384, 34, 0, }, /* 481 */
- { 28, 12, 3, 0, 0, -34, 0, }, /* 482 */
- { 34, 9, 12, 92, 1, 34, 0, }, /* 483 */
- { 34, 5, 12, 92, -1, 34, 0, }, /* 484 */
- { 34, 5, 12, 92, -58, 34, 0, }, /* 485 */
- { 34, 9, 12, 0, -7615, 34, 0, }, /* 486 */
- { 20, 5, 12, 0, 8, 20, 0, }, /* 487 */
- { 20, 9, 12, 0, -8, 20, 0, }, /* 488 */
- { 20, 5, 12, 0, 74, 20, 0, }, /* 489 */
- { 20, 5, 12, 0, 86, 20, 0, }, /* 490 */
- { 20, 5, 12, 0, 100, 20, 0, }, /* 491 */
- { 20, 5, 12, 0, 128, 20, 0, }, /* 492 */
- { 20, 5, 12, 0, 112, 20, 0, }, /* 493 */
- { 20, 5, 12, 0, 126, 20, 0, }, /* 494 */
- { 20, 8, 12, 0, -8, 20, 0, }, /* 495 */
- { 20, 5, 12, 0, 9, 20, 0, }, /* 496 */
- { 20, 9, 12, 0, -74, 20, 0, }, /* 497 */
- { 20, 8, 12, 0, -9, 20, 0, }, /* 498 */
- { 20, 5, 12, 21, -7173, 20, 0, }, /* 499 */
- { 20, 9, 12, 0, -86, 20, 0, }, /* 500 */
- { 20, 9, 12, 0, -100, 20, 0, }, /* 501 */
- { 20, 9, 12, 0, -112, 20, 0, }, /* 502 */
- { 20, 9, 12, 0, -128, 20, 0, }, /* 503 */
- { 20, 9, 12, 0, -126, 20, 0, }, /* 504 */
- { 28, 1, 3, 0, 0, 28, 0, }, /* 505 */
- { 28, 1, 13, 0, 0, 28, 0, }, /* 506 */
- { 10, 27, 2, 0, 0, 10, 0, }, /* 507 */
- { 10, 28, 2, 0, 0, 10, 0, }, /* 508 */
- { 10, 29, 12, 0, 0, -70, 0, }, /* 509 */
- { 10, 21, 14, 0, 0, 10, 0, }, /* 510 */
- { 0, 2, 2, 0, 0, 0, 0, }, /* 511 */
- { 28, 12, 3, 0, 0, -100, 0, }, /* 512 */
- { 10, 9, 12, 0, 0, 10, 0, }, /* 513 */
- { 10, 5, 12, 0, 0, 10, 0, }, /* 514 */
- { 20, 9, 12, 96, -7517, 20, 0, }, /* 515 */
- { 34, 9, 12, 100, -8383, 34, 0, }, /* 516 */
- { 34, 9, 12, 104, -8262, 34, 0, }, /* 517 */
- { 34, 9, 12, 0, 28, 34, 0, }, /* 518 */
- { 10, 7, 12, 0, 0, 10, 0, }, /* 519 */
- { 10, 5, 14, 0, 0, 10, 0, }, /* 520 */
- { 34, 5, 12, 0, -28, 34, 0, }, /* 521 */
- { 34, 14, 12, 0, 16, 34, 0, }, /* 522 */
- { 34, 14, 12, 0, -16, 34, 0, }, /* 523 */
- { 34, 14, 12, 0, 0, 34, 0, }, /* 524 */
- { 10, 25, 14, 0, 0, 10, 0, }, /* 525 */
- { 10, 26, 12, 0, 26, 10, 0, }, /* 526 */
- { 10, 26, 14, 0, 26, 10, 0, }, /* 527 */
- { 10, 26, 12, 0, -26, 10, 0, }, /* 528 */
- { 5, 26, 12, 0, 0, 5, 0, }, /* 529 */
- { 18, 9, 12, 0, 48, 18, 0, }, /* 530 */
- { 18, 5, 12, 0, -48, 18, 0, }, /* 531 */
- { 34, 9, 12, 0, -10743, 34, 0, }, /* 532 */
- { 34, 9, 12, 0, -3814, 34, 0, }, /* 533 */
- { 34, 9, 12, 0, -10727, 34, 0, }, /* 534 */
- { 34, 5, 12, 0, -10795, 34, 0, }, /* 535 */
- { 34, 5, 12, 0, -10792, 34, 0, }, /* 536 */
- { 34, 9, 12, 0, -10780, 34, 0, }, /* 537 */
- { 34, 9, 12, 0, -10749, 34, 0, }, /* 538 */
- { 34, 9, 12, 0, -10783, 34, 0, }, /* 539 */
- { 34, 9, 12, 0, -10782, 34, 0, }, /* 540 */
- { 34, 9, 12, 0, -10815, 34, 0, }, /* 541 */
- { 11, 5, 12, 0, 0, 11, 0, }, /* 542 */
- { 11, 26, 12, 0, 0, 11, 0, }, /* 543 */
- { 11, 12, 3, 0, 0, 11, 0, }, /* 544 */
- { 11, 21, 12, 0, 0, 11, 0, }, /* 545 */
- { 11, 15, 12, 0, 0, 11, 0, }, /* 546 */
- { 17, 5, 12, 0, -7264, 17, 0, }, /* 547 */
- { 59, 7, 12, 0, 0, 59, 0, }, /* 548 */
- { 59, 6, 12, 0, 0, 59, 0, }, /* 549 */
- { 59, 21, 12, 0, 0, 59, 0, }, /* 550 */
- { 59, 12, 3, 0, 0, 59, 0, }, /* 551 */
- { 13, 12, 3, 0, 0, 13, 0, }, /* 552 */
- { 10, 21, 12, 0, 0, -25, 0, }, /* 553 */
- { 23, 26, 12, 0, 0, 23, 0, }, /* 554 */
- { 10, 21, 12, 0, 0, -139, 0, }, /* 555 */
- { 10, 21, 12, 0, 0, -133, 0, }, /* 556 */
- { 23, 6, 12, 0, 0, 23, 0, }, /* 557 */
- { 10, 7, 12, 0, 0, 23, 0, }, /* 558 */
- { 23, 14, 12, 0, 0, 23, 0, }, /* 559 */
- { 10, 22, 12, 0, 0, -139, 0, }, /* 560 */
- { 10, 18, 12, 0, 0, -139, 0, }, /* 561 */
- { 10, 26, 12, 0, 0, -133, 0, }, /* 562 */
- { 10, 17, 12, 0, 0, -133, 0, }, /* 563 */
- { 10, 22, 12, 0, 0, -133, 0, }, /* 564 */
- { 10, 18, 12, 0, 0, -133, 0, }, /* 565 */
- { 28, 12, 3, 0, 0, -16, 0, }, /* 566 */
- { 24, 10, 3, 0, 0, 24, 0, }, /* 567 */
- { 10, 17, 14, 0, 0, -133, 0, }, /* 568 */
- { 10, 6, 12, 0, 0, -64, 0, }, /* 569 */
- { 10, 7, 12, 0, 0, -104, 0, }, /* 570 */
- { 10, 21, 14, 0, 0, -104, 0, }, /* 571 */
- { 10, 26, 12, 0, 0, 23, 0, }, /* 572 */
- { 27, 7, 12, 0, 0, 27, 0, }, /* 573 */
- { 28, 12, 3, 0, 0, -64, 0, }, /* 574 */
- { 10, 24, 12, 0, 0, -64, 0, }, /* 575 */
- { 27, 6, 12, 0, 0, 27, 0, }, /* 576 */
- { 10, 17, 12, 0, 0, -64, 0, }, /* 577 */
- { 30, 7, 12, 0, 0, 30, 0, }, /* 578 */
- { 30, 6, 12, 0, 0, 30, 0, }, /* 579 */
- { 4, 7, 12, 0, 0, 4, 0, }, /* 580 */
- { 24, 7, 12, 0, 0, 24, 0, }, /* 581 */
- { 10, 15, 12, 0, 0, 23, 0, }, /* 582 */
- { 24, 26, 12, 0, 0, 24, 0, }, /* 583 */
- { 10, 26, 14, 0, 0, 23, 0, }, /* 584 */
- { 30, 26, 12, 0, 0, 30, 0, }, /* 585 */
- { 23, 7, 12, 0, 0, 23, 0, }, /* 586 */
- { 61, 7, 12, 0, 0, 61, 0, }, /* 587 */
- { 61, 6, 12, 0, 0, 61, 0, }, /* 588 */
- { 61, 26, 12, 0, 0, 61, 0, }, /* 589 */
- { 86, 7, 12, 0, 0, 86, 0, }, /* 590 */
- { 86, 6, 12, 0, 0, 86, 0, }, /* 591 */
- { 86, 21, 12, 0, 0, 86, 0, }, /* 592 */
- { 77, 7, 12, 0, 0, 77, 0, }, /* 593 */
- { 77, 6, 12, 0, 0, 77, 0, }, /* 594 */
- { 77, 21, 12, 0, 0, 77, 0, }, /* 595 */
- { 77, 13, 12, 0, 0, 77, 0, }, /* 596 */
- { 13, 9, 12, 108, 1, 13, 0, }, /* 597 */
- { 13, 5, 12, 108, -35267, 13, 0, }, /* 598 */
- { 13, 7, 12, 0, 0, 13, 0, }, /* 599 */
- { 13, 21, 12, 0, 0, 13, 0, }, /* 600 */
- { 79, 7, 12, 0, 0, 79, 0, }, /* 601 */
- { 79, 14, 12, 0, 0, 79, 0, }, /* 602 */
- { 79, 12, 3, 0, 0, 79, 0, }, /* 603 */
- { 79, 21, 12, 0, 0, 79, 0, }, /* 604 */
- { 10, 24, 12, 0, 0, -61, 0, }, /* 605 */
- { 34, 9, 12, 0, -35332, 34, 0, }, /* 606 */
- { 34, 9, 12, 0, -42280, 34, 0, }, /* 607 */
- { 34, 5, 12, 0, 48, 34, 0, }, /* 608 */
- { 34, 9, 12, 0, -42308, 34, 0, }, /* 609 */
- { 34, 9, 12, 0, -42319, 34, 0, }, /* 610 */
- { 34, 9, 12, 0, -42315, 34, 0, }, /* 611 */
- { 34, 9, 12, 0, -42305, 34, 0, }, /* 612 */
- { 34, 9, 12, 0, -42258, 34, 0, }, /* 613 */
- { 34, 9, 12, 0, -42282, 34, 0, }, /* 614 */
- { 34, 9, 12, 0, -42261, 34, 0, }, /* 615 */
- { 34, 9, 12, 0, 928, 34, 0, }, /* 616 */
- { 34, 9, 12, 0, -48, 34, 0, }, /* 617 */
- { 34, 9, 12, 0, -42307, 34, 0, }, /* 618 */
- { 34, 9, 12, 0, -35384, 34, 0, }, /* 619 */
- { 49, 7, 12, 0, 0, 49, 0, }, /* 620 */
- { 49, 12, 3, 0, 0, 49, 0, }, /* 621 */
- { 49, 10, 5, 0, 0, 49, 0, }, /* 622 */
- { 49, 26, 12, 0, 0, 49, 0, }, /* 623 */
- { 10, 15, 12, 0, 0, -224, 0, }, /* 624 */
- { 10, 15, 12, 0, 0, -210, 0, }, /* 625 */
- { 10, 26, 12, 0, 0, -171, 0, }, /* 626 */
- { 10, 23, 12, 0, 0, -171, 0, }, /* 627 */
- { 65, 7, 12, 0, 0, 65, 0, }, /* 628 */
- { 65, 21, 12, 0, 0, 65, 0, }, /* 629 */
- { 75, 10, 5, 0, 0, 75, 0, }, /* 630 */
- { 75, 7, 12, 0, 0, 75, 0, }, /* 631 */
- { 75, 12, 3, 0, 0, 75, 0, }, /* 632 */
- { 75, 21, 12, 0, 0, 75, 0, }, /* 633 */
- { 75, 13, 12, 0, 0, 75, 0, }, /* 634 */
- { 15, 12, 3, 0, 0, -13, 0, }, /* 635 */
- { 15, 7, 12, 0, 0, -46, 0, }, /* 636 */
- { 69, 13, 12, 0, 0, 69, 0, }, /* 637 */
- { 69, 7, 12, 0, 0, 69, 0, }, /* 638 */
- { 69, 12, 3, 0, 0, 69, 0, }, /* 639 */
- { 10, 21, 12, 0, 0, -108, 0, }, /* 640 */
- { 69, 21, 12, 0, 0, 69, 0, }, /* 641 */
- { 74, 7, 12, 0, 0, 74, 0, }, /* 642 */
- { 74, 12, 3, 0, 0, 74, 0, }, /* 643 */
- { 74, 10, 5, 0, 0, 74, 0, }, /* 644 */
- { 74, 21, 12, 0, 0, 74, 0, }, /* 645 */
- { 84, 12, 3, 0, 0, 84, 0, }, /* 646 */
- { 84, 10, 5, 0, 0, 84, 0, }, /* 647 */
- { 84, 7, 12, 0, 0, 84, 0, }, /* 648 */
- { 84, 21, 12, 0, 0, 84, 0, }, /* 649 */
- { 10, 6, 12, 0, 0, -19, 0, }, /* 650 */
- { 84, 13, 12, 0, 0, 84, 0, }, /* 651 */
- { 39, 6, 12, 0, 0, 39, 0, }, /* 652 */
- { 68, 7, 12, 0, 0, 68, 0, }, /* 653 */
- { 68, 12, 3, 0, 0, 68, 0, }, /* 654 */
- { 68, 10, 5, 0, 0, 68, 0, }, /* 655 */
- { 68, 13, 12, 0, 0, 68, 0, }, /* 656 */
- { 68, 21, 12, 0, 0, 68, 0, }, /* 657 */
- { 92, 7, 12, 0, 0, 92, 0, }, /* 658 */
- { 92, 12, 3, 0, 0, 92, 0, }, /* 659 */
- { 92, 6, 12, 0, 0, 92, 0, }, /* 660 */
- { 92, 21, 12, 0, 0, 92, 0, }, /* 661 */
- { 87, 7, 12, 0, 0, 87, 0, }, /* 662 */
- { 87, 10, 5, 0, 0, 87, 0, }, /* 663 */
- { 87, 12, 3, 0, 0, 87, 0, }, /* 664 */
- { 87, 21, 12, 0, 0, 87, 0, }, /* 665 */
- { 87, 6, 12, 0, 0, 87, 0, }, /* 666 */
- { 34, 5, 12, 0, -928, 34, 0, }, /* 667 */
- { 9, 5, 12, 0, -38864, 9, 0, }, /* 668 */
- { 87, 13, 12, 0, 0, 87, 0, }, /* 669 */
- { 24, 7, 9, 0, 0, 24, 0, }, /* 670 */
- { 24, 7, 10, 0, 0, 24, 0, }, /* 671 */
- { 0, 4, 12, 0, 0, 0, 0, }, /* 672 */
- { 0, 3, 12, 0, 0, 0, 0, }, /* 673 */
- { 26, 25, 12, 0, 0, 26, 0, }, /* 674 */
- { 1, 24, 12, 0, 0, 1, 0, }, /* 675 */
- { 1, 7, 12, 0, 0, -10, 0, }, /* 676 */
- { 1, 26, 12, 0, 0, -10, 0, }, /* 677 */
- { 10, 6, 3, 0, 0, -64, 0, }, /* 678 */
- { 36, 7, 12, 0, 0, 36, 0, }, /* 679 */
- { 10, 21, 12, 0, 0, -22, 0, }, /* 680 */
- { 10, 15, 12, 0, 0, -92, 0, }, /* 681 */
- { 10, 26, 12, 0, 0, -22, 0, }, /* 682 */
- { 20, 14, 12, 0, 0, 20, 0, }, /* 683 */
- { 20, 15, 12, 0, 0, 20, 0, }, /* 684 */
- { 20, 26, 12, 0, 0, 20, 0, }, /* 685 */
- { 71, 7, 12, 0, 0, 71, 0, }, /* 686 */
- { 67, 7, 12, 0, 0, 67, 0, }, /* 687 */
- { 28, 12, 3, 0, 0, -1, 0, }, /* 688 */
- { 10, 15, 12, 0, 0, -1, 0, }, /* 689 */
- { 42, 7, 12, 0, 0, 42, 0, }, /* 690 */
- { 42, 15, 12, 0, 0, 42, 0, }, /* 691 */
- { 19, 7, 12, 0, 0, 19, 0, }, /* 692 */
- { 19, 14, 12, 0, 0, 19, 0, }, /* 693 */
- { 118, 7, 12, 0, 0, 118, 0, }, /* 694 */
- { 118, 12, 3, 0, 0, 118, 0, }, /* 695 */
- { 60, 7, 12, 0, 0, 60, 0, }, /* 696 */
- { 60, 21, 12, 0, 0, 60, 0, }, /* 697 */
- { 43, 7, 12, 0, 0, 43, 0, }, /* 698 */
- { 43, 21, 12, 0, 0, 43, 0, }, /* 699 */
- { 43, 14, 12, 0, 0, 43, 0, }, /* 700 */
- { 14, 9, 12, 0, 40, 14, 0, }, /* 701 */
- { 14, 5, 12, 0, -40, 14, 0, }, /* 702 */
- { 47, 7, 12, 0, 0, 47, 0, }, /* 703 */
- { 45, 7, 12, 0, 0, 45, 0, }, /* 704 */
- { 45, 13, 12, 0, 0, 45, 0, }, /* 705 */
- { 136, 9, 12, 0, 40, 136, 0, }, /* 706 */
- { 136, 5, 12, 0, -40, 136, 0, }, /* 707 */
- { 106, 7, 12, 0, 0, 106, 0, }, /* 708 */
- { 104, 7, 12, 0, 0, 104, 0, }, /* 709 */
- { 104, 21, 12, 0, 0, 104, 0, }, /* 710 */
- { 110, 7, 12, 0, 0, 110, 0, }, /* 711 */
- { 12, 7, 12, 0, 0, 12, 0, }, /* 712 */
- { 81, 7, 12, 0, 0, 81, 0, }, /* 713 */
- { 81, 21, 12, 0, 0, 81, 0, }, /* 714 */
- { 81, 15, 12, 0, 0, 81, 0, }, /* 715 */
- { 120, 7, 12, 0, 0, 120, 0, }, /* 716 */
- { 120, 26, 12, 0, 0, 120, 0, }, /* 717 */
- { 120, 15, 12, 0, 0, 120, 0, }, /* 718 */
- { 116, 7, 12, 0, 0, 116, 0, }, /* 719 */
- { 116, 15, 12, 0, 0, 116, 0, }, /* 720 */
- { 128, 7, 12, 0, 0, 128, 0, }, /* 721 */
- { 128, 15, 12, 0, 0, 128, 0, }, /* 722 */
- { 66, 7, 12, 0, 0, 66, 0, }, /* 723 */
- { 66, 15, 12, 0, 0, 66, 0, }, /* 724 */
- { 66, 21, 12, 0, 0, 66, 0, }, /* 725 */
- { 72, 7, 12, 0, 0, 72, 0, }, /* 726 */
- { 72, 21, 12, 0, 0, 72, 0, }, /* 727 */
- { 98, 7, 12, 0, 0, 98, 0, }, /* 728 */
- { 97, 7, 12, 0, 0, 97, 0, }, /* 729 */
- { 97, 15, 12, 0, 0, 97, 0, }, /* 730 */
- { 31, 7, 12, 0, 0, 31, 0, }, /* 731 */
- { 31, 12, 3, 0, 0, 31, 0, }, /* 732 */
- { 31, 15, 12, 0, 0, 31, 0, }, /* 733 */
- { 31, 21, 12, 0, 0, 31, 0, }, /* 734 */
- { 88, 7, 12, 0, 0, 88, 0, }, /* 735 */
- { 88, 15, 12, 0, 0, 88, 0, }, /* 736 */
- { 88, 21, 12, 0, 0, 88, 0, }, /* 737 */
- { 117, 7, 12, 0, 0, 117, 0, }, /* 738 */
- { 117, 15, 12, 0, 0, 117, 0, }, /* 739 */
- { 112, 7, 12, 0, 0, 112, 0, }, /* 740 */
- { 112, 26, 12, 0, 0, 112, 0, }, /* 741 */
- { 112, 12, 3, 0, 0, 112, 0, }, /* 742 */
- { 112, 15, 12, 0, 0, 112, 0, }, /* 743 */
- { 112, 21, 12, 0, 0, 112, 0, }, /* 744 */
- { 78, 7, 12, 0, 0, 78, 0, }, /* 745 */
- { 78, 21, 12, 0, 0, 78, 0, }, /* 746 */
- { 83, 7, 12, 0, 0, 83, 0, }, /* 747 */
- { 83, 15, 12, 0, 0, 83, 0, }, /* 748 */
- { 82, 7, 12, 0, 0, 82, 0, }, /* 749 */
- { 82, 15, 12, 0, 0, 82, 0, }, /* 750 */
- { 121, 7, 12, 0, 0, 121, 0, }, /* 751 */
- { 121, 21, 12, 0, 0, 121, 0, }, /* 752 */
- { 121, 15, 12, 0, 0, 121, 0, }, /* 753 */
- { 89, 7, 12, 0, 0, 89, 0, }, /* 754 */
- { 130, 9, 12, 0, 64, 130, 0, }, /* 755 */
- { 130, 5, 12, 0, -64, 130, 0, }, /* 756 */
- { 130, 15, 12, 0, 0, 130, 0, }, /* 757 */
- { 144, 7, 12, 0, 0, 144, 0, }, /* 758 */
- { 144, 12, 3, 0, 0, 144, 0, }, /* 759 */
- { 144, 13, 12, 0, 0, 144, 0, }, /* 760 */
- { 1, 15, 12, 0, 0, 1, 0, }, /* 761 */
- { 156, 7, 12, 0, 0, 156, 0, }, /* 762 */
- { 156, 12, 3, 0, 0, 156, 0, }, /* 763 */
- { 156, 17, 12, 0, 0, 156, 0, }, /* 764 */
- { 147, 7, 12, 0, 0, 147, 0, }, /* 765 */
- { 147, 15, 12, 0, 0, 147, 0, }, /* 766 */
- { 148, 7, 12, 0, 0, 148, 0, }, /* 767 */
- { 148, 12, 3, 0, 0, 148, 0, }, /* 768 */
- { 148, 15, 12, 0, 0, 148, 0, }, /* 769 */
- { 148, 21, 12, 0, 0, 148, 0, }, /* 770 */
- { 153, 7, 12, 0, 0, 153, 0, }, /* 771 */
- { 153, 15, 12, 0, 0, 153, 0, }, /* 772 */
- { 149, 7, 12, 0, 0, 149, 0, }, /* 773 */
- { 94, 10, 5, 0, 0, 94, 0, }, /* 774 */
- { 94, 12, 3, 0, 0, 94, 0, }, /* 775 */
- { 94, 7, 12, 0, 0, 94, 0, }, /* 776 */
- { 94, 21, 12, 0, 0, 94, 0, }, /* 777 */
- { 94, 15, 12, 0, 0, 94, 0, }, /* 778 */
- { 94, 13, 12, 0, 0, 94, 0, }, /* 779 */
- { 85, 12, 3, 0, 0, 85, 0, }, /* 780 */
- { 85, 10, 5, 0, 0, 85, 0, }, /* 781 */
- { 85, 7, 12, 0, 0, 85, 0, }, /* 782 */
- { 85, 21, 12, 0, 0, 85, 0, }, /* 783 */
- { 85, 1, 4, 0, 0, 85, 0, }, /* 784 */
- { 101, 7, 12, 0, 0, 101, 0, }, /* 785 */
- { 101, 13, 12, 0, 0, 101, 0, }, /* 786 */
- { 96, 12, 3, 0, 0, 96, 0, }, /* 787 */
- { 96, 7, 12, 0, 0, 96, 0, }, /* 788 */
- { 96, 10, 5, 0, 0, 96, 0, }, /* 789 */
- { 96, 13, 12, 0, 0, 96, 0, }, /* 790 */
- { 96, 21, 12, 0, 0, 96, 0, }, /* 791 */
- { 111, 7, 12, 0, 0, 111, 0, }, /* 792 */
- { 111, 12, 3, 0, 0, 111, 0, }, /* 793 */
- { 111, 21, 12, 0, 0, 111, 0, }, /* 794 */
- { 100, 12, 3, 0, 0, 100, 0, }, /* 795 */
- { 100, 10, 5, 0, 0, 100, 0, }, /* 796 */
- { 100, 7, 12, 0, 0, 100, 0, }, /* 797 */
- { 100, 7, 4, 0, 0, 100, 0, }, /* 798 */
- { 100, 21, 12, 0, 0, 100, 0, }, /* 799 */
- { 100, 13, 12, 0, 0, 100, 0, }, /* 800 */
- { 48, 15, 12, 0, 0, 48, 0, }, /* 801 */
- { 108, 7, 12, 0, 0, 108, 0, }, /* 802 */
- { 108, 10, 5, 0, 0, 108, 0, }, /* 803 */
- { 108, 12, 3, 0, 0, 108, 0, }, /* 804 */
- { 108, 21, 12, 0, 0, 108, 0, }, /* 805 */
- { 129, 7, 12, 0, 0, 129, 0, }, /* 806 */
- { 129, 21, 12, 0, 0, 129, 0, }, /* 807 */
- { 109, 7, 12, 0, 0, 109, 0, }, /* 808 */
- { 109, 12, 3, 0, 0, 109, 0, }, /* 809 */
- { 109, 10, 5, 0, 0, 109, 0, }, /* 810 */
- { 109, 13, 12, 0, 0, 109, 0, }, /* 811 */
- { 107, 12, 3, 0, 0, 107, 0, }, /* 812 */
- { 107, 12, 3, 0, 0, -52, 0, }, /* 813 */
- { 107, 10, 5, 0, 0, 107, 0, }, /* 814 */
- { 107, 10, 5, 0, 0, -52, 0, }, /* 815 */
- { 107, 7, 12, 0, 0, 107, 0, }, /* 816 */
- { 28, 12, 3, 0, 0, -52, 0, }, /* 817 */
- { 107, 10, 3, 0, 0, 107, 0, }, /* 818 */
- { 135, 7, 12, 0, 0, 135, 0, }, /* 819 */
- { 135, 10, 5, 0, 0, 135, 0, }, /* 820 */
- { 135, 12, 3, 0, 0, 135, 0, }, /* 821 */
- { 135, 21, 12, 0, 0, 135, 0, }, /* 822 */
- { 135, 13, 12, 0, 0, 135, 0, }, /* 823 */
- { 124, 7, 12, 0, 0, 124, 0, }, /* 824 */
- { 124, 10, 3, 0, 0, 124, 0, }, /* 825 */
- { 124, 10, 5, 0, 0, 124, 0, }, /* 826 */
- { 124, 12, 3, 0, 0, 124, 0, }, /* 827 */
- { 124, 21, 12, 0, 0, 124, 0, }, /* 828 */
- { 124, 13, 12, 0, 0, 124, 0, }, /* 829 */
- { 123, 7, 12, 0, 0, 123, 0, }, /* 830 */
- { 123, 10, 3, 0, 0, 123, 0, }, /* 831 */
- { 123, 10, 5, 0, 0, 123, 0, }, /* 832 */
- { 123, 12, 3, 0, 0, 123, 0, }, /* 833 */
- { 123, 21, 12, 0, 0, 123, 0, }, /* 834 */
- { 114, 7, 12, 0, 0, 114, 0, }, /* 835 */
- { 114, 10, 5, 0, 0, 114, 0, }, /* 836 */
- { 114, 12, 3, 0, 0, 114, 0, }, /* 837 */
- { 114, 21, 12, 0, 0, 114, 0, }, /* 838 */
- { 114, 13, 12, 0, 0, 114, 0, }, /* 839 */
- { 102, 7, 12, 0, 0, 102, 0, }, /* 840 */
- { 102, 12, 3, 0, 0, 102, 0, }, /* 841 */
- { 102, 10, 5, 0, 0, 102, 0, }, /* 842 */
- { 102, 13, 12, 0, 0, 102, 0, }, /* 843 */
- { 126, 7, 12, 0, 0, 126, 0, }, /* 844 */
- { 126, 12, 3, 0, 0, 126, 0, }, /* 845 */
- { 126, 10, 5, 0, 0, 126, 0, }, /* 846 */
- { 126, 13, 12, 0, 0, 126, 0, }, /* 847 */
- { 126, 15, 12, 0, 0, 126, 0, }, /* 848 */
- { 126, 21, 12, 0, 0, 126, 0, }, /* 849 */
- { 126, 26, 12, 0, 0, 126, 0, }, /* 850 */
- { 142, 7, 12, 0, 0, 142, 0, }, /* 851 */
- { 142, 10, 5, 0, 0, 142, 0, }, /* 852 */
- { 142, 12, 3, 0, 0, 142, 0, }, /* 853 */
- { 142, 21, 12, 0, 0, 142, 0, }, /* 854 */
- { 125, 9, 12, 0, 32, 125, 0, }, /* 855 */
- { 125, 5, 12, 0, -32, 125, 0, }, /* 856 */
- { 125, 13, 12, 0, 0, 125, 0, }, /* 857 */
- { 125, 15, 12, 0, 0, 125, 0, }, /* 858 */
- { 125, 7, 12, 0, 0, 125, 0, }, /* 859 */
- { 154, 7, 12, 0, 0, 154, 0, }, /* 860 */
- { 154, 10, 3, 0, 0, 154, 0, }, /* 861 */
- { 154, 10, 5, 0, 0, 154, 0, }, /* 862 */
- { 154, 12, 3, 0, 0, 154, 0, }, /* 863 */
- { 154, 7, 4, 0, 0, 154, 0, }, /* 864 */
- { 154, 21, 12, 0, 0, 154, 0, }, /* 865 */
- { 154, 13, 12, 0, 0, 154, 0, }, /* 866 */
- { 150, 7, 12, 0, 0, 150, 0, }, /* 867 */
- { 150, 10, 5, 0, 0, 150, 0, }, /* 868 */
- { 150, 12, 3, 0, 0, 150, 0, }, /* 869 */
- { 150, 21, 12, 0, 0, 150, 0, }, /* 870 */
- { 141, 7, 12, 0, 0, 141, 0, }, /* 871 */
- { 141, 12, 3, 0, 0, 141, 0, }, /* 872 */
- { 141, 10, 5, 0, 0, 141, 0, }, /* 873 */
- { 141, 7, 4, 0, 0, 141, 0, }, /* 874 */
- { 141, 21, 12, 0, 0, 141, 0, }, /* 875 */
- { 140, 7, 12, 0, 0, 140, 0, }, /* 876 */
- { 140, 12, 3, 0, 0, 140, 0, }, /* 877 */
- { 140, 10, 5, 0, 0, 140, 0, }, /* 878 */
- { 140, 7, 4, 0, 0, 140, 0, }, /* 879 */
- { 140, 21, 12, 0, 0, 140, 0, }, /* 880 */
- { 122, 7, 12, 0, 0, 122, 0, }, /* 881 */
- { 133, 7, 12, 0, 0, 133, 0, }, /* 882 */
- { 133, 10, 5, 0, 0, 133, 0, }, /* 883 */
- { 133, 12, 3, 0, 0, 133, 0, }, /* 884 */
- { 133, 21, 12, 0, 0, 133, 0, }, /* 885 */
- { 133, 13, 12, 0, 0, 133, 0, }, /* 886 */
- { 133, 15, 12, 0, 0, 133, 0, }, /* 887 */
- { 134, 21, 12, 0, 0, 134, 0, }, /* 888 */
- { 134, 7, 12, 0, 0, 134, 0, }, /* 889 */
- { 134, 12, 3, 0, 0, 134, 0, }, /* 890 */
- { 134, 10, 5, 0, 0, 134, 0, }, /* 891 */
- { 138, 7, 12, 0, 0, 138, 0, }, /* 892 */
- { 138, 12, 3, 0, 0, 138, 0, }, /* 893 */
- { 138, 7, 4, 0, 0, 138, 0, }, /* 894 */
- { 138, 13, 12, 0, 0, 138, 0, }, /* 895 */
- { 143, 7, 12, 0, 0, 143, 0, }, /* 896 */
- { 143, 10, 5, 0, 0, 143, 0, }, /* 897 */
- { 143, 12, 3, 0, 0, 143, 0, }, /* 898 */
- { 143, 13, 12, 0, 0, 143, 0, }, /* 899 */
- { 145, 7, 12, 0, 0, 145, 0, }, /* 900 */
- { 145, 12, 3, 0, 0, 145, 0, }, /* 901 */
- { 145, 10, 5, 0, 0, 145, 0, }, /* 902 */
- { 145, 21, 12, 0, 0, 145, 0, }, /* 903 */
- { 54, 15, 12, 0, 0, 54, 0, }, /* 904 */
- { 54, 21, 12, 0, 0, 54, 0, }, /* 905 */
- { 63, 7, 12, 0, 0, 63, 0, }, /* 906 */
- { 63, 14, 12, 0, 0, 63, 0, }, /* 907 */
- { 63, 21, 12, 0, 0, 63, 0, }, /* 908 */
- { 80, 7, 12, 0, 0, 80, 0, }, /* 909 */
- { 80, 1, 2, 0, 0, 80, 0, }, /* 910 */
- { 127, 7, 12, 0, 0, 127, 0, }, /* 911 */
- { 115, 7, 12, 0, 0, 115, 0, }, /* 912 */
- { 115, 13, 12, 0, 0, 115, 0, }, /* 913 */
- { 115, 21, 12, 0, 0, 115, 0, }, /* 914 */
- { 103, 7, 12, 0, 0, 103, 0, }, /* 915 */
- { 103, 12, 3, 0, 0, 103, 0, }, /* 916 */
- { 103, 21, 12, 0, 0, 103, 0, }, /* 917 */
- { 119, 7, 12, 0, 0, 119, 0, }, /* 918 */
- { 119, 12, 3, 0, 0, 119, 0, }, /* 919 */
- { 119, 21, 12, 0, 0, 119, 0, }, /* 920 */
- { 119, 26, 12, 0, 0, 119, 0, }, /* 921 */
- { 119, 6, 12, 0, 0, 119, 0, }, /* 922 */
- { 119, 13, 12, 0, 0, 119, 0, }, /* 923 */
- { 119, 15, 12, 0, 0, 119, 0, }, /* 924 */
- { 146, 9, 12, 0, 32, 146, 0, }, /* 925 */
- { 146, 5, 12, 0, -32, 146, 0, }, /* 926 */
- { 146, 15, 12, 0, 0, 146, 0, }, /* 927 */
- { 146, 21, 12, 0, 0, 146, 0, }, /* 928 */
- { 99, 7, 12, 0, 0, 99, 0, }, /* 929 */
- { 99, 12, 3, 0, 0, 99, 0, }, /* 930 */
- { 99, 10, 5, 0, 0, 99, 0, }, /* 931 */
- { 99, 6, 12, 0, 0, 99, 0, }, /* 932 */
- { 137, 6, 12, 0, 0, 137, 0, }, /* 933 */
- { 139, 6, 12, 0, 0, 139, 0, }, /* 934 */
- { 155, 12, 3, 0, 0, 155, 0, }, /* 935 */
- { 23, 10, 5, 0, 0, 23, 0, }, /* 936 */
- { 137, 7, 12, 0, 0, 137, 0, }, /* 937 */
- { 155, 7, 12, 0, 0, 155, 0, }, /* 938 */
- { 139, 7, 12, 0, 0, 139, 0, }, /* 939 */
- { 105, 7, 12, 0, 0, 105, 0, }, /* 940 */
- { 105, 26, 12, 0, 0, 105, 0, }, /* 941 */
- { 105, 12, 3, 0, 0, 105, 0, }, /* 942 */
- { 105, 21, 12, 0, 0, 105, 0, }, /* 943 */
- { 10, 1, 2, 0, 0, 105, 0, }, /* 944 */
- { 10, 10, 3, 0, 0, 10, 0, }, /* 945 */
- { 10, 10, 5, 0, 0, 10, 0, }, /* 946 */
- { 20, 12, 3, 0, 0, 20, 0, }, /* 947 */
- { 131, 26, 12, 0, 0, 131, 0, }, /* 948 */
- { 131, 12, 3, 0, 0, 131, 0, }, /* 949 */
- { 131, 21, 12, 0, 0, 131, 0, }, /* 950 */
- { 18, 12, 3, 0, 0, 18, 0, }, /* 951 */
- { 151, 7, 12, 0, 0, 151, 0, }, /* 952 */
- { 151, 12, 3, 0, 0, 151, 0, }, /* 953 */
- { 151, 6, 12, 0, 0, 151, 0, }, /* 954 */
- { 151, 13, 12, 0, 0, 151, 0, }, /* 955 */
- { 151, 26, 12, 0, 0, 151, 0, }, /* 956 */
- { 152, 7, 12, 0, 0, 152, 0, }, /* 957 */
- { 152, 12, 3, 0, 0, 152, 0, }, /* 958 */
- { 152, 13, 12, 0, 0, 152, 0, }, /* 959 */
- { 152, 23, 12, 0, 0, 152, 0, }, /* 960 */
- { 113, 7, 12, 0, 0, 113, 0, }, /* 961 */
- { 113, 15, 12, 0, 0, 113, 0, }, /* 962 */
- { 113, 12, 3, 0, 0, 113, 0, }, /* 963 */
- { 132, 9, 12, 0, 34, 132, 0, }, /* 964 */
- { 132, 5, 12, 0, -34, 132, 0, }, /* 965 */
- { 132, 12, 3, 0, 0, 132, 0, }, /* 966 */
- { 132, 6, 12, 0, 0, 132, 0, }, /* 967 */
- { 132, 13, 12, 0, 0, 132, 0, }, /* 968 */
- { 132, 21, 12, 0, 0, 132, 0, }, /* 969 */
- { 0, 2, 14, 0, 0, 0, 0, }, /* 970 */
- { 10, 26, 11, 0, 0, 10, 0, }, /* 971 */
- { 27, 26, 12, 0, 0, 27, 0, }, /* 972 */
- { 10, 24, 3, 0, 0, 10, 0, }, /* 973 */
- { 10, 1, 3, 0, 0, 10, 0, }, /* 974 */
+ { 1, 1, 2, 0, 0, -82, 0, }, /* 223 */
+ { 10, 21, 12, 0, 0, -164, 0, }, /* 224 */
+ { 1, 7, 12, 0, 0, 1, 0, }, /* 225 */
+ { 10, 6, 12, 0, 0, -181, 0, }, /* 226 */
+ { 28, 12, 3, 0, 0, -10, 0, }, /* 227 */
+ { 1, 13, 12, 0, 0, -86, 0, }, /* 228 */
+ { 1, 21, 12, 0, 0, -4, 0, }, /* 229 */
+ { 1, 6, 12, 0, 0, 1, 0, }, /* 230 */
+ { 1, 13, 12, 0, 0, 1, 0, }, /* 231 */
+ { 50, 21, 12, 0, 0, 50, 0, }, /* 232 */
+ { 50, 1, 4, 0, 0, 50, 0, }, /* 233 */
+ { 50, 7, 12, 0, 0, 50, 0, }, /* 234 */
+ { 50, 12, 3, 0, 0, 50, 0, }, /* 235 */
+ { 56, 7, 12, 0, 0, 56, 0, }, /* 236 */
+ { 56, 12, 3, 0, 0, 56, 0, }, /* 237 */
+ { 64, 13, 12, 0, 0, 64, 0, }, /* 238 */
+ { 64, 7, 12, 0, 0, 64, 0, }, /* 239 */
+ { 64, 12, 3, 0, 0, 64, 0, }, /* 240 */
+ { 64, 6, 12, 0, 0, 64, 0, }, /* 241 */
+ { 64, 26, 12, 0, 0, 64, 0, }, /* 242 */
+ { 64, 21, 12, 0, 0, 64, 0, }, /* 243 */
+ { 64, 23, 12, 0, 0, 64, 0, }, /* 244 */
+ { 90, 7, 12, 0, 0, 90, 0, }, /* 245 */
+ { 90, 12, 3, 0, 0, 90, 0, }, /* 246 */
+ { 90, 6, 12, 0, 0, 90, 0, }, /* 247 */
+ { 90, 21, 12, 0, 0, 90, 0, }, /* 248 */
+ { 95, 7, 12, 0, 0, 95, 0, }, /* 249 */
+ { 95, 12, 3, 0, 0, 95, 0, }, /* 250 */
+ { 95, 21, 12, 0, 0, 95, 0, }, /* 251 */
+ { 1, 24, 12, 0, 0, 1, 0, }, /* 252 */
+ { 15, 12, 3, 0, 0, 15, 0, }, /* 253 */
+ { 15, 10, 5, 0, 0, 15, 0, }, /* 254 */
+ { 15, 7, 12, 0, 0, 15, 0, }, /* 255 */
+ { 28, 12, 3, 0, 0, -216, 0, }, /* 256 */
+ { 28, 12, 3, 0, 0, -203, 0, }, /* 257 */
+ { 10, 21, 12, 0, 0, -259, 0, }, /* 258 */
+ { 10, 21, 12, 0, 0, -280, 0, }, /* 259 */
+ { 15, 13, 12, 0, 0, -132, 0, }, /* 260 */
+ { 15, 21, 12, 0, 0, 15, 0, }, /* 261 */
+ { 15, 6, 12, 0, 0, 15, 0, }, /* 262 */
+ { 3, 7, 12, 0, 0, 3, 0, }, /* 263 */
+ { 3, 12, 3, 0, 0, 3, 0, }, /* 264 */
+ { 3, 10, 5, 0, 0, 3, 0, }, /* 265 */
+ { 3, 10, 3, 0, 0, 3, 0, }, /* 266 */
+ { 3, 13, 12, 0, 0, -90, 0, }, /* 267 */
+ { 3, 23, 12, 0, 0, 3, 0, }, /* 268 */
+ { 3, 15, 12, 0, 0, 3, 0, }, /* 269 */
+ { 3, 26, 12, 0, 0, 3, 0, }, /* 270 */
+ { 3, 21, 12, 0, 0, 3, 0, }, /* 271 */
+ { 22, 12, 3, 0, 0, 22, 0, }, /* 272 */
+ { 22, 10, 5, 0, 0, 22, 0, }, /* 273 */
+ { 22, 7, 12, 0, 0, 22, 0, }, /* 274 */
+ { 22, 13, 12, 0, 0, -61, 0, }, /* 275 */
+ { 22, 21, 12, 0, 0, 22, 0, }, /* 276 */
+ { 21, 12, 3, 0, 0, 21, 0, }, /* 277 */
+ { 21, 10, 5, 0, 0, 21, 0, }, /* 278 */
+ { 21, 7, 12, 0, 0, 21, 0, }, /* 279 */
+ { 21, 13, 12, 0, 0, -58, 0, }, /* 280 */
+ { 21, 21, 12, 0, 0, 21, 0, }, /* 281 */
+ { 21, 23, 12, 0, 0, 21, 0, }, /* 282 */
+ { 44, 12, 3, 0, 0, 44, 0, }, /* 283 */
+ { 44, 10, 5, 0, 0, 44, 0, }, /* 284 */
+ { 44, 7, 12, 0, 0, 44, 0, }, /* 285 */
+ { 44, 10, 3, 0, 0, 44, 0, }, /* 286 */
+ { 44, 13, 12, 0, 0, 44, 0, }, /* 287 */
+ { 44, 26, 12, 0, 0, 44, 0, }, /* 288 */
+ { 44, 15, 12, 0, 0, 44, 0, }, /* 289 */
+ { 54, 12, 3, 0, 0, 54, 0, }, /* 290 */
+ { 54, 7, 12, 0, 0, 54, 0, }, /* 291 */
+ { 54, 10, 3, 0, 0, 54, 0, }, /* 292 */
+ { 54, 10, 5, 0, 0, 54, 0, }, /* 293 */
+ { 54, 13, 12, 0, 0, -55, 0, }, /* 294 */
+ { 54, 15, 12, 0, 0, -55, 0, }, /* 295 */
+ { 54, 26, 12, 0, 0, -55, 0, }, /* 296 */
+ { 54, 26, 12, 0, 0, 54, 0, }, /* 297 */
+ { 54, 23, 12, 0, 0, 54, 0, }, /* 298 */
+ { 55, 12, 3, 0, 0, 55, 0, }, /* 299 */
+ { 55, 10, 5, 0, 0, 55, 0, }, /* 300 */
+ { 55, 7, 12, 0, 0, 55, 0, }, /* 301 */
+ { 55, 13, 12, 0, 0, 55, 0, }, /* 302 */
+ { 55, 21, 12, 0, 0, 55, 0, }, /* 303 */
+ { 55, 15, 12, 0, 0, 55, 0, }, /* 304 */
+ { 55, 26, 12, 0, 0, 55, 0, }, /* 305 */
+ { 29, 7, 12, 0, 0, 29, 0, }, /* 306 */
+ { 29, 12, 3, 0, 0, 29, 0, }, /* 307 */
+ { 29, 10, 5, 0, 0, 29, 0, }, /* 308 */
+ { 29, 21, 12, 0, 0, 29, 0, }, /* 309 */
+ { 29, 10, 3, 0, 0, 29, 0, }, /* 310 */
+ { 29, 13, 12, 0, 0, -70, 0, }, /* 311 */
+ { 37, 12, 3, 0, 0, 37, 0, }, /* 312 */
+ { 37, 10, 5, 0, 0, 37, 0, }, /* 313 */
+ { 37, 7, 12, 0, 0, 37, 0, }, /* 314 */
+ { 37, 10, 3, 0, 0, 37, 0, }, /* 315 */
+ { 37, 7, 4, 0, 0, 37, 0, }, /* 316 */
+ { 37, 26, 12, 0, 0, 37, 0, }, /* 317 */
+ { 37, 15, 12, 0, 0, 37, 0, }, /* 318 */
+ { 37, 13, 12, 0, 0, 37, 0, }, /* 319 */
+ { 48, 12, 3, 0, 0, 48, 0, }, /* 320 */
+ { 48, 10, 5, 0, 0, 48, 0, }, /* 321 */
+ { 48, 7, 12, 0, 0, 48, 0, }, /* 322 */
+ { 48, 10, 3, 0, 0, 48, 0, }, /* 323 */
+ { 48, 13, 12, 0, 0, 48, 0, }, /* 324 */
+ { 48, 21, 12, 0, 0, 48, 0, }, /* 325 */
+ { 57, 7, 12, 0, 0, 57, 0, }, /* 326 */
+ { 57, 12, 3, 0, 0, 57, 0, }, /* 327 */
+ { 57, 7, 5, 0, 0, 57, 0, }, /* 328 */
+ { 57, 6, 12, 0, 0, 57, 0, }, /* 329 */
+ { 57, 21, 12, 0, 0, 57, 0, }, /* 330 */
+ { 57, 13, 12, 0, 0, 57, 0, }, /* 331 */
+ { 33, 7, 12, 0, 0, 33, 0, }, /* 332 */
+ { 33, 12, 3, 0, 0, 33, 0, }, /* 333 */
+ { 33, 7, 5, 0, 0, 33, 0, }, /* 334 */
+ { 33, 6, 12, 0, 0, 33, 0, }, /* 335 */
+ { 33, 13, 12, 0, 0, 33, 0, }, /* 336 */
+ { 58, 7, 12, 0, 0, 58, 0, }, /* 337 */
+ { 58, 26, 12, 0, 0, 58, 0, }, /* 338 */
+ { 58, 21, 12, 0, 0, 58, 0, }, /* 339 */
+ { 58, 12, 3, 0, 0, 58, 0, }, /* 340 */
+ { 58, 13, 12, 0, 0, 58, 0, }, /* 341 */
+ { 58, 15, 12, 0, 0, 58, 0, }, /* 342 */
+ { 58, 22, 12, 0, 0, 58, 0, }, /* 343 */
+ { 58, 18, 12, 0, 0, 58, 0, }, /* 344 */
+ { 58, 10, 5, 0, 0, 58, 0, }, /* 345 */
+ { 39, 7, 12, 0, 0, 39, 0, }, /* 346 */
+ { 39, 10, 12, 0, 0, 39, 0, }, /* 347 */
+ { 39, 12, 3, 0, 0, 39, 0, }, /* 348 */
+ { 39, 10, 5, 0, 0, 39, 0, }, /* 349 */
+ { 39, 13, 12, 0, 0, -94, 0, }, /* 350 */
+ { 39, 21, 12, 0, 0, 39, 0, }, /* 351 */
+ { 39, 13, 12, 0, 0, 39, 0, }, /* 352 */
+ { 39, 26, 12, 0, 0, 39, 0, }, /* 353 */
+ { 17, 9, 12, 0, 7264, 17, 0, }, /* 354 */
+ { 17, 5, 12, 0, 3008, 17, 0, }, /* 355 */
+ { 10, 21, 12, 0, 0, -52, 0, }, /* 356 */
+ { 17, 6, 12, 0, 0, 17, 0, }, /* 357 */
+ { 24, 7, 6, 0, 0, 24, 0, }, /* 358 */
+ { 24, 7, 7, 0, 0, 24, 0, }, /* 359 */
+ { 24, 7, 8, 0, 0, 24, 0, }, /* 360 */
+ { 16, 7, 12, 0, 0, 16, 0, }, /* 361 */
+ { 16, 12, 3, 0, 0, 16, 0, }, /* 362 */
+ { 16, 21, 12, 0, 0, 16, 0, }, /* 363 */
+ { 16, 15, 12, 0, 0, 16, 0, }, /* 364 */
+ { 16, 26, 12, 0, 0, 16, 0, }, /* 365 */
+ { 9, 9, 12, 0, 38864, 9, 0, }, /* 366 */
+ { 9, 9, 12, 0, 8, 9, 0, }, /* 367 */
+ { 9, 5, 12, 0, -8, 9, 0, }, /* 368 */
+ { 8, 17, 12, 0, 0, 8, 0, }, /* 369 */
+ { 8, 7, 12, 0, 0, 8, 0, }, /* 370 */
+ { 8, 26, 12, 0, 0, 8, 0, }, /* 371 */
+ { 8, 21, 12, 0, 0, 8, 0, }, /* 372 */
+ { 41, 29, 12, 0, 0, 41, 0, }, /* 373 */
+ { 41, 7, 12, 0, 0, 41, 0, }, /* 374 */
+ { 41, 22, 12, 0, 0, 41, 0, }, /* 375 */
+ { 41, 18, 12, 0, 0, 41, 0, }, /* 376 */
+ { 46, 7, 12, 0, 0, 46, 0, }, /* 377 */
+ { 46, 14, 12, 0, 0, 46, 0, }, /* 378 */
+ { 51, 7, 12, 0, 0, 51, 0, }, /* 379 */
+ { 51, 12, 3, 0, 0, 51, 0, }, /* 380 */
+ { 51, 10, 5, 0, 0, 51, 0, }, /* 381 */
+ { 25, 7, 12, 0, 0, 25, 0, }, /* 382 */
+ { 25, 12, 3, 0, 0, 25, 0, }, /* 383 */
+ { 25, 10, 5, 0, 0, 25, 0, }, /* 384 */
+ { 10, 21, 12, 0, 0, -127, 0, }, /* 385 */
+ { 7, 7, 12, 0, 0, 7, 0, }, /* 386 */
+ { 7, 12, 3, 0, 0, 7, 0, }, /* 387 */
+ { 52, 7, 12, 0, 0, 52, 0, }, /* 388 */
+ { 52, 12, 3, 0, 0, 52, 0, }, /* 389 */
+ { 32, 7, 12, 0, 0, 32, 0, }, /* 390 */
+ { 32, 12, 3, 0, 0, 32, 0, }, /* 391 */
+ { 32, 10, 5, 0, 0, 32, 0, }, /* 392 */
+ { 32, 21, 12, 0, 0, 32, 0, }, /* 393 */
+ { 32, 6, 12, 0, 0, 32, 0, }, /* 394 */
+ { 32, 23, 12, 0, 0, 32, 0, }, /* 395 */
+ { 32, 13, 12, 0, 0, 32, 0, }, /* 396 */
+ { 32, 15, 12, 0, 0, 32, 0, }, /* 397 */
+ { 38, 21, 12, 0, 0, 38, 0, }, /* 398 */
+ { 10, 21, 12, 0, 0, -79, 0, }, /* 399 */
+ { 38, 17, 12, 0, 0, 38, 0, }, /* 400 */
+ { 38, 12, 3, 0, 0, 38, 0, }, /* 401 */
+ { 38, 1, 2, 0, 0, 38, 0, }, /* 402 */
+ { 38, 13, 12, 0, 0, 38, 0, }, /* 403 */
+ { 38, 7, 12, 0, 0, 38, 0, }, /* 404 */
+ { 38, 6, 12, 0, 0, 38, 0, }, /* 405 */
+ { 35, 7, 12, 0, 0, 35, 0, }, /* 406 */
+ { 35, 12, 3, 0, 0, 35, 0, }, /* 407 */
+ { 35, 10, 5, 0, 0, 35, 0, }, /* 408 */
+ { 35, 26, 12, 0, 0, 35, 0, }, /* 409 */
+ { 35, 21, 12, 0, 0, 35, 0, }, /* 410 */
+ { 35, 13, 12, 0, 0, 35, 0, }, /* 411 */
+ { 53, 7, 12, 0, 0, 53, 0, }, /* 412 */
+ { 40, 7, 12, 0, 0, 40, 0, }, /* 413 */
+ { 40, 13, 12, 0, 0, 40, 0, }, /* 414 */
+ { 40, 15, 12, 0, 0, 40, 0, }, /* 415 */
+ { 40, 26, 12, 0, 0, 40, 0, }, /* 416 */
+ { 32, 26, 12, 0, 0, 32, 0, }, /* 417 */
+ { 6, 7, 12, 0, 0, 6, 0, }, /* 418 */
+ { 6, 12, 3, 0, 0, 6, 0, }, /* 419 */
+ { 6, 10, 5, 0, 0, 6, 0, }, /* 420 */
+ { 6, 21, 12, 0, 0, 6, 0, }, /* 421 */
+ { 91, 7, 12, 0, 0, 91, 0, }, /* 422 */
+ { 91, 10, 5, 0, 0, 91, 0, }, /* 423 */
+ { 91, 12, 3, 0, 0, 91, 0, }, /* 424 */
+ { 91, 10, 12, 0, 0, 91, 0, }, /* 425 */
+ { 91, 13, 12, 0, 0, 91, 0, }, /* 426 */
+ { 91, 21, 12, 0, 0, 91, 0, }, /* 427 */
+ { 91, 6, 12, 0, 0, 91, 0, }, /* 428 */
+ { 28, 11, 3, 0, 0, 28, 0, }, /* 429 */
+ { 62, 12, 3, 0, 0, 62, 0, }, /* 430 */
+ { 62, 10, 5, 0, 0, 62, 0, }, /* 431 */
+ { 62, 7, 12, 0, 0, 62, 0, }, /* 432 */
+ { 62, 10, 3, 0, 0, 62, 0, }, /* 433 */
+ { 62, 13, 12, 0, 0, 62, 0, }, /* 434 */
+ { 62, 21, 12, 0, 0, 62, 0, }, /* 435 */
+ { 62, 26, 12, 0, 0, 62, 0, }, /* 436 */
+ { 76, 12, 3, 0, 0, 76, 0, }, /* 437 */
+ { 76, 10, 5, 0, 0, 76, 0, }, /* 438 */
+ { 76, 7, 12, 0, 0, 76, 0, }, /* 439 */
+ { 76, 13, 12, 0, 0, 76, 0, }, /* 440 */
+ { 93, 7, 12, 0, 0, 93, 0, }, /* 441 */
+ { 93, 12, 3, 0, 0, 93, 0, }, /* 442 */
+ { 93, 10, 5, 0, 0, 93, 0, }, /* 443 */
+ { 93, 21, 12, 0, 0, 93, 0, }, /* 444 */
+ { 70, 7, 12, 0, 0, 70, 0, }, /* 445 */
+ { 70, 10, 5, 0, 0, 70, 0, }, /* 446 */
+ { 70, 12, 3, 0, 0, 70, 0, }, /* 447 */
+ { 70, 21, 12, 0, 0, 70, 0, }, /* 448 */
+ { 70, 13, 12, 0, 0, 70, 0, }, /* 449 */
+ { 73, 13, 12, 0, 0, 73, 0, }, /* 450 */
+ { 73, 7, 12, 0, 0, 73, 0, }, /* 451 */
+ { 73, 6, 12, 0, 0, 73, 0, }, /* 452 */
+ { 73, 21, 12, 0, 0, 73, 0, }, /* 453 */
+ { 13, 5, 12, 63, -6222, 13, 0, }, /* 454 */
+ { 13, 5, 12, 67, -6221, 13, 0, }, /* 455 */
+ { 13, 5, 12, 71, -6212, 13, 0, }, /* 456 */
+ { 13, 5, 12, 75, -6210, 13, 0, }, /* 457 */
+ { 13, 5, 12, 79, -6210, 13, 0, }, /* 458 */
+ { 13, 5, 12, 79, -6211, 13, 0, }, /* 459 */
+ { 13, 5, 12, 84, -6204, 13, 0, }, /* 460 */
+ { 13, 5, 12, 88, -6180, 13, 0, }, /* 461 */
+ { 13, 5, 12, 108, 35267, 13, 0, }, /* 462 */
+ { 17, 9, 12, 0, -3008, 17, 0, }, /* 463 */
+ { 76, 21, 12, 0, 0, 76, 0, }, /* 464 */
+ { 28, 12, 3, 0, 0, -122, 0, }, /* 465 */
+ { 28, 12, 3, 0, 0, 15, 0, }, /* 466 */
+ { 10, 21, 12, 0, 0, -40, 0, }, /* 467 */
+ { 28, 12, 3, 0, 0, -16, 0, }, /* 468 */
+ { 28, 12, 3, 0, 0, -46, 0, }, /* 469 */
+ { 28, 12, 3, 0, 0, -157, 0, }, /* 470 */
+ { 10, 10, 5, 0, 0, -16, 0, }, /* 471 */
+ { 10, 7, 12, 0, 0, -43, 0, }, /* 472 */
+ { 10, 7, 12, 0, 0, -16, 0, }, /* 473 */
+ { 10, 7, 12, 0, 0, 15, 0, }, /* 474 */
+ { 10, 7, 12, 0, 0, -172, 0, }, /* 475 */
+ { 10, 7, 12, 0, 0, -40, 0, }, /* 476 */
+ { 28, 12, 3, 0, 0, -106, 0, }, /* 477 */
+ { 10, 10, 5, 0, 0, 3, 0, }, /* 478 */
+ { 28, 12, 3, 0, 0, -40, 0, }, /* 479 */
+ { 10, 7, 12, 0, 0, 150, 0, }, /* 480 */
+ { 13, 5, 12, 0, 0, 13, 0, }, /* 481 */
+ { 13, 6, 12, 0, 0, 13, 0, }, /* 482 */
+ { 34, 5, 12, 0, 35332, 34, 0, }, /* 483 */
+ { 34, 5, 12, 0, 3814, 34, 0, }, /* 484 */
+ { 34, 5, 12, 0, 35384, 34, 0, }, /* 485 */
+ { 28, 12, 3, 0, 0, -37, 0, }, /* 486 */
+ { 28, 12, 3, 0, 0, 50, 0, }, /* 487 */
+ { 34, 9, 12, 92, 1, 34, 0, }, /* 488 */
+ { 34, 5, 12, 92, -1, 34, 0, }, /* 489 */
+ { 34, 5, 12, 92, -58, 34, 0, }, /* 490 */
+ { 34, 9, 12, 0, -7615, 34, 0, }, /* 491 */
+ { 20, 5, 12, 0, 8, 20, 0, }, /* 492 */
+ { 20, 9, 12, 0, -8, 20, 0, }, /* 493 */
+ { 20, 5, 12, 0, 74, 20, 0, }, /* 494 */
+ { 20, 5, 12, 0, 86, 20, 0, }, /* 495 */
+ { 20, 5, 12, 0, 100, 20, 0, }, /* 496 */
+ { 20, 5, 12, 0, 128, 20, 0, }, /* 497 */
+ { 20, 5, 12, 0, 112, 20, 0, }, /* 498 */
+ { 20, 5, 12, 0, 126, 20, 0, }, /* 499 */
+ { 20, 8, 12, 0, -8, 20, 0, }, /* 500 */
+ { 20, 5, 12, 0, 9, 20, 0, }, /* 501 */
+ { 20, 9, 12, 0, -74, 20, 0, }, /* 502 */
+ { 20, 8, 12, 0, -9, 20, 0, }, /* 503 */
+ { 20, 5, 12, 21, -7173, 20, 0, }, /* 504 */
+ { 20, 9, 12, 0, -86, 20, 0, }, /* 505 */
+ { 20, 9, 12, 0, -100, 20, 0, }, /* 506 */
+ { 20, 9, 12, 0, -112, 20, 0, }, /* 507 */
+ { 20, 9, 12, 0, -128, 20, 0, }, /* 508 */
+ { 20, 9, 12, 0, -126, 20, 0, }, /* 509 */
+ { 28, 1, 3, 0, 0, 28, 0, }, /* 510 */
+ { 28, 1, 13, 0, 0, 28, 0, }, /* 511 */
+ { 10, 27, 2, 0, 0, 10, 0, }, /* 512 */
+ { 10, 28, 2, 0, 0, 10, 0, }, /* 513 */
+ { 10, 29, 12, 0, 0, -73, 0, }, /* 514 */
+ { 10, 21, 14, 0, 0, 10, 0, }, /* 515 */
+ { 0, 2, 2, 0, 0, 0, 0, }, /* 516 */
+ { 28, 12, 3, 0, 0, -110, 0, }, /* 517 */
+ { 10, 9, 12, 0, 0, 10, 0, }, /* 518 */
+ { 10, 5, 12, 0, 0, 10, 0, }, /* 519 */
+ { 20, 9, 12, 96, -7517, 20, 0, }, /* 520 */
+ { 34, 9, 12, 100, -8383, 34, 0, }, /* 521 */
+ { 34, 9, 12, 104, -8262, 34, 0, }, /* 522 */
+ { 34, 9, 12, 0, 28, 34, 0, }, /* 523 */
+ { 10, 7, 12, 0, 0, 10, 0, }, /* 524 */
+ { 10, 5, 14, 0, 0, 10, 0, }, /* 525 */
+ { 34, 5, 12, 0, -28, 34, 0, }, /* 526 */
+ { 34, 14, 12, 0, 16, 34, 0, }, /* 527 */
+ { 34, 14, 12, 0, -16, 34, 0, }, /* 528 */
+ { 34, 14, 12, 0, 0, 34, 0, }, /* 529 */
+ { 10, 25, 14, 0, 0, 10, 0, }, /* 530 */
+ { 10, 26, 12, 0, 26, 10, 0, }, /* 531 */
+ { 10, 26, 14, 0, 26, 10, 0, }, /* 532 */
+ { 10, 26, 12, 0, -26, 10, 0, }, /* 533 */
+ { 5, 26, 12, 0, 0, 5, 0, }, /* 534 */
+ { 18, 9, 12, 0, 48, 18, 0, }, /* 535 */
+ { 18, 5, 12, 0, -48, 18, 0, }, /* 536 */
+ { 34, 9, 12, 0, -10743, 34, 0, }, /* 537 */
+ { 34, 9, 12, 0, -3814, 34, 0, }, /* 538 */
+ { 34, 9, 12, 0, -10727, 34, 0, }, /* 539 */
+ { 34, 5, 12, 0, -10795, 34, 0, }, /* 540 */
+ { 34, 5, 12, 0, -10792, 34, 0, }, /* 541 */
+ { 34, 9, 12, 0, -10780, 34, 0, }, /* 542 */
+ { 34, 9, 12, 0, -10749, 34, 0, }, /* 543 */
+ { 34, 9, 12, 0, -10783, 34, 0, }, /* 544 */
+ { 34, 9, 12, 0, -10782, 34, 0, }, /* 545 */
+ { 34, 9, 12, 0, -10815, 34, 0, }, /* 546 */
+ { 11, 5, 12, 0, 0, 11, 0, }, /* 547 */
+ { 11, 26, 12, 0, 0, 11, 0, }, /* 548 */
+ { 11, 12, 3, 0, 0, 11, 0, }, /* 549 */
+ { 11, 21, 12, 0, 0, 11, 0, }, /* 550 */
+ { 11, 15, 12, 0, 0, 11, 0, }, /* 551 */
+ { 17, 5, 12, 0, -7264, 17, 0, }, /* 552 */
+ { 59, 7, 12, 0, 0, 59, 0, }, /* 553 */
+ { 59, 6, 12, 0, 0, 59, 0, }, /* 554 */
+ { 59, 21, 12, 0, 0, 59, 0, }, /* 555 */
+ { 59, 12, 3, 0, 0, 59, 0, }, /* 556 */
+ { 13, 12, 3, 0, 0, 13, 0, }, /* 557 */
+ { 10, 21, 12, 0, 0, -28, 0, }, /* 558 */
+ { 23, 26, 12, 0, 0, 23, 0, }, /* 559 */
+ { 10, 21, 12, 0, 0, -150, 0, }, /* 560 */
+ { 10, 21, 12, 0, 0, -137, 0, }, /* 561 */
+ { 23, 6, 12, 0, 0, 23, 0, }, /* 562 */
+ { 10, 7, 12, 0, 0, 23, 0, }, /* 563 */
+ { 23, 14, 12, 0, 0, 23, 0, }, /* 564 */
+ { 10, 22, 12, 0, 0, -150, 0, }, /* 565 */
+ { 10, 18, 12, 0, 0, -150, 0, }, /* 566 */
+ { 10, 26, 12, 0, 0, -137, 0, }, /* 567 */
+ { 10, 17, 12, 0, 0, -137, 0, }, /* 568 */
+ { 10, 22, 12, 0, 0, -137, 0, }, /* 569 */
+ { 10, 18, 12, 0, 0, -137, 0, }, /* 570 */
+ { 28, 12, 3, 0, 0, -19, 0, }, /* 571 */
+ { 24, 10, 3, 0, 0, 24, 0, }, /* 572 */
+ { 10, 17, 14, 0, 0, -137, 0, }, /* 573 */
+ { 10, 6, 12, 0, 0, -67, 0, }, /* 574 */
+ { 10, 7, 12, 0, 0, -114, 0, }, /* 575 */
+ { 10, 21, 14, 0, 0, -114, 0, }, /* 576 */
+ { 10, 26, 12, 0, 0, 23, 0, }, /* 577 */
+ { 27, 7, 12, 0, 0, 27, 0, }, /* 578 */
+ { 28, 12, 3, 0, 0, -67, 0, }, /* 579 */
+ { 10, 24, 12, 0, 0, -67, 0, }, /* 580 */
+ { 27, 6, 12, 0, 0, 27, 0, }, /* 581 */
+ { 10, 17, 12, 0, 0, -67, 0, }, /* 582 */
+ { 30, 7, 12, 0, 0, 30, 0, }, /* 583 */
+ { 30, 6, 12, 0, 0, 30, 0, }, /* 584 */
+ { 4, 7, 12, 0, 0, 4, 0, }, /* 585 */
+ { 24, 7, 12, 0, 0, 24, 0, }, /* 586 */
+ { 10, 15, 12, 0, 0, 23, 0, }, /* 587 */
+ { 24, 26, 12, 0, 0, 24, 0, }, /* 588 */
+ { 10, 26, 14, 0, 0, 23, 0, }, /* 589 */
+ { 30, 26, 12, 0, 0, 30, 0, }, /* 590 */
+ { 23, 7, 12, 0, 0, 23, 0, }, /* 591 */
+ { 61, 7, 12, 0, 0, 61, 0, }, /* 592 */
+ { 61, 6, 12, 0, 0, 61, 0, }, /* 593 */
+ { 61, 26, 12, 0, 0, 61, 0, }, /* 594 */
+ { 86, 7, 12, 0, 0, 86, 0, }, /* 595 */
+ { 86, 6, 12, 0, 0, 86, 0, }, /* 596 */
+ { 86, 21, 12, 0, 0, 86, 0, }, /* 597 */
+ { 77, 7, 12, 0, 0, 77, 0, }, /* 598 */
+ { 77, 6, 12, 0, 0, 77, 0, }, /* 599 */
+ { 77, 21, 12, 0, 0, 77, 0, }, /* 600 */
+ { 77, 13, 12, 0, 0, 77, 0, }, /* 601 */
+ { 13, 9, 12, 108, 1, 13, 0, }, /* 602 */
+ { 13, 5, 12, 108, -35267, 13, 0, }, /* 603 */
+ { 13, 7, 12, 0, 0, 13, 0, }, /* 604 */
+ { 13, 21, 12, 0, 0, 13, 0, }, /* 605 */
+ { 79, 7, 12, 0, 0, 79, 0, }, /* 606 */
+ { 79, 14, 12, 0, 0, 79, 0, }, /* 607 */
+ { 79, 12, 3, 0, 0, 79, 0, }, /* 608 */
+ { 79, 21, 12, 0, 0, 79, 0, }, /* 609 */
+ { 10, 24, 12, 0, 0, -64, 0, }, /* 610 */
+ { 34, 9, 12, 0, -35332, 34, 0, }, /* 611 */
+ { 34, 9, 12, 0, -42280, 34, 0, }, /* 612 */
+ { 34, 5, 12, 0, 48, 34, 0, }, /* 613 */
+ { 34, 9, 12, 0, -42308, 34, 0, }, /* 614 */
+ { 34, 9, 12, 0, -42319, 34, 0, }, /* 615 */
+ { 34, 9, 12, 0, -42315, 34, 0, }, /* 616 */
+ { 34, 9, 12, 0, -42305, 34, 0, }, /* 617 */
+ { 34, 9, 12, 0, -42258, 34, 0, }, /* 618 */
+ { 34, 9, 12, 0, -42282, 34, 0, }, /* 619 */
+ { 34, 9, 12, 0, -42261, 34, 0, }, /* 620 */
+ { 34, 9, 12, 0, 928, 34, 0, }, /* 621 */
+ { 34, 9, 12, 0, -48, 34, 0, }, /* 622 */
+ { 34, 9, 12, 0, -42307, 34, 0, }, /* 623 */
+ { 34, 9, 12, 0, -35384, 34, 0, }, /* 624 */
+ { 49, 7, 12, 0, 0, 49, 0, }, /* 625 */
+ { 49, 12, 3, 0, 0, 49, 0, }, /* 626 */
+ { 49, 10, 5, 0, 0, 49, 0, }, /* 627 */
+ { 49, 26, 12, 0, 0, 49, 0, }, /* 628 */
+ { 10, 15, 12, 0, 0, -244, 0, }, /* 629 */
+ { 10, 15, 12, 0, 0, -230, 0, }, /* 630 */
+ { 10, 26, 12, 0, 0, -191, 0, }, /* 631 */
+ { 10, 23, 12, 0, 0, -191, 0, }, /* 632 */
+ { 65, 7, 12, 0, 0, 65, 0, }, /* 633 */
+ { 65, 21, 12, 0, 0, 65, 0, }, /* 634 */
+ { 75, 10, 5, 0, 0, 75, 0, }, /* 635 */
+ { 75, 7, 12, 0, 0, 75, 0, }, /* 636 */
+ { 75, 12, 3, 0, 0, 75, 0, }, /* 637 */
+ { 75, 21, 12, 0, 0, 75, 0, }, /* 638 */
+ { 75, 13, 12, 0, 0, 75, 0, }, /* 639 */
+ { 15, 12, 3, 0, 0, -16, 0, }, /* 640 */
+ { 15, 7, 12, 0, 0, -49, 0, }, /* 641 */
+ { 69, 13, 12, 0, 0, 69, 0, }, /* 642 */
+ { 69, 7, 12, 0, 0, 69, 0, }, /* 643 */
+ { 69, 12, 3, 0, 0, 69, 0, }, /* 644 */
+ { 10, 21, 12, 0, 0, -118, 0, }, /* 645 */
+ { 69, 21, 12, 0, 0, 69, 0, }, /* 646 */
+ { 74, 7, 12, 0, 0, 74, 0, }, /* 647 */
+ { 74, 12, 3, 0, 0, 74, 0, }, /* 648 */
+ { 74, 10, 5, 0, 0, 74, 0, }, /* 649 */
+ { 74, 21, 12, 0, 0, 74, 0, }, /* 650 */
+ { 84, 12, 3, 0, 0, 84, 0, }, /* 651 */
+ { 84, 10, 5, 0, 0, 84, 0, }, /* 652 */
+ { 84, 7, 12, 0, 0, 84, 0, }, /* 653 */
+ { 84, 21, 12, 0, 0, 84, 0, }, /* 654 */
+ { 10, 6, 12, 0, 0, -22, 0, }, /* 655 */
+ { 84, 13, 12, 0, 0, 84, 0, }, /* 656 */
+ { 39, 6, 12, 0, 0, 39, 0, }, /* 657 */
+ { 68, 7, 12, 0, 0, 68, 0, }, /* 658 */
+ { 68, 12, 3, 0, 0, 68, 0, }, /* 659 */
+ { 68, 10, 5, 0, 0, 68, 0, }, /* 660 */
+ { 68, 13, 12, 0, 0, 68, 0, }, /* 661 */
+ { 68, 21, 12, 0, 0, 68, 0, }, /* 662 */
+ { 92, 7, 12, 0, 0, 92, 0, }, /* 663 */
+ { 92, 12, 3, 0, 0, 92, 0, }, /* 664 */
+ { 92, 6, 12, 0, 0, 92, 0, }, /* 665 */
+ { 92, 21, 12, 0, 0, 92, 0, }, /* 666 */
+ { 87, 7, 12, 0, 0, 87, 0, }, /* 667 */
+ { 87, 10, 5, 0, 0, 87, 0, }, /* 668 */
+ { 87, 12, 3, 0, 0, 87, 0, }, /* 669 */
+ { 87, 21, 12, 0, 0, 87, 0, }, /* 670 */
+ { 87, 6, 12, 0, 0, 87, 0, }, /* 671 */
+ { 34, 5, 12, 0, -928, 34, 0, }, /* 672 */
+ { 9, 5, 12, 0, -38864, 9, 0, }, /* 673 */
+ { 87, 13, 12, 0, 0, 87, 0, }, /* 674 */
+ { 24, 7, 9, 0, 0, 24, 0, }, /* 675 */
+ { 24, 7, 10, 0, 0, 24, 0, }, /* 676 */
+ { 0, 4, 12, 0, 0, 0, 0, }, /* 677 */
+ { 0, 3, 12, 0, 0, 0, 0, }, /* 678 */
+ { 26, 25, 12, 0, 0, 26, 0, }, /* 679 */
+ { 10, 18, 12, 0, 0, -7, 0, }, /* 680 */
+ { 10, 22, 12, 0, 0, -7, 0, }, /* 681 */
+ { 1, 7, 12, 0, 0, -13, 0, }, /* 682 */
+ { 1, 26, 12, 0, 0, -13, 0, }, /* 683 */
+ { 10, 6, 3, 0, 0, -67, 0, }, /* 684 */
+ { 36, 7, 12, 0, 0, 36, 0, }, /* 685 */
+ { 10, 21, 12, 0, 0, -98, 0, }, /* 686 */
+ { 10, 21, 12, 0, 0, -25, 0, }, /* 687 */
+ { 10, 15, 12, 0, 0, -102, 0, }, /* 688 */
+ { 10, 26, 12, 0, 0, -25, 0, }, /* 689 */
+ { 20, 14, 12, 0, 0, 20, 0, }, /* 690 */
+ { 20, 15, 12, 0, 0, 20, 0, }, /* 691 */
+ { 20, 26, 12, 0, 0, 20, 0, }, /* 692 */
+ { 71, 7, 12, 0, 0, 71, 0, }, /* 693 */
+ { 67, 7, 12, 0, 0, 67, 0, }, /* 694 */
+ { 28, 12, 3, 0, 0, -1, 0, }, /* 695 */
+ { 10, 15, 12, 0, 0, -1, 0, }, /* 696 */
+ { 42, 7, 12, 0, 0, 42, 0, }, /* 697 */
+ { 42, 15, 12, 0, 0, 42, 0, }, /* 698 */
+ { 19, 7, 12, 0, 0, 19, 0, }, /* 699 */
+ { 19, 14, 12, 0, 0, 19, 0, }, /* 700 */
+ { 118, 7, 12, 0, 0, 118, 0, }, /* 701 */
+ { 118, 12, 3, 0, 0, 118, 0, }, /* 702 */
+ { 60, 7, 12, 0, 0, 60, 0, }, /* 703 */
+ { 60, 21, 12, 0, 0, 60, 0, }, /* 704 */
+ { 43, 7, 12, 0, 0, 43, 0, }, /* 705 */
+ { 43, 21, 12, 0, 0, 43, 0, }, /* 706 */
+ { 43, 14, 12, 0, 0, 43, 0, }, /* 707 */
+ { 14, 9, 12, 0, 40, 14, 0, }, /* 708 */
+ { 14, 5, 12, 0, -40, 14, 0, }, /* 709 */
+ { 47, 7, 12, 0, 0, 47, 0, }, /* 710 */
+ { 45, 7, 12, 0, 0, 45, 0, }, /* 711 */
+ { 45, 13, 12, 0, 0, 45, 0, }, /* 712 */
+ { 136, 9, 12, 0, 40, 136, 0, }, /* 713 */
+ { 136, 5, 12, 0, -40, 136, 0, }, /* 714 */
+ { 106, 7, 12, 0, 0, 106, 0, }, /* 715 */
+ { 104, 7, 12, 0, 0, 104, 0, }, /* 716 */
+ { 104, 21, 12, 0, 0, 104, 0, }, /* 717 */
+ { 161, 9, 12, 0, 39, 161, 0, }, /* 718 */
+ { 161, 5, 12, 0, -39, 161, 0, }, /* 719 */
+ { 110, 7, 12, 0, 0, 110, 0, }, /* 720 */
+ { 12, 7, 12, 0, 0, 12, 0, }, /* 721 */
+ { 81, 7, 12, 0, 0, 81, 0, }, /* 722 */
+ { 81, 21, 12, 0, 0, 81, 0, }, /* 723 */
+ { 81, 15, 12, 0, 0, 81, 0, }, /* 724 */
+ { 120, 7, 12, 0, 0, 120, 0, }, /* 725 */
+ { 120, 26, 12, 0, 0, 120, 0, }, /* 726 */
+ { 120, 15, 12, 0, 0, 120, 0, }, /* 727 */
+ { 116, 7, 12, 0, 0, 116, 0, }, /* 728 */
+ { 116, 15, 12, 0, 0, 116, 0, }, /* 729 */
+ { 128, 7, 12, 0, 0, 128, 0, }, /* 730 */
+ { 128, 15, 12, 0, 0, 128, 0, }, /* 731 */
+ { 66, 7, 12, 0, 0, 66, 0, }, /* 732 */
+ { 66, 15, 12, 0, 0, 66, 0, }, /* 733 */
+ { 66, 21, 12, 0, 0, 66, 0, }, /* 734 */
+ { 72, 7, 12, 0, 0, 72, 0, }, /* 735 */
+ { 72, 21, 12, 0, 0, 72, 0, }, /* 736 */
+ { 98, 7, 12, 0, 0, 98, 0, }, /* 737 */
+ { 97, 7, 12, 0, 0, 97, 0, }, /* 738 */
+ { 97, 15, 12, 0, 0, 97, 0, }, /* 739 */
+ { 31, 7, 12, 0, 0, 31, 0, }, /* 740 */
+ { 31, 12, 3, 0, 0, 31, 0, }, /* 741 */
+ { 31, 15, 12, 0, 0, 31, 0, }, /* 742 */
+ { 31, 21, 12, 0, 0, 31, 0, }, /* 743 */
+ { 88, 7, 12, 0, 0, 88, 0, }, /* 744 */
+ { 88, 15, 12, 0, 0, 88, 0, }, /* 745 */
+ { 88, 21, 12, 0, 0, 88, 0, }, /* 746 */
+ { 117, 7, 12, 0, 0, 117, 0, }, /* 747 */
+ { 117, 15, 12, 0, 0, 117, 0, }, /* 748 */
+ { 112, 7, 12, 0, 0, 112, 0, }, /* 749 */
+ { 112, 26, 12, 0, 0, 112, 0, }, /* 750 */
+ { 112, 12, 3, 0, 0, 112, 0, }, /* 751 */
+ { 112, 15, 12, 0, 0, 112, 0, }, /* 752 */
+ { 112, 21, 12, 0, 0, 112, 0, }, /* 753 */
+ { 112, 21, 12, 0, 0, -76, 0, }, /* 754 */
+ { 78, 7, 12, 0, 0, 78, 0, }, /* 755 */
+ { 78, 21, 12, 0, 0, 78, 0, }, /* 756 */
+ { 83, 7, 12, 0, 0, 83, 0, }, /* 757 */
+ { 83, 15, 12, 0, 0, 83, 0, }, /* 758 */
+ { 82, 7, 12, 0, 0, 82, 0, }, /* 759 */
+ { 82, 15, 12, 0, 0, 82, 0, }, /* 760 */
+ { 121, 7, 12, 0, 0, 121, 0, }, /* 761 */
+ { 121, 21, 12, 0, 0, 121, 0, }, /* 762 */
+ { 121, 15, 12, 0, 0, 121, 0, }, /* 763 */
+ { 89, 7, 12, 0, 0, 89, 0, }, /* 764 */
+ { 130, 9, 12, 0, 64, 130, 0, }, /* 765 */
+ { 130, 5, 12, 0, -64, 130, 0, }, /* 766 */
+ { 130, 15, 12, 0, 0, 130, 0, }, /* 767 */
+ { 144, 7, 12, 0, 0, 144, 0, }, /* 768 */
+ { 144, 12, 3, 0, 0, 144, 0, }, /* 769 */
+ { 144, 13, 12, 0, 0, 144, 0, }, /* 770 */
+ { 1, 15, 12, 0, 0, 1, 0, }, /* 771 */
+ { 156, 7, 12, 0, 0, 156, 0, }, /* 772 */
+ { 156, 12, 3, 0, 0, 156, 0, }, /* 773 */
+ { 156, 17, 12, 0, 0, 156, 0, }, /* 774 */
+ { 147, 7, 12, 0, 0, 147, 0, }, /* 775 */
+ { 147, 15, 12, 0, 0, 147, 0, }, /* 776 */
+ { 148, 7, 12, 0, 0, 148, 0, }, /* 777 */
+ { 148, 12, 3, 0, 0, 148, 0, }, /* 778 */
+ { 148, 15, 12, 0, 0, 148, 0, }, /* 779 */
+ { 148, 21, 12, 0, 0, 148, 0, }, /* 780 */
+ { 158, 7, 12, 0, 0, 158, 0, }, /* 781 */
+ { 158, 12, 3, 0, 0, 158, 0, }, /* 782 */
+ { 158, 21, 12, 0, 0, 158, 0, }, /* 783 */
+ { 153, 7, 12, 0, 0, 153, 0, }, /* 784 */
+ { 153, 15, 12, 0, 0, 153, 0, }, /* 785 */
+ { 149, 7, 12, 0, 0, 149, 0, }, /* 786 */
+ { 94, 10, 5, 0, 0, 94, 0, }, /* 787 */
+ { 94, 12, 3, 0, 0, 94, 0, }, /* 788 */
+ { 94, 7, 12, 0, 0, 94, 0, }, /* 789 */
+ { 94, 21, 12, 0, 0, 94, 0, }, /* 790 */
+ { 94, 15, 12, 0, 0, 94, 0, }, /* 791 */
+ { 94, 13, 12, 0, 0, 94, 0, }, /* 792 */
+ { 85, 12, 3, 0, 0, 85, 0, }, /* 793 */
+ { 85, 10, 5, 0, 0, 85, 0, }, /* 794 */
+ { 85, 7, 12, 0, 0, 85, 0, }, /* 795 */
+ { 85, 21, 12, 0, 0, 85, 0, }, /* 796 */
+ { 85, 1, 4, 0, 0, 85, 0, }, /* 797 */
+ { 101, 7, 12, 0, 0, 101, 0, }, /* 798 */
+ { 101, 13, 12, 0, 0, 101, 0, }, /* 799 */
+ { 96, 12, 3, 0, 0, 96, 0, }, /* 800 */
+ { 96, 7, 12, 0, 0, 96, 0, }, /* 801 */
+ { 96, 10, 5, 0, 0, 96, 0, }, /* 802 */
+ { 96, 13, 12, 0, 0, 96, 0, }, /* 803 */
+ { 96, 21, 12, 0, 0, 96, 0, }, /* 804 */
+ { 111, 7, 12, 0, 0, 111, 0, }, /* 805 */
+ { 111, 12, 3, 0, 0, 111, 0, }, /* 806 */
+ { 111, 21, 12, 0, 0, 111, 0, }, /* 807 */
+ { 100, 12, 3, 0, 0, 100, 0, }, /* 808 */
+ { 100, 10, 5, 0, 0, 100, 0, }, /* 809 */
+ { 100, 7, 12, 0, 0, 100, 0, }, /* 810 */
+ { 100, 7, 4, 0, 0, 100, 0, }, /* 811 */
+ { 100, 21, 12, 0, 0, 100, 0, }, /* 812 */
+ { 100, 13, 12, 0, 0, 100, 0, }, /* 813 */
+ { 48, 15, 12, 0, 0, 48, 0, }, /* 814 */
+ { 108, 7, 12, 0, 0, 108, 0, }, /* 815 */
+ { 108, 10, 5, 0, 0, 108, 0, }, /* 816 */
+ { 108, 12, 3, 0, 0, 108, 0, }, /* 817 */
+ { 108, 21, 12, 0, 0, 108, 0, }, /* 818 */
+ { 129, 7, 12, 0, 0, 129, 0, }, /* 819 */
+ { 129, 21, 12, 0, 0, 129, 0, }, /* 820 */
+ { 109, 7, 12, 0, 0, 109, 0, }, /* 821 */
+ { 109, 12, 3, 0, 0, 109, 0, }, /* 822 */
+ { 109, 10, 5, 0, 0, 109, 0, }, /* 823 */
+ { 109, 13, 12, 0, 0, 109, 0, }, /* 824 */
+ { 107, 12, 3, 0, 0, 107, 0, }, /* 825 */
+ { 107, 12, 3, 0, 0, -55, 0, }, /* 826 */
+ { 107, 10, 5, 0, 0, 107, 0, }, /* 827 */
+ { 107, 10, 5, 0, 0, -55, 0, }, /* 828 */
+ { 107, 7, 12, 0, 0, 107, 0, }, /* 829 */
+ { 28, 12, 3, 0, 0, -55, 0, }, /* 830 */
+ { 107, 10, 3, 0, 0, 107, 0, }, /* 831 */
+ { 135, 7, 12, 0, 0, 135, 0, }, /* 832 */
+ { 135, 10, 5, 0, 0, 135, 0, }, /* 833 */
+ { 135, 12, 3, 0, 0, 135, 0, }, /* 834 */
+ { 135, 21, 12, 0, 0, 135, 0, }, /* 835 */
+ { 135, 13, 12, 0, 0, 135, 0, }, /* 836 */
+ { 124, 7, 12, 0, 0, 124, 0, }, /* 837 */
+ { 124, 10, 3, 0, 0, 124, 0, }, /* 838 */
+ { 124, 10, 5, 0, 0, 124, 0, }, /* 839 */
+ { 124, 12, 3, 0, 0, 124, 0, }, /* 840 */
+ { 124, 21, 12, 0, 0, 124, 0, }, /* 841 */
+ { 124, 13, 12, 0, 0, 124, 0, }, /* 842 */
+ { 123, 7, 12, 0, 0, 123, 0, }, /* 843 */
+ { 123, 10, 3, 0, 0, 123, 0, }, /* 844 */
+ { 123, 10, 5, 0, 0, 123, 0, }, /* 845 */
+ { 123, 12, 3, 0, 0, 123, 0, }, /* 846 */
+ { 123, 21, 12, 0, 0, 123, 0, }, /* 847 */
+ { 114, 7, 12, 0, 0, 114, 0, }, /* 848 */
+ { 114, 10, 5, 0, 0, 114, 0, }, /* 849 */
+ { 114, 12, 3, 0, 0, 114, 0, }, /* 850 */
+ { 114, 21, 12, 0, 0, 114, 0, }, /* 851 */
+ { 114, 13, 12, 0, 0, 114, 0, }, /* 852 */
+ { 102, 7, 12, 0, 0, 102, 0, }, /* 853 */
+ { 102, 12, 3, 0, 0, 102, 0, }, /* 854 */
+ { 102, 10, 5, 0, 0, 102, 0, }, /* 855 */
+ { 102, 21, 12, 0, 0, 102, 0, }, /* 856 */
+ { 102, 13, 12, 0, 0, 102, 0, }, /* 857 */
+ { 126, 7, 12, 0, 0, 126, 0, }, /* 858 */
+ { 126, 12, 3, 0, 0, 126, 0, }, /* 859 */
+ { 126, 10, 12, 0, 0, 126, 0, }, /* 860 */
+ { 126, 10, 5, 0, 0, 126, 0, }, /* 861 */
+ { 126, 13, 12, 0, 0, 126, 0, }, /* 862 */
+ { 126, 15, 12, 0, 0, 126, 0, }, /* 863 */
+ { 126, 21, 12, 0, 0, 126, 0, }, /* 864 */
+ { 126, 26, 12, 0, 0, 126, 0, }, /* 865 */
+ { 142, 7, 12, 0, 0, 142, 0, }, /* 866 */
+ { 142, 10, 5, 0, 0, 142, 0, }, /* 867 */
+ { 142, 12, 3, 0, 0, 142, 0, }, /* 868 */
+ { 142, 21, 12, 0, 0, 142, 0, }, /* 869 */
+ { 125, 9, 12, 0, 32, 125, 0, }, /* 870 */
+ { 125, 5, 12, 0, -32, 125, 0, }, /* 871 */
+ { 125, 13, 12, 0, 0, 125, 0, }, /* 872 */
+ { 125, 15, 12, 0, 0, 125, 0, }, /* 873 */
+ { 125, 7, 12, 0, 0, 125, 0, }, /* 874 */
+ { 154, 7, 12, 0, 0, 154, 0, }, /* 875 */
+ { 154, 10, 3, 0, 0, 154, 0, }, /* 876 */
+ { 154, 10, 5, 0, 0, 154, 0, }, /* 877 */
+ { 154, 12, 3, 0, 0, 154, 0, }, /* 878 */
+ { 154, 7, 4, 0, 0, 154, 0, }, /* 879 */
+ { 154, 21, 12, 0, 0, 154, 0, }, /* 880 */
+ { 154, 13, 12, 0, 0, 154, 0, }, /* 881 */
+ { 150, 7, 12, 0, 0, 150, 0, }, /* 882 */
+ { 150, 10, 5, 0, 0, 150, 0, }, /* 883 */
+ { 150, 12, 3, 0, 0, 150, 0, }, /* 884 */
+ { 150, 21, 12, 0, 0, 150, 0, }, /* 885 */
+ { 141, 7, 12, 0, 0, 141, 0, }, /* 886 */
+ { 141, 12, 3, 0, 0, 141, 0, }, /* 887 */
+ { 141, 10, 5, 0, 0, 141, 0, }, /* 888 */
+ { 141, 7, 4, 0, 0, 141, 0, }, /* 889 */
+ { 141, 21, 12, 0, 0, 141, 0, }, /* 890 */
+ { 140, 7, 12, 0, 0, 140, 0, }, /* 891 */
+ { 140, 12, 3, 0, 0, 140, 0, }, /* 892 */
+ { 140, 10, 5, 0, 0, 140, 0, }, /* 893 */
+ { 140, 7, 4, 0, 0, 140, 0, }, /* 894 */
+ { 140, 21, 12, 0, 0, 140, 0, }, /* 895 */
+ { 122, 7, 12, 0, 0, 122, 0, }, /* 896 */
+ { 133, 7, 12, 0, 0, 133, 0, }, /* 897 */
+ { 133, 10, 5, 0, 0, 133, 0, }, /* 898 */
+ { 133, 12, 3, 0, 0, 133, 0, }, /* 899 */
+ { 133, 21, 12, 0, 0, 133, 0, }, /* 900 */
+ { 133, 13, 12, 0, 0, 133, 0, }, /* 901 */
+ { 133, 15, 12, 0, 0, 133, 0, }, /* 902 */
+ { 134, 21, 12, 0, 0, 134, 0, }, /* 903 */
+ { 134, 7, 12, 0, 0, 134, 0, }, /* 904 */
+ { 134, 12, 3, 0, 0, 134, 0, }, /* 905 */
+ { 134, 10, 5, 0, 0, 134, 0, }, /* 906 */
+ { 138, 7, 12, 0, 0, 138, 0, }, /* 907 */
+ { 138, 12, 3, 0, 0, 138, 0, }, /* 908 */
+ { 138, 7, 4, 0, 0, 138, 0, }, /* 909 */
+ { 138, 13, 12, 0, 0, 138, 0, }, /* 910 */
+ { 143, 7, 12, 0, 0, 143, 0, }, /* 911 */
+ { 143, 10, 5, 0, 0, 143, 0, }, /* 912 */
+ { 143, 12, 3, 0, 0, 143, 0, }, /* 913 */
+ { 143, 13, 12, 0, 0, 143, 0, }, /* 914 */
+ { 145, 7, 12, 0, 0, 145, 0, }, /* 915 */
+ { 145, 12, 3, 0, 0, 145, 0, }, /* 916 */
+ { 145, 10, 5, 0, 0, 145, 0, }, /* 917 */
+ { 145, 21, 12, 0, 0, 145, 0, }, /* 918 */
+ { 54, 15, 12, 0, 0, 54, 0, }, /* 919 */
+ { 54, 21, 12, 0, 0, 54, 0, }, /* 920 */
+ { 63, 7, 12, 0, 0, 63, 0, }, /* 921 */
+ { 63, 14, 12, 0, 0, 63, 0, }, /* 922 */
+ { 63, 21, 12, 0, 0, 63, 0, }, /* 923 */
+ { 157, 7, 12, 0, 0, 157, 0, }, /* 924 */
+ { 157, 21, 12, 0, 0, 157, 0, }, /* 925 */
+ { 80, 7, 12, 0, 0, 80, 0, }, /* 926 */
+ { 80, 1, 2, 0, 0, 80, 0, }, /* 927 */
+ { 127, 7, 12, 0, 0, 127, 0, }, /* 928 */
+ { 115, 7, 12, 0, 0, 115, 0, }, /* 929 */
+ { 115, 13, 12, 0, 0, 115, 0, }, /* 930 */
+ { 115, 21, 12, 0, 0, 115, 0, }, /* 931 */
+ { 159, 7, 12, 0, 0, 159, 0, }, /* 932 */
+ { 159, 13, 12, 0, 0, 159, 0, }, /* 933 */
+ { 103, 7, 12, 0, 0, 103, 0, }, /* 934 */
+ { 103, 12, 3, 0, 0, 103, 0, }, /* 935 */
+ { 103, 21, 12, 0, 0, 103, 0, }, /* 936 */
+ { 119, 7, 12, 0, 0, 119, 0, }, /* 937 */
+ { 119, 12, 3, 0, 0, 119, 0, }, /* 938 */
+ { 119, 21, 12, 0, 0, 119, 0, }, /* 939 */
+ { 119, 26, 12, 0, 0, 119, 0, }, /* 940 */
+ { 119, 6, 12, 0, 0, 119, 0, }, /* 941 */
+ { 119, 13, 12, 0, 0, 119, 0, }, /* 942 */
+ { 119, 15, 12, 0, 0, 119, 0, }, /* 943 */
+ { 146, 9, 12, 0, 32, 146, 0, }, /* 944 */
+ { 146, 5, 12, 0, -32, 146, 0, }, /* 945 */
+ { 146, 15, 12, 0, 0, 146, 0, }, /* 946 */
+ { 146, 21, 12, 0, 0, 146, 0, }, /* 947 */
+ { 99, 7, 12, 0, 0, 99, 0, }, /* 948 */
+ { 99, 12, 3, 0, 0, 99, 0, }, /* 949 */
+ { 99, 10, 5, 0, 0, 99, 0, }, /* 950 */
+ { 99, 6, 12, 0, 0, 99, 0, }, /* 951 */
+ { 137, 6, 12, 0, 0, 137, 0, }, /* 952 */
+ { 139, 6, 12, 0, 0, 139, 0, }, /* 953 */
+ { 23, 21, 12, 0, 0, 23, 0, }, /* 954 */
+ { 155, 12, 3, 0, 0, 155, 0, }, /* 955 */
+ { 23, 10, 5, 0, 0, 23, 0, }, /* 956 */
+ { 137, 7, 12, 0, 0, 137, 0, }, /* 957 */
+ { 155, 7, 12, 0, 0, 155, 0, }, /* 958 */
+ { 139, 7, 12, 0, 0, 139, 0, }, /* 959 */
+ { 105, 7, 12, 0, 0, 105, 0, }, /* 960 */
+ { 105, 26, 12, 0, 0, 105, 0, }, /* 961 */
+ { 105, 12, 3, 0, 0, 105, 0, }, /* 962 */
+ { 105, 21, 12, 0, 0, 105, 0, }, /* 963 */
+ { 10, 1, 2, 0, 0, 105, 0, }, /* 964 */
+ { 10, 10, 3, 0, 0, 10, 0, }, /* 965 */
+ { 10, 10, 5, 0, 0, 10, 0, }, /* 966 */
+ { 20, 12, 3, 0, 0, 20, 0, }, /* 967 */
+ { 131, 26, 12, 0, 0, 131, 0, }, /* 968 */
+ { 131, 12, 3, 0, 0, 131, 0, }, /* 969 */
+ { 131, 21, 12, 0, 0, 131, 0, }, /* 970 */
+ { 18, 12, 3, 0, 0, 18, 0, }, /* 971 */
+ { 151, 7, 12, 0, 0, 151, 0, }, /* 972 */
+ { 151, 12, 3, 0, 0, 151, 0, }, /* 973 */
+ { 151, 6, 12, 0, 0, 151, 0, }, /* 974 */
+ { 151, 13, 12, 0, 0, 151, 0, }, /* 975 */
+ { 151, 26, 12, 0, 0, 151, 0, }, /* 976 */
+ { 160, 7, 12, 0, 0, 160, 0, }, /* 977 */
+ { 160, 12, 3, 0, 0, 160, 0, }, /* 978 */
+ { 152, 7, 12, 0, 0, 152, 0, }, /* 979 */
+ { 152, 12, 3, 0, 0, 152, 0, }, /* 980 */
+ { 152, 13, 12, 0, 0, 152, 0, }, /* 981 */
+ { 152, 23, 12, 0, 0, 152, 0, }, /* 982 */
+ { 113, 7, 12, 0, 0, 113, 0, }, /* 983 */
+ { 113, 15, 12, 0, 0, 113, 0, }, /* 984 */
+ { 113, 12, 3, 0, 0, 113, 0, }, /* 985 */
+ { 132, 9, 12, 0, 34, 132, 0, }, /* 986 */
+ { 132, 5, 12, 0, -34, 132, 0, }, /* 987 */
+ { 132, 12, 3, 0, 0, 132, 0, }, /* 988 */
+ { 132, 6, 12, 0, 0, 132, 0, }, /* 989 */
+ { 132, 13, 12, 0, 0, 132, 0, }, /* 990 */
+ { 132, 21, 12, 0, 0, 132, 0, }, /* 991 */
+ { 0, 2, 14, 0, 0, 0, 0, }, /* 992 */
+ { 10, 26, 11, 0, 0, 10, 0, }, /* 993 */
+ { 27, 26, 12, 0, 0, 27, 0, }, /* 994 */
+ { 10, 24, 3, 0, 0, 10, 0, }, /* 995 */
+ { 10, 1, 3, 0, 0, 10, 0, }, /* 996 */
};
const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */
@@ -1190,51 +1216,51 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */
98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+8000 */
98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+8800 */
98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+9000 */
- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,100, /* U+9800 */
-101,102,102,102,102,102,102,102,102,103,104,104,105,106,107,108, /* U+A000 */
-109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,117, /* U+A800 */
-118,119,120,121,122,123,117,118,119,120,121,122,123,117,118,119, /* U+B000 */
-120,121,122,123,117,118,119,120,121,122,123,117,118,119,120,121, /* U+B800 */
-122,123,117,118,119,120,121,122,123,117,118,119,120,121,122,123, /* U+C000 */
-117,118,119,120,121,122,123,117,118,119,120,121,122,123,117,118, /* U+C800 */
-119,120,121,122,123,117,118,119,120,121,122,123,117,118,119,124, /* U+D000 */
-125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+D800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+E000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+E800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F000 */
-126,126, 98, 98,127,128,129,130,131,131,132,133,134,135,136,137, /* U+F800 */
-138,139,140,141,142,143,144,145,146,147,148,142,149,149,150,142, /* U+10000 */
-151,152,153,154,155,156,157,158,159,160,161,142,162,163,164,165, /* U+10800 */
-166,167,168,169,170,171,172,142,173,174,142,175,176,177,178,142, /* U+11000 */
-179,180,181,182,183,184,142,142,185,186,187,188,142,189,142,190, /* U+11800 */
-191,191,191,191,191,191,191,192,193,191,194,142,142,142,142,142, /* U+12000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+12800 */
-195,195,195,195,195,195,195,195,196,142,142,142,142,142,142,142, /* U+13000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+13800 */
-142,142,142,142,142,142,142,142,197,197,197,197,198,142,142,142, /* U+14000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+14800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+15000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+15800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+16000 */
-199,199,199,199,200,201,202,203,142,142,142,142,204,205,206,207, /* U+16800 */
-208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, /* U+17000 */
-208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208, /* U+17800 */
-208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,209, /* U+18000 */
-208,208,208,208,208,208,210,210,210,211,212,142,142,142,142,142, /* U+18800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+19000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+19800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+1A000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+1A800 */
-213,214,215,216,216,217,142,142,142,142,142,142,142,142,142,142, /* U+1B000 */
-142,142,142,142,142,142,142,142,218,219,142,142,142,142,142,142, /* U+1B800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+1C000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+1C800 */
- 71,220,221,222,223,224,225,142,226,227,228,229,230,231,232,233, /* U+1D000 */
-234,234,234,234,235,236,142,142,142,142,142,142,142,142,142,142, /* U+1D800 */
-237,142,238,142,142,239,142,142,142,142,142,142,142,142,142,142, /* U+1E000 */
-240,241,242,142,142,142,142,142,243,244,245,142,246,247,142,142, /* U+1E800 */
-248,249,250,251,252,253,254,255,254,254,256,254,257,258,259,260, /* U+1F000 */
-261,262,263,264,265,266, 71,267,253,253,253,253,253,253,253,268, /* U+1F800 */
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+9800 */
+100,101,101,101,101,101,101,101,101,102,103,103,104,105,106,107, /* U+A000 */
+108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,116, /* U+A800 */
+117,118,119,120,121,122,116,117,118,119,120,121,122,116,117,118, /* U+B000 */
+119,120,121,122,116,117,118,119,120,121,122,116,117,118,119,120, /* U+B800 */
+121,122,116,117,118,119,120,121,122,116,117,118,119,120,121,122, /* U+C000 */
+116,117,118,119,120,121,122,116,117,118,119,120,121,122,116,117, /* U+C800 */
+118,119,120,121,122,116,117,118,119,120,121,122,116,117,118,123, /* U+D000 */
+124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124, /* U+D800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+E000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+E800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F000 */
+125,125, 98, 98,126,127,128,129,130,130,131,132,133,134,135,136, /* U+F800 */
+137,138,139,140,141,142,143,144,145,146,147,148,149,149,150,151, /* U+10000 */
+152,153,154,155,156,157,158,159,160,161,162,141,163,164,165,166, /* U+10800 */
+167,168,169,170,171,172,173,141,174,175,141,176,177,178,179,141, /* U+11000 */
+180,181,182,183,184,185,141,141,186,187,188,189,141,190,141,191, /* U+11800 */
+192,192,192,192,192,192,192,193,194,192,195,141,141,141,141,141, /* U+12000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,196, /* U+12800 */
+197,197,197,197,197,197,197,197,198,141,141,141,141,141,141,141, /* U+13000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+13800 */
+141,141,141,141,141,141,141,141,199,199,199,199,200,141,141,141, /* U+14000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+14800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+15000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+15800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+16000 */
+201,201,201,201,202,203,204,205,141,141,141,141,206,207,208,209, /* U+16800 */
+210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210, /* U+17000 */
+210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210, /* U+17800 */
+210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,211, /* U+18000 */
+210,210,210,210,210,210,212,212,212,213,214,141,141,141,141,141, /* U+18800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+19000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+19800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+1A000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,215, /* U+1A800 */
+216,217,218,219,219,220,141,141,141,141,141,141,141,141,141,141, /* U+1B000 */
+141,141,141,141,141,141,141,141,221,222,141,141,141,141,141,141, /* U+1B800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+1C000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,223,224, /* U+1C800 */
+ 71,225,226,227,228,229,230,141,231,232,233,234,235,236,237,238, /* U+1D000 */
+239,239,239,239,240,241,141,141,141,141,141,141,141,141,242,141, /* U+1D800 */
+243,141,244,141,141,245,141,141,141,141,141,141,141,141,141,246, /* U+1E000 */
+247,248,249,141,141,141,141,141,250,251,252,141,253,254,141,141, /* U+1E800 */
+255,256,257,258,259,260,261,262,261,261,263,261,264,265,266,267, /* U+1F000 */
+268,269,270,261,271,272, 71,273,260,260,260,260,260,260,260,274, /* U+1F800 */
98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+20000 */
98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+20800 */
98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+21000 */
@@ -1255,469 +1281,469 @@ const uint16_t PRIV(ucd_stage1)[] = { /* 17408 bytes */
98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+28800 */
98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+29000 */
98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+29800 */
- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,269, 98, 98, /* U+2A000 */
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,275, 98, 98, /* U+2A000 */
98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2A800 */
- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,270, 98, /* U+2B000 */
-271, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2B800 */
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,276, 98, /* U+2B000 */
+277, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2B800 */
98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2C000 */
- 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,272, 98, 98, /* U+2C800 */
+ 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98,278, 98, 98, /* U+2C800 */
98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2D000 */
98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2D800 */
98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+2E000 */
- 98, 98, 98, 98, 98, 98, 98,273,142,142,142,142,142,142,142,142, /* U+2E800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+2F000 */
- 98, 98, 98, 98,274,142,142,142,142,142,142,142,142,142,142,142, /* U+2F800 */
+ 98, 98, 98, 98, 98, 98, 98,279,141,141,141,141,141,141,141,141, /* U+2E800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+2F000 */
+ 98, 98, 98, 98,280,141,141,141,141,141,141,141,141,141,141,141, /* U+2F800 */
98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+30000 */
98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, /* U+30800 */
- 98, 98, 98, 98, 98, 98,275,142,142,142,142,142,142,142,142,142, /* U+31000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+31800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+32000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+32800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+33000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+33800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+34000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+34800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+35000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+35800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+36000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+36800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+37000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+37800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+38000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+38800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+39000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+39800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3A000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3A800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3B000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3B800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3C000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3C800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3D000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3D800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3E000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3E800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3F000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+3F800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+40000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+40800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+41000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+41800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+42000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+42800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+43000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+43800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+44000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+44800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+45000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+45800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+46000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+46800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+47000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+47800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+48000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+48800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+49000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+49800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4A000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4A800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4B000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4B800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4C000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4C800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4D000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4D800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4E000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4E800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4F000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+4F800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+50000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+50800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+51000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+51800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+52000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+52800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+53000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+53800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+54000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+54800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+55000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+55800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+56000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+56800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+57000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+57800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+58000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+58800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+59000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+59800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5A000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5A800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5B000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5B800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5C000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5C800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5D000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5D800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5E000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5E800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5F000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+5F800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+60000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+60800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+61000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+61800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+62000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+62800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+63000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+63800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+64000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+64800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+65000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+65800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+66000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+66800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+67000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+67800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+68000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+68800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+69000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+69800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6A000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6A800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6B000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6B800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6C000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6C800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6D000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6D800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6E000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6E800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6F000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+6F800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+70000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+70800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+71000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+71800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+72000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+72800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+73000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+73800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+74000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+74800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+75000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+75800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+76000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+76800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+77000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+77800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+78000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+78800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+79000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+79800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7A000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7A800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7B000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7B800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7C000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7C800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7D000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7D800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7E000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7E800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7F000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+7F800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+80000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+80800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+81000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+81800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+82000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+82800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+83000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+83800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+84000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+84800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+85000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+85800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+86000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+86800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+87000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+87800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+88000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+88800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+89000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+89800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8A000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8A800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8B000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8B800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8C000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8C800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8D000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8D800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8E000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8E800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8F000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+8F800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+90000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+90800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+91000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+91800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+92000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+92800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+93000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+93800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+94000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+94800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+95000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+95800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+96000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+96800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+97000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+97800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+98000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+98800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+99000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+99800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9A000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9A800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9B000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9B800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9C000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9C800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9D000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9D800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9E000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9E800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9F000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+9F800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A0000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A0800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A1000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A1800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A2000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A2800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A3000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A3800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A4000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A4800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A5000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A5800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A6000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A6800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A7000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A7800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A8000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A8800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A9000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+A9800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AA000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AA800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AB000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AB800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AC000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AC800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AD000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AD800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AE000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AE800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AF000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+AF800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B0000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B0800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B1000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B1800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B2000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B2800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B3000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B3800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B4000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B4800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B5000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B5800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B6000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B6800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B7000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B7800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B8000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B8800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B9000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+B9800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BA000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BA800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BB000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BB800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BC000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BC800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BD000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BD800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BE000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BE800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BF000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+BF800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C0000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C0800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C1000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C1800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C2000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C2800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C3000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C3800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C4000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C4800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C5000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C5800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C6000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C6800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C7000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C7800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C8000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C8800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C9000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+C9800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CA000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CA800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CB000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CB800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CC000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CC800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CD000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CD800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CE000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CE800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CF000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+CF800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D0000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D0800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D1000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D1800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D2000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D2800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D3000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D3800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D4000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D4800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D5000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D5800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D6000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D6800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D7000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D7800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D8000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D8800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D9000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+D9800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DA000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DA800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DB000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DB800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DC000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DC800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DD000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DD800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DE000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DE800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DF000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+DF800 */
-276,277,278,279,277,277,277,277,277,277,277,277,277,277,277,277, /* U+E0000 */
-277,277,277,277,277,277,277,277,277,277,277,277,277,277,277,277, /* U+E0800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E1000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E1800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E2000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E2800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E3000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E3800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E4000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E4800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E5000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E5800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E6000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E6800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E7000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E7800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E8000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E8800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E9000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+E9800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EA000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EA800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EB000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EB800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EC000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EC800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+ED000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+ED800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EE000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EE800 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EF000 */
-142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142, /* U+EF800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F0000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F0800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F1000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F1800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F2000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F2800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F3000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F3800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F4000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F4800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F5000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F5800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F6000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F6800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F7000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F7800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F8000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F8800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F9000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+F9800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FA000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FA800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FB000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FB800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FC000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FC800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FD000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FD800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FE000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FE800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+FF000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,280, /* U+FF800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+100000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+100800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+101000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+101800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+102000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+102800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+103000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+103800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+104000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+104800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+105000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+105800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+106000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+106800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+107000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+107800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+108000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+108800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+109000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+109800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10A000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10A800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10B000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10B800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10C000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10C800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10D000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10D800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10E000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10E800 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,126, /* U+10F000 */
-126,126,126,126,126,126,126,126,126,126,126,126,126,126,126,280, /* U+10F800 */
+ 98, 98, 98, 98, 98, 98,281,141,141,141,141,141,141,141,141,141, /* U+31000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+31800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+32000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+32800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+33000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+33800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+34000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+34800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+35000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+35800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+36000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+36800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+37000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+37800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+38000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+38800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+39000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+39800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3A000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3A800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3B000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3B800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3C000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3C800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3D000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3D800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3E000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3E800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3F000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+3F800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+40000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+40800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+41000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+41800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+42000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+42800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+43000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+43800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+44000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+44800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+45000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+45800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+46000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+46800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+47000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+47800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+48000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+48800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+49000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+49800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4A000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4A800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4B000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4B800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4C000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4C800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4D000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4D800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4E000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4E800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4F000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+4F800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+50000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+50800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+51000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+51800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+52000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+52800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+53000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+53800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+54000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+54800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+55000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+55800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+56000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+56800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+57000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+57800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+58000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+58800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+59000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+59800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5A000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5A800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5B000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5B800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5C000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5C800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5D000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5D800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5E000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5E800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5F000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+5F800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+60000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+60800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+61000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+61800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+62000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+62800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+63000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+63800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+64000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+64800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+65000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+65800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+66000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+66800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+67000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+67800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+68000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+68800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+69000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+69800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6A000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6A800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6B000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6B800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6C000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6C800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6D000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6D800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6E000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6E800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6F000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+6F800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+70000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+70800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+71000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+71800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+72000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+72800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+73000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+73800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+74000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+74800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+75000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+75800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+76000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+76800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+77000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+77800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+78000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+78800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+79000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+79800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7A000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7A800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7B000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7B800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7C000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7C800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7D000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7D800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7E000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7E800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7F000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+7F800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+80000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+80800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+81000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+81800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+82000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+82800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+83000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+83800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+84000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+84800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+85000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+85800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+86000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+86800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+87000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+87800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+88000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+88800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+89000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+89800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8A000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8A800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8B000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8B800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8C000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8C800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8D000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8D800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8E000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8E800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8F000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+8F800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+90000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+90800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+91000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+91800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+92000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+92800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+93000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+93800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+94000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+94800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+95000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+95800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+96000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+96800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+97000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+97800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+98000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+98800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+99000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+99800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9A000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9A800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9B000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9B800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9C000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9C800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9D000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9D800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9E000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9E800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9F000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+9F800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A0000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A0800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A1000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A1800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A2000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A2800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A3000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A3800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A4000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A4800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A5000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A5800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A6000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A6800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A7000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A7800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A8000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A8800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A9000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+A9800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AA000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AA800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AB000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AB800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AC000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AC800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AD000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AD800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AE000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AE800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AF000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+AF800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B0000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B0800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B1000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B1800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B2000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B2800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B3000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B3800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B4000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B4800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B5000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B5800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B6000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B6800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B7000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B7800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B8000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B8800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B9000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+B9800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BA000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BA800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BB000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BB800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BC000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BC800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BD000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BD800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BE000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BE800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BF000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+BF800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C0000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C0800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C1000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C1800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C2000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C2800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C3000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C3800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C4000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C4800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C5000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C5800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C6000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C6800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C7000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C7800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C8000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C8800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C9000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+C9800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CA000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CA800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CB000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CB800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CC000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CC800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CD000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CD800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CE000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CE800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CF000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+CF800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D0000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D0800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D1000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D1800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D2000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D2800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D3000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D3800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D4000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D4800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D5000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D5800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D6000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D6800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D7000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D7800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D8000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D8800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D9000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+D9800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DA000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DA800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DB000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DB800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DC000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DC800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DD000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DD800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DE000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DE800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DF000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+DF800 */
+282,283,284,285,283,283,283,283,283,283,283,283,283,283,283,283, /* U+E0000 */
+283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283, /* U+E0800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E1000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E1800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E2000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E2800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E3000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E3800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E4000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E4800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E5000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E5800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E6000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E6800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E7000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E7800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E8000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E8800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E9000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+E9800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EA000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EA800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EB000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EB800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EC000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EC800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+ED000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+ED800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EE000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EE800 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EF000 */
+141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141, /* U+EF800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F0000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F0800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F1000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F1800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F2000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F2800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F3000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F3800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F4000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F4800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F5000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F5800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F6000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F6800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F7000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F7800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F8000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F8800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F9000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+F9800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FA000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FA800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FB000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FB800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FC000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FC800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FD000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FD800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FE000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FE800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+FF000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,286, /* U+FF800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+100000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+100800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+101000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+101800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+102000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+102800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+103000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+103800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+104000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+104800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+105000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+105800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+106000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+106800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+107000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+107800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+108000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+108800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+109000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+109800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10A000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10A800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10B000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10B800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10C000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10C800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10D000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10D800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10E000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10E800 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125, /* U+10F000 */
+125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,286, /* U+10F800 */
};
-const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
+const uint16_t PRIV(ucd_stage2)[] = { /* 73472 bytes, block = 128 */
/* block 0 */
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 3, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -1840,463 +1866,463 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
/* block 12 */
215,215,215,215,215,216,217,217,217,218,218,219,220,218,221,221,
-222,222,222,222,222,222,222,222,222,222,222,220,223,120,218,220,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-225,224,224,224,224,224,224,224,224,224,224,226,226,226,226,226,
-226,226,226,226,226,226,222,222,222,222,222,222,222,222,222,222,
-227,227,227,227,227,227,227,227,227,227,218,218,218,218,224,224,
-226,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+222,222,222,222,222,222,222,222,222,222,222,220,223,218,218,224,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+226,225,225,225,225,225,225,225,225,225,225,227,227,227,227,227,
+227,227,227,227,227,227,222,222,222,222,222,222,222,222,222,222,
+228,228,228,228,228,228,228,228,228,228,218,218,218,218,225,225,
+227,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
/* block 13 */
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,228,224,222,222,222,222,222,222,222,216,221,222,
-222,222,222,222,222,229,229,222,222,221,222,222,222,222,224,224,
-230,230,230,230,230,230,230,230,230,230,224,224,224,221,221,224,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,229,225,222,222,222,222,222,222,222,216,221,222,
+222,222,222,222,222,230,230,222,222,221,222,222,222,222,225,225,
+231,231,231,231,231,231,231,231,231,231,225,225,225,221,221,225,
/* block 14 */
-231,231,231,231,231,231,231,231,231,231,231,231,231,231,120,232,
-233,234,233,233,233,233,233,233,233,233,233,233,233,233,233,233,
-233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,
+232,232,232,232,232,232,232,232,232,232,232,232,232,232,120,233,
+234,235,234,234,234,234,234,234,234,234,234,234,234,234,234,234,
234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,
-234,234,234,234,234,234,234,234,234,234,234,120,120,233,233,233,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
+235,235,235,235,235,235,235,235,235,235,235,120,120,234,234,234,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
/* block 15 */
-235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
-235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,
-235,235,235,235,235,235,236,236,236,236,236,236,236,236,236,236,
-236,235,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-237,237,237,237,237,237,237,237,237,237,238,238,238,238,238,238,
-238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,
-238,238,238,238,238,238,238,238,238,238,238,239,239,239,239,239,
-239,239,239,239,240,240,241,242,242,242,240,120,120,239,243,243,
+236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,
+236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,
+236,236,236,236,236,236,237,237,237,237,237,237,237,237,237,237,
+237,236,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+238,238,238,238,238,238,238,238,238,238,239,239,239,239,239,239,
+239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
+239,239,239,239,239,239,239,239,239,239,239,240,240,240,240,240,
+240,240,240,240,241,241,242,243,243,243,241,120,120,240,244,244,
/* block 16 */
-244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,
-244,244,244,244,244,244,245,245,245,245,246,245,245,245,245,245,
-245,245,245,245,246,245,245,245,246,245,245,245,245,245,120,120,
-247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,120,
-248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
-248,248,248,248,248,248,248,248,248,249,249,249,120,120,250,120,
-233,233,233,233,233,233,233,233,233,233,233,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,
+245,245,245,245,245,245,246,246,246,246,247,246,246,246,246,246,
+246,246,246,246,247,246,246,246,247,246,246,246,246,246,120,120,
+248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,120,
+249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
+249,249,249,249,249,249,249,249,249,250,250,250,120,120,251,120,
+234,234,234,234,234,234,234,234,234,234,234,120,120,120,120,120,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
/* block 17 */
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,120,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,120,120,120,120,120,120,120,120,
-120,120,120,222,222,222,222,222,222,222,222,222,222,222,222,222,
+225,225,225,225,225,225,225,225,252,225,225,225,225,225,225,120,
+215,215,120,120,120,120,120,120,222,222,222,222,222,222,222,222,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,230,222,222,222,222,222,222,
+222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,
222,222,216,222,222,222,222,222,222,222,222,222,222,222,222,222,
222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,
/* block 18 */
-251,251,251,252,253,253,253,253,253,253,253,253,253,253,253,253,
-253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
-253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
-253,253,253,253,253,253,253,253,253,253,251,252,251,253,252,252,
-252,251,251,251,251,251,251,251,251,252,252,252,252,251,252,252,
-253,254,255,113,113,251,251,251,253,253,253,253,253,253,253,253,
-253,253,251,251,256,257,258,258,258,258,258,258,258,258,258,258,
-259,260,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
+253,253,253,254,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+255,255,255,255,255,255,255,255,255,255,253,254,253,255,254,254,
+254,253,253,253,253,253,253,253,253,254,254,254,254,253,254,254,
+255,256,257,113,113,253,253,253,255,255,255,255,255,255,255,255,
+255,255,253,253,258,259,260,260,260,260,260,260,260,260,260,260,
+261,262,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
/* block 19 */
-261,262,263,263,120,261,261,261,261,261,261,261,261,120,120,261,
-261,120,120,261,261,261,261,261,261,261,261,261,261,261,261,261,
-261,261,261,261,261,261,261,261,261,120,261,261,261,261,261,261,
-261,120,261,120,120,120,261,261,261,261,120,120,262,261,264,263,
-263,262,262,262,262,120,120,263,263,120,120,263,263,262,261,120,
-120,120,120,120,120,120,120,264,120,120,120,120,261,261,120,261,
-261,261,262,262,120,120,265,265,265,265,265,265,265,265,265,265,
-261,261,266,266,267,267,267,267,267,267,268,266,261,269,262,120,
+263,264,265,265,120,263,263,263,263,263,263,263,263,120,120,263,
+263,120,120,263,263,263,263,263,263,263,263,263,263,263,263,263,
+263,263,263,263,263,263,263,263,263,120,263,263,263,263,263,263,
+263,120,263,120,120,120,263,263,263,263,120,120,264,263,266,265,
+265,264,264,264,264,120,120,265,265,120,120,265,265,264,263,120,
+120,120,120,120,120,120,120,266,120,120,120,120,263,263,120,263,
+263,263,264,264,120,120,267,267,267,267,267,267,267,267,267,267,
+263,263,268,268,269,269,269,269,269,269,270,268,263,271,264,120,
/* block 20 */
-120,270,270,271,120,272,272,272,272,272,272,120,120,120,120,272,
-272,120,120,272,272,272,272,272,272,272,272,272,272,272,272,272,
-272,272,272,272,272,272,272,272,272,120,272,272,272,272,272,272,
-272,120,272,272,120,272,272,120,272,272,120,120,270,120,271,271,
-271,270,270,120,120,120,120,270,270,120,120,270,270,270,120,120,
-120,270,120,120,120,120,120,120,120,272,272,272,272,120,272,120,
-120,120,120,120,120,120,273,273,273,273,273,273,273,273,273,273,
-270,270,272,272,272,270,274,120,120,120,120,120,120,120,120,120,
+120,272,272,273,120,274,274,274,274,274,274,120,120,120,120,274,
+274,120,120,274,274,274,274,274,274,274,274,274,274,274,274,274,
+274,274,274,274,274,274,274,274,274,120,274,274,274,274,274,274,
+274,120,274,274,120,274,274,120,274,274,120,120,272,120,273,273,
+273,272,272,120,120,120,120,272,272,120,120,272,272,272,120,120,
+120,272,120,120,120,120,120,120,120,274,274,274,274,120,274,120,
+120,120,120,120,120,120,275,275,275,275,275,275,275,275,275,275,
+272,272,274,274,274,272,276,120,120,120,120,120,120,120,120,120,
/* block 21 */
-120,275,275,276,120,277,277,277,277,277,277,277,277,277,120,277,
-277,277,120,277,277,277,277,277,277,277,277,277,277,277,277,277,
-277,277,277,277,277,277,277,277,277,120,277,277,277,277,277,277,
-277,120,277,277,120,277,277,277,277,277,120,120,275,277,276,276,
-276,275,275,275,275,275,120,275,275,276,120,276,276,275,120,120,
-277,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-277,277,275,275,120,120,278,278,278,278,278,278,278,278,278,278,
-279,280,120,120,120,120,120,120,120,277,275,275,275,275,275,275,
+120,277,277,278,120,279,279,279,279,279,279,279,279,279,120,279,
+279,279,120,279,279,279,279,279,279,279,279,279,279,279,279,279,
+279,279,279,279,279,279,279,279,279,120,279,279,279,279,279,279,
+279,120,279,279,120,279,279,279,279,279,120,120,277,279,278,278,
+278,277,277,277,277,277,120,277,277,278,120,278,278,277,120,120,
+279,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+279,279,277,277,120,120,280,280,280,280,280,280,280,280,280,280,
+281,282,120,120,120,120,120,120,120,279,277,277,277,277,277,277,
/* block 22 */
-120,281,282,282,120,283,283,283,283,283,283,283,283,120,120,283,
-283,120,120,283,283,283,283,283,283,283,283,283,283,283,283,283,
-283,283,283,283,283,283,283,283,283,120,283,283,283,283,283,283,
-283,120,283,283,120,283,283,283,283,283,120,120,281,283,284,281,
-282,281,281,281,281,120,120,282,282,120,120,282,282,281,120,120,
-120,120,120,120,120,281,281,284,120,120,120,120,283,283,120,283,
-283,283,281,281,120,120,285,285,285,285,285,285,285,285,285,285,
-286,283,287,287,287,287,287,287,120,120,120,120,120,120,120,120,
+120,283,284,284,120,285,285,285,285,285,285,285,285,120,120,285,
+285,120,120,285,285,285,285,285,285,285,285,285,285,285,285,285,
+285,285,285,285,285,285,285,285,285,120,285,285,285,285,285,285,
+285,120,285,285,120,285,285,285,285,285,120,120,283,285,286,283,
+284,283,283,283,283,120,120,284,284,120,120,284,284,283,120,120,
+120,120,120,120,120,283,283,286,120,120,120,120,285,285,120,285,
+285,285,283,283,120,120,287,287,287,287,287,287,287,287,287,287,
+288,285,289,289,289,289,289,289,120,120,120,120,120,120,120,120,
/* block 23 */
-120,120,288,289,120,289,289,289,289,289,289,120,120,120,289,289,
-289,120,289,289,289,289,120,120,120,289,289,120,289,120,289,289,
-120,120,120,289,289,120,120,120,289,289,289,120,120,120,289,289,
-289,289,289,289,289,289,289,289,289,289,120,120,120,120,290,291,
-288,291,291,120,120,120,291,291,291,120,291,291,291,288,120,120,
-289,120,120,120,120,120,120,290,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,292,292,292,292,292,292,292,292,292,292,
-293,293,293,294,295,295,295,295,295,296,295,120,120,120,120,120,
+120,120,290,291,120,291,291,291,291,291,291,120,120,120,291,291,
+291,120,291,291,291,291,120,120,120,291,291,120,291,120,291,291,
+120,120,120,291,291,120,120,120,291,291,291,120,120,120,291,291,
+291,291,291,291,291,291,291,291,291,291,120,120,120,120,292,293,
+290,293,293,120,120,120,293,293,293,120,293,293,293,290,120,120,
+291,120,120,120,120,120,120,292,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,294,294,294,294,294,294,294,294,294,294,
+295,295,295,296,297,297,297,297,297,298,297,120,120,120,120,120,
/* block 24 */
-297,298,298,298,297,299,299,299,299,299,299,299,299,120,299,299,
-299,120,299,299,299,299,299,299,299,299,299,299,299,299,299,299,
-299,299,299,299,299,299,299,299,299,120,299,299,299,299,299,299,
-299,299,299,299,299,299,299,299,299,299,120,120,120,299,297,297,
-297,298,298,298,298,120,297,297,297,120,297,297,297,297,120,120,
-120,120,120,120,120,297,297,120,299,299,299,120,120,120,120,120,
-299,299,297,297,120,120,300,300,300,300,300,300,300,300,300,300,
-120,120,120,120,120,120,120,301,302,302,302,302,302,302,302,303,
+299,300,300,300,299,301,301,301,301,301,301,301,301,120,301,301,
+301,120,301,301,301,301,301,301,301,301,301,301,301,301,301,301,
+301,301,301,301,301,301,301,301,301,120,301,301,301,301,301,301,
+301,301,301,301,301,301,301,301,301,301,120,120,299,301,299,299,
+299,300,300,300,300,120,299,299,299,120,299,299,299,299,120,120,
+120,120,120,120,120,299,299,120,301,301,301,120,120,301,120,120,
+301,301,299,299,120,120,302,302,302,302,302,302,302,302,302,302,
+120,120,120,120,120,120,120,303,304,304,304,304,304,304,304,305,
/* block 25 */
-304,305,306,306,307,304,304,304,304,304,304,304,304,120,304,304,
-304,120,304,304,304,304,304,304,304,304,304,304,304,304,304,304,
-304,304,304,304,304,304,304,304,304,120,304,304,304,304,304,304,
-304,304,304,304,120,304,304,304,304,304,120,120,305,304,306,305,
-306,306,308,306,306,120,305,306,306,120,306,306,305,305,120,120,
-120,120,120,120,120,308,308,120,120,120,120,120,120,120,304,120,
-304,304,305,305,120,120,309,309,309,309,309,309,309,309,309,309,
-120,304,304,120,120,120,120,120,120,120,120,120,120,120,120,120,
+306,307,308,308,309,306,306,306,306,306,306,306,306,120,306,306,
+306,120,306,306,306,306,306,306,306,306,306,306,306,306,306,306,
+306,306,306,306,306,306,306,306,306,120,306,306,306,306,306,306,
+306,306,306,306,120,306,306,306,306,306,120,120,307,306,308,307,
+308,308,310,308,308,120,307,308,308,120,308,308,307,307,120,120,
+120,120,120,120,120,310,310,120,120,120,120,120,120,306,306,120,
+306,306,307,307,120,120,311,311,311,311,311,311,311,311,311,311,
+120,306,306,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 26 */
-310,310,311,311,312,312,312,312,312,312,312,312,312,120,312,312,
-312,120,312,312,312,312,312,312,312,312,312,312,312,312,312,312,
-312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,
-312,312,312,312,312,312,312,312,312,312,312,310,310,312,313,311,
-311,310,310,310,310,120,311,311,311,120,311,311,311,310,314,315,
-120,120,120,120,312,312,312,313,316,316,316,316,316,316,316,312,
-312,312,310,310,120,120,317,317,317,317,317,317,317,317,317,317,
-316,316,316,316,316,316,316,316,316,315,312,312,312,312,312,312,
+312,312,313,313,314,314,314,314,314,314,314,314,314,120,314,314,
+314,120,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
+314,314,314,314,314,314,314,314,314,314,314,312,312,314,315,313,
+313,312,312,312,312,120,313,313,313,120,313,313,313,312,316,317,
+120,120,120,120,314,314,314,315,318,318,318,318,318,318,318,314,
+314,314,312,312,120,120,319,319,319,319,319,319,319,319,319,319,
+318,318,318,318,318,318,318,318,318,317,314,314,314,314,314,314,
/* block 27 */
-120,318,319,319,120,320,320,320,320,320,320,320,320,320,320,320,
-320,320,320,320,320,320,320,120,120,120,320,320,320,320,320,320,
-320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,
-320,320,120,320,320,320,320,320,320,320,320,320,120,320,120,120,
-320,320,320,320,320,320,320,120,120,120,318,120,120,120,120,321,
-319,319,318,318,318,120,318,120,319,319,319,319,319,319,319,321,
-120,120,120,120,120,120,322,322,322,322,322,322,322,322,322,322,
-120,120,319,319,323,120,120,120,120,120,120,120,120,120,120,120,
+120,320,321,321,120,322,322,322,322,322,322,322,322,322,322,322,
+322,322,322,322,322,322,322,120,120,120,322,322,322,322,322,322,
+322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,
+322,322,120,322,322,322,322,322,322,322,322,322,120,322,120,120,
+322,322,322,322,322,322,322,120,120,120,320,120,120,120,120,323,
+321,321,320,320,320,120,320,120,321,321,321,321,321,321,321,323,
+120,120,120,120,120,120,324,324,324,324,324,324,324,324,324,324,
+120,120,321,321,325,120,120,120,120,120,120,120,120,120,120,120,
/* block 28 */
-120,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,
-324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,
-324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,
-324,325,324,326,325,325,325,325,325,325,325,120,120,120,120, 6,
-324,324,324,324,324,324,327,325,325,325,325,325,325,325,325,328,
-329,329,329,329,329,329,329,329,329,329,328,328,120,120,120,120,
+120,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,
+326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,
+326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,
+326,327,326,328,327,327,327,327,327,327,327,120,120,120,120, 6,
+326,326,326,326,326,326,329,327,327,327,327,327,327,327,327,330,
+331,331,331,331,331,331,331,331,331,331,330,330,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 29 */
-120,330,330,120,330,120,330,330,330,330,330,120,330,330,330,330,
-330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,
-330,330,330,330,120,330,120,330,330,330,330,330,330,330,330,330,
-330,331,330,332,331,331,331,331,331,331,331,331,331,330,120,120,
-330,330,330,330,330,120,333,120,331,331,331,331,331,331,120,120,
-334,334,334,334,334,334,334,334,334,334,120,120,330,330,330,330,
+120,332,332,120,332,120,332,332,332,332,332,120,332,332,332,332,
+332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,
+332,332,332,332,120,332,120,332,332,332,332,332,332,332,332,332,
+332,333,332,334,333,333,333,333,333,333,333,333,333,332,120,120,
+332,332,332,332,332,120,335,120,333,333,333,333,333,333,120,120,
+336,336,336,336,336,336,336,336,336,336,120,120,332,332,332,332,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 30 */
-335,336,336,336,337,337,337,337,337,337,337,337,337,337,337,337,
-337,337,337,336,337,336,336,336,338,338,336,336,336,336,336,336,
-339,339,339,339,339,339,339,339,339,339,340,340,340,340,340,340,
-340,340,340,340,336,338,336,338,336,338,341,342,341,342,343,343,
-335,335,335,335,335,335,335,335,120,335,335,335,335,335,335,335,
-335,335,335,335,335,335,335,335,335,335,335,335,335,335,335,335,
-335,335,335,335,335,335,335,335,335,335,335,335,335,120,120,120,
-120,338,338,338,338,338,338,338,338,338,338,338,338,338,338,343,
+337,338,338,338,339,339,339,339,339,339,339,339,339,339,339,339,
+339,339,339,338,339,338,338,338,340,340,338,338,338,338,338,338,
+341,341,341,341,341,341,341,341,341,341,342,342,342,342,342,342,
+342,342,342,342,338,340,338,340,338,340,343,344,343,344,345,345,
+337,337,337,337,337,337,337,337,120,337,337,337,337,337,337,337,
+337,337,337,337,337,337,337,337,337,337,337,337,337,337,337,337,
+337,337,337,337,337,337,337,337,337,337,337,337,337,120,120,120,
+120,340,340,340,340,340,340,340,340,340,340,340,340,340,340,345,
/* block 31 */
-338,338,338,338,338,337,338,338,335,335,335,335,335,338,338,338,
-338,338,338,338,338,338,338,338,120,338,338,338,338,338,338,338,
-338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,
-338,338,338,338,338,338,338,338,338,338,338,338,338,120,336,336,
-336,336,336,336,336,336,338,336,336,336,336,336,336,120,336,336,
-337,337,337,337,337, 20, 20, 20, 20,337,337,120,120,120,120,120,
+340,340,340,340,340,339,340,340,337,337,337,337,337,340,340,340,
+340,340,340,340,340,340,340,340,120,340,340,340,340,340,340,340,
+340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,
+340,340,340,340,340,340,340,340,340,340,340,340,340,120,338,338,
+338,338,338,338,338,338,340,338,338,338,338,338,338,120,338,338,
+339,339,339,339,339, 20, 20, 20, 20,339,339,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 32 */
-344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,
-344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,
-344,344,344,344,344,344,344,344,344,344,344,345,345,346,346,346,
-346,347,346,346,346,346,346,346,345,346,346,347,347,346,346,344,
-348,348,348,348,348,348,348,348,348,348,349,349,349,349,349,349,
-344,344,344,344,344,344,347,347,346,346,344,344,344,344,346,346,
-346,344,345,345,345,344,344,345,345,345,345,345,345,345,344,344,
-344,346,346,346,346,344,344,344,344,344,344,344,344,344,344,344,
+346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,
+346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,
+346,346,346,346,346,346,346,346,346,346,346,347,347,348,348,348,
+348,349,348,348,348,348,348,348,347,348,348,349,349,348,348,346,
+350,350,350,350,350,350,350,350,350,350,351,351,351,351,351,351,
+346,346,346,346,346,346,349,349,348,348,346,346,346,346,348,348,
+348,346,347,347,347,346,346,347,347,347,347,347,347,347,346,346,
+346,348,348,348,348,346,346,346,346,346,346,346,346,346,346,346,
/* block 33 */
-344,344,346,345,347,346,346,345,345,345,345,345,345,346,344,345,
-350,350,350,350,350,350,350,350,350,350,345,345,345,346,351,351,
-352,352,352,352,352,352,352,352,352,352,352,352,352,352,352,352,
-352,352,352,352,352,352,352,352,352,352,352,352,352,352,352,352,
-352,352,352,352,352,352,120,352,120,120,120,120,120,352,120,120,
-353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,
-353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,
-353,353,353,353,353,353,353,353,353,353,353,354,355,353,353,353,
+346,346,348,347,349,348,348,347,347,347,347,347,347,348,346,347,
+352,352,352,352,352,352,352,352,352,352,347,347,347,348,353,353,
+354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,
+354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,
+354,354,354,354,354,354,120,354,120,120,120,120,120,354,120,120,
+355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,
+355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,
+355,355,355,355,355,355,355,355,355,355,355,356,357,355,355,355,
/* block 34 */
-356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,
-356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,
-356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,
-356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,
-356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,
-356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,
-357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,
-357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,
-
-/* block 35 */
-357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,
-357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,
-357,357,357,357,357,357,357,357,358,358,358,358,358,358,358,358,
358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,
358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,
358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,
358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,
358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,
-
-/* block 36 */
-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
+358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,
359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
-359,359,359,359,359,359,359,359,359,120,359,359,359,359,120,120,
-359,359,359,359,359,359,359,120,359,120,359,359,359,359,120,120,
+
+/* block 35 */
359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
+359,359,359,359,359,359,359,359,360,360,360,360,360,360,360,360,
+360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,
+360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,
+360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,
+360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,
+360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,
+
+/* block 36 */
+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,
+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,
+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,
+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,
+361,361,361,361,361,361,361,361,361,120,361,361,361,361,120,120,
+361,361,361,361,361,361,361,120,361,120,361,361,361,361,120,120,
+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,
+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,
/* block 37 */
-359,359,359,359,359,359,359,359,359,120,359,359,359,359,120,120,
-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
-359,120,359,359,359,359,120,120,359,359,359,359,359,359,359,120,
-359,120,359,359,359,359,120,120,359,359,359,359,359,359,359,359,
-359,359,359,359,359,359,359,120,359,359,359,359,359,359,359,359,
-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
+361,361,361,361,361,361,361,361,361,120,361,361,361,361,120,120,
+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,
+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,
+361,120,361,361,361,361,120,120,361,361,361,361,361,361,361,120,
+361,120,361,361,361,361,120,120,361,361,361,361,361,361,361,361,
+361,361,361,361,361,361,361,120,361,361,361,361,361,361,361,361,
+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,
+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,
/* block 38 */
-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
-359,120,359,359,359,359,120,120,359,359,359,359,359,359,359,359,
-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
-359,359,359,359,359,359,359,359,359,359,359,120,120,360,360,360,
-361,361,361,361,361,361,361,361,361,362,362,362,362,362,362,362,
-362,362,362,362,362,362,362,362,362,362,362,362,362,120,120,120,
+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,
+361,120,361,361,361,361,120,120,361,361,361,361,361,361,361,361,
+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,
+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,
+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,
+361,361,361,361,361,361,361,361,361,361,361,120,120,362,362,362,
+363,363,363,363,363,363,363,363,363,364,364,364,364,364,364,364,
+364,364,364,364,364,364,364,364,364,364,364,364,364,120,120,120,
/* block 39 */
-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
-363,363,363,363,363,363,363,363,363,363,120,120,120,120,120,120,
-364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,
-364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,
-364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,
-364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,
-364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,
-365,365,365,365,365,365,120,120,366,366,366,366,366,366,120,120,
+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,
+365,365,365,365,365,365,365,365,365,365,120,120,120,120,120,120,
+366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,
+366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,
+366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,
+366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,
+366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,
+367,367,367,367,367,367,120,120,368,368,368,368,368,368,120,120,
/* block 40 */
-367,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
+369,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
/* block 41 */
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
/* block 42 */
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,369,370,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,371,372,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
/* block 43 */
-371,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,
-372,372,372,372,372,372,372,372,372,372,372,373,374,120,120,120,
-375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,
-375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,
-375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,
-375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,
-375,375,375,375,375,375,375,375,375,375,375, 5, 5, 5,376,376,
-376,375,375,375,375,375,375,375,375,120,120,120,120,120,120,120,
+373,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,
+374,374,374,374,374,374,374,374,374,374,374,375,376,120,120,120,
+377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,
+377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,
+377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,
+377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,
+377,377,377,377,377,377,377,377,377,377,377, 5, 5, 5,378,378,
+378,377,377,377,377,377,377,377,377,120,120,120,120,120,120,120,
/* block 44 */
-377,377,377,377,377,377,377,377,377,377,377,377,377,120,377,377,
-377,377,378,378,378,120,120,120,120,120,120,120,120,120,120,120,
379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,
-379,379,380,380,380,381,381,120,120,120,120,120,120,120,120,120,
+379,379,380,380,380,381,120,120,120,120,120,120,120,120,120,379,
382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,
-382,382,383,383,120,120,120,120,120,120,120,120,120,120,120,120,
-384,384,384,384,384,384,384,384,384,384,384,384,384,120,384,384,
-384,120,385,385,120,120,120,120,120,120,120,120,120,120,120,120,
+382,382,383,383,384,385,385,120,120,120,120,120,120,120,120,120,
+386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,
+386,386,387,387,120,120,120,120,120,120,120,120,120,120,120,120,
+388,388,388,388,388,388,388,388,388,388,388,388,388,120,388,388,
+388,120,389,389,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 45 */
-386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,
-386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,
-386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,
-386,386,386,386,387,387,388,387,387,387,387,387,387,387,388,388,
-388,388,388,388,388,388,387,388,388,387,387,387,387,387,387,387,
-387,387,387,387,389,389,389,390,389,389,389,391,386,387,120,120,
-392,392,392,392,392,392,392,392,392,392,120,120,120,120,120,120,
-393,393,393,393,393,393,393,393,393,393,120,120,120,120,120,120,
+390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,
+390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,
+390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,
+390,390,390,390,391,391,392,391,391,391,391,391,391,391,392,392,
+392,392,392,392,392,392,391,392,392,391,391,391,391,391,391,391,
+391,391,391,391,393,393,393,394,393,393,393,395,390,391,120,120,
+396,396,396,396,396,396,396,396,396,396,120,120,120,120,120,120,
+397,397,397,397,397,397,397,397,397,397,120,120,120,120,120,120,
/* block 46 */
-394,394,395,395,394,395,396,394,394,394,394,397,397,397,398,120,
-399,399,399,399,399,399,399,399,399,399,120,120,120,120,120,120,
-400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
-400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
-400,400,400,401,400,400,400,400,400,400,400,400,400,400,400,400,
-400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
-400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
-400,400,400,400,400,400,400,400,400,120,120,120,120,120,120,120,
+398,398,399,399,398,399,400,398,398,398,398,401,401,401,402,401,
+403,403,403,403,403,403,403,403,403,403,120,120,120,120,120,120,
+404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,
+404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,
+404,404,404,405,404,404,404,404,404,404,404,404,404,404,404,404,
+404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,
+404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,
+404,404,404,404,404,404,404,404,404,120,120,120,120,120,120,120,
/* block 47 */
-400,400,400,400,400,397,397,400,400,400,400,400,400,400,400,400,
-400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
-400,400,400,400,400,400,400,400,400,397,400,120,120,120,120,120,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
-368,368,368,368,368,368,120,120,120,120,120,120,120,120,120,120,
+404,404,404,404,404,401,401,404,404,404,404,404,404,404,404,404,
+404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,
+404,404,404,404,404,404,404,404,404,401,404,120,120,120,120,120,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+370,370,370,370,370,370,120,120,120,120,120,120,120,120,120,120,
/* block 48 */
-402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,
-402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,120,
-403,403,403,404,404,404,404,403,403,404,404,404,120,120,120,120,
-404,404,403,404,404,404,404,404,404,403,403,403,120,120,120,120,
-405,120,120,120,406,406,407,407,407,407,407,407,407,407,407,407,
-408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,
-408,408,408,408,408,408,408,408,408,408,408,408,408,408,120,120,
-408,408,408,408,408,120,120,120,120,120,120,120,120,120,120,120,
+406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,
+406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,120,
+407,407,407,408,408,408,408,407,407,408,408,408,120,120,120,120,
+408,408,407,408,408,408,408,408,408,407,407,407,120,120,120,120,
+409,120,120,120,410,410,411,411,411,411,411,411,411,411,411,411,
+412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,
+412,412,412,412,412,412,412,412,412,412,412,412,412,412,120,120,
+412,412,412,412,412,120,120,120,120,120,120,120,120,120,120,120,
/* block 49 */
-409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,
-409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,
-409,409,409,409,409,409,409,409,409,409,409,409,120,120,120,120,
-409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,
-409,409,409,409,409,409,409,409,409,409,120,120,120,120,120,120,
-410,410,410,410,410,410,410,410,410,410,411,120,120,120,412,412,
413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,
413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,
+413,413,413,413,413,413,413,413,413,413,413,413,120,120,120,120,
+413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,
+413,413,413,413,413,413,413,413,413,413,120,120,120,120,120,120,
+414,414,414,414,414,414,414,414,414,414,415,120,120,120,416,416,
+417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,
+417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,
/* block 50 */
-414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,
-414,414,414,414,414,414,414,415,415,416,416,415,120,120,417,417,
-418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,
-418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,
418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,
-418,418,418,418,418,419,420,419,420,420,420,420,420,420,420,120,
-420,421,420,421,421,420,420,420,420,420,420,420,420,419,419,419,
-419,419,419,420,420,420,420,420,420,420,420,420,420,120,120,420,
+418,418,418,418,418,418,418,419,419,420,420,419,120,120,421,421,
+422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,
+422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,
+422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,
+422,422,422,422,422,423,424,423,424,424,424,424,424,424,424,120,
+424,425,424,425,425,424,424,424,424,424,424,424,424,423,423,423,
+423,423,423,424,424,424,424,424,424,424,424,424,424,120,120,424,
/* block 51 */
-422,422,422,422,422,422,422,422,422,422,120,120,120,120,120,120,
-422,422,422,422,422,422,422,422,422,422,120,120,120,120,120,120,
-423,423,423,423,423,423,423,424,423,423,423,423,423,423,120,120,
-113,113,113,113,113,113,113,113,113,113,113,113,113,113,425,113,
-113,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+426,426,426,426,426,426,426,426,426,426,120,120,120,120,120,120,
+426,426,426,426,426,426,426,426,426,426,120,120,120,120,120,120,
+427,427,427,427,427,427,427,428,427,427,427,427,427,427,120,120,
+113,113,113,113,113,113,113,113,113,113,113,113,113,113,429,113,
+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 52 */
-426,426,426,426,427,428,428,428,428,428,428,428,428,428,428,428,
-428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,
-428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,
-428,428,428,428,426,429,426,426,426,426,426,427,426,427,427,427,
-427,427,426,427,427,428,428,428,428,428,428,428,120,120,120,120,
-430,430,430,430,430,430,430,430,430,430,431,431,431,431,431,431,
-431,432,432,432,432,432,432,432,432,432,432,426,426,426,426,426,
-426,426,426,426,432,432,432,432,432,432,432,432,432,120,120,120,
+430,430,430,430,431,432,432,432,432,432,432,432,432,432,432,432,
+432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,
+432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,
+432,432,432,432,430,433,430,430,430,430,430,431,430,431,431,431,
+431,431,430,431,431,432,432,432,432,432,432,432,432,120,120,120,
+434,434,434,434,434,434,434,434,434,434,435,435,435,435,435,435,
+435,436,436,436,436,436,436,436,436,436,436,430,430,430,430,430,
+430,430,430,430,436,436,436,436,436,436,436,436,436,435,435,120,
/* block 53 */
-433,433,434,435,435,435,435,435,435,435,435,435,435,435,435,435,
-435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,
-435,434,433,433,433,433,434,434,433,433,434,433,433,433,435,435,
-436,436,436,436,436,436,436,436,436,436,435,435,435,435,435,435,
-437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,
-437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,
-437,437,437,437,437,437,438,439,438,438,439,439,439,438,439,438,
-438,438,439,439,120,120,120,120,120,120,120,120,440,440,440,440,
-
-/* block 54 */
+437,437,438,439,439,439,439,439,439,439,439,439,439,439,439,439,
+439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,
+439,438,437,437,437,437,438,438,437,437,438,437,437,437,439,439,
+440,440,440,440,440,440,440,440,440,440,439,439,439,439,439,439,
441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,
441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,
-441,441,441,441,442,442,442,442,442,442,442,442,443,443,443,443,
-443,443,443,443,442,442,443,443,120,120,120,444,444,444,444,444,
-445,445,445,445,445,445,445,445,445,445,120,120,120,441,441,441,
-446,446,446,446,446,446,446,446,446,446,447,447,447,447,447,447,
-447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,
-447,447,447,447,447,447,447,447,448,448,448,448,448,448,449,449,
+441,441,441,441,441,441,442,443,442,442,443,443,443,442,443,442,
+442,442,443,443,120,120,120,120,120,120,120,120,444,444,444,444,
+
+/* block 54 */
+445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,
+445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,
+445,445,445,445,446,446,446,446,446,446,446,446,447,447,447,447,
+447,447,447,447,446,446,447,447,120,120,120,448,448,448,448,448,
+449,449,449,449,449,449,449,449,449,449,120,120,120,445,445,445,
+450,450,450,450,450,450,450,450,450,450,451,451,451,451,451,451,
+451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,
+451,451,451,451,451,451,451,451,452,452,452,452,452,452,453,453,
/* block 55 */
-450,451,452,453,454,455,456,457,458,120,120,120,120,120,120,120,
-459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,
-459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,
-459,459,459,459,459,459,459,459,459,459,459,120,120,459,459,459,
-460,460,460,460,460,460,460,460,120,120,120,120,120,120,120,120,
-461,462,461,463,462,464,464,465,464,465,466,462,465,465,462,462,
-465,467,462,462,462,462,462,462,462,468,469,470,470,464,470,470,
-470,470,471,472,473,469,469,474,475,475,476,120,120,120,120,120,
+454,455,456,457,458,459,460,461,462,120,120,120,120,120,120,120,
+463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,
+463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,
+463,463,463,463,463,463,463,463,463,463,463,120,120,463,463,463,
+464,464,464,464,464,464,464,464,120,120,120,120,120,120,120,120,
+465,466,465,467,466,468,468,469,468,469,470,466,469,469,466,466,
+469,471,466,466,466,466,466,466,466,472,473,474,474,468,474,474,
+474,474,475,476,477,473,473,478,479,479,480,120,120,120,120,120,
/* block 56 */
35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35,128,128,128,128,128,477,110,110,110,110,
+ 35, 35, 35, 35, 35, 35,128,128,128,128,128,481,110,110,110,110,
110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,
110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,
110,110,110,110,110,110,110,110,110,110,110,110,110,121,121,121,
121,121,110,110,110,110,121,121,121,121,121, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35,478,479, 35, 35, 35,480, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35,482,483, 35, 35, 35,484, 35, 35,
/* block 57 */
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,481, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,485, 35,
35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,110,110,110,110,110,
110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,
110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,121,
114,114,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
-113,113,113,113,113,113,113,113,482,113,120,113,113,113,113,113,
+113,113,113,113,113,113,113,113,486,113,487,113,113,113,113,113,
/* block 58 */
32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
@@ -2305,12 +2331,12 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
-483,484, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
+488,489, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
/* block 59 */
32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
- 32, 33, 32, 33, 32, 33, 35, 35, 35, 35, 35,485, 35, 35,486, 35,
+ 32, 33, 32, 33, 32, 33, 35, 35, 35, 35, 35,490, 35, 35,491, 35,
32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
@@ -2319,33 +2345,33 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
/* block 60 */
-487,487,487,487,487,487,487,487,488,488,488,488,488,488,488,488,
-487,487,487,487,487,487,120,120,488,488,488,488,488,488,120,120,
-487,487,487,487,487,487,487,487,488,488,488,488,488,488,488,488,
-487,487,487,487,487,487,487,487,488,488,488,488,488,488,488,488,
-487,487,487,487,487,487,120,120,488,488,488,488,488,488,120,120,
-128,487,128,487,128,487,128,487,120,488,120,488,120,488,120,488,
-487,487,487,487,487,487,487,487,488,488,488,488,488,488,488,488,
-489,489,490,490,490,490,491,491,492,492,493,493,494,494,120,120,
+492,492,492,492,492,492,492,492,493,493,493,493,493,493,493,493,
+492,492,492,492,492,492,120,120,493,493,493,493,493,493,120,120,
+492,492,492,492,492,492,492,492,493,493,493,493,493,493,493,493,
+492,492,492,492,492,492,492,492,493,493,493,493,493,493,493,493,
+492,492,492,492,492,492,120,120,493,493,493,493,493,493,120,120,
+128,492,128,492,128,492,128,492,120,493,120,493,120,493,120,493,
+492,492,492,492,492,492,492,492,493,493,493,493,493,493,493,493,
+494,494,495,495,495,495,496,496,497,497,498,498,499,499,120,120,
/* block 61 */
-487,487,487,487,487,487,487,487,495,495,495,495,495,495,495,495,
-487,487,487,487,487,487,487,487,495,495,495,495,495,495,495,495,
-487,487,487,487,487,487,487,487,495,495,495,495,495,495,495,495,
-487,487,128,496,128,120,128,128,488,488,497,497,498,119,499,119,
-119,119,128,496,128,120,128,128,500,500,500,500,498,119,119,119,
-487,487,128,128,120,120,128,128,488,488,501,501,120,119,119,119,
-487,487,128,128,128,169,128,128,488,488,502,502,174,119,119,119,
-120,120,128,496,128,120,128,128,503,503,504,504,498,119,119,120,
+492,492,492,492,492,492,492,492,500,500,500,500,500,500,500,500,
+492,492,492,492,492,492,492,492,500,500,500,500,500,500,500,500,
+492,492,492,492,492,492,492,492,500,500,500,500,500,500,500,500,
+492,492,128,501,128,120,128,128,493,493,502,502,503,119,504,119,
+119,119,128,501,128,120,128,128,505,505,505,505,503,119,119,119,
+492,492,128,128,120,120,128,128,493,493,506,506,120,119,119,119,
+492,492,128,128,128,169,128,128,493,493,507,507,174,119,119,119,
+120,120,128,501,128,120,128,128,508,508,509,509,503,119,119,120,
/* block 62 */
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 24,505,506, 24, 24,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 24,510,511, 24, 24,
10, 10, 10, 10, 10, 10, 5, 5, 23, 27, 7, 23, 23, 27, 7, 23,
- 5, 5, 5, 5, 5, 5, 5, 5,507,508, 24, 24, 24, 24, 24,509,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 23, 27, 5,510, 5, 5, 16,
- 16, 5, 5, 5, 9, 7, 8, 5, 5,510, 5, 5, 5, 5, 5, 5,
+ 5, 5, 5, 5, 5, 5, 5, 5,512,513, 24, 24, 24, 24, 24,514,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 23, 27, 5,515, 5, 5, 16,
+ 16, 5, 5, 5, 9, 7, 8, 5, 5,515, 5, 5, 5, 5, 5, 5,
5, 5, 9, 5, 16, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4,
- 24, 24, 24, 24, 24,511, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 24, 24,516, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
25,110,120,120, 25, 25, 25, 25, 25, 25, 9, 9, 9, 7, 8,110,
/* block 63 */
@@ -2353,24 +2379,24 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
110,110,110,110,110,110,110,110,110,110,110,110,110,120,120,120,
6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-113,113,113,113,113,113,113,113,113,113,113,113,113,425,425,425,
-425,113,425,425,425,113,113,113,113,113,113,113,113,113,113,113,
-512,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+ 6,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+113,113,113,113,113,113,113,113,113,113,113,113,113,429,429,429,
+429,113,429,429,429,113,113,113,113,113,113,113,113,113,113,113,
+517,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 64 */
- 20, 20,513, 20, 20, 20, 20,513, 20, 20,514,513,513,513,514,514,
-513,513,513,514, 20,513, 20, 20, 9,513,513,513,513,513, 20, 20,
- 20, 20, 21, 20,513, 20,515, 20,513, 20,516,517,513,513, 20,514,
-513,513,518,513,514,519,519,519,519,520, 20, 20,514,514,513,513,
- 9, 9, 9, 9, 9,513,514,514,514,514, 20, 9, 20, 20,521, 20,
+ 20, 20,518, 20, 20, 20, 20,518, 20, 20,519,518,518,518,519,519,
+518,518,518,519, 20,518, 20, 20, 9,518,518,518,518,518, 20, 20,
+ 20, 20, 21, 20,518, 20,520, 20,518, 20,521,522,518,518, 20,519,
+518,518,523,518,519,524,524,524,524,525, 20, 20,519,519,518,518,
+ 9, 9, 9, 9, 9,518,519,519,519,519, 20, 9, 20, 20,526, 20,
25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
-522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,
-523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,
+527,527,527,527,527,527,527,527,527,527,527,527,527,527,527,527,
+528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,
/* block 65 */
-524,524,524, 32, 33,524,524,524,524, 25, 20, 20,120,120,120,120,
- 9, 9, 9, 9,525, 21, 21, 21, 21, 21, 9, 9, 20, 20, 20, 20,
+529,529,529, 32, 33,529,529,529,529, 25, 20, 20,120,120,120,120,
+ 9, 9, 9, 9,530, 21, 21, 21, 21, 21, 9, 9, 20, 20, 20, 20,
9, 20, 20, 9, 20, 20, 9, 20, 20, 21, 21, 20, 20, 20, 9, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 9, 9,
@@ -2422,10 +2448,10 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
- 20, 20, 20, 20, 20, 20,526,526,526,526,526,526,526,526,526,526,
-526,526,527,526,526,526,526,526,526,526,526,526,526,526,526,526,
-528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,
-528,528,528,528,528,528,528,528,528,528, 25, 25, 25, 25, 25, 25,
+ 20, 20, 20, 20, 20, 20,531,531,531,531,531,531,531,531,531,531,
+531,531,532,531,531,531,531,531,531,531,531,531,531,531,531,531,
+533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,
+533,533,533,533,533,533,533,533,533,533, 25, 25, 25, 25, 25, 25,
25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
/* block 71 */
@@ -2446,7 +2472,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
21, 9, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
- 20, 20, 20, 20, 20, 20, 20, 20, 9, 9, 9,525,525,525,525, 9,
+ 20, 20, 20, 20, 20, 20, 20, 20, 9, 9, 9,530,530,530,530, 9,
/* block 73 */
21, 21, 21, 21, 21, 21, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21,
@@ -2455,7 +2481,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,525,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,530,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
/* block 74 */
@@ -2489,20 +2515,20 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
/* block 77 */
-529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,
-529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,
-529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,
-529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,
-529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,
-529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,
-529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,
-529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,
+534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,
+534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,
+534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,
+534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,
+534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,
+534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,
+534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,
+534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,
/* block 78 */
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9,525,525, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9,530,530, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
@@ -2539,14 +2565,14 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
/* block 82 */
-530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,
-530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,
-530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,120,
-531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,
-531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,
-531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,120,
- 32, 33,532,533,534,535,536, 32, 33, 32, 33, 32, 33,537,538,539,
-540, 35, 32, 33, 35, 32, 33, 35, 35, 35, 35, 35,110,110,541,541,
+535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,
+535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,
+535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,
+536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
+536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
+536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
+ 32, 33,537,538,539,540,541, 32, 33, 32, 33, 32, 33,542,543,544,
+545, 35, 32, 33, 35, 32, 33, 35, 35, 35, 35, 35,110,110,546,546,
/* block 83 */
165,166,165,166,165,166,165,166,165,166,165,166,165,166,165,166,
@@ -2555,138 +2581,138 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
165,166,165,166,165,166,165,166,165,166,165,166,165,166,165,166,
165,166,165,166,165,166,165,166,165,166,165,166,165,166,165,166,
165,166,165,166,165,166,165,166,165,166,165,166,165,166,165,166,
-165,166,165,166,542,543,543,543,543,543,543,165,166,165,166,544,
-544,544,165,166,120,120,120,120,120,545,545,545,545,546,545,545,
+165,166,165,166,547,548,548,548,548,548,548,165,166,165,166,549,
+549,549,165,166,120,120,120,120,120,550,550,550,550,551,550,550,
/* block 84 */
-547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,
-547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,
-547,547,547,547,547,547,120,547,120,120,120,120,120,547,120,120,
-548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,
-548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,
-548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,
-548,548,548,548,548,548,548,548,120,120,120,120,120,120,120,549,
-550,120,120,120,120,120,120,120,120,120,120,120,120,120,120,551,
-
-/* block 85 */
-359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
-359,359,359,359,359,359,359,120,120,120,120,120,120,120,120,120,
-359,359,359,359,359,359,359,120,359,359,359,359,359,359,359,120,
-359,359,359,359,359,359,359,120,359,359,359,359,359,359,359,120,
-359,359,359,359,359,359,359,120,359,359,359,359,359,359,359,120,
-359,359,359,359,359,359,359,120,359,359,359,359,359,359,359,120,
552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,
552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,
+552,552,552,552,552,552,120,552,120,120,120,120,120,552,120,120,
+553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,
+553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,
+553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,
+553,553,553,553,553,553,553,553,120,120,120,120,120,120,120,554,
+555,120,120,120,120,120,120,120,120,120,120,120,120,120,120,556,
+
+/* block 85 */
+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,
+361,361,361,361,361,361,361,120,120,120,120,120,120,120,120,120,
+361,361,361,361,361,361,361,120,361,361,361,361,361,361,361,120,
+361,361,361,361,361,361,361,120,361,361,361,361,361,361,361,120,
+361,361,361,361,361,361,361,120,361,361,361,361,361,361,361,120,
+361,361,361,361,361,361,361,120,361,361,361,361,361,361,361,120,
+557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,
+557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,
/* block 86 */
5, 5, 23, 27, 23, 27, 5, 5, 5, 23, 27, 5, 23, 27, 5, 5,
5, 5, 5, 5, 5, 5, 5, 10, 5, 5, 10, 5, 23, 27, 5, 5,
23, 27, 7, 8, 7, 8, 7, 8, 7, 8, 5, 5, 5, 5, 5,111,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 10, 10, 5, 5, 5, 5,
- 10, 5, 7,553, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 20, 20, 5,120,120,120,120,120,120,120,120,120,120,120,120,120,
+ 10, 5, 7,558, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 20, 20, 5, 5, 5, 7, 8, 7, 8, 7, 8, 7, 8, 10,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 87 */
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,554,554,554,554,554,554,120,554,554,554,554,554,
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,120,120,120,120,120,120,120,120,120,120,120,120,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,120,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 88 */
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
/* block 89 */
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
-554,554,554,554,554,554,120,120,120,120,120,120,120,120,120,120,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
+559,559,559,559,559,559,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,120,120,120,120,
/* block 90 */
- 4,555,555,556, 20,557,558,559,560,561,560,561,560,561,560,561,
-560,561, 20,562,560,561,560,561,560,561,560,561,563,564,565,565,
- 20,559,559,559,559,559,559,559,559,559,566,566,566,566,567,567,
-568,569,569,569,569,569, 20,562,559,559,559,557,570,571,572,572,
-120,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-
-/* block 91 */
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,120,120,574,574,575,575,576,576,573,
-577,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+ 4,560,560,561, 20,562,563,564,565,566,565,566,565,566,565,566,
+565,566, 20,567,565,566,565,566,565,566,565,566,568,569,570,570,
+ 20,564,564,564,564,564,564,564,564,564,571,571,571,571,572,572,
+573,574,574,574,574,574, 20,567,564,564,564,562,575,576,577,577,
+120,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+
+/* block 91 */
578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
-578,578,578,578,578,578,578,578,578,578,578,555,569,579,579,578,
+578,578,578,578,578,578,578,120,120,579,579,580,580,581,581,578,
+582,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,
+583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,
+583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,
+583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,
+583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,
+583,583,583,583,583,583,583,583,583,583,583,560,574,584,584,583,
/* block 92 */
-120,120,120,120,120,580,580,580,580,580,580,580,580,580,580,580,
-580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,
-580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,
-120,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,
-581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,
-581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,
-581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,
-581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,
+120,120,120,120,120,585,585,585,585,585,585,585,585,585,585,585,
+585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,
+585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,
+120,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
+586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
+586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
+586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
+586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
/* block 93 */
-581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,120,
-572,572,582,582,582,582,572,572,572,572,572,572,572,572,572,572,
-580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,
-580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,
-572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,
-572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,
-572,572,572,572,120,120,120,120,120,120,120,120,120,120,120,120,
-578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,120,
+577,577,587,587,587,587,577,577,577,577,577,577,577,577,577,577,
+585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,
+585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,
+577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,
+577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,
+577,577,577,577,120,120,120,120,120,120,120,120,120,120,120,120,
+583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,
/* block 94 */
-583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,
-583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,120,
-582,582,582,582,582,582,582,582,582,582,572,572,572,572,572,572,
-572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,
-572,572,572,572,572,572,572,572, 25, 25, 25, 25, 25, 25, 25, 25,
+588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,
+588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,120,
+587,587,587,587,587,587,587,587,587,587,577,577,577,577,577,577,
+577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,
+577,577,577,577,577,577,577,577, 25, 25, 25, 25, 25, 25, 25, 25,
20, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
-583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,
-583,583,583,583,583,583,583,583,583,583,583,583,583,583,583, 20,
+588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,
+588,588,588,588,588,588,588,588,588,588,588,588,588,588,588, 20,
/* block 95 */
-582,582,582,582,582,582,582,582,582,582,572,572,572,572,572,572,
-572,572,572,572,572,572,572,584,572,584,572,572,572,572,572,572,
-572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,
-572, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
-572,572,572,572,572,572,572,572,572,572,572,572, 20, 20, 20, 20,
-585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,
-585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,
-585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,572,
+587,587,587,587,587,587,587,587,587,587,577,577,577,577,577,577,
+577,577,577,577,577,577,577,589,577,589,577,577,577,577,577,577,
+577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,
+577, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+577,577,577,577,577,577,577,577,577,577,577,577, 20, 20, 20, 20,
+590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,
+590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,
+590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,577,
/* block 96 */
-585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,
-585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,
-585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,
-585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,
-585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,
-585,585,585,585,585,585,585,585,572,572,572,572,572,572,572,572,
-572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,
-572, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,572,572,572,572,572,
+590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,
+590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,
+590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,
+590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,
+590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,
+590,590,590,590,590,590,590,590,577,577,577,577,577,577,577,577,
+577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,
+577, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,577,577,577,577,577,
/* block 97 */
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
@@ -2695,450 +2721,440 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
-572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,
-572,572,572,572,572,572,572,572,572,572,572,572,572,572,572, 20,
+577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,
+577,577,577,577,577,577,577,577,577,577,577,577,577,577,577, 20,
/* block 98 */
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
/* block 99 */
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
/* block 100 */
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,120,120,120,
+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,
+592,592,592,592,592,593,592,592,592,592,592,592,592,592,592,592,
+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,
+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,
+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,
+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,
+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,
+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,
/* block 101 */
-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,
-587,587,587,587,587,588,587,587,587,587,587,587,587,587,587,587,
-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,
-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,
-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,
-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,
-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,
-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,
+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,
+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,
+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,
+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,
+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,
+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,
+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,
+592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,
/* block 102 */
-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,
-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,
-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,
-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,
-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,
-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,
-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,
-587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,
+592,592,592,592,592,592,592,592,592,592,592,592,592,120,120,120,
+594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,
+594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,
+594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,
+594,594,594,594,594,594,594,120,120,120,120,120,120,120,120,120,
+595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,
+595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,
+595,595,595,595,595,595,595,595,596,596,596,596,596,596,597,597,
/* block 103 */
-587,587,587,587,587,587,587,587,587,587,587,587,587,120,120,120,
-589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,
-589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,
-589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,
-589,589,589,589,589,589,589,120,120,120,120,120,120,120,120,120,
-590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,
-590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,
-590,590,590,590,590,590,590,590,591,591,591,591,591,591,592,592,
+598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,
+598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,
+598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,
+598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,
+598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,
+598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,
+598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,
+598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,
/* block 104 */
-593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,
-593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,
-593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,
-593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,
-593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,
-593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,
-593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,
-593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,
-
-/* block 105 */
-593,593,593,593,593,593,593,593,593,593,593,593,594,595,595,595,
-593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,
-596,596,596,596,596,596,596,596,596,596,593,593,120,120,120,120,
+598,598,598,598,598,598,598,598,598,598,598,598,599,600,600,600,
+598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,
+601,601,601,601,601,601,601,601,601,601,598,598,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-192,193,192,193,192,193,192,193,192,193,597,598,192,193,192,193,
+192,193,192,193,192,193,192,193,192,193,602,603,192,193,192,193,
192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193,
-192,193,192,193,192,193,192,193,192,193,192,193,192,193,599,198,
-200,200,200,600,552,552,552,552,552,552,552,552,552,552,600,478,
+192,193,192,193,192,193,192,193,192,193,192,193,192,193,604,198,
+200,200,200,605,557,557,557,557,557,557,557,557,557,557,605,482,
-/* block 106 */
+/* block 105 */
192,193,192,193,192,193,192,193,192,193,192,193,192,193,192,193,
-192,193,192,193,192,193,192,193,192,193,192,193,478,478,552,552,
-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,
-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,
-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,
-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,
-601,601,601,601,601,601,602,602,602,602,602,602,602,602,602,602,
-603,603,604,604,604,604,604,604,120,120,120,120,120,120,120,120,
+192,193,192,193,192,193,192,193,192,193,192,193,482,482,557,557,
+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,
+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,
+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,
+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,
+606,606,606,606,606,606,607,607,607,607,607,607,607,607,607,607,
+608,608,609,609,609,609,609,609,120,120,120,120,120,120,120,120,
-/* block 107 */
-605,605,605,605,605,605,605,605, 15, 15, 15, 15, 15, 15, 15, 15,
+/* block 106 */
+610,610,610,610,610,610,610,610, 15, 15, 15, 15, 15, 15, 15, 15,
15, 15, 15, 15, 15, 15, 15,111,111,111,111,111,111,111,111,111,
15, 15, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
35, 35, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
-110, 35, 35, 35, 35, 35, 35, 35, 35, 32, 33, 32, 33,606, 32, 33,
+110, 35, 35, 35, 35, 35, 35, 35, 35, 32, 33, 32, 33,611, 32, 33,
-/* block 108 */
- 32, 33, 32, 33, 32, 33, 32, 33,111, 15, 15, 32, 33,607, 35, 22,
- 32, 33, 32, 33,608, 35, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
- 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,609,610,611,612,609, 35,
-613,614,615,616, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
-120,120, 32, 33,617,618,619, 32, 33, 32, 33,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+/* block 107 */
+ 32, 33, 32, 33, 32, 33, 32, 33,111, 15, 15, 32, 33,612, 35, 22,
+ 32, 33, 32, 33,613, 35, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
+ 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,614,615,616,617,614, 35,
+618,619,620,621, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33, 32, 33,
+ 32, 33, 32, 33,622,623,624, 32, 33, 32, 33,120,120,120,120,120,
+ 32, 33,120, 35,120, 35, 32, 33, 32, 33,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120, 32, 33, 22,110,110, 35, 22, 22, 22, 22, 22,
+120,120,110,110,110, 32, 33, 22,110,110, 35, 22, 22, 22, 22, 22,
+
+/* block 108 */
+625,625,626,625,625,625,626,625,625,625,625,626,625,625,625,625,
+625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,
+625,625,625,627,627,626,626,627,628,628,628,628,626,120,120,120,
+629,629,629,630,630,630,631,631,632,631,120,120,120,120,120,120,
+633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,
+633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,
+633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,
+633,633,633,633,634,634,634,634,120,120,120,120,120,120,120,120,
/* block 109 */
-620,620,621,620,620,620,621,620,620,620,620,621,620,620,620,620,
-620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,
-620,620,620,622,622,621,621,622,623,623,623,623,621,120,120,120,
-624,624,624,625,625,625,626,626,627,626,120,120,120,120,120,120,
-628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,
-628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,
-628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,
-628,628,628,628,629,629,629,629,120,120,120,120,120,120,120,120,
+635,635,636,636,636,636,636,636,636,636,636,636,636,636,636,636,
+636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,
+636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,
+636,636,636,636,635,635,635,635,635,635,635,635,635,635,635,635,
+635,635,635,635,637,637,120,120,120,120,120,120,120,120,638,638,
+639,639,639,639,639,639,639,639,639,639,120,120,120,120,120,120,
+253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,
+253,640,255,641,255,255,255,255,261,261,261,255,261,255,255,253,
/* block 110 */
-630,630,631,631,631,631,631,631,631,631,631,631,631,631,631,631,
-631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,
-631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,
-631,631,631,631,630,630,630,630,630,630,630,630,630,630,630,630,
-630,630,630,630,632,632,120,120,120,120,120,120,120,120,633,633,
-634,634,634,634,634,634,634,634,634,634,120,120,120,120,120,120,
-251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,
-251,635,253,636,253,253,253,253,259,259,259,253,259,253,253,251,
+642,642,642,642,642,642,642,642,642,642,643,643,643,643,643,643,
+643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,
+643,643,643,643,643,643,644,644,644,644,644,644,644,644,645,646,
+647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,
+647,647,647,647,647,647,647,648,648,648,648,648,648,648,648,648,
+648,648,649,649,120,120,120,120,120,120,120,120,120,120,120,650,
+358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,
+358,358,358,358,358,358,358,358,358,358,358,358,358,120,120,120,
/* block 111 */
-637,637,637,637,637,637,637,637,637,637,638,638,638,638,638,638,
-638,638,638,638,638,638,638,638,638,638,638,638,638,638,638,638,
-638,638,638,638,638,638,639,639,639,639,639,639,639,639,640,641,
-642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,
-642,642,642,642,642,642,642,643,643,643,643,643,643,643,643,643,
-643,643,644,644,120,120,120,120,120,120,120,120,120,120,120,645,
-356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,
-356,356,356,356,356,356,356,356,356,356,356,356,356,120,120,120,
-
-/* block 112 */
-646,646,646,647,648,648,648,648,648,648,648,648,648,648,648,648,
-648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,
-648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,
-648,648,648,646,647,647,646,646,646,646,647,647,646,646,647,647,
-647,649,649,649,649,649,649,649,649,649,649,649,649,649,120,650,
-651,651,651,651,651,651,651,651,651,651,120,120,120,120,649,649,
-344,344,344,344,344,346,652,344,344,344,344,344,344,344,344,344,
-350,350,350,350,350,350,350,350,350,350,344,344,344,344,344,120,
-
-/* block 113 */
+651,651,651,652,653,653,653,653,653,653,653,653,653,653,653,653,
653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,
653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,
-653,653,653,653,653,653,653,653,653,654,654,654,654,654,654,655,
-655,654,654,655,655,654,654,120,120,120,120,120,120,120,120,120,
-653,653,653,654,653,653,653,653,653,653,653,653,654,655,120,120,
-656,656,656,656,656,656,656,656,656,656,120,120,657,657,657,657,
-344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,
-652,344,344,344,344,344,344,351,351,351,344,345,346,345,344,344,
+653,653,653,651,652,652,651,651,651,651,652,652,651,651,652,652,
+652,654,654,654,654,654,654,654,654,654,654,654,654,654,120,655,
+656,656,656,656,656,656,656,656,656,656,120,120,120,120,654,654,
+346,346,346,346,346,348,657,346,346,346,346,346,346,346,346,346,
+352,352,352,352,352,352,352,352,352,352,346,346,346,346,346,120,
-/* block 114 */
-658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,
+/* block 112 */
658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,
658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,
-659,658,659,659,659,658,658,659,659,658,658,658,658,658,659,659,
-658,659,658,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,658,658,660,661,661,
-662,662,662,662,662,662,662,662,662,662,662,663,664,664,663,663,
-665,665,662,666,666,663,664,120,120,120,120,120,120,120,120,120,
+658,658,658,658,658,658,658,658,658,659,659,659,659,659,659,660,
+660,659,659,660,660,659,659,120,120,120,120,120,120,120,120,120,
+658,658,658,659,658,658,658,658,658,658,658,658,659,660,120,120,
+661,661,661,661,661,661,661,661,661,661,120,120,662,662,662,662,
+346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,
+657,346,346,346,346,346,346,353,353,353,346,347,348,347,346,346,
-/* block 115 */
-120,359,359,359,359,359,359,120,120,359,359,359,359,359,359,120,
-120,359,359,359,359,359,359,120,120,120,120,120,120,120,120,120,
-359,359,359,359,359,359,359,120,359,359,359,359,359,359,359,120,
+/* block 113 */
+663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,
+663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,
+663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,
+664,663,664,664,664,663,663,664,664,663,663,663,663,663,664,664,
+663,664,663,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,663,663,665,666,666,
+667,667,667,667,667,667,667,667,667,667,667,668,669,669,668,668,
+670,670,667,671,671,668,669,120,120,120,120,120,120,120,120,120,
+
+/* block 114 */
+120,361,361,361,361,361,361,120,120,361,361,361,361,361,361,120,
+120,361,361,361,361,361,361,120,120,120,120,120,120,120,120,120,
+361,361,361,361,361,361,361,120,361,361,361,361,361,361,361,120,
35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35,667, 35, 35, 35, 35, 35, 35, 35, 15,110,110,110,110,
+ 35, 35, 35,672, 35, 35, 35, 35, 35, 35, 35, 15,110,110,110,110,
35, 35, 35, 35, 35,128, 35, 35, 35,110, 15, 15,120,120,120,120,
-668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,
+673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
+
+/* block 115 */
+673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
+673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
+673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
+673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
+667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,
+667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,
+667,667,667,668,668,669,668,668,669,668,668,670,668,669,120,120,
+674,674,674,674,674,674,674,674,674,674,120,120,120,120,120,120,
/* block 116 */
-668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,
-668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,
-668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,
-668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,
-662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,
-662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,
-662,662,662,663,663,664,663,663,664,663,663,665,663,664,120,120,
-669,669,669,669,669,669,669,669,669,669,120,120,120,120,120,120,
+675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
/* block 117 */
-670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
+676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676,
/* block 118 */
-671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
/* block 119 */
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
+676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676,
/* block 120 */
-671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
/* block 121 */
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
+676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676,
/* block 122 */
-671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+675,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,675,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,675,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
/* block 123 */
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-670,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,670,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,670,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
+676,676,676,676,676,676,676,676,675,676,676,676,676,676,676,676,
+676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
+676,676,676,676,120,120,120,120,120,120,120,120,120,120,120,120,
+359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
+359,359,359,359,359,359,359,120,120,120,120,360,360,360,360,360,
+360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,
+360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,
+360,360,360,360,360,360,360,360,360,360,360,360,120,120,120,120,
/* block 124 */
-671,671,671,671,671,671,671,671,670,671,671,671,671,671,671,671,
-671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
-671,671,671,671,120,120,120,120,120,120,120,120,120,120,120,120,
-357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,
-357,357,357,357,357,357,357,120,120,120,120,358,358,358,358,358,
-358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,
-358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,
-358,358,358,358,358,358,358,358,358,358,358,358,120,120,120,120,
+677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,
+677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,
+677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,
+677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,
+677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,
+677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,
+677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,
+677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,
/* block 125 */
-672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,
-672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,
-672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,
-672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,
-672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,
-672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,
-672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,
-672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,
+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,
+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,
+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,
+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,
+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,
+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,
+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,
+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,
/* block 126 */
-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,120,120,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
/* block 127 */
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,120,120,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-
-/* block 128 */
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,120,120,120,120,120,120,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 129 */
+/* block 128 */
35, 35, 35, 35, 35, 35, 35,120,120,120,120,120,120,120,120,120,
120,120,120,206,206,206,206,206,120,120,120,120,120,214,211,214,
-214,214,214,214,214,214,214,214,214,674,214,214,214,214,214,214,
+214,214,214,214,214,214,214,214,214,679,214,214,214,214,214,214,
214,214,214,214,214,214,214,120,214,214,214,214,214,120,214,120,
214,214,120,214,214,120,214,214,214,214,214,214,214,214,214,214,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+
+/* block 129 */
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,252,252,252,252,252,252,252,252,252,252,252,252,252,252,
+252,252,252,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
/* block 130 */
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,675,675,675,675,675,675,675,675,675,675,675,675,675,675,
-675,675,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
/* block 131 */
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,680,681,
+221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
/* block 132 */
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224, 8, 7,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+120,120,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,120,120,120,120,120,120,120,221,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-
-/* block 133 */
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-120,120,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-224,224,676,224,224,224,224,224,224,224,224,224,219,677,120,120,
+225,225,682,225,225,225,225,225,225,225,225,225,219,683,221,221,
-/* block 134 */
+/* block 133 */
113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
5, 5, 5, 5, 5, 5, 5, 7, 8, 5,120,120,120,120,120,120,
-113,113,113,113,113,113,113,113,113,113,113,113,113,113,552,552,
+113,113,113,113,113,113,113,113,113,113,113,113,113,113,557,557,
5, 10, 10, 16, 16, 7, 8, 7, 8, 7, 8, 7, 8, 7, 8, 7,
- 8, 7, 8, 7, 8,556,556, 7, 8, 5, 5, 5, 5, 16, 16, 16,
+ 8, 7, 8, 7, 8,561,561, 7, 8, 5, 5, 5, 5, 16, 16, 16,
5, 5, 5,120, 5, 5, 5, 5, 10, 7, 8, 7, 8, 7, 8, 5,
5, 5, 9, 10, 9, 9, 9,120, 5, 6, 5, 5,120,120,120,120,
-224,224,224,224,224,120,224,224,224,224,224,224,224,224,224,224,
+225,225,225,225,225,120,225,225,225,225,225,225,225,225,225,225,
-/* block 135 */
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,120,120, 24,
+/* block 134 */
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,120,120, 24,
-/* block 136 */
+/* block 135 */
120, 5, 5, 5, 6, 5, 5, 5, 7, 8, 5, 9, 5, 10, 5, 5,
11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 5, 5, 9, 9, 9, 5,
5, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 7, 5, 8, 15, 16,
15, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 7, 9, 8, 9, 7,
- 8,555,560,561,555,555,578,578,578,578,578,578,578,578,578,578,
-569,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+ 8,560,565,566,560,560,583,583,583,583,583,583,583,583,583,583,
+574,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,
-/* block 137 */
-578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
-578,578,578,578,578,578,578,578,578,578,578,578,578,578,678,678,
-581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,
-581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,120,
-120,120,581,581,581,581,581,581,120,120,581,581,581,581,581,581,
-120,120,581,581,581,581,581,581,120,120,581,581,581,120,120,120,
+/* block 136 */
+583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,
+583,583,583,583,583,583,583,583,583,583,583,583,583,583,684,684,
+586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
+586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,120,
+120,120,586,586,586,586,586,586,120,120,586,586,586,586,586,586,
+120,120,586,586,586,586,586,586,120,120,586,586,586,120,120,120,
6, 6, 9, 15, 20, 6, 6,120, 20, 9, 9, 9, 9, 20, 20,120,
-511,511,511,511,511,511,511,511,511, 24, 24, 24, 20, 20,120,120,
+516,516,516,516,516,516,516,516,516, 24, 24, 24, 20, 20,120,120,
-/* block 138 */
-679,679,679,679,679,679,679,679,679,679,679,679,120,679,679,679,
-679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,
-679,679,679,679,679,679,679,120,679,679,679,679,679,679,679,679,
-679,679,679,679,679,679,679,679,679,679,679,120,679,679,120,679,
-679,679,679,679,679,679,679,679,679,679,679,679,679,679,120,120,
-679,679,679,679,679,679,679,679,679,679,679,679,679,679,120,120,
+/* block 137 */
+685,685,685,685,685,685,685,685,685,685,685,685,120,685,685,685,
+685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,
+685,685,685,685,685,685,685,120,685,685,685,685,685,685,685,685,
+685,685,685,685,685,685,685,685,685,685,685,120,685,685,120,685,
+685,685,685,685,685,685,685,685,685,685,685,685,685,685,120,120,
+685,685,685,685,685,685,685,685,685,685,685,685,685,685,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+/* block 138 */
+685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,
+685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,
+685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,
+685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,
+685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,
+685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,
+685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,
+685,685,685,685,685,685,685,685,685,685,685,120,120,120,120,120,
+
/* block 139 */
-679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,
-679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,
-679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,
-679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,
-679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,
-679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,
-679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,
-679,679,679,679,679,679,679,679,679,679,679,120,120,120,120,120,
+686,686,687,120,120,120,120,688,688,688,688,688,688,688,688,688,
+688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,
+688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,
+688,688,688,688,120,120,120,689,689,689,689,689,689,689,689,689,
+690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,
+690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,
+690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,
+690,690,690,690,690,691,691,691,691,692,692,692,692,692,692,692,
/* block 140 */
-680,680,680,120,120,120,120,681,681,681,681,681,681,681,681,681,
-681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,
-681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,
-681,681,681,681,120,120,120,682,682,682,682,682,682,682,682,682,
-683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,
-683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,
-683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,
-683,683,683,683,683,684,684,684,684,685,685,685,685,685,685,685,
-
-/* block 141 */
-685,685,685,685,685,685,685,685,685,685,684,684,685,685,685,120,
+692,692,692,692,692,692,692,692,692,692,691,691,692,692,692,120,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,120,120,120,
-685,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+692,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,113,120,120,
-/* block 142 */
+/* block 141 */
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
@@ -3148,499 +3164,519 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 143 */
-686,686,686,686,686,686,686,686,686,686,686,686,686,686,686,686,
-686,686,686,686,686,686,686,686,686,686,686,686,686,120,120,120,
-687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,
-687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,
-687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,
-687,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-688,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,
-689,689,689,689,689,689,689,689,689,689,689,689,120,120,120,120,
-
-/* block 144 */
-690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,
-690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,
-691,691,691,691,120,120,120,120,120,120,120,120,120,690,690,690,
-692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,
-692,693,692,692,692,692,692,692,692,692,693,120,120,120,120,120,
+/* block 142 */
+693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,
+693,693,693,693,693,693,693,693,693,693,693,693,693,120,120,120,
694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,
694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,
-694,694,694,694,694,694,695,695,695,695,695,120,120,120,120,120,
-
-/* block 145 */
-696,696,696,696,696,696,696,696,696,696,696,696,696,696,696,696,
-696,696,696,696,696,696,696,696,696,696,696,696,696,696,120,697,
-698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,
-698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,
-698,698,698,698,120,120,120,120,698,698,698,698,698,698,698,698,
-699,700,700,700,700,700,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,
+694,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+695,696,696,696,696,696,696,696,696,696,696,696,696,696,696,696,
+696,696,696,696,696,696,696,696,696,696,696,696,120,120,120,120,
-/* block 146 */
+/* block 143 */
+697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,
+697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,
+698,698,698,698,120,120,120,120,120,120,120,120,120,697,697,697,
+699,699,699,699,699,699,699,699,699,699,699,699,699,699,699,699,
+699,700,699,699,699,699,699,699,699,699,700,120,120,120,120,120,
701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,
701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,
-701,701,701,701,701,701,701,701,702,702,702,702,702,702,702,702,
-702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,
-702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,
-703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,
-703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,
-703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,
+701,701,701,701,701,701,702,702,702,702,702,120,120,120,120,120,
-/* block 147 */
-704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,
-704,704,704,704,704,704,704,704,704,704,704,704,704,704,120,120,
-705,705,705,705,705,705,705,705,705,705,120,120,120,120,120,120,
-706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,
-706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,
-706,706,706,706,120,120,120,120,707,707,707,707,707,707,707,707,
-707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,
-707,707,707,707,707,707,707,707,707,707,707,707,120,120,120,120,
+/* block 144 */
+703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,
+703,703,703,703,703,703,703,703,703,703,703,703,703,703,120,704,
+705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,
+705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,
+705,705,705,705,120,120,120,120,705,705,705,705,705,705,705,705,
+706,707,707,707,707,707,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 148 */
+/* block 145 */
708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,
708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,
-708,708,708,708,708,708,708,708,120,120,120,120,120,120,120,120,
+708,708,708,708,708,708,708,708,709,709,709,709,709,709,709,709,
709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,
709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,
-709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,
-709,709,709,709,120,120,120,120,120,120,120,120,120,120,120,710,
+710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,
+710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,
+710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,
+
+/* block 146 */
+711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,
+711,711,711,711,711,711,711,711,711,711,711,711,711,711,120,120,
+712,712,712,712,712,712,712,712,712,712,120,120,120,120,120,120,
+713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,
+713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,
+713,713,713,713,120,120,120,120,714,714,714,714,714,714,714,714,
+714,714,714,714,714,714,714,714,714,714,714,714,714,714,714,714,
+714,714,714,714,714,714,714,714,714,714,714,714,120,120,120,120,
+
+/* block 147 */
+715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,
+715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,
+715,715,715,715,715,715,715,715,120,120,120,120,120,120,120,120,
+716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,
+716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,
+716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,
+716,716,716,716,120,120,120,120,120,120,120,120,120,120,120,717,
+718,718,718,718,718,718,718,718,718,718,718,120,718,718,718,718,
+
+/* block 148 */
+718,718,718,718,718,718,718,718,718,718,718,120,718,718,718,718,
+718,718,718,120,718,718,120,719,719,719,719,719,719,719,719,719,
+719,719,120,719,719,719,719,719,719,719,719,719,719,719,719,719,
+719,719,120,719,719,719,719,719,719,719,120,719,719,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 149 */
-711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,
-711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,
-711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,
-711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,
-711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,
-711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,
-711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,
-711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,
+720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,
+720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,
+720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,
+720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,
+720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,
+720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,
+720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,
+720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,
/* block 150 */
-711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,
-711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,
-711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,
-711,711,711,711,711,711,711,120,120,120,120,120,120,120,120,120,
-711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,
-711,711,711,711,711,711,120,120,120,120,120,120,120,120,120,120,
-711,711,711,711,711,711,711,711,120,120,120,120,120,120,120,120,
+720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,
+720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,
+720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,
+720,720,720,720,720,720,720,120,120,120,120,120,120,120,120,120,
+720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,
+720,720,720,720,720,720,120,120,120,120,120,120,120,120,120,120,
+720,720,720,720,720,720,720,720,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 151 */
-712,712,712,712,712,712,120,120,712,120,712,712,712,712,712,712,
-712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,
-712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,
-712,712,712,712,712,712,120,712,712,120,120,120,712,120,120,712,
-713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,
-713,713,713,713,713,713,120,714,715,715,715,715,715,715,715,715,
-716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,
-716,716,716,716,716,716,716,717,717,718,718,718,718,718,718,718,
-
-/* block 152 */
-719,719,719,719,719,719,719,719,719,719,719,719,719,719,719,719,
-719,719,719,719,719,719,719,719,719,719,719,719,719,719,719,120,
-120,120,120,120,120,120,120,720,720,720,720,720,720,720,720,720,
+110,110,110,110,110,110,120,110,110,110,110,110,110,110,110,110,
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,
+110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,
+110,120,110,110,110,110,110,110,110,110,110,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+
+/* block 152 */
+721,721,721,721,721,721,120,120,721,120,721,721,721,721,721,721,
+721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,
721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,
-721,721,721,120,721,721,120,120,120,120,120,722,722,722,722,722,
+721,721,721,721,721,721,120,721,721,120,120,120,721,120,120,721,
+722,722,722,722,722,722,722,722,722,722,722,722,722,722,722,722,
+722,722,722,722,722,722,120,723,724,724,724,724,724,724,724,724,
+725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,
+725,725,725,725,725,725,725,726,726,727,727,727,727,727,727,727,
/* block 153 */
-723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,
-723,723,723,723,723,723,724,724,724,724,724,724,120,120,120,725,
-726,726,726,726,726,726,726,726,726,726,726,726,726,726,726,726,
-726,726,726,726,726,726,726,726,726,726,120,120,120,120,120,727,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,
+728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,120,
+120,120,120,120,120,120,120,729,729,729,729,729,729,729,729,729,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,
+730,730,730,120,730,730,120,120,120,120,120,731,731,731,731,731,
/* block 154 */
-728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,
-728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,
-729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,
-729,729,729,729,729,729,729,729,120,120,120,120,730,730,729,729,
-730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,
-120,120,730,730,730,730,730,730,730,730,730,730,730,730,730,730,
-730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,
-730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,
+732,732,732,732,732,732,732,732,732,732,732,732,732,732,732,732,
+732,732,732,732,732,732,733,733,733,733,733,733,120,120,120,734,
+735,735,735,735,735,735,735,735,735,735,735,735,735,735,735,735,
+735,735,735,735,735,735,735,735,735,735,120,120,120,120,120,736,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 155 */
-731,732,732,732,120,732,732,120,120,120,120,120,732,732,732,732,
-731,731,731,731,120,731,731,731,120,731,731,731,731,731,731,731,
-731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,
-731,731,731,731,731,731,120,120,732,732,732,120,120,120,120,732,
-733,733,733,733,733,733,733,733,733,120,120,120,120,120,120,120,
-734,734,734,734,734,734,734,734,734,120,120,120,120,120,120,120,
-735,735,735,735,735,735,735,735,735,735,735,735,735,735,735,735,
-735,735,735,735,735,735,735,735,735,735,735,735,735,736,736,737,
+737,737,737,737,737,737,737,737,737,737,737,737,737,737,737,737,
+737,737,737,737,737,737,737,737,737,737,737,737,737,737,737,737,
+738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,
+738,738,738,738,738,738,738,738,120,120,120,120,739,739,738,738,
+739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,
+120,120,739,739,739,739,739,739,739,739,739,739,739,739,739,739,
+739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,
+739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,
/* block 156 */
-738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,
-738,738,738,738,738,738,738,738,738,738,738,738,738,739,739,739,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-740,740,740,740,740,740,740,740,741,740,740,740,740,740,740,740,
+740,741,741,741,120,741,741,120,120,120,120,120,741,741,741,741,
+740,740,740,740,120,740,740,740,120,740,740,740,740,740,740,740,
740,740,740,740,740,740,740,740,740,740,740,740,740,740,740,740,
-740,740,740,740,740,742,742,120,120,120,120,743,743,743,743,743,
-744,744,744,744,744,744,744,120,120,120,120,120,120,120,120,120,
+740,740,740,740,740,740,120,120,741,741,741,120,120,120,120,741,
+742,742,742,742,742,742,742,742,742,120,120,120,120,120,120,120,
+743,743,743,743,743,743,743,743,743,120,120,120,120,120,120,120,
+744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,
+744,744,744,744,744,744,744,744,744,744,744,744,744,745,745,746,
/* block 157 */
-745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,
-745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,
-745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,
-745,745,745,745,745,745,120,120,120,746,746,746,746,746,746,746,
747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,
-747,747,747,747,747,747,120,120,748,748,748,748,748,748,748,748,
+747,747,747,747,747,747,747,747,747,747,747,747,747,748,748,748,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+749,749,749,749,749,749,749,749,750,749,749,749,749,749,749,749,
749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,
-749,749,749,120,120,120,120,120,750,750,750,750,750,750,750,750,
+749,749,749,749,749,751,751,120,120,120,120,752,752,752,752,752,
+753,753,754,753,753,753,753,120,120,120,120,120,120,120,120,120,
/* block 158 */
-751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,
-751,751,120,120,120,120,120,120,120,752,752,752,752,120,120,120,
-120,120,120,120,120,120,120,120,120,753,753,753,753,753,753,753,
+755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,
+755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,
+755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,
+755,755,755,755,755,755,120,120,120,756,756,756,756,756,756,756,
+757,757,757,757,757,757,757,757,757,757,757,757,757,757,757,757,
+757,757,757,757,757,757,120,120,758,758,758,758,758,758,758,758,
+759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,
+759,759,759,120,120,120,120,120,760,760,760,760,760,760,760,760,
+
+/* block 159 */
+761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,
+761,761,120,120,120,120,120,120,120,762,762,762,762,120,120,120,
+120,120,120,120,120,120,120,120,120,763,763,763,763,763,763,763,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 159 */
-754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,
-754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,
-754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,
-754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,
-754,754,754,754,754,754,754,754,754,120,120,120,120,120,120,120,
+/* block 160 */
+764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,
+764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,
+764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,
+764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,
+764,764,764,764,764,764,764,764,764,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 160 */
-755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,
-755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,
-755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,
-755,755,755,120,120,120,120,120,120,120,120,120,120,120,120,120,
-756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,
-756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,
-756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,
-756,756,756,120,120,120,120,120,120,120,757,757,757,757,757,757,
-
/* block 161 */
-758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,
-758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,
-758,758,758,758,759,759,759,759,120,120,120,120,120,120,120,120,
-760,760,760,760,760,760,760,760,760,760,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,
+765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,
+765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,
+765,765,765,120,120,120,120,120,120,120,120,120,120,120,120,120,
+766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,
+766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,
+766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,
+766,766,766,120,120,120,120,120,120,120,767,767,767,767,767,767,
/* block 162 */
+768,768,768,768,768,768,768,768,768,768,768,768,768,768,768,768,
+768,768,768,768,768,768,768,768,768,768,768,768,768,768,768,768,
+768,768,768,768,769,769,769,769,120,120,120,120,120,120,120,120,
+770,770,770,770,770,770,770,770,770,770,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,
-761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,120,
/* block 163 */
-762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,
-762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,
-762,762,762,762,762,762,762,762,762,762,120,763,763,764,120,120,
-762,762,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,
+771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,120,
/* block 164 */
-765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,
-765,765,765,765,765,765,765,765,765,765,765,765,765,766,766,766,
-766,766,766,766,766,766,766,765,120,120,120,120,120,120,120,120,
-767,767,767,767,767,767,767,767,767,767,767,767,767,767,767,767,
-767,767,767,767,767,767,768,768,768,768,768,768,768,768,768,768,
-768,769,769,769,769,770,770,770,770,770,120,120,120,120,120,120,
+772,772,772,772,772,772,772,772,772,772,772,772,772,772,772,772,
+772,772,772,772,772,772,772,772,772,772,772,772,772,772,772,772,
+772,772,772,772,772,772,772,772,772,772,120,773,773,774,120,120,
+772,772,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 165 */
+775,775,775,775,775,775,775,775,775,775,775,775,775,775,775,775,
+775,775,775,775,775,775,775,775,775,775,775,775,775,776,776,776,
+776,776,776,776,776,776,776,775,120,120,120,120,120,120,120,120,
+777,777,777,777,777,777,777,777,777,777,777,777,777,777,777,777,
+777,777,777,777,777,777,778,778,778,778,778,778,778,778,778,778,
+778,779,779,779,779,780,780,780,780,780,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
+
+/* block 166 */
+781,781,782,782,782,782,783,783,783,783,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,
-771,771,771,771,771,772,772,772,772,772,772,772,120,120,120,120,
+784,784,784,784,784,784,784,784,784,784,784,784,784,784,784,784,
+784,784,784,784,784,785,785,785,785,785,785,785,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,
-773,773,773,773,773,773,773,120,120,120,120,120,120,120,120,120,
-
-/* block 166 */
-774,775,774,776,776,776,776,776,776,776,776,776,776,776,776,776,
-776,776,776,776,776,776,776,776,776,776,776,776,776,776,776,776,
-776,776,776,776,776,776,776,776,776,776,776,776,776,776,776,776,
-776,776,776,776,776,776,776,776,775,775,775,775,775,775,775,775,
-775,775,775,775,775,775,775,777,777,777,777,777,777,777,120,120,
-120,120,778,778,778,778,778,778,778,778,778,778,778,778,778,778,
-778,778,778,778,778,778,779,779,779,779,779,779,779,779,779,779,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,775,
+786,786,786,786,786,786,786,786,786,786,786,786,786,786,786,786,
+786,786,786,786,786,786,786,120,120,120,120,120,120,120,120,120,
/* block 167 */
-780,780,781,782,782,782,782,782,782,782,782,782,782,782,782,782,
-782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,
-782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,
-781,781,781,780,780,780,780,781,781,780,780,783,783,784,783,783,
-783,783,120,120,120,120,120,120,120,120,120,120,120,784,120,120,
-785,785,785,785,785,785,785,785,785,785,785,785,785,785,785,785,
-785,785,785,785,785,785,785,785,785,120,120,120,120,120,120,120,
-786,786,786,786,786,786,786,786,786,786,120,120,120,120,120,120,
+787,788,787,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
+789,789,789,789,789,789,789,789,788,788,788,788,788,788,788,788,
+788,788,788,788,788,788,788,790,790,790,790,790,790,790,120,120,
+120,120,791,791,791,791,791,791,791,791,791,791,791,791,791,791,
+791,791,791,791,791,791,792,792,792,792,792,792,792,792,792,792,
+788,789,789,788,788,789,120,120,120,120,120,120,120,120,120,788,
/* block 168 */
-787,787,787,788,788,788,788,788,788,788,788,788,788,788,788,788,
-788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,
-788,788,788,788,788,788,788,787,787,787,787,787,789,787,787,787,
-787,787,787,787,787,120,790,790,790,790,790,790,790,790,790,790,
-791,791,791,791,788,789,789,788,120,120,120,120,120,120,120,120,
-792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,
-792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,
-792,792,792,793,794,794,792,120,120,120,120,120,120,120,120,120,
+793,793,794,795,795,795,795,795,795,795,795,795,795,795,795,795,
+795,795,795,795,795,795,795,795,795,795,795,795,795,795,795,795,
+795,795,795,795,795,795,795,795,795,795,795,795,795,795,795,795,
+794,794,794,793,793,793,793,794,794,793,793,796,796,797,796,796,
+796,796,793,120,120,120,120,120,120,120,120,120,120,797,120,120,
+798,798,798,798,798,798,798,798,798,798,798,798,798,798,798,798,
+798,798,798,798,798,798,798,798,798,120,120,120,120,120,120,120,
+799,799,799,799,799,799,799,799,799,799,120,120,120,120,120,120,
/* block 169 */
-795,795,796,797,797,797,797,797,797,797,797,797,797,797,797,797,
-797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,
-797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,
-797,797,797,796,796,796,795,795,795,795,795,795,795,795,795,796,
-796,797,798,798,797,799,799,799,799,795,795,795,795,799,796,795,
-800,800,800,800,800,800,800,800,800,800,797,799,797,799,799,799,
-120,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,
-801,801,801,801,801,120,120,120,120,120,120,120,120,120,120,120,
+800,800,800,801,801,801,801,801,801,801,801,801,801,801,801,801,
+801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,
+801,801,801,801,801,801,801,800,800,800,800,800,802,800,800,800,
+800,800,800,800,800,120,803,803,803,803,803,803,803,803,803,803,
+804,804,804,804,801,802,802,801,120,120,120,120,120,120,120,120,
+805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,
+805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,
+805,805,805,806,807,807,805,120,120,120,120,120,120,120,120,120,
/* block 170 */
-802,802,802,802,802,802,802,802,802,802,802,802,802,802,802,802,
-802,802,120,802,802,802,802,802,802,802,802,802,802,802,802,802,
-802,802,802,802,802,802,802,802,802,802,802,802,803,803,803,804,
-804,804,803,803,804,803,804,804,805,805,805,805,805,805,804,120,
+808,808,809,810,810,810,810,810,810,810,810,810,810,810,810,810,
+810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,
+810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,
+810,810,810,809,809,809,808,808,808,808,808,808,808,808,808,809,
+809,810,811,811,810,812,812,812,812,808,808,808,808,812,809,808,
+813,813,813,813,813,813,813,813,813,813,810,812,810,812,812,812,
+120,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,
+814,814,814,814,814,120,120,120,120,120,120,120,120,120,120,120,
+
+/* block 171 */
+815,815,815,815,815,815,815,815,815,815,815,815,815,815,815,815,
+815,815,120,815,815,815,815,815,815,815,815,815,815,815,815,815,
+815,815,815,815,815,815,815,815,815,815,815,815,816,816,816,817,
+817,817,816,816,817,816,817,817,818,818,818,818,818,818,817,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 171 */
-806,806,806,806,806,806,806,120,806,120,806,806,806,806,120,806,
-806,806,806,806,806,806,806,806,806,806,806,806,806,806,120,806,
-806,806,806,806,806,806,806,806,806,807,120,120,120,120,120,120,
-808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,
-808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,
-808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,809,
-810,810,810,809,809,809,809,809,809,809,809,120,120,120,120,120,
-811,811,811,811,811,811,811,811,811,811,120,120,120,120,120,120,
-
/* block 172 */
-812,813,814,815,120,816,816,816,816,816,816,816,816,120,120,816,
-816,120,120,816,816,816,816,816,816,816,816,816,816,816,816,816,
-816,816,816,816,816,816,816,816,816,120,816,816,816,816,816,816,
-816,120,816,816,120,816,816,816,816,816,120,817,813,816,818,814,
-812,814,814,814,814,120,120,814,814,120,120,814,814,814,120,120,
-816,120,120,120,120,120,120,818,120,120,120,120,120,816,816,816,
-816,816,814,814,120,120,812,812,812,812,812,812,812,120,120,120,
-812,812,812,812,812,120,120,120,120,120,120,120,120,120,120,120,
+819,819,819,819,819,819,819,120,819,120,819,819,819,819,120,819,
+819,819,819,819,819,819,819,819,819,819,819,819,819,819,120,819,
+819,819,819,819,819,819,819,819,819,820,120,120,120,120,120,120,
+821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,
+821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,
+821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,822,
+823,823,823,822,822,822,822,822,822,822,822,120,120,120,120,120,
+824,824,824,824,824,824,824,824,824,824,120,120,120,120,120,120,
/* block 173 */
-819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,
-819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,
-819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,
-819,819,819,819,819,820,820,820,821,821,821,821,821,821,821,821,
-820,820,821,821,821,820,821,819,819,819,819,822,822,822,822,822,
-823,823,823,823,823,823,823,823,823,823,822,822,120,822,821,819,
-819,819,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+825,826,827,828,120,829,829,829,829,829,829,829,829,120,120,829,
+829,120,120,829,829,829,829,829,829,829,829,829,829,829,829,829,
+829,829,829,829,829,829,829,829,829,120,829,829,829,829,829,829,
+829,120,829,829,120,829,829,829,829,829,120,830,826,829,831,827,
+825,827,827,827,827,120,120,827,827,120,120,827,827,827,120,120,
+829,120,120,120,120,120,120,831,120,120,120,120,120,829,829,829,
+829,829,827,827,120,120,825,825,825,825,825,825,825,120,120,120,
+825,825,825,825,825,120,120,120,120,120,120,120,120,120,120,120,
/* block 174 */
-824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,
-824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,
-824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,
-825,826,826,827,827,827,827,827,827,826,827,826,826,825,826,827,
-827,826,827,827,824,824,828,824,120,120,120,120,120,120,120,120,
-829,829,829,829,829,829,829,829,829,829,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,
+832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,
+832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,
+832,832,832,832,832,833,833,833,834,834,834,834,834,834,834,834,
+833,833,834,834,834,833,834,832,832,832,832,835,835,835,835,835,
+836,836,836,836,836,836,836,836,836,836,835,835,120,835,834,832,
+832,832,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 175 */
-830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,
-830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,
-830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,831,
-832,832,833,833,833,833,120,120,832,832,832,832,833,833,832,833,
-833,834,834,834,834,834,834,834,834,834,834,834,834,834,834,834,
-834,834,834,834,834,834,834,834,830,830,830,830,833,833,120,120,
+837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,
+837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,
+837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,
+838,839,839,840,840,840,840,840,840,839,840,839,839,838,839,840,
+840,839,840,840,837,837,841,837,120,120,120,120,120,120,120,120,
+842,842,842,842,842,842,842,842,842,842,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 176 */
-835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,
-835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,
-835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,
-836,836,836,837,837,837,837,837,837,837,837,836,836,837,836,837,
-837,838,838,838,835,120,120,120,120,120,120,120,120,120,120,120,
-839,839,839,839,839,839,839,839,839,839,120,120,120,120,120,120,
-394,394,394,394,394,394,394,394,394,394,394,394,394,120,120,120,
+843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,
+843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,
+843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,844,
+845,845,846,846,846,846,120,120,845,845,845,845,846,846,845,846,
+846,847,847,847,847,847,847,847,847,847,847,847,847,847,847,847,
+847,847,847,847,847,847,847,847,843,843,843,843,846,846,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 177 */
-840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,
-840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,
-840,840,840,840,840,840,840,840,840,840,840,841,842,841,842,842,
-841,841,841,841,841,841,842,841,840,120,120,120,120,120,120,120,
-843,843,843,843,843,843,843,843,843,843,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,
+848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,
+848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,
+849,849,849,850,850,850,850,850,850,850,850,849,849,850,849,850,
+850,851,851,851,848,120,120,120,120,120,120,120,120,120,120,120,
+852,852,852,852,852,852,852,852,852,852,120,120,120,120,120,120,
+398,398,398,398,398,398,398,398,398,398,398,398,398,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 178 */
-844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,
-844,844,844,844,844,844,844,844,844,844,844,120,120,845,845,845,
-846,846,845,845,845,845,846,845,845,845,845,845,120,120,120,120,
-847,847,847,847,847,847,847,847,847,847,848,848,849,849,849,850,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,
+853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,
+853,853,853,853,853,853,853,853,853,853,853,854,855,854,855,855,
+854,854,854,854,854,854,855,854,853,856,120,120,120,120,120,120,
+857,857,857,857,857,857,857,857,857,857,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 179 */
-851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,
-851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,
-851,851,851,851,851,851,851,851,851,851,851,851,852,852,852,853,
-853,853,853,853,853,853,853,853,852,853,853,854,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,
+858,858,858,858,858,858,858,858,858,858,858,120,120,859,859,859,
+860,860,859,859,859,859,861,859,859,859,859,859,120,120,120,120,
+862,862,862,862,862,862,862,862,862,862,863,863,864,864,864,865,
+858,858,858,858,858,858,858,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 180 */
+866,866,866,866,866,866,866,866,866,866,866,866,866,866,866,866,
+866,866,866,866,866,866,866,866,866,866,866,866,866,866,866,866,
+866,866,866,866,866,866,866,866,866,866,866,866,867,867,867,868,
+868,868,868,868,868,868,868,868,867,868,868,869,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-855,855,855,855,855,855,855,855,855,855,855,855,855,855,855,855,
-855,855,855,855,855,855,855,855,855,855,855,855,855,855,855,855,
-856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,
-856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,
-857,857,857,857,857,857,857,857,857,857,858,858,858,858,858,858,
-858,858,858,120,120,120,120,120,120,120,120,120,120,120,120,859,
/* block 181 */
-860,860,860,860,860,860,860,120,120,860,120,120,860,860,860,860,
-860,860,860,860,120,860,860,120,860,860,860,860,860,860,860,860,
-860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,
-861,862,862,862,862,862,120,862,862,120,120,863,863,862,863,864,
-862,864,862,863,865,865,865,120,120,120,120,120,120,120,120,120,
-866,866,866,866,866,866,866,866,866,866,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,
+870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,870,
+871,871,871,871,871,871,871,871,871,871,871,871,871,871,871,871,
+871,871,871,871,871,871,871,871,871,871,871,871,871,871,871,871,
+872,872,872,872,872,872,872,872,872,872,873,873,873,873,873,873,
+873,873,873,120,120,120,120,120,120,120,120,120,120,120,120,874,
/* block 182 */
+875,875,875,875,875,875,875,120,120,875,120,120,875,875,875,875,
+875,875,875,875,120,875,875,120,875,875,875,875,875,875,875,875,
+875,875,875,875,875,875,875,875,875,875,875,875,875,875,875,875,
+876,877,877,877,877,877,120,877,877,120,120,878,878,877,878,879,
+877,879,877,878,880,880,880,120,120,120,120,120,120,120,120,120,
+881,881,881,881,881,881,881,881,881,881,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-867,867,867,867,867,867,867,867,120,120,867,867,867,867,867,867,
-867,867,867,867,867,867,867,867,867,867,867,867,867,867,867,867,
-867,867,867,867,867,867,867,867,867,867,867,867,867,867,867,867,
-867,868,868,868,869,869,869,869,120,120,869,869,868,868,868,868,
-869,867,870,867,868,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 183 */
-871,872,872,872,872,872,872,872,872,872,872,871,871,871,871,871,
-871,871,871,871,871,871,871,871,871,871,871,871,871,871,871,871,
-871,871,871,871,871,871,871,871,871,871,871,871,871,871,871,871,
-871,871,871,872,872,872,872,872,872,873,874,872,872,872,872,875,
-875,875,875,875,875,875,875,872,120,120,120,120,120,120,120,120,
-876,877,877,877,877,877,877,878,878,877,877,877,876,876,876,876,
-876,876,876,876,876,876,876,876,876,876,876,876,876,876,876,876,
-876,876,876,876,876,876,876,876,876,876,876,876,876,876,876,876,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+882,882,882,882,882,882,882,882,120,120,882,882,882,882,882,882,
+882,882,882,882,882,882,882,882,882,882,882,882,882,882,882,882,
+882,882,882,882,882,882,882,882,882,882,882,882,882,882,882,882,
+882,883,883,883,884,884,884,884,120,120,884,884,883,883,883,883,
+884,882,885,882,883,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 184 */
-876,876,876,876,879,879,879,879,879,879,877,877,877,877,877,877,
-877,877,877,877,877,877,877,878,877,877,880,880,880,876,880,880,
-880,880,880,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-881,881,881,881,881,881,881,881,881,881,881,881,881,881,881,881,
-881,881,881,881,881,881,881,881,881,881,881,881,881,881,881,881,
-881,881,881,881,881,881,881,881,881,881,881,881,881,881,881,881,
-881,881,881,881,881,881,881,881,881,120,120,120,120,120,120,120,
+886,887,887,887,887,887,887,887,887,887,887,886,886,886,886,886,
+886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,
+886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,886,
+886,886,886,887,887,887,887,887,887,888,889,887,887,887,887,890,
+890,890,890,890,890,890,890,887,120,120,120,120,120,120,120,120,
+891,892,892,892,892,892,892,893,893,892,892,892,891,891,891,891,
+891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,
+891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,891,
/* block 185 */
-882,882,882,882,882,882,882,882,882,120,882,882,882,882,882,882,
-882,882,882,882,882,882,882,882,882,882,882,882,882,882,882,882,
-882,882,882,882,882,882,882,882,882,882,882,882,882,882,882,883,
-884,884,884,884,884,884,884,120,884,884,884,884,884,884,883,884,
-882,885,885,885,885,885,120,120,120,120,120,120,120,120,120,120,
-886,886,886,886,886,886,886,886,886,886,887,887,887,887,887,887,
-887,887,887,887,887,887,887,887,887,887,887,887,887,120,120,120,
-888,888,889,889,889,889,889,889,889,889,889,889,889,889,889,889,
+891,891,891,891,894,894,894,894,894,894,892,892,892,892,892,892,
+892,892,892,892,892,892,892,893,892,892,895,895,895,891,895,895,
+895,895,895,120,120,120,120,120,120,120,120,120,120,120,120,120,
+370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
+896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,
+896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,
+896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,
+896,896,896,896,896,896,896,896,896,120,120,120,120,120,120,120,
/* block 186 */
-889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,889,
-120,120,890,890,890,890,890,890,890,890,890,890,890,890,890,890,
-890,890,890,890,890,890,890,890,120,891,890,890,890,890,890,890,
-890,891,890,890,891,890,890,120,120,120,120,120,120,120,120,120,
+897,897,897,897,897,897,897,897,897,120,897,897,897,897,897,897,
+897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,
+897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,898,
+899,899,899,899,899,899,899,120,899,899,899,899,899,899,898,899,
+897,900,900,900,900,900,120,120,120,120,120,120,120,120,120,120,
+901,901,901,901,901,901,901,901,901,901,902,902,902,902,902,902,
+902,902,902,902,902,902,902,902,902,902,902,902,902,120,120,120,
+903,903,904,904,904,904,904,904,904,904,904,904,904,904,904,904,
+
+/* block 187 */
+904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,
+120,120,905,905,905,905,905,905,905,905,905,905,905,905,905,905,
+905,905,905,905,905,905,905,905,120,906,905,905,905,905,905,905,
+905,906,905,905,906,905,905,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 187 */
-892,892,892,892,892,892,892,120,892,892,120,892,892,892,892,892,
-892,892,892,892,892,892,892,892,892,892,892,892,892,892,892,892,
-892,892,892,892,892,892,892,892,892,892,892,892,892,892,892,892,
-892,893,893,893,893,893,893,120,120,120,893,120,893,893,120,893,
-893,893,893,893,893,893,894,893,120,120,120,120,120,120,120,120,
-895,895,895,895,895,895,895,895,895,895,120,120,120,120,120,120,
-896,896,896,896,896,896,120,896,896,120,896,896,896,896,896,896,
-896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,896,
-
/* block 188 */
-896,896,896,896,896,896,896,896,896,896,897,897,897,897,897,120,
-898,898,120,897,897,898,897,898,896,120,120,120,120,120,120,120,
-899,899,899,899,899,899,899,899,899,899,120,120,120,120,120,120,
+907,907,907,907,907,907,907,120,907,907,120,907,907,907,907,907,
+907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,
+907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,
+907,908,908,908,908,908,908,120,120,120,908,120,908,908,120,908,
+908,908,908,908,908,908,909,908,120,120,120,120,120,120,120,120,
+910,910,910,910,910,910,910,910,910,910,120,120,120,120,120,120,
+911,911,911,911,911,911,120,911,911,120,911,911,911,911,911,911,
+911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
+
+/* block 189 */
+911,911,911,911,911,911,911,911,911,911,912,912,912,912,912,120,
+913,913,120,912,912,913,912,913,911,120,120,120,120,120,120,120,
+914,914,914,914,914,914,914,914,914,914,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 189 */
+/* block 190 */
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,900,
-900,900,900,901,901,902,902,903,903,120,120,120,120,120,120,120,
+915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,
+915,915,915,916,916,917,917,918,918,120,120,120,120,120,120,120,
-/* block 190 */
+/* block 191 */
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-590,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,904,
-293,293,904,293,904,295,295,295,295,295,295,295,295,296,296,296,
-296,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,
-295,295,120,120,120,120,120,120,120,120,120,120,120,120,120,905,
-
-/* block 191 */
-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,
-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,
-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,
-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,
-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,
-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,
-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,
-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,
+595,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,919,
+295,295,919,295,919,297,297,297,297,297,297,297,297,298,298,298,
+298,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
+297,297,120,120,120,120,120,120,120,120,120,120,120,120,120,920,
/* block 192 */
-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,
-906,906,906,906,906,906,906,906,906,906,120,120,120,120,120,120,
+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,
+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,
+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,
+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,
+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,
+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,
+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,
+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,
+
+/* block 193 */
+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,
+921,921,921,921,921,921,921,921,921,921,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
@@ -3648,108 +3684,118 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 193 */
-907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,
-907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,
-907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,
-907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,
-907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,
-907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,
-907,907,907,907,907,907,907,907,907,907,907,907,907,907,907,120,
-908,908,908,908,908,120,120,120,120,120,120,120,120,120,120,120,
-
/* block 194 */
-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,
-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,
-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,
-906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,906,
-906,906,906,906,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,
+922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,
+922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,
+922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,
+922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,
+922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,
+922,922,922,922,922,922,922,922,922,922,922,922,922,922,922,120,
+923,923,923,923,923,120,120,120,120,120,120,120,120,120,120,120,
/* block 195 */
-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,
-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,
-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,
-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,
-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,
-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,
-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,
-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,
-
-/* block 196 */
-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,
-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,
-909,909,909,909,909,909,909,909,909,909,909,909,909,909,909,120,
-910,910,910,910,910,910,910,910,910,120,120,120,120,120,120,120,
+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,
+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,
+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,
+921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,921,
+921,921,921,921,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+
+/* block 196 */
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,
+924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,
+924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,
+924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,
+924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,
+924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,924,
+924,925,925,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 197 */
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
+926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,
+926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,
+926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,
+926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,
+926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,
+926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,
+926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,
+926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,
/* block 198 */
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
-911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,911,
-911,911,911,911,911,911,911,120,120,120,120,120,120,120,120,120,
+926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,
+926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,
+926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,120,
+927,927,927,927,927,927,927,927,927,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 199 */
-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,
-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,
-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,
-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,
-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,
-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,
-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,
-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,
+928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,
+928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,
+928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,
+928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,
+928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,
+928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,
+928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,
+928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,
/* block 200 */
-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,
-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,
-601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,
-601,601,601,601,601,601,601,601,601,120,120,120,120,120,120,120,
-912,912,912,912,912,912,912,912,912,912,912,912,912,912,912,912,
-912,912,912,912,912,912,912,912,912,912,912,912,912,912,912,120,
-913,913,913,913,913,913,913,913,913,913,120,120,120,120,914,914,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-
-/* block 201 */
+928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,
+928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,
+928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,
+928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,928,
+928,928,928,928,928,928,928,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,915,
-915,915,915,915,915,915,915,915,915,915,915,915,915,915,120,120,
-916,916,916,916,916,917,120,120,120,120,120,120,120,120,120,120,
+
+/* block 201 */
+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,
+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,
+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,
+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,
+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,
+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,
+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,
+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,
/* block 202 */
-918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,
-918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,
-918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,
-919,919,919,919,919,919,919,920,920,920,920,920,921,921,921,921,
-922,922,922,922,920,921,120,120,120,120,120,120,120,120,120,120,
-923,923,923,923,923,923,923,923,923,923,120,924,924,924,924,924,
-924,924,120,918,918,918,918,918,918,918,918,918,918,918,918,918,
-918,918,918,918,918,918,918,918,120,120,120,120,120,918,918,918,
+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,
+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,
+606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,
+606,606,606,606,606,606,606,606,606,120,120,120,120,120,120,120,
+929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,
+929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,120,
+930,930,930,930,930,930,930,930,930,930,120,120,120,120,931,931,
+932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,
/* block 203 */
-918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,918,
+932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,
+932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,
+932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,
+932,932,932,932,932,932,932,932,932,932,932,932,932,932,932,120,
+933,933,933,933,933,933,933,933,933,933,120,120,120,120,120,120,
+934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,934,
+934,934,934,934,934,934,934,934,934,934,934,934,934,934,120,120,
+935,935,935,935,935,936,120,120,120,120,120,120,120,120,120,120,
+
+/* block 204 */
+937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
+937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
+937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
+938,938,938,938,938,938,938,939,939,939,939,939,940,940,940,940,
+941,941,941,941,939,940,120,120,120,120,120,120,120,120,120,120,
+942,942,942,942,942,942,942,942,942,942,120,943,943,943,943,943,
+943,943,120,937,937,937,937,937,937,937,937,937,937,937,937,937,
+937,937,937,937,937,937,937,937,120,120,120,120,120,937,937,937,
+
+/* block 205 */
+937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
@@ -3758,19 +3804,19 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 204 */
+/* block 206 */
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-925,925,925,925,925,925,925,925,925,925,925,925,925,925,925,925,
-925,925,925,925,925,925,925,925,925,925,925,925,925,925,925,925,
-926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,
-926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,926,
+944,944,944,944,944,944,944,944,944,944,944,944,944,944,944,944,
+944,944,944,944,944,944,944,944,944,944,944,944,944,944,944,944,
+945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,
+945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,945,
-/* block 205 */
-927,927,927,927,927,927,927,927,927,927,927,927,927,927,927,927,
-927,927,927,927,927,927,927,928,928,928,928,120,120,120,120,120,
+/* block 207 */
+946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,946,
+946,946,946,946,946,946,946,947,947,947,947,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
@@ -3778,68 +3824,68 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 206 */
-929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,
-929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,
-929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,
-929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,929,
-929,929,929,929,929,929,929,929,929,929,929,120,120,120,120,930,
-929,931,931,931,931,931,931,931,931,931,931,931,931,931,931,931,
-931,931,931,931,931,931,931,931,931,931,931,931,931,931,931,931,
-931,931,931,931,931,931,931,931,931,931,931,931,931,931,931,931,
+/* block 208 */
+948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,
+948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,
+948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,
+948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,
+948,948,948,948,948,948,948,948,948,948,948,120,120,120,120,949,
+948,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,
+950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,
+950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,950,
-/* block 207 */
-931,931,931,931,931,931,931,931,120,120,120,120,120,120,120,930,
-930,930,930,932,932,932,932,932,932,932,932,932,932,932,932,932,
+/* block 209 */
+950,950,950,950,950,950,950,950,120,120,120,120,120,120,120,949,
+949,949,949,951,951,951,951,951,951,951,951,951,951,951,951,951,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-933,934, 5,111,935,120,120,120,120,120,120,120,120,120,120,120,
-936,936,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-
-/* block 208 */
-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
-
-/* block 209 */
-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
-937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,937,
-937,937,937,937,937,937,937,937,120,120,120,120,120,120,120,120,
+952,953,954,562,955,120,120,120,120,120,120,120,120,120,120,120,
+956,956,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
/* block 210 */
-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,
-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,
-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,
-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,
-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,
-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,
-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,
-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,
+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,
+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,
+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,
+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,
+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,
+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,
+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,
+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,
/* block 211 */
-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,
-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,
-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,
-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,
-938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,938,
-938,938,938,938,938,938,120,120,120,120,120,120,120,120,120,120,
+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,
+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,
+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,
+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,
+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,
+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,
+957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,
+957,957,957,957,957,957,957,957,120,120,120,120,120,120,120,120,
+
+/* block 212 */
+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,
+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,
+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,
+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,
+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,
+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,
+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,
+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,
+
+/* block 213 */
+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,
+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,
+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,
+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,
+958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,958,
+958,958,958,958,958,958,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 212 */
-937,937,937,937,937,937,937,937,937,120,120,120,120,120,120,120,
+/* block 214 */
+957,957,957,957,957,957,957,957,957,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
@@ -3848,77 +3894,107 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 213 */
-578,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-
-/* block 214 */
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-
/* block 215 */
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
-573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-573,573,573,120,120,120,120,120,120,120,120,120,120,120,120,120,
-120,120,120,120,578,578,578,578,120,120,120,120,120,120,120,120,
-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+584,584,584,584,120,584,584,584,584,584,584,584,120,584,584,120,
/* block 216 */
-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,
-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,
-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,
-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,
-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,
-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,
-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,
-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,
+583,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
/* block 217 */
-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,
-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,
-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,
-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,
-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,
-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,
-939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,939,
-939,939,939,939,939,939,939,939,939,939,939,939,120,120,120,120,
+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
/* block 218 */
-940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,
-940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,
-940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,
-940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,
-940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,
-940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,940,
-940,940,940,940,940,940,940,940,940,940,940,120,120,120,120,120,
-940,940,940,940,940,940,940,940,940,940,940,940,940,120,120,120,
+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
+583,583,583,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+578,578,578,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,583,583,583,583,120,120,120,120,120,120,120,120,
+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,
/* block 219 */
-940,940,940,940,940,940,940,940,940,120,120,120,120,120,120,120,
-940,940,940,940,940,940,940,940,940,940,120,120,941,942,942,943,
-944,944,944,944,120,120,120,120,120,120,120,120,120,120,120,120,
+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,
+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,
+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,
+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,
+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,
+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,
+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,
+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,
+
+/* block 220 */
+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,
+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,
+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,
+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,
+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,
+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,
+959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,959,
+959,959,959,959,959,959,959,959,959,959,959,959,120,120,120,120,
+
+/* block 221 */
+960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,
+960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,
+960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,
+960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,
+960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,
+960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,
+960,960,960,960,960,960,960,960,960,960,960,120,120,120,120,120,
+960,960,960,960,960,960,960,960,960,960,960,960,960,120,120,120,
+
+/* block 222 */
+960,960,960,960,960,960,960,960,960,120,120,120,120,120,120,120,
+960,960,960,960,960,960,960,960,960,960,120,120,961,962,962,963,
+964,964,964,964,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 220 */
+/* block 223 */
+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
+113,113,113,113,113,113,113,113,113,113,113,113,113,113,120,120,
+113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
+113,113,113,113,113,113,113,120,120,120,120,120,120,120,120,120,
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+
+/* block 224 */
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 20, 20,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+
+/* block 225 */
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
@@ -3928,37 +4004,37 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20,120,120,120,120,120,120,120,120,120,120,
-/* block 221 */
+/* block 226 */
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20,120,120, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
- 20, 20, 20, 20, 20,945,946,113,113,113, 20, 20, 20,946,945,945,
-945,945,945, 24, 24, 24, 24, 24, 24, 24, 24,113,113,113,113,113,
+ 20, 20, 20, 20, 20,965,966,113,113,113, 20, 20, 20,966,965,965,
+965,965,965, 24, 24, 24, 24, 24, 24, 24, 24,113,113,113,113,113,
-/* block 222 */
+/* block 227 */
113,113,113, 20, 20,113,113,113,113,113,113,113, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20,113,113,113,113, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
- 20, 20, 20, 20, 20, 20, 20, 20, 20,120,120,120,120,120,120,120,
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 223 */
-685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,
-685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,
-685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,
-685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,
-685,685,947,947,947,685,120,120,120,120,120,120,120,120,120,120,
+/* block 228 */
+692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,
+692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,
+692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,
+692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,
+692,692,967,967,967,692,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 224 */
+/* block 229 */
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
@@ -3968,187 +4044,207 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
25, 25, 25, 25,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 225 */
+/* block 230 */
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20,120,120,120,120,120,120,120,120,120,
-582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,
-582,582, 25, 25, 25, 25, 25, 25, 25,120,120,120,120,120,120,120,
+587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,
+587,587, 25, 25, 25, 25, 25, 25, 25,120,120,120,120,120,120,120,
-/* block 226 */
-513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,
-513,513,513,513,513,513,513,513,513,513,514,514,514,514,514,514,
-514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,
-514,514,514,514,513,513,513,513,513,513,513,513,513,513,513,513,
-513,513,513,513,513,513,513,513,513,513,513,513,513,513,514,514,
-514,514,514,514,514,120,514,514,514,514,514,514,514,514,514,514,
-514,514,514,514,514,514,514,514,513,513,513,513,513,513,513,513,
-513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,
+/* block 231 */
+518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,
+518,518,518,518,518,518,518,518,518,518,519,519,519,519,519,519,
+519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,
+519,519,519,519,518,518,518,518,518,518,518,518,518,518,518,518,
+518,518,518,518,518,518,518,518,518,518,518,518,518,518,519,519,
+519,519,519,519,519,120,519,519,519,519,519,519,519,519,519,519,
+519,519,519,519,519,519,519,519,518,518,518,518,518,518,518,518,
+518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,
-/* block 227 */
-513,513,514,514,514,514,514,514,514,514,514,514,514,514,514,514,
-514,514,514,514,514,514,514,514,514,514,514,514,513,120,513,513,
-120,120,513,120,120,513,513,120,120,513,513,513,513,120,513,513,
-513,513,513,513,513,513,514,514,514,514,120,514,120,514,514,514,
-514,514,514,514,120,514,514,514,514,514,514,514,514,514,514,514,
-513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,
-513,513,513,513,513,513,513,513,513,513,514,514,514,514,514,514,
-514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,
+/* block 232 */
+518,518,519,519,519,519,519,519,519,519,519,519,519,519,519,519,
+519,519,519,519,519,519,519,519,519,519,519,519,518,120,518,518,
+120,120,518,120,120,518,518,120,120,518,518,518,518,120,518,518,
+518,518,518,518,518,518,519,519,519,519,120,519,120,519,519,519,
+519,519,519,519,120,519,519,519,519,519,519,519,519,519,519,519,
+518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,
+518,518,518,518,518,518,518,518,518,518,519,519,519,519,519,519,
+519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,
-/* block 228 */
-514,514,514,514,513,513,120,513,513,513,513,120,120,513,513,513,
-513,513,513,513,513,120,513,513,513,513,513,513,513,120,514,514,
-514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,
-514,514,514,514,514,514,514,514,513,513,120,513,513,513,513,120,
-513,513,513,513,513,120,513,120,120,120,513,513,513,513,513,513,
-513,120,514,514,514,514,514,514,514,514,514,514,514,514,514,514,
-514,514,514,514,514,514,514,514,514,514,514,514,513,513,513,513,
-513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,
+/* block 233 */
+519,519,519,519,518,518,120,518,518,518,518,120,120,518,518,518,
+518,518,518,518,518,120,518,518,518,518,518,518,518,120,519,519,
+519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,
+519,519,519,519,519,519,519,519,518,518,120,518,518,518,518,120,
+518,518,518,518,518,120,518,120,120,120,518,518,518,518,518,518,
+518,120,519,519,519,519,519,519,519,519,519,519,519,519,519,519,
+519,519,519,519,519,519,519,519,519,519,519,519,518,518,518,518,
+518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,
-/* block 229 */
-513,513,513,513,513,513,514,514,514,514,514,514,514,514,514,514,
-514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,
-513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,
-513,513,513,513,513,513,513,513,513,513,514,514,514,514,514,514,
-514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,
-514,514,514,514,513,513,513,513,513,513,513,513,513,513,513,513,
-513,513,513,513,513,513,513,513,513,513,513,513,513,513,514,514,
-514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,
+/* block 234 */
+518,518,518,518,518,518,519,519,519,519,519,519,519,519,519,519,
+519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,
+518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,
+518,518,518,518,518,518,518,518,518,518,519,519,519,519,519,519,
+519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,
+519,519,519,519,518,518,518,518,518,518,518,518,518,518,518,518,
+518,518,518,518,518,518,518,518,518,518,518,518,518,518,519,519,
+519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,
-/* block 230 */
-514,514,514,514,514,514,514,514,513,513,513,513,513,513,513,513,
-513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,
-513,513,514,514,514,514,514,514,514,514,514,514,514,514,514,514,
-514,514,514,514,514,514,514,514,514,514,514,514,513,513,513,513,
-513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,
-513,513,513,513,513,513,514,514,514,514,514,514,514,514,514,514,
-514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,
-513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,
+/* block 235 */
+519,519,519,519,519,519,519,519,518,518,518,518,518,518,518,518,
+518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,
+518,518,519,519,519,519,519,519,519,519,519,519,519,519,519,519,
+519,519,519,519,519,519,519,519,519,519,519,519,518,518,518,518,
+518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,
+518,518,518,518,518,518,519,519,519,519,519,519,519,519,519,519,
+519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,
+518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,
-/* block 231 */
-513,513,513,513,513,513,513,513,513,513,514,514,514,514,514,514,
-514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,
-514,514,514,514,514,514,120,120,513,513,513,513,513,513,513,513,
-513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,
-513, 9,514,514,514,514,514,514,514,514,514,514,514,514,514,514,
-514,514,514,514,514,514,514,514,514,514,514, 9,514,514,514,514,
-514,514,513,513,513,513,513,513,513,513,513,513,513,513,513,513,
-513,513,513,513,513,513,513,513,513,513,513, 9,514,514,514,514,
+/* block 236 */
+518,518,518,518,518,518,518,518,518,518,519,519,519,519,519,519,
+519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,
+519,519,519,519,519,519,120,120,518,518,518,518,518,518,518,518,
+518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,
+518, 9,519,519,519,519,519,519,519,519,519,519,519,519,519,519,
+519,519,519,519,519,519,519,519,519,519,519, 9,519,519,519,519,
+519,519,518,518,518,518,518,518,518,518,518,518,518,518,518,518,
+518,518,518,518,518,518,518,518,518,518,518, 9,519,519,519,519,
-/* block 232 */
-514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,
-514,514,514,514,514, 9,514,514,514,514,514,514,513,513,513,513,
-513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,
-513,513,513,513,513, 9,514,514,514,514,514,514,514,514,514,514,
-514,514,514,514,514,514,514,514,514,514,514,514,514,514,514, 9,
-514,514,514,514,514,514,513,513,513,513,513,513,513,513,513,513,
-513,513,513,513,513,513,513,513,513,513,513,513,513,513,513, 9,
-514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,
+/* block 237 */
+519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,
+519,519,519,519,519, 9,519,519,519,519,519,519,518,518,518,518,
+518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,
+518,518,518,518,518, 9,519,519,519,519,519,519,519,519,519,519,
+519,519,519,519,519,519,519,519,519,519,519,519,519,519,519, 9,
+519,519,519,519,519,519,518,518,518,518,518,518,518,518,518,518,
+518,518,518,518,518,518,518,518,518,518,518,518,518,518,518, 9,
+519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,
-/* block 233 */
-514,514,514,514,514,514,514,514,514, 9,514,514,514,514,514,514,
-513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,
-513,513,513,513,513,513,513,513,513, 9,514,514,514,514,514,514,
-514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,
-514,514,514, 9,514,514,514,514,514,514,513,514,120,120, 11, 11,
+/* block 238 */
+519,519,519,519,519,519,519,519,519, 9,519,519,519,519,519,519,
+518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,
+518,518,518,518,518,518,518,518,518, 9,519,519,519,519,519,519,
+519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,
+519,519,519, 9,519,519,519,519,519,519,518,519,120,120, 11, 11,
11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
-/* block 234 */
-948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,
-948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,
-948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,
-948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,
-948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,
-948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,
-948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,
-948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,948,
+/* block 239 */
+968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,
+968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,
+968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,
+968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,
+968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,
+968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,
+968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,
+968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,968,
-/* block 235 */
-949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,
-949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,
-949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,
-949,949,949,949,949,949,949,948,948,948,948,949,949,949,949,949,
-949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,
-949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,
-949,949,949,949,949,949,949,949,949,949,949,949,949,948,948,948,
-948,948,948,948,948,949,948,948,948,948,948,948,948,948,948,948,
+/* block 240 */
+969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,
+969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,
+969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,
+969,969,969,969,969,969,969,968,968,968,968,969,969,969,969,969,
+969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,
+969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,
+969,969,969,969,969,969,969,969,969,969,969,969,969,968,968,968,
+968,968,968,968,968,969,968,968,968,968,968,968,968,968,968,968,
-/* block 236 */
-948,948,948,948,949,948,948,950,950,950,950,950,120,120,120,120,
-120,120,120,120,120,120,120,120,120,120,120,949,949,949,949,949,
-120,949,949,949,949,949,949,949,949,949,949,949,949,949,949,949,
+/* block 241 */
+968,968,968,968,969,968,968,970,970,970,970,970,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,969,969,969,969,969,
+120,969,969,969,969,969,969,969,969,969,969,969,969,969,969,969,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 237 */
-951,951,951,951,951,951,951,120,951,951,951,951,951,951,951,951,
-951,951,951,951,951,951,951,951,951,120,120,951,951,951,951,951,
-951,951,120,951,951,120,951,951,951,951,951,120,120,120,120,120,
+/* block 242 */
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 22, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 238 */
-952,952,952,952,952,952,952,952,952,952,952,952,952,952,952,952,
-952,952,952,952,952,952,952,952,952,952,952,952,952,952,952,952,
-952,952,952,952,952,952,952,952,952,952,952,952,952,120,120,120,
-953,953,953,953,953,953,953,954,954,954,954,954,954,954,120,120,
-955,955,955,955,955,955,955,955,955,955,120,120,120,120,952,956,
+/* block 243 */
+971,971,971,971,971,971,971,120,971,971,971,971,971,971,971,971,
+971,971,971,971,971,971,971,971,971,120,120,971,971,971,971,971,
+971,971,120,971,971,120,971,971,971,971,971,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 239 */
+/* block 244 */
+972,972,972,972,972,972,972,972,972,972,972,972,972,972,972,972,
+972,972,972,972,972,972,972,972,972,972,972,972,972,972,972,972,
+972,972,972,972,972,972,972,972,972,972,972,972,972,120,120,120,
+973,973,973,973,973,973,973,974,974,974,974,974,974,974,120,120,
+975,975,975,975,975,975,975,975,975,975,120,120,120,120,972,976,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+
+/* block 245 */
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,
-957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,957,
-957,957,957,957,957,957,957,957,957,957,957,957,958,958,958,958,
-959,959,959,959,959,959,959,959,959,959,120,120,120,120,120,960,
+977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,977,
+977,977,977,977,977,977,977,977,977,977,977,977,977,977,978,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+979,979,979,979,979,979,979,979,979,979,979,979,979,979,979,979,
+979,979,979,979,979,979,979,979,979,979,979,979,979,979,979,979,
+979,979,979,979,979,979,979,979,979,979,979,979,980,980,980,980,
+981,981,981,981,981,981,981,981,981,981,120,120,120,120,120,982,
-/* block 240 */
-961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,
-961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,
-961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,
-961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,
-961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,
-961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,
-961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,
-961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,
+/* block 246 */
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+361,361,361,361,361,361,361,120,361,361,361,361,120,361,361,120,
+361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,120,
-/* block 241 */
-961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,
-961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,
-961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,
-961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,961,
-961,961,961,961,961,120,120,962,962,962,962,962,962,962,962,962,
-963,963,963,963,963,963,963,120,120,120,120,120,120,120,120,120,
+/* block 247 */
+983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,
+983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,
+983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,
+983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,
+983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,
+983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,
+983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,
+983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,
+
+/* block 248 */
+983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,
+983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,
+983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,
+983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,983,
+983,983,983,983,983,120,120,984,984,984,984,984,984,984,984,984,
+985,985,985,985,985,985,985,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 242 */
-964,964,964,964,964,964,964,964,964,964,964,964,964,964,964,964,
-964,964,964,964,964,964,964,964,964,964,964,964,964,964,964,964,
-964,964,965,965,965,965,965,965,965,965,965,965,965,965,965,965,
-965,965,965,965,965,965,965,965,965,965,965,965,965,965,965,965,
-965,965,965,965,966,966,966,966,966,966,966,967,120,120,120,120,
-968,968,968,968,968,968,968,968,968,968,120,120,120,120,969,969,
+/* block 249 */
+986,986,986,986,986,986,986,986,986,986,986,986,986,986,986,986,
+986,986,986,986,986,986,986,986,986,986,986,986,986,986,986,986,
+986,986,987,987,987,987,987,987,987,987,987,987,987,987,987,987,
+987,987,987,987,987,987,987,987,987,987,987,987,987,987,987,987,
+987,987,987,987,988,988,988,988,988,988,988,989,120,120,120,120,
+990,990,990,990,990,990,990,990,990,990,120,120,120,120,991,991,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 243 */
+/* block 250 */
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
@@ -4158,7 +4254,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
-/* block 244 */
+/* block 251 */
25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 20, 25, 25, 25,
@@ -4168,7 +4264,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 245 */
+/* block 252 */
120, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 20, 25,
@@ -4178,47 +4274,47 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 246 */
-224,224,224,224,120,224,224,224,224,224,224,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,
-120,224,224,120,224,120,120,224,120,224,224,224,224,224,224,224,
-224,224,224,120,224,224,224,224,120,224,120,224,120,120,120,120,
-120,120,224,120,120,120,120,224,120,224,120,224,120,224,224,224,
-120,224,224,120,224,120,120,224,120,224,120,224,120,224,120,224,
-120,224,224,120,224,120,120,224,224,224,224,120,224,224,224,224,
-224,224,224,120,224,224,224,224,120,224,224,224,224,120,224,120,
+/* block 253 */
+225,225,225,225,120,225,225,225,225,225,225,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,
+120,225,225,120,225,120,120,225,120,225,225,225,225,225,225,225,
+225,225,225,120,225,225,225,225,120,225,120,225,120,120,120,120,
+120,120,225,120,120,120,120,225,120,225,120,225,120,225,225,225,
+120,225,225,120,225,120,120,225,120,225,120,225,120,225,120,225,
+120,225,225,120,225,120,120,225,225,225,225,120,225,225,225,225,
+225,225,225,120,225,225,225,225,120,225,225,225,225,120,225,120,
-/* block 247 */
-224,224,224,224,224,224,224,224,224,224,120,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,120,120,120,120,
-120,224,224,224,120,224,224,224,224,224,120,224,224,224,224,224,
-224,224,224,224,224,224,224,224,224,224,224,224,120,120,120,120,
+/* block 254 */
+225,225,225,225,225,225,225,225,225,225,120,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,120,120,120,120,
+120,225,225,225,120,225,225,225,225,225,120,225,225,225,225,225,
+225,225,225,225,225,225,225,225,225,225,225,225,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
217,217,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 248 */
+/* block 255 */
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,970,970,970,970,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,992,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
-/* block 249 */
+/* block 256 */
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21,970,970,970,970,970,970,970,970,970,970,970,970,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,970,
-970, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
-970, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
-970, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21,992,992,992,992,992,992,992,992,992,992,992,992,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,
+992, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+992, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
+992, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21,970,970,970,970,970,970,970,970,970,970,
+ 21, 21, 21, 21, 21, 21,992,992,992,992,992,992,992,992,992,992,
-/* block 250 */
+/* block 257 */
25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 21, 21, 21,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,
@@ -4228,37 +4324,37 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21,
21, 21, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21,
-/* block 251 */
+/* block 258 */
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 20,
20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20, 20, 20, 20, 20,
- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,971,971,971,971,971,971,971,971,971,971,
-971,971,971,971,971,971,971,971,971,971,971,971,971,971,971,971,
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,993,993,993,993,993,993,993,993,993,993,
+993,993,993,993,993,993,993,993,993,993,993,993,993,993,993,993,
-/* block 252 */
-972, 21, 21,970,970,970,970,970,970,970,970,970,970,970,970,970,
+/* block 259 */
+994, 21, 21,992,992,992,992,992,992,992,992,992,992,992,992,992,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,
- 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20,970,970,970,970,
- 20, 20, 20, 20, 20, 20, 20, 20, 20,970,970,970,970,970,970,970,
-584,584,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
- 21, 21, 21, 21, 21, 21,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
+ 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 20,992,992,992,992,
+ 20, 20, 20, 20, 20, 20, 20, 20, 20,992,992,992,992,992,992,992,
+589,589,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+ 21, 21, 21, 21, 21, 21,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
-/* block 253 */
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
+/* block 260 */
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
-/* block 254 */
+/* block 261 */
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
@@ -4268,7 +4364,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
-/* block 255 */
+/* block 262 */
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
@@ -4276,9 +4372,9 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,973,973,973,973,973,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,995,995,995,995,995,
-/* block 256 */
+/* block 263 */
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
@@ -4288,7 +4384,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
-/* block 257 */
+/* block 264 */
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
@@ -4298,17 +4394,17 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
-/* block 258 */
+/* block 265 */
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21,970,970,970,970,970,970,970,970,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,970,970,970,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,970,970,970,
+ 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,992,992, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,
-/* block 259 */
+/* block 266 */
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
@@ -4316,39 +4412,39 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
- 20, 20, 20, 20,970,970,970,970,970,970,970,970,970,970,970,970,
+ 20, 20, 20, 20,992,992,992,992,992,992,992,992,992,992,992,992,
-/* block 260 */
+/* block 267 */
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
- 20, 20, 20, 20, 20, 21, 21, 21, 21,970,970,970,970,970,970,970,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
+ 20, 20, 20, 20, 20, 21, 21, 21, 21,992,992,992,992,992,992,992,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,992,
+ 21,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
-/* block 261 */
- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,970,970,970,970,
+/* block 268 */
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,992,992,992,992,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
- 20, 20, 20, 20, 20, 20, 20, 20,970,970,970,970,970,970,970,970,
- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,970,970,970,970,970,970,
+ 20, 20, 20, 20, 20, 20, 20, 20,992,992,992,992,992,992,992,992,
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,992,992,992,992,992,992,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
-/* block 262 */
- 20, 20, 20, 20, 20, 20, 20, 20,970,970,970,970,970,970,970,970,
+/* block 269 */
+ 20, 20, 20, 20, 20, 20, 20, 20,992,992,992,992,992,992,992,992,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
- 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,970,970,
- 21, 21,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
+ 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,992,992,
+ 21, 21,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
-/* block 263 */
+/* block 270 */
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
@@ -4356,39 +4452,29 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
21, 21, 21, 21, 21, 21, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21,970, 21, 21, 21, 21, 21, 21,
-
-/* block 264 */
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,970, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
-/* block 265 */
+/* block 271 */
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21,970,970,970,970,970,970,970,970,970,970,970,970,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,970,970,
- 21, 21, 21, 21, 21,970,970,970, 21, 21, 21,970,970,970,970,970,
+ 21, 21, 21, 21,992,992,992,992,992,992,992,992,992,992,992,992,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,
+ 21, 21, 21, 21, 21,992,992,992, 21, 21, 21, 21, 21,992,992,992,
-/* block 266 */
- 21, 21, 21, 21, 21, 21, 21,970,970,970,970,970,970,970,970,970,
+/* block 272 */
+ 21, 21, 21, 21, 21, 21, 21,992,992,992,992,992,992,992,992,992,
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21,970,970,970,970,970,970,970,
- 21, 21, 21, 21, 21, 21, 21,970,970,970,970,970,970,970,970,970,
- 21, 21, 21,970,970,970,970,970,970,970,970,970,970,970,970,970,
- 21, 21, 21, 21, 21, 21, 21,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,992,992,
+ 21, 21, 21, 21, 21, 21,992,992,992,992,992,992,992,992,992,992,
+ 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,992,992,992,
+ 21, 21, 21, 21, 21, 21, 21, 21,992,992,992,992,992,992,992,992,
+ 21, 21, 21, 21, 21, 21, 21,992,992,992,992,992,992,992,992,992,
-/* block 267 */
+/* block 273 */
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20,120, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
@@ -4398,69 +4484,69 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
11, 11, 11, 11, 11, 11, 11, 11, 11, 11,120,120,120,120,120,120,
-/* block 268 */
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,970,
-970,970,970,970,970,970,970,970,970,970,970,970,970,970,120,120,
+/* block 274 */
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,992,
+992,992,992,992,992,992,992,992,992,992,992,992,992,992,120,120,
-/* block 269 */
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,120,120,
+/* block 275 */
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 270 */
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,120,120,120,120,120,120,120,120,120,120,120,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
+/* block 276 */
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,120,120,120,120,120,120,120,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
-/* block 271 */
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,120,120,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
+/* block 277 */
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,120,120,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
-/* block 272 */
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
+/* block 278 */
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
-/* block 273 */
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
+/* block 279 */
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 274 */
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,120,120,
+/* block 280 */
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
@@ -4468,37 +4554,37 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 275 */
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
-586,586,586,586,586,586,586,586,586,586,586,120,120,120,120,120,
+/* block 281 */
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
+591,591,591,591,591,591,591,591,591,591,591,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,
-/* block 276 */
-511, 24,511,511,511,511,511,511,511,511,511,511,511,511,511,511,
-511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,
-974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,
-974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,
-974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,
-974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,
-974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,
-974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,974,
+/* block 282 */
+516, 24,516,516,516,516,516,516,516,516,516,516,516,516,516,516,
+516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,
+996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,
+996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,
+996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,
+996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,
+996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,
+996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,996,
-/* block 277 */
-511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,
-511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,
-511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,
-511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,
-511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,
-511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,
-511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,
-511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,
+/* block 283 */
+516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,
+516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,
+516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,
+516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,
+516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,
+516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,
+516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,
+516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,
-/* block 278 */
+/* block 284 */
113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
@@ -4508,7 +4594,7 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
-/* block 279 */
+/* block 285 */
113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
@@ -4516,17 +4602,17 @@ const uint16_t PRIV(ucd_stage2)[] = { /* 71936 bytes, block = 128 */
113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,
-511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,
-
-/* block 280 */
-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
-673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
-673,673,673,673,673,673,673,673,673,673,673,673,673,673,120,120,
+516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,
+
+/* block 286 */
+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,
+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,
+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,
+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,
+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,
+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,
+678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,
+678,678,678,678,678,678,678,678,678,678,678,678,678,678,120,120,
};
diff --git a/thirdparty/pcre2/src/pcre2_ucp.h b/thirdparty/pcre2/src/pcre2_ucp.h
index 9538062c71..d84f269e87 100644
--- a/thirdparty/pcre2/src/pcre2_ucp.h
+++ b/thirdparty/pcre2/src/pcre2_ucp.h
@@ -291,7 +291,13 @@ enum {
ucp_Chorasmian,
ucp_Dives_Akuru,
ucp_Khitan_Small_Script,
- ucp_Yezidi
+ ucp_Yezidi,
+ /* New for Unicode 14.0.0 */
+ ucp_Cypro_Minoan,
+ ucp_Old_Uyghur,
+ ucp_Tangsa,
+ ucp_Toto,
+ ucp_Vithkuqi
};
#endif /* PCRE2_UCP_H_IDEMPOTENT_GUARD */
diff --git a/thirdparty/pcre2/src/sljit/sljitConfigInternal.h b/thirdparty/pcre2/src/sljit/sljitConfigInternal.h
index eb1132db30..7bb9990a59 100644
--- a/thirdparty/pcre2/src/sljit/sljitConfigInternal.h
+++ b/thirdparty/pcre2/src/sljit/sljitConfigInternal.h
@@ -158,6 +158,8 @@ extern "C" {
#define SLJIT_CONFIG_MIPS_64 1
#elif defined(__sparc__) || defined(__sparc)
#define SLJIT_CONFIG_SPARC_32 1
+#elif defined(__s390x__)
+#define SLJIT_CONFIG_S390X 1
#else
/* Unsupported architecture */
#define SLJIT_CONFIG_UNSUPPORTED 1
@@ -759,6 +761,18 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_sw sljit_exec_offset(void* ptr);
#define SLJIT_NUMBER_OF_SCRATCH_FLOAT_REGISTERS \
(SLJIT_NUMBER_OF_FLOAT_REGISTERS - SLJIT_NUMBER_OF_SAVED_FLOAT_REGISTERS)
+/********************************/
+/* CPU status flags management. */
+/********************************/
+
+#if (defined SLJIT_CONFIG_ARM_32 && SLJIT_CONFIG_ARM_32) \
+ || (defined SLJIT_CONFIG_ARM_64 && SLJIT_CONFIG_ARM_64) \
+ || (defined SLJIT_CONFIG_MIPS && SLJIT_CONFIG_MIPS) \
+ || (defined SLJIT_CONFIG_SPARC && SLJIT_CONFIG_SPARC) \
+ || (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X)
+#define SLJIT_HAS_STATUS_FLAGS_STATE 1
+#endif
+
/*************************************/
/* Debug and verbose related macros. */
/*************************************/
diff --git a/thirdparty/pcre2/src/sljit/sljitExecAllocator.c b/thirdparty/pcre2/src/sljit/sljitExecAllocator.c
index 61a32f23e9..6e5bf78e45 100644
--- a/thirdparty/pcre2/src/sljit/sljitExecAllocator.c
+++ b/thirdparty/pcre2/src/sljit/sljitExecAllocator.c
@@ -79,6 +79,7 @@
*/
#ifdef _WIN32
+#define SLJIT_UPDATE_WX_FLAGS(from, to, enable_exec)
static SLJIT_INLINE void* alloc_chunk(sljit_uw size)
{
@@ -91,96 +92,108 @@ static SLJIT_INLINE void free_chunk(void *chunk, sljit_uw size)
VirtualFree(chunk, 0, MEM_RELEASE);
}
-#else
-
-#ifdef __APPLE__
-#ifdef MAP_ANON
-/* Configures TARGET_OS_OSX when appropriate */
-#include <TargetConditionals.h>
-
-#if TARGET_OS_OSX && defined(MAP_JIT)
-#include <sys/utsname.h>
-#endif /* TARGET_OS_OSX && MAP_JIT */
-
-#ifdef MAP_JIT
+#else /* POSIX */
+#if defined(__APPLE__) && defined(MAP_JIT)
/*
On macOS systems, returns MAP_JIT if it is defined _and_ we're running on a
- version where it's OK to have more than one JIT block.
+ version where it's OK to have more than one JIT block or where MAP_JIT is
+ required.
On non-macOS systems, returns MAP_JIT if it is defined.
*/
+#include <TargetConditionals.h>
+#if TARGET_OS_OSX
+#if defined SLJIT_CONFIG_X86 && SLJIT_CONFIG_X86
+#ifdef MAP_ANON
+#include <sys/utsname.h>
+#include <stdlib.h>
+
+#define SLJIT_MAP_JIT (get_map_jit_flag())
+
static SLJIT_INLINE int get_map_jit_flag()
{
-#if TARGET_OS_OSX
- sljit_sw page_size = get_page_alignment() + 1;
+ sljit_sw page_size;
void *ptr;
+ struct utsname name;
static int map_jit_flag = -1;
- /*
- The following code is thread safe because multiple initialization
- sets map_jit_flag to the same value and the code has no side-effects.
- Changing the kernel version witout system restart is (very) unlikely.
- */
- if (map_jit_flag == -1) {
- struct utsname name;
-
+ if (map_jit_flag < 0) {
map_jit_flag = 0;
uname(&name);
- /* Kernel version for 10.14.0 (Mojave) */
+ /* Kernel version for 10.14.0 (Mojave) or later */
if (atoi(name.release) >= 18) {
+ page_size = get_page_alignment() + 1;
/* Only use MAP_JIT if a hardened runtime is used */
+ ptr = mmap(NULL, page_size, PROT_WRITE | PROT_EXEC,
+ MAP_PRIVATE | MAP_ANON, -1, 0);
- ptr = mmap(NULL, page_size, PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANON, -1, 0);
-
- if (ptr == MAP_FAILED) {
- map_jit_flag = MAP_JIT;
- } else {
+ if (ptr != MAP_FAILED)
munmap(ptr, page_size);
- }
+ else
+ map_jit_flag = MAP_JIT;
}
}
-
return map_jit_flag;
-#else /* !TARGET_OS_OSX */
- return MAP_JIT;
-#endif /* TARGET_OS_OSX */
}
-
-#endif /* MAP_JIT */
#endif /* MAP_ANON */
-#endif /* __APPLE__ */
+#else /* !SLJIT_CONFIG_X86 */
+#if !(defined SLJIT_CONFIG_ARM && SLJIT_CONFIG_ARM)
+#error Unsupported architecture
+#endif /* SLJIT_CONFIG_ARM */
+#include <pthread.h>
+
+#define SLJIT_MAP_JIT (MAP_JIT)
+#define SLJIT_UPDATE_WX_FLAGS(from, to, enable_exec) \
+ apple_update_wx_flags(enable_exec)
+
+static SLJIT_INLINE void apple_update_wx_flags(sljit_s32 enable_exec)
+{
+ pthread_jit_write_protect_np(enable_exec);
+}
+#endif /* SLJIT_CONFIG_X86 */
+#else /* !TARGET_OS_OSX */
+#define SLJIT_MAP_JIT (MAP_JIT)
+#endif /* TARGET_OS_OSX */
+#endif /* __APPLE__ && MAP_JIT */
+#ifndef SLJIT_UPDATE_WX_FLAGS
+#define SLJIT_UPDATE_WX_FLAGS(from, to, enable_exec)
+#endif /* !SLJIT_UPDATE_WX_FLAGS */
+#ifndef SLJIT_MAP_JIT
+#define SLJIT_MAP_JIT (0)
+#endif /* !SLJIT_MAP_JIT */
static SLJIT_INLINE void* alloc_chunk(sljit_uw size)
{
void *retval;
- const int prot = PROT_READ | PROT_WRITE | PROT_EXEC;
-
-#ifdef MAP_ANON
+ int prot = PROT_READ | PROT_WRITE | PROT_EXEC;
+ int flags = MAP_PRIVATE;
+ int fd = -1;
- int flags = MAP_PRIVATE | MAP_ANON;
-
-#ifdef MAP_JIT
- flags |= get_map_jit_flag();
+#ifdef PROT_MAX
+ prot |= PROT_MAX(prot);
#endif
- retval = mmap(NULL, size, prot, flags, -1, 0);
+#ifdef MAP_ANON
+ flags |= MAP_ANON | SLJIT_MAP_JIT;
#else /* !MAP_ANON */
if (SLJIT_UNLIKELY((dev_zero < 0) && open_dev_zero()))
return NULL;
- retval = mmap(NULL, size, prot, MAP_PRIVATE, dev_zero, 0);
+ fd = dev_zero;
#endif /* MAP_ANON */
+ retval = mmap(NULL, size, prot, flags, fd, 0);
if (retval == MAP_FAILED)
- retval = NULL;
- else {
- if (mprotect(retval, size, prot) < 0) {
- munmap(retval, size);
- retval = NULL;
- }
+ return NULL;
+
+ if (mprotect(retval, size, PROT_READ | PROT_WRITE | PROT_EXEC) < 0) {
+ munmap(retval, size);
+ return NULL;
}
+ SLJIT_UPDATE_WX_FLAGS(retval, (uint8_t *)retval + size, 0);
+
return retval;
}
@@ -189,7 +202,7 @@ static SLJIT_INLINE void free_chunk(void *chunk, sljit_uw size)
munmap(chunk, size);
}
-#endif
+#endif /* windows */
/* --------------------------------------------------------------------- */
/* Common functions */
@@ -261,6 +274,7 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_malloc_exec(sljit_uw size)
while (free_block) {
if (free_block->size >= size) {
chunk_size = free_block->size;
+ SLJIT_UPDATE_WX_FLAGS(NULL, NULL, 0);
if (chunk_size > size + 64) {
/* We just cut a block from the end of the free block. */
chunk_size -= size;
@@ -326,6 +340,7 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_free_exec(void* ptr)
allocated_size -= header->size;
/* Connecting free blocks together if possible. */
+ SLJIT_UPDATE_WX_FLAGS(NULL, NULL, 0);
/* If header->prev_size == 0, free_block will equal to header.
In this case, free_block->header.size will be > 0. */
@@ -358,6 +373,7 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_free_exec(void* ptr)
}
}
+ SLJIT_UPDATE_WX_FLAGS(NULL, NULL, 1);
SLJIT_ALLOCATOR_UNLOCK();
}
@@ -367,6 +383,7 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_free_unused_memory_exec(void)
struct free_block* next_free_block;
SLJIT_ALLOCATOR_LOCK();
+ SLJIT_UPDATE_WX_FLAGS(NULL, NULL, 0);
free_block = free_blocks;
while (free_block) {
@@ -381,5 +398,6 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_free_unused_memory_exec(void)
}
SLJIT_ASSERT((total_size && free_blocks) || (!total_size && !free_blocks));
+ SLJIT_UPDATE_WX_FLAGS(NULL, NULL, 1);
SLJIT_ALLOCATOR_UNLOCK();
}
diff --git a/thirdparty/pcre2/src/sljit/sljitLir.c b/thirdparty/pcre2/src/sljit/sljitLir.c
index d817c90b3a..a24a99ab87 100644
--- a/thirdparty/pcre2/src/sljit/sljitLir.c
+++ b/thirdparty/pcre2/src/sljit/sljitLir.c
@@ -532,13 +532,21 @@ SLJIT_API_FUNC_ATTRIBUTE void sljit_set_put_label(struct sljit_put_label *put_la
put_label->label = label;
}
+#define SLJIT_CURRENT_FLAGS_ALL \
+ (SLJIT_CURRENT_FLAGS_I32_OP | SLJIT_CURRENT_FLAGS_ADD_SUB | SLJIT_CURRENT_FLAGS_COMPARE)
+
SLJIT_API_FUNC_ATTRIBUTE void sljit_set_current_flags(struct sljit_compiler *compiler, sljit_s32 current_flags)
{
SLJIT_UNUSED_ARG(compiler);
SLJIT_UNUSED_ARG(current_flags);
+#if (defined SLJIT_HAS_STATUS_FLAGS_STATE && SLJIT_HAS_STATUS_FLAGS_STATE)
+ compiler->status_flags_state = current_flags;
+#endif
+
#if (defined SLJIT_ARGUMENT_CHECKS && SLJIT_ARGUMENT_CHECKS)
- if ((current_flags & ~(VARIABLE_FLAG_MASK | SLJIT_I32_OP | SLJIT_SET_Z)) == 0) {
+ compiler->last_flags = 0;
+ if ((current_flags & ~(VARIABLE_FLAG_MASK | SLJIT_SET_Z | SLJIT_CURRENT_FLAGS_ALL)) == 0) {
compiler->last_flags = GET_FLAG_TYPE(current_flags) | (current_flags & (SLJIT_I32_OP | SLJIT_SET_Z));
}
#endif
@@ -968,7 +976,7 @@ static const char* fop2_names[] = {
};
#define JUMP_POSTFIX(type) \
- ((type & 0xff) <= SLJIT_MUL_NOT_OVERFLOW ? ((type & SLJIT_I32_OP) ? "32" : "") \
+ ((type & 0xff) <= SLJIT_NOT_OVERFLOW ? ((type & SLJIT_I32_OP) ? "32" : "") \
: ((type & 0xff) <= SLJIT_ORDERED_F64 ? ((type & SLJIT_F32_OP) ? ".f32" : ".f64") : ""))
static char* jump_names[] = {
@@ -978,7 +986,6 @@ static char* jump_names[] = {
(char*)"sig_less", (char*)"sig_greater_equal",
(char*)"sig_greater", (char*)"sig_less_equal",
(char*)"overflow", (char*)"not_overflow",
- (char*)"mul_overflow", (char*)"mul_not_overflow",
(char*)"carry", (char*)"",
(char*)"equal", (char*)"not_equal",
(char*)"less", (char*)"greater_equal",
@@ -1278,7 +1285,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_op2(struct sljit_compiler
case SLJIT_MUL:
CHECK_ARGUMENT(!(op & SLJIT_SET_Z));
CHECK_ARGUMENT(!(op & VARIABLE_FLAG_MASK)
- || GET_FLAG_TYPE(op) == SLJIT_MUL_OVERFLOW);
+ || GET_FLAG_TYPE(op) == SLJIT_OVERFLOW);
break;
case SLJIT_ADD:
CHECK_ARGUMENT(!(op & VARIABLE_FLAG_MASK)
@@ -1601,9 +1608,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_jump(struct sljit_compile
CHECK_ARGUMENT(compiler->last_flags & SLJIT_SET_Z);
else
CHECK_ARGUMENT((type & 0xff) == (compiler->last_flags & 0xff)
- || ((type & 0xff) == SLJIT_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_OVERFLOW)
- || ((type & 0xff) == SLJIT_MUL_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_MUL_OVERFLOW));
- CHECK_ARGUMENT((type & SLJIT_I32_OP) == (compiler->last_flags & SLJIT_I32_OP));
+ || ((type & 0xff) == SLJIT_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_OVERFLOW));
}
#endif
#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
@@ -1818,8 +1823,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_op_flags(struct sljit_com
CHECK_ARGUMENT(compiler->last_flags & SLJIT_SET_Z);
else
CHECK_ARGUMENT((type & 0xff) == (compiler->last_flags & 0xff)
- || ((type & 0xff) == SLJIT_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_OVERFLOW)
- || ((type & 0xff) == SLJIT_MUL_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_MUL_OVERFLOW));
+ || ((type & 0xff) == SLJIT_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_OVERFLOW));
FUNCTION_CHECK_DST(dst, dstw, 0);
@@ -1858,8 +1862,7 @@ static SLJIT_INLINE CHECK_RETURN_TYPE check_sljit_emit_cmov(struct sljit_compile
CHECK_ARGUMENT(compiler->last_flags & SLJIT_SET_Z);
else
CHECK_ARGUMENT((type & 0xff) == (compiler->last_flags & 0xff)
- || ((type & 0xff) == SLJIT_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_OVERFLOW)
- || ((type & 0xff) == SLJIT_MUL_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_MUL_OVERFLOW));
+ || ((type & 0xff) == SLJIT_NOT_OVERFLOW && (compiler->last_flags & 0xff) == SLJIT_OVERFLOW));
#endif
#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
if (SLJIT_UNLIKELY(!!compiler->verbose)) {
diff --git a/thirdparty/pcre2/src/sljit/sljitLir.h b/thirdparty/pcre2/src/sljit/sljitLir.h
index 93d2804675..0eb62fc21b 100644
--- a/thirdparty/pcre2/src/sljit/sljitLir.h
+++ b/thirdparty/pcre2/src/sljit/sljitLir.h
@@ -412,6 +412,10 @@ struct sljit_compiler {
/* Executable size for statistical purposes. */
sljit_uw executable_size;
+#if (defined SLJIT_HAS_STATUS_FLAGS_STATE && SLJIT_HAS_STATUS_FLAGS_STATE)
+ sljit_s32 status_flags_state;
+#endif
+
#if (defined SLJIT_CONFIG_X86_32 && SLJIT_CONFIG_X86_32)
sljit_s32 args;
sljit_s32 locals_offset;
@@ -460,7 +464,7 @@ struct sljit_compiler {
#if (defined SLJIT_CONFIG_S390X && SLJIT_CONFIG_S390X)
/* Need to allocate register save area to make calls. */
- sljit_s32 have_save_area;
+ sljit_s32 mode;
#endif
#if (defined SLJIT_VERBOSE && SLJIT_VERBOSE)
@@ -996,7 +1000,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile
#define SLJIT_SUBC (SLJIT_OP2_BASE + 3)
#define SLJIT_SUBC32 (SLJIT_SUBC | SLJIT_I32_OP)
/* Note: integer mul
- Flags: MUL_OVERFLOW */
+ Flags: OVERFLOW */
#define SLJIT_MUL (SLJIT_OP2_BASE + 4)
#define SLJIT_MUL32 (SLJIT_MUL | SLJIT_I32_OP)
/* Flags: Z */
@@ -1141,89 +1145,69 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_label(struct sljit_compi
/* Integer comparison types. */
#define SLJIT_EQUAL 0
-#define SLJIT_EQUAL32 (SLJIT_EQUAL | SLJIT_I32_OP)
-#define SLJIT_ZERO 0
-#define SLJIT_ZERO32 (SLJIT_ZERO | SLJIT_I32_OP)
+#define SLJIT_ZERO SLJIT_EQUAL
#define SLJIT_NOT_EQUAL 1
-#define SLJIT_NOT_EQUAL32 (SLJIT_NOT_EQUAL | SLJIT_I32_OP)
-#define SLJIT_NOT_ZERO 1
-#define SLJIT_NOT_ZERO32 (SLJIT_NOT_ZERO | SLJIT_I32_OP)
+#define SLJIT_NOT_ZERO SLJIT_NOT_EQUAL
#define SLJIT_LESS 2
-#define SLJIT_LESS32 (SLJIT_LESS | SLJIT_I32_OP)
#define SLJIT_SET_LESS SLJIT_SET(SLJIT_LESS)
#define SLJIT_GREATER_EQUAL 3
-#define SLJIT_GREATER_EQUAL32 (SLJIT_GREATER_EQUAL | SLJIT_I32_OP)
#define SLJIT_SET_GREATER_EQUAL SLJIT_SET(SLJIT_GREATER_EQUAL)
#define SLJIT_GREATER 4
-#define SLJIT_GREATER32 (SLJIT_GREATER | SLJIT_I32_OP)
#define SLJIT_SET_GREATER SLJIT_SET(SLJIT_GREATER)
#define SLJIT_LESS_EQUAL 5
-#define SLJIT_LESS_EQUAL32 (SLJIT_LESS_EQUAL | SLJIT_I32_OP)
#define SLJIT_SET_LESS_EQUAL SLJIT_SET(SLJIT_LESS_EQUAL)
#define SLJIT_SIG_LESS 6
-#define SLJIT_SIG_LESS32 (SLJIT_SIG_LESS | SLJIT_I32_OP)
#define SLJIT_SET_SIG_LESS SLJIT_SET(SLJIT_SIG_LESS)
#define SLJIT_SIG_GREATER_EQUAL 7
-#define SLJIT_SIG_GREATER_EQUAL32 (SLJIT_SIG_GREATER_EQUAL | SLJIT_I32_OP)
#define SLJIT_SET_SIG_GREATER_EQUAL SLJIT_SET(SLJIT_SIG_GREATER_EQUAL)
#define SLJIT_SIG_GREATER 8
-#define SLJIT_SIG_GREATER32 (SLJIT_SIG_GREATER | SLJIT_I32_OP)
#define SLJIT_SET_SIG_GREATER SLJIT_SET(SLJIT_SIG_GREATER)
#define SLJIT_SIG_LESS_EQUAL 9
-#define SLJIT_SIG_LESS_EQUAL32 (SLJIT_SIG_LESS_EQUAL | SLJIT_I32_OP)
#define SLJIT_SET_SIG_LESS_EQUAL SLJIT_SET(SLJIT_SIG_LESS_EQUAL)
#define SLJIT_OVERFLOW 10
-#define SLJIT_OVERFLOW32 (SLJIT_OVERFLOW | SLJIT_I32_OP)
#define SLJIT_SET_OVERFLOW SLJIT_SET(SLJIT_OVERFLOW)
#define SLJIT_NOT_OVERFLOW 11
-#define SLJIT_NOT_OVERFLOW32 (SLJIT_NOT_OVERFLOW | SLJIT_I32_OP)
-
-#define SLJIT_MUL_OVERFLOW 12
-#define SLJIT_MUL_OVERFLOW32 (SLJIT_MUL_OVERFLOW | SLJIT_I32_OP)
-#define SLJIT_SET_MUL_OVERFLOW SLJIT_SET(SLJIT_MUL_OVERFLOW)
-#define SLJIT_MUL_NOT_OVERFLOW 13
-#define SLJIT_MUL_NOT_OVERFLOW32 (SLJIT_MUL_NOT_OVERFLOW | SLJIT_I32_OP)
/* There is no SLJIT_CARRY or SLJIT_NOT_CARRY. */
-#define SLJIT_SET_CARRY SLJIT_SET(14)
+#define SLJIT_SET_CARRY SLJIT_SET(12)
/* Floating point comparison types. */
-#define SLJIT_EQUAL_F64 16
+#define SLJIT_EQUAL_F64 14
#define SLJIT_EQUAL_F32 (SLJIT_EQUAL_F64 | SLJIT_F32_OP)
#define SLJIT_SET_EQUAL_F SLJIT_SET(SLJIT_EQUAL_F64)
-#define SLJIT_NOT_EQUAL_F64 17
+#define SLJIT_NOT_EQUAL_F64 15
#define SLJIT_NOT_EQUAL_F32 (SLJIT_NOT_EQUAL_F64 | SLJIT_F32_OP)
#define SLJIT_SET_NOT_EQUAL_F SLJIT_SET(SLJIT_NOT_EQUAL_F64)
-#define SLJIT_LESS_F64 18
+#define SLJIT_LESS_F64 16
#define SLJIT_LESS_F32 (SLJIT_LESS_F64 | SLJIT_F32_OP)
#define SLJIT_SET_LESS_F SLJIT_SET(SLJIT_LESS_F64)
-#define SLJIT_GREATER_EQUAL_F64 19
+#define SLJIT_GREATER_EQUAL_F64 17
#define SLJIT_GREATER_EQUAL_F32 (SLJIT_GREATER_EQUAL_F64 | SLJIT_F32_OP)
#define SLJIT_SET_GREATER_EQUAL_F SLJIT_SET(SLJIT_GREATER_EQUAL_F64)
-#define SLJIT_GREATER_F64 20
+#define SLJIT_GREATER_F64 18
#define SLJIT_GREATER_F32 (SLJIT_GREATER_F64 | SLJIT_F32_OP)
#define SLJIT_SET_GREATER_F SLJIT_SET(SLJIT_GREATER_F64)
-#define SLJIT_LESS_EQUAL_F64 21
+#define SLJIT_LESS_EQUAL_F64 19
#define SLJIT_LESS_EQUAL_F32 (SLJIT_LESS_EQUAL_F64 | SLJIT_F32_OP)
#define SLJIT_SET_LESS_EQUAL_F SLJIT_SET(SLJIT_LESS_EQUAL_F64)
-#define SLJIT_UNORDERED_F64 22
+#define SLJIT_UNORDERED_F64 20
#define SLJIT_UNORDERED_F32 (SLJIT_UNORDERED_F64 | SLJIT_F32_OP)
#define SLJIT_SET_UNORDERED_F SLJIT_SET(SLJIT_UNORDERED_F64)
-#define SLJIT_ORDERED_F64 23
+#define SLJIT_ORDERED_F64 21
#define SLJIT_ORDERED_F32 (SLJIT_ORDERED_F64 | SLJIT_F32_OP)
#define SLJIT_SET_ORDERED_F SLJIT_SET(SLJIT_ORDERED_F64)
/* Unconditional jump types. */
-#define SLJIT_JUMP 24
+#define SLJIT_JUMP 22
/* Fast calling method. See sljit_emit_fast_enter / SLJIT_FAST_RETURN. */
-#define SLJIT_FAST_CALL 25
+#define SLJIT_FAST_CALL 23
/* Called function must be declared with the SLJIT_FUNC attribute. */
-#define SLJIT_CALL 26
+#define SLJIT_CALL 24
/* Called function must be declared with cdecl attribute.
This is the default attribute for C functions. */
-#define SLJIT_CALL_CDECL 27
+#define SLJIT_CALL_CDECL 25
/* The target can be changed during runtime (see: sljit_set_jump_addr). */
#define SLJIT_REWRITABLE_JUMP 0x1000
@@ -1534,8 +1518,22 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_get_float_register_index(sljit_s32 reg)
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_custom(struct sljit_compiler *compiler,
void *instruction, sljit_s32 size);
-/* Define the currently available CPU status flags. It is usually used after an
- sljit_emit_op_custom call to define which flags are set. */
+/* Flags were set by a 32 bit operation. */
+#define SLJIT_CURRENT_FLAGS_I32_OP SLJIT_I32_OP
+
+/* Flags were set by an ADD, ADDC, SUB, SUBC, or NEG operation. */
+#define SLJIT_CURRENT_FLAGS_ADD_SUB 0x01
+
+/* Flags were set by a SUB with unused destination.
+ Must be combined with SLJIT_CURRENT_FLAGS_ADD_SUB. */
+#define SLJIT_CURRENT_FLAGS_COMPARE 0x02
+
+/* Define the currently available CPU status flags. It is usually used after
+ an sljit_emit_label or sljit_emit_op_custom operations to define which CPU
+ status flags are available.
+
+ The current_flags must be a valid combination of SLJIT_SET_* and
+ SLJIT_CURRENT_FLAGS_* constants. */
SLJIT_API_FUNC_ATTRIBUTE void sljit_set_current_flags(struct sljit_compiler *compiler,
sljit_s32 current_flags);
diff --git a/thirdparty/pcre2/src/sljit/sljitNativeARM_32.c b/thirdparty/pcre2/src/sljit/sljitNativeARM_32.c
index ae8479f031..74cf55fcd2 100644
--- a/thirdparty/pcre2/src/sljit/sljitNativeARM_32.c
+++ b/thirdparty/pcre2/src/sljit/sljitNativeARM_32.c
@@ -1197,6 +1197,8 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
case SLJIT_ADD:
SLJIT_ASSERT(!(flags & INV_IMM));
+ compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB;
+
if ((flags & (UNUSED_RETURN | SET_FLAGS)) == (UNUSED_RETURN | SET_FLAGS) && !(flags & ARGS_SWAPPED))
return push_inst(compiler, CMN | SET_FLAGS | RN(src1) | ((src2 & SRC2_IMM) ? src2 : RM(src2)));
return push_inst(compiler, ADD | (flags & SET_FLAGS) | RD(dst) | RN(src1) | ((src2 & SRC2_IMM) ? src2 : RM(src2)));
@@ -1207,6 +1209,8 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
case SLJIT_SUB:
SLJIT_ASSERT(!(flags & INV_IMM));
+ compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB;
+
if ((flags & (UNUSED_RETURN | SET_FLAGS)) == (UNUSED_RETURN | SET_FLAGS) && !(flags & ARGS_SWAPPED))
return push_inst(compiler, CMP | SET_FLAGS | RN(src1) | ((src2 & SRC2_IMM) ? src2 : RM(src2)));
return push_inst(compiler, (!(flags & ARGS_SWAPPED) ? SUB : RSB) | (flags & SET_FLAGS)
@@ -1220,6 +1224,7 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
case SLJIT_MUL:
SLJIT_ASSERT(!(flags & INV_IMM));
SLJIT_ASSERT(!(src2 & SRC2_IMM));
+ compiler->status_flags_state = 0;
if (!HAS_FLAGS(op))
return push_inst(compiler, MUL | (reg_map[dst] << 16) | (reg_map[src2] << 8) | reg_map[src1]);
@@ -2153,16 +2158,14 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler *
/* Conditional instructions */
/* --------------------------------------------------------------------- */
-static sljit_uw get_cc(sljit_s32 type)
+static sljit_uw get_cc(struct sljit_compiler *compiler, sljit_s32 type)
{
switch (type) {
case SLJIT_EQUAL:
- case SLJIT_MUL_NOT_OVERFLOW:
case SLJIT_EQUAL_F64:
return 0x00000000;
case SLJIT_NOT_EQUAL:
- case SLJIT_MUL_OVERFLOW:
case SLJIT_NOT_EQUAL_F64:
return 0x10000000;
@@ -2195,10 +2198,16 @@ static sljit_uw get_cc(sljit_s32 type)
return 0xd0000000;
case SLJIT_OVERFLOW:
+ if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB))
+ return 0x10000000;
+
case SLJIT_UNORDERED_F64:
return 0x60000000;
case SLJIT_NOT_OVERFLOW:
+ if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB))
+ return 0x00000000;
+
case SLJIT_ORDERED_F64:
return 0x70000000;
@@ -2242,7 +2251,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile
if (type >= SLJIT_FAST_CALL)
PTR_FAIL_IF(prepare_blx(compiler));
PTR_FAIL_IF(push_inst_with_unique_literal(compiler, ((EMIT_DATA_TRANSFER(WORD_SIZE | LOAD_DATA, 1,
- type <= SLJIT_JUMP ? TMP_PC : TMP_REG1, TMP_PC, 0)) & ~COND_MASK) | get_cc(type), 0));
+ type <= SLJIT_JUMP ? TMP_PC : TMP_REG1, TMP_PC, 0)) & ~COND_MASK) | get_cc(compiler, type), 0));
if (jump->flags & SLJIT_REWRITABLE_JUMP) {
jump->addr = compiler->size;
@@ -2260,7 +2269,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile
if (type >= SLJIT_FAST_CALL)
jump->flags |= IS_BL;
PTR_FAIL_IF(emit_imm(compiler, TMP_REG1, 0));
- PTR_FAIL_IF(push_inst(compiler, (((type <= SLJIT_JUMP ? BX : BLX) | RM(TMP_REG1)) & ~COND_MASK) | get_cc(type)));
+ PTR_FAIL_IF(push_inst(compiler, (((type <= SLJIT_JUMP ? BX : BLX) | RM(TMP_REG1)) & ~COND_MASK) | get_cc(compiler, type)));
jump->addr = compiler->size;
#endif
return jump;
@@ -2589,7 +2598,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co
ADJUST_LOCAL_OFFSET(dst, dstw);
op = GET_OPCODE(op);
- cc = get_cc(type & 0xff);
+ cc = get_cc(compiler, type & 0xff);
dst_reg = FAST_IS_REG(dst) ? dst : TMP_REG1;
if (op < SLJIT_ADD) {
@@ -2629,7 +2638,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil
dst_reg &= ~SLJIT_I32_OP;
- cc = get_cc(type & 0xff);
+ cc = get_cc(compiler, type & 0xff);
if (SLJIT_UNLIKELY(src & SLJIT_IMM)) {
tmp = get_imm(srcw);
diff --git a/thirdparty/pcre2/src/sljit/sljitNativeARM_64.c b/thirdparty/pcre2/src/sljit/sljitNativeARM_64.c
index 52267e7df7..3f0f5fcc30 100644
--- a/thirdparty/pcre2/src/sljit/sljitNativeARM_64.c
+++ b/thirdparty/pcre2/src/sljit/sljitNativeARM_64.c
@@ -644,6 +644,7 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s
imm = -imm;
/* Fall through. */
case SLJIT_ADD:
+ compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB;
if (imm == 0) {
CHECK_FLAGS(1 << 29);
return push_inst(compiler, ((op == SLJIT_ADD ? ADDI : SUBI) ^ inv_bits) | RD(dst) | RN(reg));
@@ -781,6 +782,7 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s
break; /* Set flags. */
case SLJIT_NEG:
SLJIT_ASSERT(arg1 == TMP_REG1);
+ compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB;
if (flags & SET_FLAGS)
inv_bits |= 1 << 29;
return push_inst(compiler, (SUB ^ inv_bits) | RD(dst) | RN(TMP_ZERO) | RM(arg2));
@@ -789,17 +791,20 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s
return push_inst(compiler, (CLZ ^ inv_bits) | RD(dst) | RN(arg2));
case SLJIT_ADD:
CHECK_FLAGS(1 << 29);
+ compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB;
return push_inst(compiler, (ADD ^ inv_bits) | RD(dst) | RN(arg1) | RM(arg2));
case SLJIT_ADDC:
CHECK_FLAGS(1 << 29);
return push_inst(compiler, (ADC ^ inv_bits) | RD(dst) | RN(arg1) | RM(arg2));
case SLJIT_SUB:
CHECK_FLAGS(1 << 29);
+ compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB;
return push_inst(compiler, (SUB ^ inv_bits) | RD(dst) | RN(arg1) | RM(arg2));
case SLJIT_SUBC:
CHECK_FLAGS(1 << 29);
return push_inst(compiler, (SBC ^ inv_bits) | RD(dst) | RN(arg1) | RM(arg2));
case SLJIT_MUL:
+ compiler->status_flags_state = 0;
if (!(flags & SET_FLAGS))
return push_inst(compiler, (MADD ^ inv_bits) | RD(dst) | RN(arg1) | RM(arg2) | RT2(TMP_ZERO));
if (flags & INT_OP) {
@@ -1600,16 +1605,14 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler *
/* Conditional instructions */
/* --------------------------------------------------------------------- */
-static sljit_uw get_cc(sljit_s32 type)
+static sljit_uw get_cc(struct sljit_compiler *compiler, sljit_s32 type)
{
switch (type) {
case SLJIT_EQUAL:
- case SLJIT_MUL_NOT_OVERFLOW:
case SLJIT_EQUAL_F64:
return 0x1;
case SLJIT_NOT_EQUAL:
- case SLJIT_MUL_OVERFLOW:
case SLJIT_NOT_EQUAL_F64:
return 0x0;
@@ -1642,10 +1645,16 @@ static sljit_uw get_cc(sljit_s32 type)
return 0xc;
case SLJIT_OVERFLOW:
+ if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB))
+ return 0x0;
+
case SLJIT_UNORDERED_F64:
return 0x7;
case SLJIT_NOT_OVERFLOW:
+ if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB))
+ return 0x1;
+
case SLJIT_ORDERED_F64:
return 0x6;
@@ -1685,7 +1694,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile
if (type < SLJIT_JUMP) {
jump->flags |= IS_COND;
- PTR_FAIL_IF(push_inst(compiler, B_CC | (6 << 5) | get_cc(type)));
+ PTR_FAIL_IF(push_inst(compiler, B_CC | (6 << 5) | get_cc(compiler, type)));
}
else if (type >= SLJIT_FAST_CALL)
jump->flags |= IS_BL;
@@ -1799,7 +1808,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co
CHECK(check_sljit_emit_op_flags(compiler, op, dst, dstw, type));
ADJUST_LOCAL_OFFSET(dst, dstw);
- cc = get_cc(type & 0xff);
+ cc = get_cc(compiler, type & 0xff);
dst_r = FAST_IS_REG(dst) ? dst : TMP_REG1;
if (GET_OPCODE(op) < SLJIT_ADD) {
@@ -1854,7 +1863,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil
srcw = 0;
}
- cc = get_cc(type & 0xff);
+ cc = get_cc(compiler, type & 0xff);
dst_reg &= ~SLJIT_I32_OP;
return push_inst(compiler, (CSEL ^ inv_bits) | (cc << 12) | RD(dst_reg) | RN(dst_reg) | RM(src));
diff --git a/thirdparty/pcre2/src/sljit/sljitNativeARM_T2_32.c b/thirdparty/pcre2/src/sljit/sljitNativeARM_T2_32.c
index 4624882f42..e35dbe99b3 100644
--- a/thirdparty/pcre2/src/sljit/sljitNativeARM_T2_32.c
+++ b/thirdparty/pcre2/src/sljit/sljitNativeARM_T2_32.c
@@ -610,6 +610,7 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s
Although some clever things could be done here, "NOT IMM" does not worth the efforts. */
break;
case SLJIT_ADD:
+ compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB;
nimm = -(sljit_sw)imm;
if (IS_2_LO_REGS(reg, dst)) {
if (imm <= 0x7)
@@ -643,6 +644,7 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s
break;
case SLJIT_SUB:
/* SUB operation can be replaced by ADD because of the negative carry flag. */
+ compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB;
if (flags & ARG1_IMM) {
if (imm == 0 && IS_2_LO_REGS(reg, dst))
return push_inst16(compiler, RSBSI | RD3(dst) | RN3(reg));
@@ -801,6 +803,7 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s
FAIL_IF(push_inst32(compiler, CLZ | RN4(arg2) | RD4(dst) | RM4(arg2)));
return SLJIT_SUCCESS;
case SLJIT_ADD:
+ compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB;
if (IS_3_LO_REGS(dst, arg1, arg2))
return push_inst16(compiler, ADDS | RD3(dst) | RN3(arg1) | RM3(arg2));
if (dst == arg1 && !(flags & SET_FLAGS))
@@ -811,6 +814,7 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s
return push_inst16(compiler, ADCS | RD3(dst) | RN3(arg2));
return push_inst32(compiler, ADC_W | (flags & SET_FLAGS) | RD4(dst) | RN4(arg1) | RM4(arg2));
case SLJIT_SUB:
+ compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB;
if (flags & UNUSED_RETURN) {
if (IS_2_LO_REGS(arg1, arg2))
return push_inst16(compiler, CMP | RD3(arg1) | RN3(arg2));
@@ -824,6 +828,7 @@ static sljit_s32 emit_op_imm(struct sljit_compiler *compiler, sljit_s32 flags, s
return push_inst16(compiler, SBCS | RD3(dst) | RN3(arg2));
return push_inst32(compiler, SBC_W | (flags & SET_FLAGS) | RD4(dst) | RN4(arg1) | RM4(arg2));
case SLJIT_MUL:
+ compiler->status_flags_state = 0;
if (!(flags & SET_FLAGS))
return push_inst32(compiler, MUL | RD4(dst) | RN4(arg1) | RM4(arg2));
SLJIT_ASSERT(dst != TMP_REG2);
@@ -1760,16 +1765,14 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler *
/* Conditional instructions */
/* --------------------------------------------------------------------- */
-static sljit_uw get_cc(sljit_s32 type)
+static sljit_uw get_cc(struct sljit_compiler *compiler, sljit_s32 type)
{
switch (type) {
case SLJIT_EQUAL:
- case SLJIT_MUL_NOT_OVERFLOW:
case SLJIT_EQUAL_F64:
return 0x0;
case SLJIT_NOT_EQUAL:
- case SLJIT_MUL_OVERFLOW:
case SLJIT_NOT_EQUAL_F64:
return 0x1;
@@ -1802,10 +1805,16 @@ static sljit_uw get_cc(sljit_s32 type)
return 0xd;
case SLJIT_OVERFLOW:
+ if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB))
+ return 0x1;
+
case SLJIT_UNORDERED_F64:
return 0x6;
case SLJIT_NOT_OVERFLOW:
+ if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB))
+ return 0x0;
+
case SLJIT_ORDERED_F64:
return 0x7;
@@ -1847,7 +1856,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile
PTR_FAIL_IF(emit_imm32_const(compiler, TMP_REG1, 0));
if (type < SLJIT_JUMP) {
jump->flags |= IS_COND;
- cc = get_cc(type);
+ cc = get_cc(compiler, type);
jump->flags |= cc << 8;
PTR_FAIL_IF(push_inst16(compiler, IT | (cc << 4) | 0x8));
}
@@ -2177,7 +2186,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co
ADJUST_LOCAL_OFFSET(dst, dstw);
op = GET_OPCODE(op);
- cc = get_cc(type & 0xff);
+ cc = get_cc(compiler, type & 0xff);
dst_r = FAST_IS_REG(dst) ? dst : TMP_REG1;
if (op < SLJIT_ADD) {
@@ -2229,7 +2238,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil
dst_reg &= ~SLJIT_I32_OP;
- cc = get_cc(type & 0xff);
+ cc = get_cc(compiler, type & 0xff);
if (!(src & SLJIT_IMM)) {
FAIL_IF(push_inst16(compiler, IT | (cc << 4) | 0x8));
diff --git a/thirdparty/pcre2/src/sljit/sljitNativeMIPS_32.c b/thirdparty/pcre2/src/sljit/sljitNativeMIPS_32.c
index f887ee1311..a90345f1f8 100644
--- a/thirdparty/pcre2/src/sljit/sljitNativeMIPS_32.c
+++ b/thirdparty/pcre2/src/sljit/sljitNativeMIPS_32.c
@@ -367,7 +367,7 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
case SLJIT_MUL:
SLJIT_ASSERT(!(flags & SRC2_IMM));
- if (GET_FLAG_TYPE(op) != SLJIT_MUL_OVERFLOW) {
+ if (GET_FLAG_TYPE(op) != SLJIT_OVERFLOW) {
#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1)
return push_inst(compiler, MUL | S(src1) | T(src2) | D(dst), DR(dst));
#else /* SLJIT_MIPS_REV < 1 */
diff --git a/thirdparty/pcre2/src/sljit/sljitNativeMIPS_64.c b/thirdparty/pcre2/src/sljit/sljitNativeMIPS_64.c
index 5ab9b7d06b..1f22e49ed9 100644
--- a/thirdparty/pcre2/src/sljit/sljitNativeMIPS_64.c
+++ b/thirdparty/pcre2/src/sljit/sljitNativeMIPS_64.c
@@ -458,7 +458,7 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
case SLJIT_MUL:
SLJIT_ASSERT(!(flags & SRC2_IMM));
- if (GET_FLAG_TYPE(op) != SLJIT_MUL_OVERFLOW) {
+ if (GET_FLAG_TYPE(op) != SLJIT_OVERFLOW) {
#if (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 6)
return push_inst(compiler, SELECT_OP(DMUL, MUL) | S(src1) | T(src2) | D(dst), DR(dst));
#elif (defined SLJIT_MIPS_REV && SLJIT_MIPS_REV >= 1)
diff --git a/thirdparty/pcre2/src/sljit/sljitNativeMIPS_common.c b/thirdparty/pcre2/src/sljit/sljitNativeMIPS_common.c
index ecf4dac4c8..fd747695a7 100644
--- a/thirdparty/pcre2/src/sljit/sljitNativeMIPS_common.c
+++ b/thirdparty/pcre2/src/sljit/sljitNativeMIPS_common.c
@@ -1377,6 +1377,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile
return emit_op(compiler, op, flags, dst, dstw, TMP_REG1, 0, src, srcw);
case SLJIT_NEG:
+ compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB;
return emit_op(compiler, SLJIT_SUB | GET_ALL_FLAGS(op), flags | IMM_OP, dst, dstw, SLJIT_IMM, 0, src, srcw);
case SLJIT_CLZ:
@@ -1424,13 +1425,16 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile
switch (GET_OPCODE(op)) {
case SLJIT_ADD:
case SLJIT_ADDC:
+ compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB;
return emit_op(compiler, op, flags | CUMULATIVE_OP | IMM_OP, dst, dstw, src1, src1w, src2, src2w);
case SLJIT_SUB:
case SLJIT_SUBC:
+ compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB;
return emit_op(compiler, op, flags | IMM_OP, dst, dstw, src1, src1w, src2, src2w);
case SLJIT_MUL:
+ compiler->status_flags_state = 0;
return emit_op(compiler, op, flags | CUMULATIVE_OP, dst, dstw, src1, src1w, src2, src2w);
case SLJIT_AND:
@@ -1860,7 +1864,6 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile
case SLJIT_SIG_LESS:
case SLJIT_SIG_GREATER:
case SLJIT_OVERFLOW:
- case SLJIT_MUL_OVERFLOW:
BR_Z(OTHER_FLAG);
break;
case SLJIT_GREATER_EQUAL:
@@ -1868,7 +1871,6 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile
case SLJIT_SIG_GREATER_EQUAL:
case SLJIT_SIG_LESS_EQUAL:
case SLJIT_NOT_OVERFLOW:
- case SLJIT_MUL_NOT_OVERFLOW:
BR_NZ(OTHER_FLAG);
break;
case SLJIT_NOT_EQUAL_F64:
@@ -2127,8 +2129,12 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co
FAIL_IF(push_inst(compiler, SLTIU | SA(EQUAL_FLAG) | TA(dst_ar) | IMM(1), dst_ar));
src_ar = dst_ar;
break;
- case SLJIT_MUL_OVERFLOW:
- case SLJIT_MUL_NOT_OVERFLOW:
+ case SLJIT_OVERFLOW:
+ case SLJIT_NOT_OVERFLOW:
+ if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB) {
+ src_ar = OTHER_FLAG;
+ break;
+ }
FAIL_IF(push_inst(compiler, SLTIU | SA(OTHER_FLAG) | TA(dst_ar) | IMM(1), dst_ar));
src_ar = dst_ar;
type ^= 0x1; /* Flip type bit for the XORI below. */
@@ -2219,7 +2225,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil
case SLJIT_SIG_LESS:
case SLJIT_SIG_GREATER:
case SLJIT_OVERFLOW:
- case SLJIT_MUL_OVERFLOW:
ins = MOVN | TA(OTHER_FLAG);
break;
case SLJIT_GREATER_EQUAL:
@@ -2227,7 +2232,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil
case SLJIT_SIG_GREATER_EQUAL:
case SLJIT_SIG_LESS_EQUAL:
case SLJIT_NOT_OVERFLOW:
- case SLJIT_MUL_NOT_OVERFLOW:
ins = MOVZ | TA(OTHER_FLAG);
break;
case SLJIT_EQUAL_F64:
diff --git a/thirdparty/pcre2/src/sljit/sljitNativePPC_32.c b/thirdparty/pcre2/src/sljit/sljitNativePPC_32.c
index 7d9ec5338f..6ddb5508ec 100644
--- a/thirdparty/pcre2/src/sljit/sljitNativePPC_32.c
+++ b/thirdparty/pcre2/src/sljit/sljitNativePPC_32.c
@@ -119,9 +119,10 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
SLJIT_ASSERT(src2 == TMP_REG2);
return push_inst(compiler, ADDIC | D(dst) | A(src1) | compiler->imm);
}
+ SLJIT_ASSERT(!(flags & ALT_FORM4));
if (!(flags & ALT_SET_FLAGS))
return push_inst(compiler, ADD | D(dst) | A(src1) | B(src2));
- if (flags & ALT_FORM4)
+ if (flags & ALT_FORM5)
return push_inst(compiler, ADDC | RC(ALT_SET_FLAGS) | D(dst) | A(src1) | B(src2));
return push_inst(compiler, ADD | RC(flags) | D(dst) | A(src1) | B(src2));
@@ -143,24 +144,29 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
}
if (flags & ALT_FORM2) {
+ if (flags & ALT_FORM3) {
+ FAIL_IF(push_inst(compiler, CMPI | CRD(0) | A(src1) | compiler->imm));
+ if (!(flags & ALT_FORM4))
+ return SLJIT_SUCCESS;
+ return push_inst(compiler, ADDI | D(dst) | A(src1) | (-compiler->imm & 0xffff));
+ }
+ FAIL_IF(push_inst(compiler, CMP | CRD(0) | A(src1) | B(src2)));
+ if (!(flags & ALT_FORM4))
+ return SLJIT_SUCCESS;
+ return push_inst(compiler, SUBF | D(dst) | A(src2) | B(src1));
+ }
+
+ if (flags & ALT_FORM3) {
/* Setting XER SO is not enough, CR SO is also needed. */
return push_inst(compiler, SUBF | OE(ALT_SET_FLAGS) | RC(ALT_SET_FLAGS) | D(dst) | A(src2) | B(src1));
}
- if (flags & ALT_FORM3) {
+ if (flags & ALT_FORM4) {
/* Flags does not set: BIN_IMM_EXTS unnecessary. */
SLJIT_ASSERT(src2 == TMP_REG2);
return push_inst(compiler, SUBFIC | D(dst) | A(src1) | compiler->imm);
}
- if (flags & ALT_FORM4) {
- if (flags & ALT_FORM5) {
- SLJIT_ASSERT(src2 == TMP_REG2);
- return push_inst(compiler, CMPI | CRD(0) | A(src1) | compiler->imm);
- }
- return push_inst(compiler, CMP | CRD(0) | A(src1) | B(src2));
- }
-
if (!(flags & ALT_SET_FLAGS))
return push_inst(compiler, SUBF | D(dst) | A(src2) | B(src1));
if (flags & ALT_FORM5)
diff --git a/thirdparty/pcre2/src/sljit/sljitNativePPC_64.c b/thirdparty/pcre2/src/sljit/sljitNativePPC_64.c
index 92147d2a5d..cbdf2dd8a2 100644
--- a/thirdparty/pcre2/src/sljit/sljitNativePPC_64.c
+++ b/thirdparty/pcre2/src/sljit/sljitNativePPC_64.c
@@ -252,10 +252,17 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
BIN_IMM_EXTS();
return push_inst(compiler, ADDIC | D(dst) | A(src1) | compiler->imm);
}
+ if (flags & ALT_FORM4) {
+ if (flags & ALT_FORM5)
+ FAIL_IF(push_inst(compiler, ADDI | D(dst) | A(src1) | compiler->imm));
+ else
+ FAIL_IF(push_inst(compiler, ADD | D(dst) | A(src1) | B(src2)));
+ return push_inst(compiler, CMPI | A(dst) | 0);
+ }
if (!(flags & ALT_SET_FLAGS))
return push_inst(compiler, ADD | D(dst) | A(src1) | B(src2));
BIN_EXTS();
- if (flags & ALT_FORM4)
+ if (flags & ALT_FORM5)
return push_inst(compiler, ADDC | RC(ALT_SET_FLAGS) | D(dst) | A(src1) | B(src2));
return push_inst(compiler, ADD | RC(flags) | D(dst) | A(src1) | B(src2));
@@ -278,6 +285,19 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
}
if (flags & ALT_FORM2) {
+ if (flags & ALT_FORM3) {
+ FAIL_IF(push_inst(compiler, CMPI | CRD(0 | ((flags & ALT_SIGN_EXT) ? 0 : 1)) | A(src1) | compiler->imm));
+ if (!(flags & ALT_FORM4))
+ return SLJIT_SUCCESS;
+ return push_inst(compiler, ADDI | D(dst) | A(src1) | (-compiler->imm & 0xffff));
+ }
+ FAIL_IF(push_inst(compiler, CMP | CRD(0 | ((flags & ALT_SIGN_EXT) ? 0 : 1)) | A(src1) | B(src2)));
+ if (!(flags & ALT_FORM4))
+ return SLJIT_SUCCESS;
+ return push_inst(compiler, SUBF | D(dst) | A(src2) | B(src1));
+ }
+
+ if (flags & ALT_FORM3) {
if (flags & ALT_SIGN_EXT) {
FAIL_IF(push_inst(compiler, RLDI(TMP_REG1, src1, 32, 31, 1)));
src1 = TMP_REG1;
@@ -291,20 +311,12 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
return SLJIT_SUCCESS;
}
- if (flags & ALT_FORM3) {
+ if (flags & ALT_FORM4) {
/* Flags does not set: BIN_IMM_EXTS unnecessary. */
SLJIT_ASSERT(src2 == TMP_REG2);
return push_inst(compiler, SUBFIC | D(dst) | A(src1) | compiler->imm);
}
- if (flags & ALT_FORM4) {
- if (flags & ALT_FORM5) {
- SLJIT_ASSERT(src2 == TMP_REG2);
- return push_inst(compiler, CMPI | CRD(0 | ((flags & ALT_SIGN_EXT) ? 0 : 1)) | A(src1) | compiler->imm);
- }
- return push_inst(compiler, CMP | CRD(0 | ((flags & ALT_SIGN_EXT) ? 0 : 1)) | A(src1) | B(src2));
- }
-
if (!(flags & ALT_SET_FLAGS))
return push_inst(compiler, SUBF | D(dst) | A(src2) | B(src1));
BIN_EXTS();
diff --git a/thirdparty/pcre2/src/sljit/sljitNativePPC_common.c b/thirdparty/pcre2/src/sljit/sljitNativePPC_common.c
index d84562ce09..2174dbb07b 100644
--- a/thirdparty/pcre2/src/sljit/sljitNativePPC_common.c
+++ b/thirdparty/pcre2/src/sljit/sljitNativePPC_common.c
@@ -1324,6 +1324,25 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile
((src) & SLJIT_IMM)
#endif
+#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
+#define TEST_ADD_FORM1(op) \
+ (GET_FLAG_TYPE(op) == SLJIT_OVERFLOW \
+ || (op & (SLJIT_I32_OP | SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == (SLJIT_I32_OP | SLJIT_SET_Z | SLJIT_SET_CARRY))
+#define TEST_SUB_FORM2(op) \
+ ((GET_FLAG_TYPE(op) >= SLJIT_SIG_LESS && GET_FLAG_TYPE(op) <= SLJIT_SIG_LESS_EQUAL) \
+ || (op & (SLJIT_I32_OP | SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == (SLJIT_I32_OP | SLJIT_SET_Z))
+#define TEST_SUB_FORM3(op) \
+ (GET_FLAG_TYPE(op) == SLJIT_OVERFLOW \
+ || (op & (SLJIT_I32_OP | SLJIT_SET_Z)) == (SLJIT_I32_OP | SLJIT_SET_Z))
+#else
+#define TEST_ADD_FORM1(op) \
+ (GET_FLAG_TYPE(op) == SLJIT_OVERFLOW)
+#define TEST_SUB_FORM2(op) \
+ (GET_FLAG_TYPE(op) >= SLJIT_SIG_LESS && GET_FLAG_TYPE(op) <= SLJIT_SIG_LESS_EQUAL)
+#define TEST_SUB_FORM3(op) \
+ (GET_FLAG_TYPE(op) == SLJIT_OVERFLOW)
+#endif
+
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compiler, sljit_s32 op,
sljit_s32 dst, sljit_sw dstw,
sljit_s32 src1, sljit_sw src1w,
@@ -1362,7 +1381,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile
switch (GET_OPCODE(op)) {
case SLJIT_ADD:
- if (GET_FLAG_TYPE(op) == SLJIT_OVERFLOW)
+ if (TEST_ADD_FORM1(op))
return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM1, dst, dstw, src1, src1w, src2, src2w);
if (!HAS_FLAGS(op) && ((src1 | src2) & SLJIT_IMM)) {
@@ -1392,6 +1411,20 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile
return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM2 | ALT_FORM4, dst, dstw, src2, src2w, TMP_REG2, 0);
}
}
+
+#if (defined SLJIT_CONFIG_PPC_64 && SLJIT_CONFIG_PPC_64)
+ if ((op & (SLJIT_I32_OP | SLJIT_SET_Z)) == (SLJIT_I32_OP | SLJIT_SET_Z)) {
+ if (TEST_SL_IMM(src2, src2w)) {
+ compiler->imm = src2w & 0xffff;
+ return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM4 | ALT_FORM5, dst, dstw, src1, src1w, TMP_REG2, 0);
+ }
+ if (TEST_SL_IMM(src1, src1w)) {
+ compiler->imm = src1w & 0xffff;
+ return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM4 | ALT_FORM5, dst, dstw, src2, src2w, TMP_REG2, 0);
+ }
+ return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM4, dst, dstw, src1, src1w, src2, src2w);
+ }
+#endif
if (HAS_FLAGS(op)) {
if (TEST_SL_IMM(src2, src2w)) {
compiler->imm = src2w & 0xffff;
@@ -1402,7 +1435,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile
return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM3, dst, dstw, src2, src2w, TMP_REG2, 0);
}
}
- return emit_op(compiler, SLJIT_ADD, flags | ((GET_FLAG_TYPE(op) == GET_FLAG_TYPE(SLJIT_SET_CARRY)) ? ALT_FORM4 : 0), dst, dstw, src1, src1w, src2, src2w);
+ return emit_op(compiler, SLJIT_ADD, flags | ((GET_FLAG_TYPE(op) == GET_FLAG_TYPE(SLJIT_SET_CARRY)) ? ALT_FORM5 : 0), dst, dstw, src1, src1w, src2, src2w);
case SLJIT_ADDC:
return emit_op(compiler, SLJIT_ADDC, flags, dst, dstw, src1, src1w, src2, src2w);
@@ -1424,18 +1457,36 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile
return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM1 | ALT_FORM3, dst, dstw, src1, src1w, src2, src2w);
}
- if (GET_FLAG_TYPE(op) == SLJIT_OVERFLOW)
+ if (dst == SLJIT_UNUSED && GET_FLAG_TYPE(op) <= SLJIT_SIG_LESS_EQUAL) {
+ if (TEST_SL_IMM(src2, src2w)) {
+ compiler->imm = src2w & 0xffff;
+ return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM2 | ALT_FORM3, dst, dstw, src1, src1w, TMP_REG2, 0);
+ }
return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM2, dst, dstw, src1, src1w, src2, src2w);
+ }
- if (!HAS_FLAGS(op) && ((src1 | src2) & SLJIT_IMM)) {
- if (TEST_SL_IMM(src2, -src2w)) {
- compiler->imm = (-src2w) & 0xffff;
- return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM2, dst, dstw, src1, src1w, TMP_REG2, 0);
- }
- if (TEST_SL_IMM(src1, src1w)) {
- compiler->imm = src1w & 0xffff;
- return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM3, dst, dstw, src2, src2w, TMP_REG2, 0);
+ if (TEST_SUB_FORM2(op)) {
+ if ((src2 & SLJIT_IMM) && src2w >= -SIMM_MAX && src2w <= SIMM_MAX) {
+ compiler->imm = src2w & 0xffff;
+ return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM2 | ALT_FORM3 | ALT_FORM4, dst, dstw, src1, src1w, TMP_REG2, 0);
}
+ return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM2 | ALT_FORM4, dst, dstw, src1, src1w, src2, src2w);
+ }
+
+ if (TEST_SUB_FORM3(op))
+ return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM3, dst, dstw, src1, src1w, src2, src2w);
+
+ if (TEST_SL_IMM(src2, -src2w)) {
+ compiler->imm = (-src2w) & 0xffff;
+ return emit_op(compiler, SLJIT_ADD, flags | (!HAS_FLAGS(op) ? ALT_FORM2 : ALT_FORM3), dst, dstw, src1, src1w, TMP_REG2, 0);
+ }
+
+ if (TEST_SL_IMM(src1, src1w) && !(op & SLJIT_SET_Z)) {
+ compiler->imm = src1w & 0xffff;
+ return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM4, dst, dstw, src2, src2w, TMP_REG2, 0);
+ }
+
+ if (!HAS_FLAGS(op)) {
if (TEST_SH_IMM(src2, -src2w)) {
compiler->imm = ((-src2w) >> 16) & 0xffff;
return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM2 | ALT_FORM3, dst, dstw, src1, src1w, TMP_REG2, 0);
@@ -1447,18 +1498,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile
}
}
- if (dst == SLJIT_UNUSED && GET_FLAG_TYPE(op) != GET_FLAG_TYPE(SLJIT_SET_CARRY)) {
- if (TEST_SL_IMM(src2, src2w)) {
- compiler->imm = src2w & 0xffff;
- return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM4 | ALT_FORM5, dst, dstw, src1, src1w, TMP_REG2, 0);
- }
- return emit_op(compiler, SLJIT_SUB, flags | ALT_FORM4, dst, dstw, src1, src1w, src2, src2w);
- }
-
- if (TEST_SL_IMM(src2, -src2w)) {
- compiler->imm = (-src2w) & 0xffff;
- return emit_op(compiler, SLJIT_ADD, flags | ALT_FORM3, dst, dstw, src1, src1w, TMP_REG2, 0);
- }
/* We know ALT_SIGN_EXT is set if it is an SLJIT_I32_OP on 64 bit systems. */
return emit_op(compiler, SLJIT_SUB, flags | ((GET_FLAG_TYPE(op) == GET_FLAG_TYPE(SLJIT_SET_CARRY)) ? ALT_FORM5 : 0), dst, dstw, src1, src1w, src2, src2w);
@@ -1536,6 +1575,10 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compile
return SLJIT_SUCCESS;
}
+#undef TEST_ADD_FORM1
+#undef TEST_SUB_FORM2
+#undef TEST_SUB_FORM3
+
SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(struct sljit_compiler *compiler, sljit_s32 op,
sljit_s32 src, sljit_sw srcw)
{
@@ -1941,11 +1984,9 @@ static sljit_ins get_bo_bi_flags(sljit_s32 type)
return (4 << 21) | ((4 + 1) << 16);
case SLJIT_OVERFLOW:
- case SLJIT_MUL_OVERFLOW:
return (12 << 21) | (3 << 16);
case SLJIT_NOT_OVERFLOW:
- case SLJIT_MUL_NOT_OVERFLOW:
return (4 << 21) | (3 << 16);
case SLJIT_EQUAL_F64:
@@ -2143,12 +2184,10 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co
break;
case SLJIT_OVERFLOW:
- case SLJIT_MUL_OVERFLOW:
cr_bit = 3;
break;
case SLJIT_NOT_OVERFLOW:
- case SLJIT_MUL_NOT_OVERFLOW:
cr_bit = 3;
invert = 1;
break;
diff --git a/thirdparty/pcre2/src/sljit/sljitNativeS390X.c b/thirdparty/pcre2/src/sljit/sljitNativeS390X.c
index a8b65112d4..716491ec72 100644
--- a/thirdparty/pcre2/src/sljit/sljitNativeS390X.c
+++ b/thirdparty/pcre2/src/sljit/sljitNativeS390X.c
@@ -42,10 +42,10 @@ SLJIT_API_FUNC_ATTRIBUTE const char* sljit_get_platform_name(void)
typedef sljit_uw sljit_ins;
/* Instruction tags (most significant halfword). */
-const sljit_ins sljit_ins_const = (sljit_ins)1 << 48;
+static const sljit_ins sljit_ins_const = (sljit_ins)1 << 48;
static const sljit_u8 reg_map[SLJIT_NUMBER_OF_REGISTERS + 4] = {
- 14, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 0, 1
+ 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 0, 1
};
/* there are also a[2-15] available, but they are slower to access and
@@ -66,22 +66,22 @@ typedef sljit_uw sljit_gpr;
* will be retired ASAP (TODO: carenas)
*/
-const sljit_gpr r0 = 0; /* reg_map[SLJIT_NUMBER_OF_REGISTERS + 2]: 0 in address calculations; reserved */
-const sljit_gpr r1 = 1; /* reg_map[SLJIT_NUMBER_OF_REGISTERS + 3]: reserved */
-const sljit_gpr r2 = 2; /* reg_map[1]: 1st argument */
-const sljit_gpr r3 = 3; /* reg_map[2]: 2nd argument */
-const sljit_gpr r4 = 4; /* reg_map[3]: 3rd argument */
-const sljit_gpr r5 = 5; /* reg_map[4]: 4th argument */
-const sljit_gpr r6 = 6; /* reg_map[5]: 5th argument; 1st saved register */
-const sljit_gpr r7 = 7; /* reg_map[6] */
-const sljit_gpr r8 = 8; /* reg_map[7] */
-const sljit_gpr r9 = 9; /* reg_map[8] */
-const sljit_gpr r10 = 10; /* reg_map[9] */
-const sljit_gpr r11 = 11; /* reg_map[10] */
-const sljit_gpr r12 = 12; /* reg_map[11]: GOT */
-const sljit_gpr r13 = 13; /* reg_map[12]: Literal Pool pointer */
-const sljit_gpr r14 = 14; /* reg_map[0]: return address and flag register */
-const sljit_gpr r15 = 15; /* reg_map[SLJIT_NUMBER_OF_REGISTERS + 1]: stack pointer */
+static const sljit_gpr r0 = 0; /* reg_map[SLJIT_NUMBER_OF_REGISTERS + 2]: 0 in address calculations; reserved */
+static const sljit_gpr r1 = 1; /* reg_map[SLJIT_NUMBER_OF_REGISTERS + 3]: reserved */
+static const sljit_gpr r2 = 2; /* reg_map[1]: 1st argument */
+static const sljit_gpr r3 = 3; /* reg_map[2]: 2nd argument */
+static const sljit_gpr r4 = 4; /* reg_map[3]: 3rd argument */
+static const sljit_gpr r5 = 5; /* reg_map[4]: 4th argument */
+static const sljit_gpr r6 = 6; /* reg_map[5]: 5th argument; 1st saved register */
+static const sljit_gpr r7 = 7; /* reg_map[6] */
+static const sljit_gpr r8 = 8; /* reg_map[7] */
+static const sljit_gpr r9 = 9; /* reg_map[8] */
+static const sljit_gpr r10 = 10; /* reg_map[9] */
+static const sljit_gpr r11 = 11; /* reg_map[10] */
+static const sljit_gpr r12 = 12; /* reg_map[11]: GOT */
+static const sljit_gpr r13 = 13; /* reg_map[12]: Literal Pool pointer */
+static const sljit_gpr r14 = 14; /* reg_map[0]: return address and flag register */
+static const sljit_gpr r15 = 15; /* reg_map[SLJIT_NUMBER_OF_REGISTERS + 1]: stack pointer */
/* WARNING: r12 and r13 shouldn't be used as per ABI recommendation */
/* TODO(carenas): r12 might conflict in PIC code, reserve? */
@@ -100,8 +100,8 @@ const sljit_gpr r15 = 15; /* reg_map[SLJIT_NUMBER_OF_REGISTERS + 1]: stack point
/* Link registers. The normal link register is r14, but since
we use that for flags we need to use r0 instead to do fast
calls so that flags are preserved. */
-const sljit_gpr link_r = 14; /* r14 */
-const sljit_gpr fast_link_r = 0; /* r0 */
+static const sljit_gpr link_r = 14; /* r14 */
+static const sljit_gpr fast_link_r = 0; /* r0 */
/* Flag register layout:
@@ -110,7 +110,7 @@ const sljit_gpr fast_link_r = 0; /* r0 */
| ZERO | 0 | 0 | C C |///////|
+---------------+---+---+-------+-------+
*/
-const sljit_gpr flag_r = 14; /* r14 */
+static const sljit_gpr flag_r = 14; /* r14 */
struct sljit_s390x_const {
struct sljit_const const_; /* must be first */
@@ -120,8 +120,7 @@ struct sljit_s390x_const {
/* Convert SLJIT register to hardware register. */
static SLJIT_INLINE sljit_gpr gpr(sljit_s32 r)
{
- SLJIT_ASSERT(r != SLJIT_UNUSED);
- SLJIT_ASSERT(r < (sljit_s32)(sizeof(reg_map) / sizeof(reg_map[0])));
+ SLJIT_ASSERT(r >= 0 && r < (sljit_s32)(sizeof(reg_map) / sizeof(reg_map[0])));
return reg_map[r];
}
@@ -172,51 +171,93 @@ static sljit_s32 encode_inst(void **ptr, sljit_ins ins)
return SLJIT_SUCCESS;
}
+#define SLJIT_ADD_SUB_NO_COMPARE(status_flags_state) \
+ (((status_flags_state) & (SLJIT_CURRENT_FLAGS_ADD_SUB | SLJIT_CURRENT_FLAGS_COMPARE)) == SLJIT_CURRENT_FLAGS_ADD_SUB)
+
/* Map the given type to a 4-bit condition code mask. */
-static SLJIT_INLINE sljit_u8 get_cc(sljit_s32 type) {
- const sljit_u8 eq = 1 << 3; /* equal {,to zero} */
- const sljit_u8 lt = 1 << 2; /* less than {,zero} */
- const sljit_u8 gt = 1 << 1; /* greater than {,zero} */
- const sljit_u8 ov = 1 << 0; /* {overflow,NaN} */
+static SLJIT_INLINE sljit_u8 get_cc(struct sljit_compiler *compiler, sljit_s32 type) {
+ const sljit_u8 cc0 = 1 << 3; /* equal {,to zero} */
+ const sljit_u8 cc1 = 1 << 2; /* less than {,zero} */
+ const sljit_u8 cc2 = 1 << 1; /* greater than {,zero} */
+ const sljit_u8 cc3 = 1 << 0; /* {overflow,NaN} */
switch (type) {
case SLJIT_EQUAL:
+ if (SLJIT_ADD_SUB_NO_COMPARE(compiler->status_flags_state)) {
+ sljit_s32 type = GET_FLAG_TYPE(compiler->status_flags_state);
+ if (type >= SLJIT_SIG_LESS && type <= SLJIT_SIG_LESS_EQUAL)
+ return cc0;
+ if (type == SLJIT_OVERFLOW)
+ return (cc0 | cc3);
+ return (cc0 | cc2);
+ }
+
case SLJIT_EQUAL_F64:
- return eq;
+ return cc0;
case SLJIT_NOT_EQUAL:
+ if (SLJIT_ADD_SUB_NO_COMPARE(compiler->status_flags_state)) {
+ sljit_s32 type = GET_FLAG_TYPE(compiler->status_flags_state);
+ if (type >= SLJIT_SIG_LESS && type <= SLJIT_SIG_LESS_EQUAL)
+ return (cc1 | cc2 | cc3);
+ if (type == SLJIT_OVERFLOW)
+ return (cc1 | cc2);
+ return (cc1 | cc3);
+ }
+
case SLJIT_NOT_EQUAL_F64:
- return ~eq;
+ return (cc1 | cc2 | cc3);
case SLJIT_LESS:
+ return cc1;
+
+ case SLJIT_GREATER_EQUAL:
+ return (cc0 | cc2 | cc3);
+
+ case SLJIT_GREATER:
+ if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_COMPARE)
+ return cc2;
+ return cc3;
+
+ case SLJIT_LESS_EQUAL:
+ if (compiler->status_flags_state & SLJIT_CURRENT_FLAGS_COMPARE)
+ return (cc0 | cc1);
+ return (cc0 | cc1 | cc2);
+
case SLJIT_SIG_LESS:
case SLJIT_LESS_F64:
- return lt;
+ return cc1;
- case SLJIT_LESS_EQUAL:
case SLJIT_SIG_LESS_EQUAL:
case SLJIT_LESS_EQUAL_F64:
- return (lt | eq);
+ return (cc0 | cc1);
- case SLJIT_GREATER:
case SLJIT_SIG_GREATER:
- case SLJIT_GREATER_F64:
- return gt;
+ /* Overflow is considered greater, see SLJIT_SUB. */
+ return cc2 | cc3;
- case SLJIT_GREATER_EQUAL:
case SLJIT_SIG_GREATER_EQUAL:
- case SLJIT_GREATER_EQUAL_F64:
- return (gt | eq);
+ return (cc0 | cc2 | cc3);
case SLJIT_OVERFLOW:
- case SLJIT_MUL_OVERFLOW:
+ if (compiler->status_flags_state & SLJIT_SET_Z)
+ return (cc2 | cc3);
+
case SLJIT_UNORDERED_F64:
- return ov;
+ return cc3;
case SLJIT_NOT_OVERFLOW:
- case SLJIT_MUL_NOT_OVERFLOW:
+ if (compiler->status_flags_state & SLJIT_SET_Z)
+ return (cc0 | cc1);
+
case SLJIT_ORDERED_F64:
- return ~ov;
+ return (cc0 | cc1 | cc2);
+
+ case SLJIT_GREATER_F64:
+ return cc2;
+
+ case SLJIT_GREATER_EQUAL_F64:
+ return (cc0 | cc2);
}
SLJIT_UNREACHABLE();
@@ -346,19 +387,20 @@ HAVE_FACILITY(have_misc2, MISCELLANEOUS_INSTRUCTION_EXTENSIONS_2_FACILITY)
#define is_u32(d) (0 <= (d) && (d) <= 0xffffffffL)
#define CHECK_SIGNED(v, bitlen) \
- ((v) == (((v) << (sizeof(v) * 8 - bitlen)) >> (sizeof(v) * 8 - bitlen)))
+ ((v) >= -(1 << ((bitlen) - 1)) && (v) < (1 << ((bitlen) - 1)))
+#define is_s8(d) CHECK_SIGNED((d), 8)
#define is_s16(d) CHECK_SIGNED((d), 16)
#define is_s20(d) CHECK_SIGNED((d), 20)
-#define is_s32(d) CHECK_SIGNED((d), 32)
+#define is_s32(d) ((d) == (sljit_s32)(d))
-static SLJIT_INLINE sljit_uw disp_s20(sljit_s32 d)
+static SLJIT_INLINE sljit_ins disp_s20(sljit_s32 d)
{
+ SLJIT_ASSERT(is_s20(d));
+
sljit_uw dh = (d >> 12) & 0xff;
sljit_uw dl = (d << 8) & 0xfff00;
-
- SLJIT_ASSERT(is_s20(d));
- return dh | dl;
+ return (dh | dl) << 8;
}
/* TODO(carenas): variadic macro is not strictly needed */
@@ -372,12 +414,6 @@ SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src) \
return (pattern) | ((dst & 0xf) << 4) | (src & 0xf); \
}
-/* ADD */
-SLJIT_S390X_RR(ar, 0x1a00)
-
-/* ADD LOGICAL */
-SLJIT_S390X_RR(alr, 0x1e00)
-
/* AND */
SLJIT_S390X_RR(nr, 0x1400)
@@ -387,12 +423,6 @@ SLJIT_S390X_RR(basr, 0x0d00)
/* BRANCH ON CONDITION */
SLJIT_S390X_RR(bcr, 0x0700) /* TODO(mundaym): type for mask? */
-/* COMPARE */
-SLJIT_S390X_RR(cr, 0x1900)
-
-/* COMPARE LOGICAL */
-SLJIT_S390X_RR(clr, 0x1500)
-
/* DIVIDE */
SLJIT_S390X_RR(dr, 0x1d00)
@@ -408,12 +438,6 @@ SLJIT_S390X_RR(lcr, 0x1300)
/* OR */
SLJIT_S390X_RR(or, 0x1600)
-/* SUBTRACT */
-SLJIT_S390X_RR(sr, 0x1b00)
-
-/* SUBTRACT LOGICAL */
-SLJIT_S390X_RR(slr, 0x1f00)
-
#undef SLJIT_S390X_RR
/* RRE form instructions */
@@ -423,25 +447,9 @@ SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src) \
return (pattern) | ((dst & 0xf) << 4) | (src & 0xf); \
}
-/* ADD */
-SLJIT_S390X_RRE(agr, 0xb9080000)
-
-/* ADD LOGICAL */
-SLJIT_S390X_RRE(algr, 0xb90a0000)
-
-/* ADD LOGICAL WITH CARRY */
-SLJIT_S390X_RRE(alcr, 0xb9980000)
-SLJIT_S390X_RRE(alcgr, 0xb9880000)
-
/* AND */
SLJIT_S390X_RRE(ngr, 0xb9800000)
-/* COMPARE */
-SLJIT_S390X_RRE(cgr, 0xb9200000)
-
-/* COMPARE LOGICAL */
-SLJIT_S390X_RRE(clgr, 0xb9210000)
-
/* DIVIDE LOGICAL */
SLJIT_S390X_RRE(dlr, 0xb9970000)
SLJIT_S390X_RRE(dlgr, 0xb9870000)
@@ -482,8 +490,6 @@ SLJIT_S390X_RRE(llghr, 0xb9850000)
SLJIT_S390X_RRE(mlgr, 0xb9860000)
/* MULTIPLY SINGLE */
-SLJIT_S390X_RRE(msr, 0xb2520000)
-SLJIT_S390X_RRE(msgr, 0xb90c0000)
SLJIT_S390X_RRE(msgfr, 0xb91c0000)
/* OR */
@@ -492,13 +498,6 @@ SLJIT_S390X_RRE(ogr, 0xb9810000)
/* SUBTRACT */
SLJIT_S390X_RRE(sgr, 0xb9090000)
-/* SUBTRACT LOGICAL */
-SLJIT_S390X_RRE(slgr, 0xb90b0000)
-
-/* SUBTRACT LOGICAL WITH BORROW */
-SLJIT_S390X_RRE(slbr, 0xb9990000)
-SLJIT_S390X_RRE(slbgr, 0xb9890000)
-
#undef SLJIT_S390X_RRE
/* RI-a form instructions */
@@ -509,13 +508,8 @@ SLJIT_S390X_INSTRUCTION(name, sljit_gpr reg, imm_type imm) \
}
/* ADD HALFWORD IMMEDIATE */
-SLJIT_S390X_RIA(ahi, 0xa70a0000, sljit_s16)
SLJIT_S390X_RIA(aghi, 0xa70b0000, sljit_s16)
-/* COMPARE HALFWORD IMMEDIATE */
-SLJIT_S390X_RIA(chi, 0xa70e0000, sljit_s16)
-SLJIT_S390X_RIA(cghi, 0xa70f0000, sljit_s16)
-
/* LOAD HALFWORD IMMEDIATE */
SLJIT_S390X_RIA(lhi, 0xa7080000, sljit_s16)
SLJIT_S390X_RIA(lghi, 0xa7090000, sljit_s16)
@@ -533,9 +527,6 @@ SLJIT_S390X_RIA(mghi, 0xa70d0000, sljit_s16)
/* OR IMMEDIATE */
SLJIT_S390X_RIA(oilh, 0xa50a0000, sljit_u16)
-/* TEST UNDER MASK */
-SLJIT_S390X_RIA(tmlh, 0xa7000000, sljit_u16)
-
#undef SLJIT_S390X_RIA
/* RIL-a form instructions (requires extended immediate facility) */
@@ -547,30 +538,13 @@ SLJIT_S390X_INSTRUCTION(name, sljit_gpr reg, imm_type imm) \
}
/* ADD IMMEDIATE */
-SLJIT_S390X_RILA(afi, 0xc20900000000, sljit_s32)
SLJIT_S390X_RILA(agfi, 0xc20800000000, sljit_s32)
/* ADD IMMEDIATE HIGH */
SLJIT_S390X_RILA(aih, 0xcc0800000000, sljit_s32) /* TODO(mundaym): high-word facility? */
-/* ADD LOGICAL IMMEDIATE */
-SLJIT_S390X_RILA(alfi, 0xc20b00000000, sljit_u32)
-SLJIT_S390X_RILA(algfi, 0xc20a00000000, sljit_u32)
-
/* AND IMMEDIATE */
SLJIT_S390X_RILA(nihf, 0xc00a00000000, sljit_u32)
-SLJIT_S390X_RILA(nilf, 0xc00b00000000, sljit_u32)
-
-/* COMPARE IMMEDIATE */
-SLJIT_S390X_RILA(cfi, 0xc20d00000000, sljit_s32)
-SLJIT_S390X_RILA(cgfi, 0xc20c00000000, sljit_s32)
-
-/* COMPARE IMMEDIATE HIGH */
-SLJIT_S390X_RILA(cih, 0xcc0d00000000, sljit_s32) /* TODO(mundaym): high-word facility? */
-
-/* COMPARE LOGICAL IMMEDIATE */
-SLJIT_S390X_RILA(clfi, 0xc20f00000000, sljit_u32)
-SLJIT_S390X_RILA(clgfi, 0xc20e00000000, sljit_u32)
/* EXCLUSIVE OR IMMEDIATE */
SLJIT_S390X_RILA(xilf, 0xc00700000000, sljit_u32)
@@ -586,8 +560,8 @@ SLJIT_S390X_RILA(lgfi, 0xc00100000000, sljit_s32)
SLJIT_S390X_RILA(llihf, 0xc00e00000000, sljit_u32)
SLJIT_S390X_RILA(llilf, 0xc00f00000000, sljit_u32)
-/* OR IMMEDIATE */
-SLJIT_S390X_RILA(oilf, 0xc00d00000000, sljit_u32)
+/* SUBTRACT LOGICAL IMMEDIATE */
+SLJIT_S390X_RILA(slfi, 0xc20500000000, sljit_u32)
#undef SLJIT_S390X_RILA
@@ -606,18 +580,6 @@ SLJIT_S390X_INSTRUCTION(name, sljit_gpr r, sljit_u16 d, sljit_gpr x, sljit_gpr b
return (pattern) | ri | xi | bi | di; \
}
-/* ADD */
-SLJIT_S390X_RXA(a, 0x5a000000)
-
-/* ADD LOGICAL */
-SLJIT_S390X_RXA(al, 0x5e000000)
-
-/* AND */
-SLJIT_S390X_RXA(n, 0x54000000)
-
-/* EXCLUSIVE OR */
-SLJIT_S390X_RXA(x, 0x57000000)
-
/* LOAD */
SLJIT_S390X_RXA(l, 0x58000000)
@@ -630,9 +592,6 @@ SLJIT_S390X_RXA(lh, 0x48000000)
/* MULTIPLY SINGLE */
SLJIT_S390X_RXA(ms, 0x71000000)
-/* OR */
-SLJIT_S390X_RXA(o, 0x56000000)
-
/* STORE */
SLJIT_S390X_RXA(st, 0x50000000)
@@ -642,12 +601,6 @@ SLJIT_S390X_RXA(stc, 0x42000000)
/* STORE HALFWORD */
SLJIT_S390X_RXA(sth, 0x40000000)
-/* SUBTRACT */
-SLJIT_S390X_RXA(s, 0x5b000000)
-
-/* SUBTRACT LOGICAL */
-SLJIT_S390X_RXA(sl, 0x5f000000)
-
#undef SLJIT_S390X_RXA
/* RXY-a instructions */
@@ -660,31 +613,11 @@ SLJIT_S390X_INSTRUCTION(name, sljit_gpr r, sljit_s32 d, sljit_gpr x, sljit_gpr b
ri = (sljit_ins)(r & 0xf) << 36; \
xi = (sljit_ins)(x & 0xf) << 32; \
bi = (sljit_ins)(b & 0xf) << 28; \
- di = (sljit_ins)disp_s20(d) << 8; \
+ di = disp_s20(d); \
\
return (pattern) | ri | xi | bi | di; \
}
-/* ADD */
-SLJIT_S390X_RXYA(ay, 0xe3000000005a, have_ldisp())
-SLJIT_S390X_RXYA(ag, 0xe30000000008, 1)
-
-/* ADD LOGICAL */
-SLJIT_S390X_RXYA(aly, 0xe3000000005e, have_ldisp())
-SLJIT_S390X_RXYA(alg, 0xe3000000000a, 1)
-
-/* ADD LOGICAL WITH CARRY */
-SLJIT_S390X_RXYA(alc, 0xe30000000098, 1)
-SLJIT_S390X_RXYA(alcg, 0xe30000000088, 1)
-
-/* AND */
-SLJIT_S390X_RXYA(ny, 0xe30000000054, have_ldisp())
-SLJIT_S390X_RXYA(ng, 0xe30000000080, 1)
-
-/* EXCLUSIVE OR */
-SLJIT_S390X_RXYA(xy, 0xe30000000057, have_ldisp())
-SLJIT_S390X_RXYA(xg, 0xe30000000082, 1)
-
/* LOAD */
SLJIT_S390X_RXYA(ly, 0xe30000000058, have_ldisp())
SLJIT_S390X_RXYA(lg, 0xe30000000004, 1)
@@ -713,10 +646,6 @@ SLJIT_S390X_RXYA(llgh, 0xe30000000091, 1)
SLJIT_S390X_RXYA(msy, 0xe30000000051, have_ldisp())
SLJIT_S390X_RXYA(msg, 0xe3000000000c, 1)
-/* OR */
-SLJIT_S390X_RXYA(oy, 0xe30000000056, have_ldisp())
-SLJIT_S390X_RXYA(og, 0xe30000000081, 1)
-
/* STORE */
SLJIT_S390X_RXYA(sty, 0xe30000000050, have_ldisp())
SLJIT_S390X_RXYA(stg, 0xe30000000024, 1)
@@ -727,41 +656,8 @@ SLJIT_S390X_RXYA(stcy, 0xe30000000072, have_ldisp())
/* STORE HALFWORD */
SLJIT_S390X_RXYA(sthy, 0xe30000000070, have_ldisp())
-/* SUBTRACT */
-SLJIT_S390X_RXYA(sy, 0xe3000000005b, have_ldisp())
-SLJIT_S390X_RXYA(sg, 0xe30000000009, 1)
-
-/* SUBTRACT LOGICAL */
-SLJIT_S390X_RXYA(sly, 0xe3000000005f, have_ldisp())
-SLJIT_S390X_RXYA(slg, 0xe3000000000b, 1)
-
-/* SUBTRACT LOGICAL WITH BORROW */
-SLJIT_S390X_RXYA(slb, 0xe30000000099, 1)
-SLJIT_S390X_RXYA(slbg, 0xe30000000089, 1)
-
#undef SLJIT_S390X_RXYA
-/* RS-a instructions */
-#define SLJIT_S390X_RSA(name, pattern) \
-SLJIT_S390X_INSTRUCTION(name, sljit_gpr reg, sljit_sw d, sljit_gpr b) \
-{ \
- sljit_ins r1 = (sljit_ins)(reg & 0xf) << 20; \
- sljit_ins b2 = (sljit_ins)(b & 0xf) << 12; \
- sljit_ins d2 = (sljit_ins)(d & 0xfff); \
- return (pattern) | r1 | b2 | d2; \
-}
-
-/* SHIFT LEFT SINGLE LOGICAL */
-SLJIT_S390X_RSA(sll, 0x89000000)
-
-/* SHIFT RIGHT SINGLE */
-SLJIT_S390X_RSA(sra, 0x8a000000)
-
-/* SHIFT RIGHT SINGLE LOGICAL */
-SLJIT_S390X_RSA(srl, 0x88000000)
-
-#undef SLJIT_S390X_RSA
-
/* RSY-a instructions */
#define SLJIT_S390X_RSYA(name, pattern, cond) \
SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src, sljit_sw d, sljit_gpr b) \
@@ -772,7 +668,7 @@ SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src, sljit_sw d, sljit_gp
r1 = (sljit_ins)(dst & 0xf) << 36; \
r3 = (sljit_ins)(src & 0xf) << 32; \
b2 = (sljit_ins)(b & 0xf) << 28; \
- d2 = (sljit_ins)disp_s20(d) << 8; \
+ d2 = disp_s20(d); \
\
return (pattern) | r1 | r3 | b2 | d2; \
}
@@ -786,9 +682,6 @@ SLJIT_S390X_RSYA(sllg, 0xeb000000000d, 1)
/* SHIFT RIGHT SINGLE */
SLJIT_S390X_RSYA(srag, 0xeb000000000a, 1)
-/* SHIFT RIGHT SINGLE LOGICAL */
-SLJIT_S390X_RSYA(srlg, 0xeb000000000c, 1)
-
/* STORE MULTIPLE */
SLJIT_S390X_RSYA(stmg, 0xeb0000000024, 1)
@@ -831,26 +724,6 @@ SLJIT_S390X_RIEF(risbhg, 0xec000000005d)
#undef SLJIT_S390X_RIEF
-/* RRF-a instructions */
-#define SLJIT_S390X_RRFA(name, pattern, cond) \
-SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src1, sljit_gpr src2) \
-{ \
- sljit_ins r1, r2, r3; \
-\
- SLJIT_ASSERT(cond); \
- r1 = (sljit_ins)(dst & 0xf) << 4; \
- r2 = (sljit_ins)(src1 & 0xf); \
- r3 = (sljit_ins)(src2 & 0xf) << 12; \
-\
- return (pattern) | r3 | r1 | r2; \
-}
-
-/* MULTIPLY */
-SLJIT_S390X_RRFA(msrkc, 0xb9fd0000, have_misc2())
-SLJIT_S390X_RRFA(msgrkc, 0xb9ed0000, have_misc2())
-
-#undef SLJIT_S390X_RRFA
-
/* RRF-c instructions (require load/store-on-condition 1 facility) */
#define SLJIT_S390X_RRFC(name, pattern) \
SLJIT_S390X_INSTRUCTION(name, sljit_gpr dst, sljit_gpr src, sljit_uw mask) \
@@ -919,6 +792,13 @@ SLJIT_S390X_INSTRUCTION(br, sljit_gpr target)
return 0x07f0 | target;
}
+SLJIT_S390X_INSTRUCTION(brc, sljit_uw mask, sljit_sw target)
+{
+ sljit_ins m1 = (sljit_ins)(mask & 0xf) << 20;
+ sljit_ins ri2 = (sljit_ins)target & 0xffff;
+ return 0xa7040000L | m1 | ri2;
+}
+
SLJIT_S390X_INSTRUCTION(brcl, sljit_uw mask, sljit_sw target)
{
sljit_ins m1 = (sljit_ins)(mask & 0xf) << 36;
@@ -940,6 +820,12 @@ SLJIT_S390X_INSTRUCTION(ipm, sljit_gpr dst)
return 0xb2220000 | ((sljit_ins)(dst & 0xf) << 4);
}
+/* SET PROGRAM MASK */
+SLJIT_S390X_INSTRUCTION(spm, sljit_gpr dst)
+{
+ return 0x0400 | ((sljit_ins)(dst & 0xf) << 4);
+}
+
/* ROTATE THEN INSERT SELECTED BITS HIGH (ZERO) */
SLJIT_S390X_INSTRUCTION(risbhgz, sljit_gpr dst, sljit_gpr src, sljit_u8 start, sljit_u8 end, sljit_u8 rot)
{
@@ -948,30 +834,20 @@ SLJIT_S390X_INSTRUCTION(risbhgz, sljit_gpr dst, sljit_gpr src, sljit_u8 start, s
#undef SLJIT_S390X_INSTRUCTION
-/* load condition code as needed to match type */
-static sljit_s32 push_load_cc(struct sljit_compiler *compiler, sljit_s32 type)
+static sljit_s32 update_zero_overflow(struct sljit_compiler *compiler, sljit_s32 op, sljit_gpr dst_r)
{
- type &= ~SLJIT_I32_OP;
- switch (type) {
- case SLJIT_ZERO:
- case SLJIT_NOT_ZERO:
- return push_inst(compiler, cih(flag_r, 0));
- break;
- default:
- return push_inst(compiler, tmlh(flag_r, 0x3000));
- break;
- }
- return SLJIT_SUCCESS;
-}
-
-static sljit_s32 push_store_zero_flag(struct sljit_compiler *compiler, sljit_s32 op, sljit_gpr source)
-{
- /* insert low 32-bits into high 32-bits of flag register */
- FAIL_IF(push_inst(compiler, risbhgz(flag_r, source, 0, 31, 32)));
- if (!(op & SLJIT_I32_OP)) {
- /* OR high 32-bits with high 32-bits of flag register */
- return push_inst(compiler, rosbg(flag_r, source, 0, 31, 0));
- }
+ /* Condition codes: bits 18 and 19.
+ Transformation:
+ 0 (zero and no overflow) : unchanged
+ 1 (non-zero and no overflow) : unchanged
+ 2 (zero and overflow) : decreased by 1
+ 3 (non-zero and overflow) : decreased by 1 if non-zero */
+ FAIL_IF(push_inst(compiler, brc(0xc, 2 + 2 + ((op & SLJIT_I32_OP) ? 1 : 2) + 2 + 3 + 1)));
+ FAIL_IF(push_inst(compiler, ipm(flag_r)));
+ FAIL_IF(push_inst(compiler, (op & SLJIT_I32_OP) ? or(dst_r, dst_r) : ogr(dst_r, dst_r)));
+ FAIL_IF(push_inst(compiler, brc(0x8, 2 + 3)));
+ FAIL_IF(push_inst(compiler, slfi(flag_r, 0x10000000)));
+ FAIL_IF(push_inst(compiler, spm(flag_r)));
return SLJIT_SUCCESS;
}
@@ -1088,18 +964,19 @@ static sljit_s32 make_addr_bx(struct sljit_compiler *compiler,
#define WHEN(cond, r, i1, i2, addr) \
(cond) ? EVAL(i1, r, addr) : EVAL(i2, r, addr)
+/* May clobber tmp1. */
static sljit_s32 load_word(struct sljit_compiler *compiler, sljit_gpr dst,
sljit_s32 src, sljit_sw srcw,
- sljit_gpr tmp /* clobbered */, sljit_s32 is_32bit)
+ sljit_s32 is_32bit)
{
struct addr addr;
sljit_ins ins;
SLJIT_ASSERT(src & SLJIT_MEM);
if (have_ldisp() || !is_32bit)
- FAIL_IF(make_addr_bxy(compiler, &addr, src, srcw, tmp));
+ FAIL_IF(make_addr_bxy(compiler, &addr, src, srcw, tmp1));
else
- FAIL_IF(make_addr_bx(compiler, &addr, src, srcw, tmp));
+ FAIL_IF(make_addr_bx(compiler, &addr, src, srcw, tmp1));
if (is_32bit)
ins = WHEN(is_u12(addr.offset), dst, l, ly, addr);
@@ -1109,18 +986,19 @@ static sljit_s32 load_word(struct sljit_compiler *compiler, sljit_gpr dst,
return push_inst(compiler, ins);
}
+/* May clobber tmp1. */
static sljit_s32 store_word(struct sljit_compiler *compiler, sljit_gpr src,
sljit_s32 dst, sljit_sw dstw,
- sljit_gpr tmp /* clobbered */, sljit_s32 is_32bit)
+ sljit_s32 is_32bit)
{
struct addr addr;
sljit_ins ins;
SLJIT_ASSERT(dst & SLJIT_MEM);
if (have_ldisp() || !is_32bit)
- FAIL_IF(make_addr_bxy(compiler, &addr, dst, dstw, tmp));
+ FAIL_IF(make_addr_bxy(compiler, &addr, dst, dstw, tmp1));
else
- FAIL_IF(make_addr_bx(compiler, &addr, dst, dstw, tmp));
+ FAIL_IF(make_addr_bx(compiler, &addr, dst, dstw, tmp1));
if (is_32bit)
ins = WHEN(is_u12(addr.offset), src, st, sty, addr);
@@ -1132,6 +1010,358 @@ static sljit_s32 store_word(struct sljit_compiler *compiler, sljit_gpr src,
#undef WHEN
+static sljit_s32 emit_move(struct sljit_compiler *compiler,
+ sljit_gpr dst_r,
+ sljit_s32 src, sljit_sw srcw)
+{
+ SLJIT_ASSERT(!SLOW_IS_REG(src) || dst_r != gpr(src & REG_MASK));
+
+ if (src & SLJIT_IMM)
+ return push_load_imm_inst(compiler, dst_r, srcw);
+
+ if (src & SLJIT_MEM)
+ return load_word(compiler, dst_r, src, srcw, (compiler->mode & SLJIT_I32_OP) != 0);
+
+ sljit_gpr src_r = gpr(src & REG_MASK);
+ return push_inst(compiler, (compiler->mode & SLJIT_I32_OP) ? lr(dst_r, src_r) : lgr(dst_r, src_r));
+}
+
+static sljit_s32 emit_rr(struct sljit_compiler *compiler, sljit_ins ins,
+ sljit_s32 dst,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w)
+{
+ sljit_gpr dst_r = tmp0;
+ sljit_gpr src_r = tmp1;
+ sljit_s32 needs_move = 1;
+
+ if (SLOW_IS_REG(dst)) {
+ dst_r = gpr(dst & REG_MASK);
+
+ if (dst == src1)
+ needs_move = 0;
+ else if (dst == src2) {
+ dst_r = tmp0;
+ needs_move = 2;
+ }
+ }
+
+ if (needs_move)
+ FAIL_IF(emit_move(compiler, dst_r, src1, src1w));
+
+ if (FAST_IS_REG(src2))
+ src_r = gpr(src2 & REG_MASK);
+ else
+ FAIL_IF(emit_move(compiler, tmp1, src2, src2w));
+
+ FAIL_IF(push_inst(compiler, ins | (dst_r << 4) | src_r));
+
+ if (needs_move != 2)
+ return SLJIT_SUCCESS;
+
+ dst_r = gpr(dst & REG_MASK);
+ return push_inst(compiler, (compiler->mode & SLJIT_I32_OP) ? lr(dst_r, tmp0) : lgr(dst_r, tmp0));
+}
+
+static sljit_s32 emit_rrf(struct sljit_compiler *compiler, sljit_ins ins,
+ sljit_s32 dst,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w)
+{
+ sljit_gpr dst_r = SLOW_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0;
+ sljit_gpr src1_r = tmp0;
+ sljit_gpr src2_r = tmp1;
+
+ if (FAST_IS_REG(src1))
+ src1_r = gpr(src1 & REG_MASK);
+ else
+ FAIL_IF(emit_move(compiler, tmp0, src1, src1w));
+
+ if (FAST_IS_REG(src2))
+ src2_r = gpr(src2 & REG_MASK);
+ else
+ FAIL_IF(emit_move(compiler, tmp1, src2, src2w));
+
+ return push_inst(compiler, ins | (dst_r << 4) | src1_r | (src2_r << 12));
+}
+
+typedef enum {
+ RI_A,
+ RIL_A,
+} emit_ril_type;
+
+static sljit_s32 emit_ri(struct sljit_compiler *compiler, sljit_ins ins,
+ sljit_s32 dst,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_sw src2w,
+ emit_ril_type type)
+{
+ sljit_gpr dst_r = tmp0;
+ sljit_s32 needs_move = 1;
+
+ if (SLOW_IS_REG(dst)) {
+ dst_r = gpr(dst & REG_MASK);
+
+ if (dst == src1)
+ needs_move = 0;
+ }
+
+ if (needs_move)
+ FAIL_IF(emit_move(compiler, dst_r, src1, src1w));
+
+ if (type == RIL_A)
+ return push_inst(compiler, ins | (dst_r << 36) | (src2w & 0xffffffff));
+ return push_inst(compiler, ins | (dst_r << 20) | (src2w & 0xffff));
+}
+
+static sljit_s32 emit_rie_d(struct sljit_compiler *compiler, sljit_ins ins,
+ sljit_s32 dst,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_sw src2w)
+{
+ sljit_gpr dst_r = SLOW_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0;
+ sljit_gpr src_r = tmp0;
+
+ if (!SLOW_IS_REG(src1))
+ FAIL_IF(emit_move(compiler, tmp0, src1, src1w));
+ else
+ src_r = gpr(src1 & REG_MASK);
+
+ return push_inst(compiler, ins | (dst_r << 36) | (src_r << 32) | (src2w & 0xffff) << 16);
+}
+
+typedef enum {
+ RX_A,
+ RXY_A,
+} emit_rx_type;
+
+static sljit_s32 emit_rx(struct sljit_compiler *compiler, sljit_ins ins,
+ sljit_s32 dst,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w,
+ emit_rx_type type)
+{
+ sljit_gpr dst_r = tmp0;
+ sljit_s32 needs_move = 1;
+ sljit_gpr base, index;
+
+ SLJIT_ASSERT(src2 & SLJIT_MEM);
+
+ if (SLOW_IS_REG(dst)) {
+ dst_r = gpr(dst);
+
+ if (dst == src1)
+ needs_move = 0;
+ else if (dst == (src2 & REG_MASK) || (dst == OFFS_REG(src2))) {
+ dst_r = tmp0;
+ needs_move = 2;
+ }
+ }
+
+ if (needs_move)
+ FAIL_IF(emit_move(compiler, dst_r, src1, src1w));
+
+ base = gpr(src2 & REG_MASK);
+ index = tmp0;
+
+ if (src2 & OFFS_REG_MASK) {
+ index = gpr(OFFS_REG(src2));
+
+ if (src2w != 0) {
+ FAIL_IF(push_inst(compiler, sllg(tmp1, index, src2w & 0x3, 0)));
+ src2w = 0;
+ index = tmp1;
+ }
+ } else if ((type == RX_A && !is_u12(src2w)) || (type == RXY_A && !is_s20(src2w))) {
+ FAIL_IF(push_load_imm_inst(compiler, tmp1, src2w));
+
+ if (src2 & REG_MASK)
+ index = tmp1;
+ else
+ base = tmp1;
+ src2w = 0;
+ }
+
+ if (type == RX_A)
+ ins |= (dst_r << 20) | (index << 16) | (base << 12) | src2w;
+ else
+ ins |= (dst_r << 36) | (index << 32) | (base << 28) | disp_s20(src2w);
+
+ FAIL_IF(push_inst(compiler, ins));
+
+ if (needs_move != 2)
+ return SLJIT_SUCCESS;
+
+ dst_r = gpr(dst);
+ return push_inst(compiler, (compiler->mode & SLJIT_I32_OP) ? lr(dst_r, tmp0) : lgr(dst_r, tmp0));
+}
+
+static sljit_s32 emit_siy(struct sljit_compiler *compiler, sljit_ins ins,
+ sljit_s32 dst, sljit_sw dstw,
+ sljit_sw srcw)
+{
+ SLJIT_ASSERT(dst & SLJIT_MEM);
+
+ sljit_gpr dst_r = tmp1;
+
+ if (dst & OFFS_REG_MASK) {
+ sljit_gpr index = tmp1;
+
+ if ((dstw & 0x3) == 0)
+ index = gpr(OFFS_REG(dst));
+ else
+ FAIL_IF(push_inst(compiler, sllg(tmp1, index, dstw & 0x3, 0)));
+
+ FAIL_IF(push_inst(compiler, la(tmp1, 0, dst_r, index)));
+ dstw = 0;
+ }
+ else if (!is_s20(dstw)) {
+ FAIL_IF(push_load_imm_inst(compiler, tmp1, dstw));
+
+ if (dst & REG_MASK)
+ FAIL_IF(push_inst(compiler, la(tmp1, 0, dst_r, tmp1)));
+
+ dstw = 0;
+ }
+ else
+ dst_r = gpr(dst & REG_MASK);
+
+ return push_inst(compiler, ins | ((srcw & 0xff) << 32) | (dst_r << 28) | disp_s20(dstw));
+}
+
+struct ins_forms {
+ sljit_ins op_r;
+ sljit_ins op_gr;
+ sljit_ins op_rk;
+ sljit_ins op_grk;
+ sljit_ins op;
+ sljit_ins op_y;
+ sljit_ins op_g;
+};
+
+static sljit_s32 emit_commutative(struct sljit_compiler *compiler, const struct ins_forms *forms,
+ sljit_s32 dst, sljit_sw dstw,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w)
+{
+ sljit_s32 mode = compiler->mode;
+ sljit_ins ins, ins_k;
+
+ if ((src1 | src2) & SLJIT_MEM) {
+ sljit_ins ins12, ins20;
+
+ if (mode & SLJIT_I32_OP) {
+ ins12 = forms->op;
+ ins20 = forms->op_y;
+ }
+ else {
+ ins12 = 0;
+ ins20 = forms->op_g;
+ }
+
+ if (ins12 && ins20) {
+ /* Extra instructions needed for address computation can be executed independently. */
+ if ((src2 & SLJIT_MEM) && (!(src1 & SLJIT_MEM)
+ || ((src1 & OFFS_REG_MASK) ? (src1w & 0x3) == 0 : is_s20(src1w)))) {
+ if ((src2 & OFFS_REG_MASK) || is_u12(src2w) || !is_s20(src2w))
+ return emit_rx(compiler, ins12, dst, src1, src1w, src2, src2w, RX_A);
+
+ return emit_rx(compiler, ins20, dst, src1, src1w, src2, src2w, RXY_A);
+ }
+
+ if (src1 & SLJIT_MEM) {
+ if ((src1 & OFFS_REG_MASK) || is_u12(src1w) || !is_s20(src1w))
+ return emit_rx(compiler, ins12, dst, src2, src2w, src1, src1w, RX_A);
+
+ return emit_rx(compiler, ins20, dst, src2, src2w, src1, src1w, RXY_A);
+ }
+ }
+ else if (ins12 || ins20) {
+ emit_rx_type rx_type;
+
+ if (ins12) {
+ rx_type = RX_A;
+ ins = ins12;
+ }
+ else {
+ rx_type = RXY_A;
+ ins = ins20;
+ }
+
+ if ((src2 & SLJIT_MEM) && (!(src1 & SLJIT_MEM)
+ || ((src1 & OFFS_REG_MASK) ? (src1w & 0x3) == 0 : (rx_type == RX_A ? is_u12(src1w) : is_s20(src1w)))))
+ return emit_rx(compiler, ins, dst, src1, src1w, src2, src2w, rx_type);
+
+ if (src1 & SLJIT_MEM)
+ return emit_rx(compiler, ins, dst, src2, src2w, src1, src1w, rx_type);
+ }
+ }
+
+ if (mode & SLJIT_I32_OP) {
+ ins = forms->op_r;
+ ins_k = forms->op_rk;
+ }
+ else {
+ ins = forms->op_gr;
+ ins_k = forms->op_grk;
+ }
+
+ SLJIT_ASSERT(ins != 0 || ins_k != 0);
+
+ if (ins && SLOW_IS_REG(dst)) {
+ if (dst == src1)
+ return emit_rr(compiler, ins, dst, src1, src1w, src2, src2w);
+
+ if (dst == src2)
+ return emit_rr(compiler, ins, dst, src2, src2w, src1, src1w);
+ }
+
+ if (ins_k == 0)
+ return emit_rr(compiler, ins, dst, src1, src1w, src2, src2w);
+
+ return emit_rrf(compiler, ins_k, dst, src1, src1w, src2, src2w);
+}
+
+static sljit_s32 emit_non_commutative(struct sljit_compiler *compiler, const struct ins_forms *forms,
+ sljit_s32 dst, sljit_sw dstw,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w)
+{
+ sljit_s32 mode = compiler->mode;
+ sljit_ins ins;
+
+ if (src2 & SLJIT_MEM) {
+ sljit_ins ins12, ins20;
+
+ if (mode & SLJIT_I32_OP) {
+ ins12 = forms->op;
+ ins20 = forms->op_y;
+ }
+ else {
+ ins12 = 0;
+ ins20 = forms->op_g;
+ }
+
+ if (ins12 && ins20) {
+ if ((src2 & OFFS_REG_MASK) || is_u12(src2w) || !is_s20(src2w))
+ return emit_rx(compiler, ins12, dst, src1, src1w, src2, src2w, RX_A);
+
+ return emit_rx(compiler, ins20, dst, src1, src1w, src2, src2w, RXY_A);
+ }
+ else if (ins12)
+ return emit_rx(compiler, ins12, dst, src1, src1w, src2, src2w, RX_A);
+ else if (ins20)
+ return emit_rx(compiler, ins20, dst, src1, src1w, src2, src2w, RXY_A);
+ }
+
+ ins = (mode & SLJIT_I32_OP) ? forms->op_rk : forms->op_grk;
+
+ if (ins == 0 || (SLOW_IS_REG(dst) && dst == src1))
+ return emit_rr(compiler, (mode & SLJIT_I32_OP) ? forms->op_r : forms->op_gr, dst, src1, src1w, src2, src2w);
+
+ return emit_rrf(compiler, ins, dst, src1, src1w, src2, src2w);
+}
+
SLJIT_API_FUNC_ATTRIBUTE void* sljit_generate_code(struct sljit_compiler *compiler)
{
struct sljit_label *label;
@@ -1465,7 +1695,8 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op0(struct sljit_compiler *compile
op = GET_OPCODE(op) | (op & SLJIT_I32_OP);
switch (op) {
case SLJIT_BREAKPOINT:
- /* TODO(mundaym): insert real breakpoint? */
+ /* The following invalid instruction is emitted by gdb. */
+ return push_inst(compiler, 0x0001 /* 2-byte trap */);
case SLJIT_NOP:
return push_inst(compiler, 0x0700 /* 2-byte nop */);
case SLJIT_LMUL_UW:
@@ -1559,6 +1790,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile
/* TODO(carenas): implement prefetch? */
return SLJIT_SUCCESS;
}
+
if (opcode >= SLJIT_MOV && opcode <= SLJIT_MOV_P) {
/* LOAD REGISTER */
if (FAST_IS_REG(dst) && FAST_IS_REG(src)) {
@@ -1609,11 +1841,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile
SLJIT_UNREACHABLE();
}
FAIL_IF(push_inst(compiler, ins));
- if (HAS_FLAGS(op)) {
- /* only handle zero flag */
- SLJIT_ASSERT(!(op & VARIABLE_FLAG_MASK));
- return push_store_zero_flag(compiler, op, dst_r);
- }
return SLJIT_SUCCESS;
}
/* LOAD IMMEDIATE */
@@ -1690,11 +1917,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile
SLJIT_UNREACHABLE();
}
FAIL_IF(push_inst(compiler, ins));
- if (HAS_FLAGS(op)) {
- /* only handle zero flag */
- SLJIT_ASSERT(!(op & VARIABLE_FLAG_MASK));
- return push_store_zero_flag(compiler, op, reg);
- }
return SLJIT_SUCCESS;
}
/* STORE and STORE IMMEDIATE */
@@ -1723,11 +1945,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile
case SLJIT_MOV_P:
case SLJIT_MOV:
FAIL_IF(push_inst(compiler, LEVAL(stg)));
- if (HAS_FLAGS(op)) {
- /* only handle zero flag */
- SLJIT_ASSERT(!(op & VARIABLE_FLAG_MASK));
- return push_store_zero_flag(compiler, op, reg);
- }
return SLJIT_SUCCESS;
default:
SLJIT_UNREACHABLE();
@@ -1767,11 +1984,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile
FAIL_IF(make_addr_bxy(compiler, &mem, dst, dstw, tmp1));
FAIL_IF(push_inst(compiler,
EVAL(stg, tmp0, mem)));
- if (HAS_FLAGS(op)) {
- /* only handle zero flag */
- SLJIT_ASSERT(!(op & VARIABLE_FLAG_MASK));
- return push_store_zero_flag(compiler, op, tmp0);
- }
return SLJIT_SUCCESS;
default:
SLJIT_UNREACHABLE();
@@ -1785,7 +1997,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile
dst_r = SLOW_IS_REG(dst) ? gpr(REG_MASK & dst) : tmp0;
src_r = FAST_IS_REG(src) ? gpr(REG_MASK & src) : tmp0;
if (src & SLJIT_MEM)
- FAIL_IF(load_word(compiler, src_r, src, srcw, tmp1, src & SLJIT_I32_OP));
+ FAIL_IF(load_word(compiler, src_r, src, srcw, src & SLJIT_I32_OP));
+
+ compiler->status_flags_state = op & (VARIABLE_FLAG_MASK | SLJIT_SET_Z);
/* TODO(mundaym): optimize loads and stores */
switch (opcode | (op & SLJIT_I32_OP)) {
@@ -1810,9 +2024,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile
}
break;
case SLJIT_NEG:
+ compiler->status_flags_state |= SLJIT_CURRENT_FLAGS_ADD_SUB;
FAIL_IF(push_inst(compiler, lcgr(dst_r, src_r)));
break;
case SLJIT_NEG32:
+ compiler->status_flags_state |= SLJIT_CURRENT_FLAGS_ADD_SUB;
FAIL_IF(push_inst(compiler, lcr(dst_r, src_r)));
break;
case SLJIT_CLZ:
@@ -1839,17 +2055,12 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op1(struct sljit_compiler *compile
SLJIT_UNREACHABLE();
}
- /* write condition code to emulated flag register */
- if (op & VARIABLE_FLAG_MASK)
- FAIL_IF(push_inst(compiler, ipm(flag_r)));
-
- /* write zero flag to emulated flag register */
- if (op & SLJIT_SET_Z)
- FAIL_IF(push_store_zero_flag(compiler, op, dst_r));
+ if ((op & (SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == (SLJIT_SET_Z | SLJIT_SET_OVERFLOW))
+ FAIL_IF(update_zero_overflow(compiler, op, dst_r));
/* TODO(carenas): doesn't need FAIL_IF */
if ((dst != SLJIT_UNUSED) && (dst & SLJIT_MEM))
- FAIL_IF(store_word(compiler, dst_r, dst, dstw, tmp1, op & SLJIT_I32_OP));
+ FAIL_IF(store_word(compiler, dst_r, dst, dstw, op & SLJIT_I32_OP));
return SLJIT_SUCCESS;
}
@@ -1887,530 +2098,554 @@ static SLJIT_INLINE int sets_signed_flag(sljit_s32 op)
return 0;
}
-/* Report whether we have an instruction for:
- op dst src imm
- where dst and src are separate registers. */
-static int have_op_3_imm(sljit_s32 op, sljit_sw imm) {
- return 0; /* TODO(mundaym): implement */
-}
-
-/* Report whether we have an instruction for:
- op reg imm
- where reg is both a source and the destination. */
-static int have_op_2_imm(sljit_s32 op, sljit_sw imm) {
- switch (GET_OPCODE(op) | (op & SLJIT_I32_OP)) {
- case SLJIT_ADD32:
- case SLJIT_ADD:
- if (!HAS_FLAGS(op) || sets_signed_flag(op))
- return have_eimm() ? is_s32(imm) : is_s16(imm);
+static const struct ins_forms add_forms = {
+ 0x1a00, /* ar */
+ 0xb9080000, /* agr */
+ 0xb9f80000, /* ark */
+ 0xb9e80000, /* agrk */
+ 0x5a000000, /* a */
+ 0xe3000000005a, /* ay */
+ 0xe30000000008, /* ag */
+};
- return have_eimm() && is_u32(imm);
- case SLJIT_MUL32:
- case SLJIT_MUL:
- /* TODO(mundaym): general extension check */
- /* for ms{,g}fi */
- if (op & VARIABLE_FLAG_MASK)
- return 0;
-
- return have_genext() && is_s16(imm);
- case SLJIT_OR32:
- case SLJIT_XOR32:
- case SLJIT_AND32:
- /* only use if have extended immediate facility */
- /* this ensures flags are set correctly */
- return have_eimm();
- case SLJIT_AND:
- case SLJIT_OR:
- case SLJIT_XOR:
- /* TODO(mundaym): make this more flexible */
- /* avoid using immediate variations, flags */
- /* won't be set correctly */
- return 0;
- case SLJIT_ADDC32:
- case SLJIT_ADDC:
- /* no ADD LOGICAL WITH CARRY IMMEDIATE */
- return 0;
- case SLJIT_SUB:
- case SLJIT_SUB32:
- case SLJIT_SUBC:
- case SLJIT_SUBC32:
- /* no SUBTRACT IMMEDIATE */
- /* TODO(mundaym): SUBTRACT LOGICAL IMMEDIATE */
- return 0;
- }
- return 0;
-}
+static const struct ins_forms logical_add_forms = {
+ 0x1e00, /* alr */
+ 0xb90a0000, /* algr */
+ 0xb9fa0000, /* alrk */
+ 0xb9ea0000, /* algrk */
+ 0x5e000000, /* al */
+ 0xe3000000005e, /* aly */
+ 0xe3000000000a, /* alg */
+};
-SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compiler, sljit_s32 op,
+static sljit_s32 sljit_emit_add(struct sljit_compiler *compiler, sljit_s32 op,
sljit_s32 dst, sljit_sw dstw,
sljit_s32 src1, sljit_sw src1w,
sljit_s32 src2, sljit_sw src2w)
{
- CHECK_ERROR();
- CHECK(check_sljit_emit_op2(compiler, op, dst, dstw, src1, src1w, src2, src2w));
- ADJUST_LOCAL_OFFSET(dst, dstw);
- ADJUST_LOCAL_OFFSET(src1, src1w);
- ADJUST_LOCAL_OFFSET(src2, src2w);
-
- if (dst == SLJIT_UNUSED && !HAS_FLAGS(op))
- return SLJIT_SUCCESS;
-
- sljit_gpr dst_r = SLOW_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0;
+ int sets_overflow = (op & VARIABLE_FLAG_MASK) == SLJIT_SET_OVERFLOW;
+ int sets_zero_overflow = (op & (SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == (SLJIT_SET_Z | SLJIT_SET_OVERFLOW);
+ const struct ins_forms *forms;
+ sljit_ins ins;
- if (is_commutative(op)) {
- #define SWAP_ARGS \
- do { \
- sljit_s32 t = src1; \
- sljit_sw tw = src1w; \
- src1 = src2; \
- src1w = src2w; \
- src2 = t; \
- src2w = tw; \
- } while(0);
-
- /* prefer immediate in src2 */
- if (src1 & SLJIT_IMM) {
- SWAP_ARGS
+ if (src2 & SLJIT_IMM) {
+ if (!sets_zero_overflow && is_s8(src2w) && (src1 & SLJIT_MEM) && (dst == src1 && dstw == src1w)) {
+ if (sets_overflow)
+ ins = (op & SLJIT_I32_OP) ? 0xeb000000006a /* asi */ : 0xeb000000007a /* agsi */;
+ else
+ ins = (op & SLJIT_I32_OP) ? 0xeb000000006e /* alsi */ : 0xeb000000007e /* algsi */;
+ return emit_siy(compiler, ins, dst, dstw, src2w);
}
- /* prefer to have src1 use same register as dst */
- if (FAST_IS_REG(src2) && gpr(src2 & REG_MASK) == dst_r) {
- SWAP_ARGS
+ if (is_s16(src2w)) {
+ if (sets_overflow)
+ ins = (op & SLJIT_I32_OP) ? 0xec00000000d8 /* ahik */ : 0xec00000000d9 /* aghik */;
+ else
+ ins = (op & SLJIT_I32_OP) ? 0xec00000000da /* alhsik */ : 0xec00000000db /* alghsik */;
+ FAIL_IF(emit_rie_d(compiler, ins, dst, src1, src1w, src2w));
+ goto done;
}
- /* prefer memory argument in src2 */
- if (FAST_IS_REG(src2) && (src1 & SLJIT_MEM)) {
- SWAP_ARGS
+ if (!sets_overflow) {
+ if ((op & SLJIT_I32_OP) || is_u32(src2w)) {
+ ins = (op & SLJIT_I32_OP) ? 0xc20b00000000 /* alfi */ : 0xc20a00000000 /* algfi */;
+ FAIL_IF(emit_ri(compiler, ins, dst, src1, src1w, src2w, RIL_A));
+ goto done;
+ }
+ if (is_u32(-src2w)) {
+ FAIL_IF(emit_ri(compiler, 0xc20400000000 /* slgfi */, dst, src1, src1w, -src2w, RIL_A));
+ goto done;
+ }
+ }
+ else if ((op & SLJIT_I32_OP) || is_s32(src2w)) {
+ ins = (op & SLJIT_I32_OP) ? 0xc20900000000 /* afi */ : 0xc20800000000 /* agfi */;
+ FAIL_IF(emit_ri(compiler, ins, dst, src1, src1w, src2w, RIL_A));
+ goto done;
}
- #undef SWAP_ARGS
}
- /* src1 must be in a register */
- sljit_gpr src1_r = FAST_IS_REG(src1) ? gpr(src1 & REG_MASK) : tmp0;
- if (src1 & SLJIT_IMM)
- FAIL_IF(push_load_imm_inst(compiler, src1_r, src1w));
-
- if (src1 & SLJIT_MEM)
- FAIL_IF(load_word(compiler, src1_r, src1, src1w, tmp1, op & SLJIT_I32_OP));
-
- /* emit comparison before subtract */
- if (GET_OPCODE(op) == SLJIT_SUB && (op & VARIABLE_FLAG_MASK)) {
- sljit_sw cmp = 0;
- switch (GET_FLAG_TYPE(op)) {
- case SLJIT_LESS:
- case SLJIT_LESS_EQUAL:
- case SLJIT_GREATER:
- case SLJIT_GREATER_EQUAL:
- cmp = 1; /* unsigned */
- break;
- case SLJIT_EQUAL:
- case SLJIT_SIG_LESS:
- case SLJIT_SIG_LESS_EQUAL:
- case SLJIT_SIG_GREATER:
- case SLJIT_SIG_GREATER_EQUAL:
- cmp = -1; /* signed */
- break;
- }
- if (cmp) {
- /* clear flags - no need to generate now */
- op &= ~VARIABLE_FLAG_MASK;
- sljit_gpr src2_r = FAST_IS_REG(src2) ? gpr(src2 & REG_MASK) : tmp1;
- if (src2 & SLJIT_IMM) {
- #define LEVAL(i) i(src1_r, src2w)
- if (cmp > 0 && is_u32(src2w)) {
- /* unsigned */
- FAIL_IF(push_inst(compiler,
- WHEN2(op & SLJIT_I32_OP, clfi, clgfi)));
- }
- else if (cmp < 0 && is_s16(src2w)) {
- /* signed */
- FAIL_IF(push_inst(compiler,
- WHEN2(op & SLJIT_I32_OP, chi, cghi)));
- }
- else if (cmp < 0 && is_s32(src2w)) {
- /* signed */
- FAIL_IF(push_inst(compiler,
- WHEN2(op & SLJIT_I32_OP, cfi, cgfi)));
- }
- #undef LEVAL
- #define LEVAL(i) i(src1_r, src2_r)
- else {
- FAIL_IF(push_load_imm_inst(compiler, src2_r, src2w));
- if (cmp > 0) {
- /* unsigned */
- FAIL_IF(push_inst(compiler,
- WHEN2(op & SLJIT_I32_OP, clr, clgr)));
- }
- if (cmp < 0) {
- /* signed */
- FAIL_IF(push_inst(compiler,
- WHEN2(op & SLJIT_I32_OP, cr, cgr)));
- }
+ forms = sets_overflow ? &add_forms : &logical_add_forms;
+ FAIL_IF(emit_commutative(compiler, forms, dst, dstw, src1, src1w, src2, src2w));
+
+done:
+ if (sets_zero_overflow)
+ FAIL_IF(update_zero_overflow(compiler, op, SLOW_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0));
+
+ if (dst & SLJIT_MEM)
+ return store_word(compiler, tmp0, dst, dstw, op & SLJIT_I32_OP);
+
+ return SLJIT_SUCCESS;
+}
+
+static const struct ins_forms sub_forms = {
+ 0x1b00, /* sr */
+ 0xb9090000, /* sgr */
+ 0xb9f90000, /* srk */
+ 0xb9e90000, /* sgrk */
+ 0x5b000000, /* s */
+ 0xe3000000005b, /* sy */
+ 0xe30000000009, /* sg */
+};
+
+static const struct ins_forms logical_sub_forms = {
+ 0x1f00, /* slr */
+ 0xb90b0000, /* slgr */
+ 0xb9fb0000, /* slrk */
+ 0xb9eb0000, /* slgrk */
+ 0x5f000000, /* sl */
+ 0xe3000000005f, /* sly */
+ 0xe3000000000b, /* slg */
+};
+
+static sljit_s32 sljit_emit_sub(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 dst, sljit_sw dstw,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w)
+{
+ int sets_signed = sets_signed_flag(op);
+ int sets_zero_overflow = (op & (SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == (SLJIT_SET_Z | SLJIT_SET_OVERFLOW);
+ const struct ins_forms *forms;
+ sljit_ins ins;
+
+ if (dst == SLJIT_UNUSED && GET_FLAG_TYPE(op) <= SLJIT_SIG_LESS_EQUAL) {
+ int compare_signed = GET_FLAG_TYPE(op) >= SLJIT_SIG_LESS;
+
+ compiler->status_flags_state |= SLJIT_CURRENT_FLAGS_COMPARE;
+
+ if (src2 & SLJIT_IMM) {
+ if (compare_signed || ((op & VARIABLE_FLAG_MASK) == 0 && is_s32(src2w)))
+ {
+ if ((op & SLJIT_I32_OP) || is_s32(src2w)) {
+ ins = (op & SLJIT_I32_OP) ? 0xc20d00000000 /* cfi */ : 0xc20c00000000 /* cgfi */;
+ return emit_ri(compiler, ins, src1, src1, src1w, src2w, RIL_A);
}
}
else {
- if (src2 & SLJIT_MEM) {
- /* TODO(mundaym): comparisons with memory */
- /* load src2 into register */
- FAIL_IF(load_word(compiler, src2_r, src2, src2w, tmp1, op & SLJIT_I32_OP));
+ if ((op & SLJIT_I32_OP) || is_u32(src2w)) {
+ ins = (op & SLJIT_I32_OP) ? 0xc20f00000000 /* clfi */ : 0xc20e00000000 /* clgfi */;
+ return emit_ri(compiler, ins, src1, src1, src1w, src2w, RIL_A);
}
- if (cmp > 0) {
- /* unsigned */
- FAIL_IF(push_inst(compiler,
- WHEN2(op & SLJIT_I32_OP, clr, clgr)));
- }
- if (cmp < 0) {
- /* signed */
- FAIL_IF(push_inst(compiler,
- WHEN2(op & SLJIT_I32_OP, cr, cgr)));
- }
- #undef LEVAL
+ if (is_s16(src2w))
+ return emit_rie_d(compiler, 0xec00000000db /* alghsik */, SLJIT_UNUSED, src1, src1w, src2w);
}
- FAIL_IF(push_inst(compiler, ipm(flag_r)));
}
- }
+ else if (src2 & SLJIT_MEM) {
+ if ((op & SLJIT_I32_OP) && ((src2 & OFFS_REG_MASK) || is_u12(src2w))) {
+ ins = compare_signed ? 0x59000000 /* c */ : 0x55000000 /* cl */;
+ return emit_rx(compiler, ins, src1, src1, src1w, src2, src2w, RX_A);
+ }
- if (!HAS_FLAGS(op) && dst == SLJIT_UNUSED)
- return SLJIT_SUCCESS;
+ if (compare_signed)
+ ins = (op & SLJIT_I32_OP) ? 0xe30000000059 /* cy */ : 0xe30000000020 /* cg */;
+ else
+ ins = (op & SLJIT_I32_OP) ? 0xe30000000055 /* cly */ : 0xe30000000021 /* clg */;
+ return emit_rx(compiler, ins, src1, src1, src1w, src2, src2w, RXY_A);
+ }
- /* need to specify signed or logical operation */
- int signed_flags = sets_signed_flag(op);
+ if (compare_signed)
+ ins = (op & SLJIT_I32_OP) ? 0x1900 /* cr */ : 0xb9200000 /* cgr */;
+ else
+ ins = (op & SLJIT_I32_OP) ? 0x1500 /* clr */ : 0xb9210000 /* clgr */;
+ return emit_rr(compiler, ins, src1, src1, src1w, src2, src2w);
+ }
- if (is_shift(op)) {
- /* handle shifts first, they have more constraints than other operations */
- sljit_sw d = 0;
- sljit_gpr b = FAST_IS_REG(src2) ? gpr(src2 & REG_MASK) : r0;
- if (src2 & SLJIT_IMM)
- d = src2w & ((op & SLJIT_I32_OP) ? 31 : 63);
+ if (src2 & SLJIT_IMM) {
+ sljit_sw neg_src2w = -src2w;
- if (src2 & SLJIT_MEM) {
- /* shift amount (b) cannot be in r0 (i.e. tmp0) */
- FAIL_IF(load_word(compiler, tmp1, src2, src2w, tmp1, op & SLJIT_I32_OP));
- b = tmp1;
- }
- /* src1 and dst share the same register in the base 32-bit ISA */
- /* TODO(mundaym): not needed when distinct-operand facility is available */
- int workaround_alias = op & SLJIT_I32_OP && src1_r != dst_r;
- if (workaround_alias) {
- /* put src1 into tmp0 so we can overwrite it */
- FAIL_IF(push_inst(compiler, lr(tmp0, src1_r)));
- src1_r = tmp0;
- }
- switch (GET_OPCODE(op) | (op & SLJIT_I32_OP)) {
- case SLJIT_SHL:
- FAIL_IF(push_inst(compiler, sllg(dst_r, src1_r, d, b)));
- break;
- case SLJIT_SHL32:
- FAIL_IF(push_inst(compiler, sll(src1_r, d, b)));
- break;
- case SLJIT_LSHR:
- FAIL_IF(push_inst(compiler, srlg(dst_r, src1_r, d, b)));
- break;
- case SLJIT_LSHR32:
- FAIL_IF(push_inst(compiler, srl(src1_r, d, b)));
- break;
- case SLJIT_ASHR:
- FAIL_IF(push_inst(compiler, srag(dst_r, src1_r, d, b)));
- break;
- case SLJIT_ASHR32:
- FAIL_IF(push_inst(compiler, sra(src1_r, d, b)));
- break;
- default:
- SLJIT_UNREACHABLE();
+ if (sets_signed || neg_src2w != 0 || (op & (SLJIT_SET_Z | VARIABLE_FLAG_MASK)) == 0) {
+ if (!sets_zero_overflow && is_s8(neg_src2w) && (src1 & SLJIT_MEM) && (dst == src1 && dstw == src1w)) {
+ if (sets_signed)
+ ins = (op & SLJIT_I32_OP) ? 0xeb000000006a /* asi */ : 0xeb000000007a /* agsi */;
+ else
+ ins = (op & SLJIT_I32_OP) ? 0xeb000000006e /* alsi */ : 0xeb000000007e /* algsi */;
+ return emit_siy(compiler, ins, dst, dstw, neg_src2w);
+ }
+
+ if (is_s16(neg_src2w)) {
+ if (sets_signed)
+ ins = (op & SLJIT_I32_OP) ? 0xec00000000d8 /* ahik */ : 0xec00000000d9 /* aghik */;
+ else
+ ins = (op & SLJIT_I32_OP) ? 0xec00000000da /* alhsik */ : 0xec00000000db /* alghsik */;
+ FAIL_IF(emit_rie_d(compiler, ins, dst, src1, src1w, neg_src2w));
+ goto done;
+ }
}
- if (workaround_alias && dst_r != src1_r)
- FAIL_IF(push_inst(compiler, lr(dst_r, src1_r)));
- }
- else if ((GET_OPCODE(op) == SLJIT_MUL) && HAS_FLAGS(op)) {
- /* multiply instructions do not generally set flags so we need to manually */
- /* detect overflow conditions */
- /* TODO(mundaym): 64-bit overflow */
- SLJIT_ASSERT(GET_FLAG_TYPE(op) == SLJIT_MUL_OVERFLOW ||
- GET_FLAG_TYPE(op) == SLJIT_MUL_NOT_OVERFLOW);
- sljit_gpr src2_r = FAST_IS_REG(src2) ? gpr(src2 & REG_MASK) : tmp1;
- if (src2 & SLJIT_IMM) {
- /* load src2 into register */
- FAIL_IF(push_load_imm_inst(compiler, src2_r, src2w));
+ if (!sets_signed) {
+ if ((op & SLJIT_I32_OP) || is_u32(src2w)) {
+ ins = (op & SLJIT_I32_OP) ? 0xc20500000000 /* slfi */ : 0xc20400000000 /* slgfi */;
+ FAIL_IF(emit_ri(compiler, ins, dst, src1, src1w, src2w, RIL_A));
+ goto done;
+ }
+ if (is_u32(neg_src2w)) {
+ FAIL_IF(emit_ri(compiler, 0xc20a00000000 /* algfi */, dst, src1, src1w, neg_src2w, RIL_A));
+ goto done;
+ }
}
- if (src2 & SLJIT_MEM) {
- /* load src2 into register */
- FAIL_IF(load_word(compiler, src2_r, src2, src2w, tmp1, op & SLJIT_I32_OP));
+ else if ((op & SLJIT_I32_OP) || is_s32(neg_src2w)) {
+ ins = (op & SLJIT_I32_OP) ? 0xc20900000000 /* afi */ : 0xc20800000000 /* agfi */;
+ FAIL_IF(emit_ri(compiler, ins, dst, src1, src1w, neg_src2w, RIL_A));
+ goto done;
}
- if (have_misc2()) {
- #define LEVAL(i) i(dst_r, src1_r, src2_r)
- FAIL_IF(push_inst(compiler,
- WHEN2(op & SLJIT_I32_OP, msrkc, msgrkc)));
- #undef LEVAL
+ }
+
+ forms = sets_signed ? &sub_forms : &logical_sub_forms;
+ FAIL_IF(emit_non_commutative(compiler, forms, dst, dstw, src1, src1w, src2, src2w));
+
+done:
+ if (sets_signed) {
+ sljit_gpr dst_r = SLOW_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0;
+
+ if ((op & VARIABLE_FLAG_MASK) != SLJIT_SET_OVERFLOW) {
+ /* In case of overflow, the sign bit of the two source operands must be different, and
+ - the first operand is greater if the sign bit of the result is set
+ - the first operand is less if the sign bit of the result is not set
+ The -result operation sets the corrent sign, because the result cannot be zero.
+ The overflow is considered greater, since the result must be equal to INT_MIN so its sign bit is set. */
+ FAIL_IF(push_inst(compiler, brc(0xe, 2 + 2)));
+ FAIL_IF(push_inst(compiler, (op & SLJIT_I32_OP) ? lcr(tmp1, dst_r) : lcgr(tmp1, dst_r)));
}
- else if (op & SLJIT_I32_OP) {
- op &= ~VARIABLE_FLAG_MASK;
- FAIL_IF(push_inst(compiler, lgfr(tmp0, src1_r)));
- FAIL_IF(push_inst(compiler, msgfr(tmp0, src2_r)));
- if (dst_r != tmp0) {
- FAIL_IF(push_inst(compiler, lr(dst_r, tmp0)));
- }
- FAIL_IF(push_inst(compiler, aih(tmp0, 1)));
- FAIL_IF(push_inst(compiler, nihf(tmp0, ~1U)));
- FAIL_IF(push_inst(compiler, ipm(flag_r)));
- FAIL_IF(push_inst(compiler, oilh(flag_r, 0x2000)));
+ else if (op & SLJIT_SET_Z)
+ FAIL_IF(update_zero_overflow(compiler, op, dst_r));
+ }
+
+ if (dst & SLJIT_MEM)
+ return store_word(compiler, tmp0, dst, dstw, op & SLJIT_I32_OP);
+
+ return SLJIT_SUCCESS;
+}
+
+static const struct ins_forms multiply_forms = {
+ 0xb2520000, /* msr */
+ 0xb90c0000, /* msgr */
+ 0xb9fd0000, /* msrkc */
+ 0xb9ed0000, /* msgrkc */
+ 0x71000000, /* ms */
+ 0xe30000000051, /* msy */
+ 0xe3000000000c, /* msg */
+};
+
+static const struct ins_forms multiply_overflow_forms = {
+ 0,
+ 0,
+ 0xb9fd0000, /* msrkc */
+ 0xb9ed0000, /* msgrkc */
+ 0,
+ 0xe30000000053, /* msc */
+ 0xe30000000083, /* msgc */
+};
+
+static sljit_s32 sljit_emit_multiply(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 dst, sljit_sw dstw,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w)
+{
+ sljit_ins ins;
+
+ if (HAS_FLAGS(op)) {
+ /* if have_misc2 fails, this operation should be emulated. 32 bit emulation:
+ FAIL_IF(push_inst(compiler, lgfr(tmp0, src1_r)));
+ FAIL_IF(push_inst(compiler, msgfr(tmp0, src2_r)));
+ if (dst_r != tmp0) {
+ FAIL_IF(push_inst(compiler, lr(dst_r, tmp0)));
}
- else
- return SLJIT_ERR_UNSUPPORTED;
+ FAIL_IF(push_inst(compiler, aih(tmp0, 1)));
+ FAIL_IF(push_inst(compiler, nihf(tmp0, ~1U)));
+ FAIL_IF(push_inst(compiler, ipm(flag_r)));
+ FAIL_IF(push_inst(compiler, oilh(flag_r, 0x2000))); */
+ return emit_commutative(compiler, &multiply_overflow_forms, dst, dstw, src1, src1w, src2, src2w);
}
- else if ((GET_OPCODE(op) == SLJIT_SUB) && (op & SLJIT_SET_Z) && !signed_flags) {
- /* subtract logical instructions do not set the right flags unfortunately */
- /* instead, negate src2 and issue an add logical */
- /* TODO(mundaym): distinct operand facility where needed */
- if (src1_r != dst_r && src1_r != tmp0) {
- #define LEVAL(i) i(tmp0, src1_r)
- FAIL_IF(push_inst(compiler,
- WHEN2(op & SLJIT_I32_OP, lr, lgr)));
- src1_r = tmp0;
- #undef LEVAL
- }
- sljit_gpr src2_r = FAST_IS_REG(src2) ? gpr(src2 & REG_MASK) : tmp1;
- if (src2 & SLJIT_IMM) {
- /* load src2 into register */
- FAIL_IF(push_load_imm_inst(compiler, src2_r, src2w));
+
+ if (src2 & SLJIT_IMM) {
+ if (is_s16(src2w)) {
+ ins = (op & SLJIT_I32_OP) ? 0xa70c0000 /* mhi */ : 0xa70d0000 /* mghi */;
+ return emit_ri(compiler, ins, dst, src1, src1w, src2w, RI_A);
}
- if (src2 & SLJIT_MEM) {
- /* load src2 into register */
- FAIL_IF(load_word(compiler, src2_r, src2, src2w, tmp1, op & SLJIT_I32_OP));
+
+ if (is_s32(src2w)) {
+ ins = (op & SLJIT_I32_OP) ? 0xc20100000000 /* msfi */ : 0xc20000000000 /* msgfi */;
+ return emit_ri(compiler, ins, dst, src1, src1w, src2w, RIL_A);
}
- if (op & SLJIT_I32_OP) {
- FAIL_IF(push_inst(compiler, lcr(tmp1, src2_r)));
- FAIL_IF(push_inst(compiler, alr(src1_r, tmp1)));
- if (src1_r != dst_r)
- FAIL_IF(push_inst(compiler, lr(dst_r, src1_r)));
+ }
+
+ return emit_commutative(compiler, &multiply_forms, dst, dstw, src1, src1w, src2, src2w);
+}
+
+static sljit_s32 sljit_emit_bitwise_imm(struct sljit_compiler *compiler, sljit_s32 type,
+ sljit_s32 dst, sljit_sw dstw,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_uw imm, sljit_s32 count16)
+{
+ sljit_s32 mode = compiler->mode;
+ sljit_gpr dst_r = tmp0;
+ sljit_s32 needs_move = 1;
+
+ if (SLOW_IS_REG(dst)) {
+ dst_r = gpr(dst & REG_MASK);
+ if (dst == src1)
+ needs_move = 0;
+ }
+
+ if (needs_move)
+ FAIL_IF(emit_move(compiler, dst_r, src1, src1w));
+
+ if (type == SLJIT_AND) {
+ if (!(mode & SLJIT_I32_OP))
+ FAIL_IF(push_inst(compiler, 0xc00a00000000 /* nihf */ | (dst_r << 36) | (imm >> 32)));
+ return push_inst(compiler, 0xc00b00000000 /* nilf */ | (dst_r << 36) | (imm & 0xffffffff));
+ }
+ else if (type == SLJIT_OR) {
+ if (count16 >= 3) {
+ FAIL_IF(push_inst(compiler, 0xc00c00000000 /* oihf */ | (dst_r << 36) | (imm >> 32)));
+ return push_inst(compiler, 0xc00d00000000 /* oilf */ | (dst_r << 36) | (imm & 0xffffffff));
}
- else {
- FAIL_IF(push_inst(compiler, lcgr(tmp1, src2_r)));
- FAIL_IF(push_inst(compiler, algr(src1_r, tmp1)));
- if (src1_r != dst_r)
- FAIL_IF(push_inst(compiler, lgr(dst_r, src1_r)));
+
+ if (count16 >= 2) {
+ if ((imm & 0x00000000ffffffffull) == 0)
+ return push_inst(compiler, 0xc00c00000000 /* oihf */ | (dst_r << 36) | (imm >> 32));
+ if ((imm & 0xffffffff00000000ull) == 0)
+ return push_inst(compiler, 0xc00d00000000 /* oilf */ | (dst_r << 36) | (imm & 0xffffffff));
}
+
+ if ((imm & 0xffff000000000000ull) != 0)
+ FAIL_IF(push_inst(compiler, 0xa5080000 /* oihh */ | (dst_r << 20) | (imm >> 48)));
+ if ((imm & 0x0000ffff00000000ull) != 0)
+ FAIL_IF(push_inst(compiler, 0xa5090000 /* oihl */ | (dst_r << 20) | ((imm >> 32) & 0xffff)));
+ if ((imm & 0x00000000ffff0000ull) != 0)
+ FAIL_IF(push_inst(compiler, 0xa50a0000 /* oilh */ | (dst_r << 20) | ((imm >> 16) & 0xffff)));
+ if ((imm & 0x000000000000ffffull) != 0 || imm == 0)
+ return push_inst(compiler, 0xa50b0000 /* oill */ | (dst_r << 20) | (imm & 0xffff));
+ return SLJIT_SUCCESS;
}
- else if ((src2 & SLJIT_IMM) && (src1_r == dst_r) && have_op_2_imm(op, src2w)) {
- switch (GET_OPCODE(op) | (op & SLJIT_I32_OP)) {
- #define LEVAL(i) i(dst_r, src2w)
- case SLJIT_ADD:
- if (!HAS_FLAGS(op) || signed_flags) {
- FAIL_IF(push_inst(compiler,
- WHEN2(is_s16(src2w), aghi, agfi)));
- }
- else
- FAIL_IF(push_inst(compiler, LEVAL(algfi)));
- break;
- case SLJIT_ADD32:
- if (!HAS_FLAGS(op) || signed_flags)
- FAIL_IF(push_inst(compiler,
- WHEN2(is_s16(src2w), ahi, afi)));
+ if ((imm & 0xffffffff00000000ull) != 0)
+ FAIL_IF(push_inst(compiler, 0xc00600000000 /* xihf */ | (dst_r << 36) | (imm >> 32)));
+ if ((imm & 0x00000000ffffffffull) != 0 || imm == 0)
+ return push_inst(compiler, 0xc00700000000 /* xilf */ | (dst_r << 36) | (imm & 0xffffffff));
+ return SLJIT_SUCCESS;
+}
+
+static const struct ins_forms bitwise_and_forms = {
+ 0x1400, /* nr */
+ 0xb9800000, /* ngr */
+ 0xb9f40000, /* nrk */
+ 0xb9e40000, /* ngrk */
+ 0x54000000, /* n */
+ 0xe30000000054, /* ny */
+ 0xe30000000080, /* ng */
+};
+
+static const struct ins_forms bitwise_or_forms = {
+ 0x1600, /* or */
+ 0xb9810000, /* ogr */
+ 0xb9f60000, /* ork */
+ 0xb9e60000, /* ogrk */
+ 0x56000000, /* o */
+ 0xe30000000056, /* oy */
+ 0xe30000000081, /* og */
+};
+
+static const struct ins_forms bitwise_xor_forms = {
+ 0x1700, /* xr */
+ 0xb9820000, /* xgr */
+ 0xb9f70000, /* xrk */
+ 0xb9e70000, /* xgrk */
+ 0x57000000, /* x */
+ 0xe30000000057, /* xy */
+ 0xe30000000082, /* xg */
+};
+
+static sljit_s32 sljit_emit_bitwise(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 dst, sljit_sw dstw,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w)
+{
+ sljit_s32 type = GET_OPCODE(op);
+ const struct ins_forms *forms;
+
+ if ((src2 & SLJIT_IMM) && (!(op & SLJIT_SET_Z) || (type == SLJIT_AND && dst == SLJIT_UNUSED))) {
+ sljit_s32 count16 = 0;
+ sljit_uw imm = (sljit_uw)src2w;
+
+ if (op & SLJIT_I32_OP)
+ imm &= 0xffffffffull;
+
+ if ((imm & 0x000000000000ffffull) != 0 || imm == 0)
+ count16++;
+ if ((imm & 0x00000000ffff0000ull) != 0)
+ count16++;
+ if ((imm & 0x0000ffff00000000ull) != 0)
+ count16++;
+ if ((imm & 0xffff000000000000ull) != 0)
+ count16++;
+
+ if (type == SLJIT_AND && dst == SLJIT_UNUSED && count16 == 1) {
+ sljit_gpr src_r = tmp0;
+
+ if (FAST_IS_REG(src1))
+ src_r = gpr(src1 & REG_MASK);
else
- FAIL_IF(push_inst(compiler, LEVAL(alfi)));
-
- break;
- #undef LEVAL /* TODO(carenas): move down and refactor? */
- case SLJIT_MUL:
- FAIL_IF(push_inst(compiler, mhi(dst_r, src2w)));
- break;
- case SLJIT_MUL32:
- FAIL_IF(push_inst(compiler, mghi(dst_r, src2w)));
- break;
- case SLJIT_OR32:
- FAIL_IF(push_inst(compiler, oilf(dst_r, src2w)));
- break;
- case SLJIT_XOR32:
- FAIL_IF(push_inst(compiler, xilf(dst_r, src2w)));
- break;
- case SLJIT_AND32:
- FAIL_IF(push_inst(compiler, nilf(dst_r, src2w)));
- break;
- default:
- SLJIT_UNREACHABLE();
+ FAIL_IF(emit_move(compiler, tmp0, src1, src1w));
+
+ if ((imm & 0x000000000000ffffull) != 0 || imm == 0)
+ return push_inst(compiler, 0xa7010000 | (src_r << 20) | imm);
+ if ((imm & 0x00000000ffff0000ull) != 0)
+ return push_inst(compiler, 0xa7000000 | (src_r << 20) | (imm >> 16));
+ if ((imm & 0x0000ffff00000000ull) != 0)
+ return push_inst(compiler, 0xa7030000 | (src_r << 20) | (imm >> 32));
+ return push_inst(compiler, 0xa7020000 | (src_r << 20) | (imm >> 48));
}
+
+ if (!(op & SLJIT_SET_Z))
+ return sljit_emit_bitwise_imm(compiler, type, dst, dstw, src1, src1w, imm, count16);
}
- else if ((src2 & SLJIT_IMM) && have_op_3_imm(op, src2w)) {
- abort(); /* TODO(mundaym): implement */
+
+ if (type == SLJIT_AND)
+ forms = &bitwise_and_forms;
+ else if (type == SLJIT_OR)
+ forms = &bitwise_or_forms;
+ else
+ forms = &bitwise_xor_forms;
+
+ return emit_commutative(compiler, forms, dst, dstw, src1, src1w, src2, src2w);
+}
+
+static sljit_s32 sljit_emit_shift(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 dst, sljit_sw dstw,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w)
+{
+ sljit_s32 type = GET_OPCODE(op);
+ sljit_gpr dst_r = SLOW_IS_REG(dst) ? gpr(dst & REG_MASK) : tmp0;
+ sljit_gpr src_r = tmp0;
+ sljit_gpr base_r = tmp0;
+ sljit_ins imm = 0;
+ sljit_ins ins;
+
+ if (FAST_IS_REG(src1))
+ src_r = gpr(src1 & REG_MASK);
+ else
+ FAIL_IF(emit_move(compiler, tmp0, src1, src1w));
+
+ if (src2 & SLJIT_IMM)
+ imm = src2w & ((op & SLJIT_I32_OP) ? 0x1f : 0x3f);
+ else if (FAST_IS_REG(src2))
+ base_r = gpr(src2 & REG_MASK);
+ else {
+ FAIL_IF(emit_move(compiler, tmp1, src2, src2w));
+ base_r = tmp1;
}
- else if ((src2 & SLJIT_MEM) && (dst_r == src1_r)) {
- /* most 32-bit instructions can only handle 12-bit immediate offsets */
- int need_u12 = !have_ldisp() &&
- (op & SLJIT_I32_OP) &&
- (GET_OPCODE(op) != SLJIT_ADDC) &&
- (GET_OPCODE(op) != SLJIT_SUBC);
- struct addr mem;
- if (need_u12)
- FAIL_IF(make_addr_bx(compiler, &mem, src2, src2w, tmp1));
+
+ if ((op & SLJIT_I32_OP) && dst_r == src_r) {
+ if (type == SLJIT_SHL)
+ ins = 0x89000000 /* sll */;
+ else if (type == SLJIT_LSHR)
+ ins = 0x88000000 /* srl */;
else
- FAIL_IF(make_addr_bxy(compiler, &mem, src2, src2w, tmp1));
-
- int can_u12 = is_u12(mem.offset) ? 1 : 0;
- sljit_ins ins = 0;
- switch (GET_OPCODE(op) | (op & SLJIT_I32_OP)) {
- /* 64-bit ops */
- #define LEVAL(i) EVAL(i, dst_r, mem)
- case SLJIT_ADD:
- ins = WHEN2(signed_flags, ag, alg);
- break;
- case SLJIT_SUB:
- ins = WHEN2(signed_flags, sg, slg);
- break;
- case SLJIT_ADDC:
- ins = LEVAL(alcg);
- break;
- case SLJIT_SUBC:
- ins = LEVAL(slbg);
- break;
- case SLJIT_MUL:
- ins = LEVAL(msg);
- break;
- case SLJIT_OR:
- ins = LEVAL(og);
- break;
- case SLJIT_XOR:
- ins = LEVAL(xg);
- break;
- case SLJIT_AND:
- ins = LEVAL(ng);
- break;
- /* 32-bit ops */
- case SLJIT_ADD32:
- if (signed_flags)
- ins = WHEN2(can_u12, a, ay);
- else
- ins = WHEN2(can_u12, al, aly);
- break;
- case SLJIT_SUB32:
- if (signed_flags)
- ins = WHEN2(can_u12, s, sy);
- else
- ins = WHEN2(can_u12, sl, sly);
- break;
- case SLJIT_ADDC32:
- ins = LEVAL(alc);
- break;
- case SLJIT_SUBC32:
- ins = LEVAL(slb);
- break;
- case SLJIT_MUL32:
- ins = WHEN2(can_u12, ms, msy);
- break;
- case SLJIT_OR32:
- ins = WHEN2(can_u12, o, oy);
- break;
- case SLJIT_XOR32:
- ins = WHEN2(can_u12, x, xy);
- break;
- case SLJIT_AND32:
- ins = WHEN2(can_u12, n, ny);
- break;
- #undef LEVAL
- default:
- SLJIT_UNREACHABLE();
- }
- FAIL_IF(push_inst(compiler, ins));
+ ins = 0x8a000000 /* sra */;
+
+ FAIL_IF(push_inst(compiler, ins | (dst_r << 20) | (base_r << 12) | imm));
}
else {
- sljit_gpr src2_r = FAST_IS_REG(src2) ? gpr(src2 & REG_MASK) : tmp1;
- if (src2 & SLJIT_IMM) {
- /* load src2 into register */
- FAIL_IF(push_load_imm_inst(compiler, src2_r, src2w));
- }
- if (src2 & SLJIT_MEM) {
- /* load src2 into register */
- FAIL_IF(load_word(compiler, src2_r, src2, src2w, tmp1, op & SLJIT_I32_OP));
- }
- /* TODO(mundaym): distinct operand facility where needed */
- #define LEVAL(i) i(tmp0, src1_r)
- if (src1_r != dst_r && src1_r != tmp0) {
- FAIL_IF(push_inst(compiler,
- WHEN2(op & SLJIT_I32_OP, lr, lgr)));
- src1_r = tmp0;
- }
- #undef LEVAL
- sljit_ins ins = 0;
- switch (GET_OPCODE(op) | (op & SLJIT_I32_OP)) {
- #define LEVAL(i) i(src1_r, src2_r)
- /* 64-bit ops */
- case SLJIT_ADD:
- ins = WHEN2(signed_flags, agr, algr);
- break;
- case SLJIT_SUB:
- ins = WHEN2(signed_flags, sgr, slgr);
- break;
- case SLJIT_ADDC:
- ins = LEVAL(alcgr);
- break;
- case SLJIT_SUBC:
- ins = LEVAL(slbgr);
- break;
- case SLJIT_MUL:
- ins = LEVAL(msgr);
- break;
- case SLJIT_AND:
- ins = LEVAL(ngr);
- break;
- case SLJIT_OR:
- ins = LEVAL(ogr);
- break;
- case SLJIT_XOR:
- ins = LEVAL(xgr);
- break;
- /* 32-bit ops */
- case SLJIT_ADD32:
- ins = WHEN2(signed_flags, ar, alr);
- break;
- case SLJIT_SUB32:
- ins = WHEN2(signed_flags, sr, slr);
- break;
- case SLJIT_ADDC32:
- ins = LEVAL(alcr);
- break;
- case SLJIT_SUBC32:
- ins = LEVAL(slbr);
- break;
- case SLJIT_MUL32:
- ins = LEVAL(msr);
- break;
- case SLJIT_AND32:
- ins = LEVAL(nr);
- break;
- case SLJIT_OR32:
- ins = LEVAL(or);
- break;
- case SLJIT_XOR32:
- ins = LEVAL(xr);
- break;
- #undef LEVAL
- default:
- SLJIT_UNREACHABLE();
- }
- FAIL_IF(push_inst(compiler, ins));
- #define LEVAL(i) i(dst_r, src1_r)
- if (src1_r != dst_r)
- FAIL_IF(push_inst(compiler,
- WHEN2(op & SLJIT_I32_OP, lr, lgr)));
- #undef LEVAL
+ if (type == SLJIT_SHL)
+ ins = (op & SLJIT_I32_OP) ? 0xeb00000000df /* sllk */ : 0xeb000000000d /* sllg */;
+ else if (type == SLJIT_LSHR)
+ ins = (op & SLJIT_I32_OP) ? 0xeb00000000de /* srlk */ : 0xeb000000000c /* srlg */;
+ else
+ ins = (op & SLJIT_I32_OP) ? 0xeb00000000dc /* srak */ : 0xeb000000000a /* srag */;
+
+ FAIL_IF(push_inst(compiler, ins | (dst_r << 36) | (src_r << 32) | (base_r << 28) | (imm << 16)));
}
- /* write condition code to emulated flag register */
- if (op & VARIABLE_FLAG_MASK)
- FAIL_IF(push_inst(compiler, ipm(flag_r)));
+ if ((op & SLJIT_SET_Z) && type != SLJIT_ASHR)
+ return push_inst(compiler, (op & SLJIT_I32_OP) ? or(dst_r, dst_r) : ogr(dst_r, dst_r));
+
+ return SLJIT_SUCCESS;
+}
+
+static const struct ins_forms addc_forms = {
+ 0xb9980000, /* alcr */
+ 0xb9880000, /* alcgr */
+ 0,
+ 0,
+ 0,
+ 0xe30000000098, /* alc */
+ 0xe30000000088, /* alcg */
+};
+
+static const struct ins_forms subc_forms = {
+ 0xb9990000, /* slbr */
+ 0xb9890000, /* slbgr */
+ 0,
+ 0,
+ 0,
+ 0xe30000000099, /* slb */
+ 0xe30000000089, /* slbg */
+};
+
+SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op2(struct sljit_compiler *compiler, sljit_s32 op,
+ sljit_s32 dst, sljit_sw dstw,
+ sljit_s32 src1, sljit_sw src1w,
+ sljit_s32 src2, sljit_sw src2w)
+{
+ CHECK_ERROR();
+ CHECK(check_sljit_emit_op2(compiler, op, dst, dstw, src1, src1w, src2, src2w));
+ ADJUST_LOCAL_OFFSET(dst, dstw);
+ ADJUST_LOCAL_OFFSET(src1, src1w);
+ ADJUST_LOCAL_OFFSET(src2, src2w);
+
+ if (dst == SLJIT_UNUSED && !HAS_FLAGS(op))
+ return SLJIT_SUCCESS;
- /* write zero flag to emulated flag register */
- if (op & SLJIT_SET_Z)
- FAIL_IF(push_store_zero_flag(compiler, op, dst_r));
+ compiler->mode = op & SLJIT_I32_OP;
+ compiler->status_flags_state = op & (VARIABLE_FLAG_MASK | SLJIT_SET_Z);
+
+ if (GET_OPCODE(op) >= SLJIT_ADD || GET_OPCODE(op) <= SLJIT_SUBC)
+ compiler->status_flags_state |= SLJIT_CURRENT_FLAGS_ADD_SUB;
+
+ if (is_commutative(op) && (src1 & SLJIT_IMM) && !(src2 & SLJIT_IMM)) {
+ src1 ^= src2;
+ src2 ^= src1;
+ src1 ^= src2;
+
+ src1w ^= src2w;
+ src2w ^= src1w;
+ src1w ^= src2w;
+ }
- /* finally write the result to memory if required */
- if (dst & SLJIT_MEM) {
- SLJIT_ASSERT(dst_r != tmp1);
- /* TODO(carenas): s/FAIL_IF/ return */
- FAIL_IF(store_word(compiler, dst_r, dst, dstw, tmp1, op & SLJIT_I32_OP));
+ switch (GET_OPCODE(op)) {
+ case SLJIT_ADD:
+ return sljit_emit_add(compiler, op, dst, dstw, src1, src1w, src2, src2w);
+ case SLJIT_ADDC:
+ FAIL_IF(emit_commutative(compiler, &addc_forms, dst, dstw, src1, src1w, src2, src2w));
+ if (dst & SLJIT_MEM)
+ return store_word(compiler, tmp0, dst, dstw, op & SLJIT_I32_OP);
+ return SLJIT_SUCCESS;
+ case SLJIT_SUB:
+ return sljit_emit_sub(compiler, op, dst, dstw, src1, src1w, src2, src2w);
+ case SLJIT_SUBC:
+ FAIL_IF(emit_non_commutative(compiler, &subc_forms, dst, dstw, src1, src1w, src2, src2w));
+ if (dst & SLJIT_MEM)
+ return store_word(compiler, tmp0, dst, dstw, op & SLJIT_I32_OP);
+ return SLJIT_SUCCESS;
+ case SLJIT_MUL:
+ FAIL_IF(sljit_emit_multiply(compiler, op, dst, dstw, src1, src1w, src2, src2w));
+ break;
+ case SLJIT_AND:
+ case SLJIT_OR:
+ case SLJIT_XOR:
+ FAIL_IF(sljit_emit_bitwise(compiler, op, dst, dstw, src1, src1w, src2, src2w));
+ break;
+ case SLJIT_SHL:
+ case SLJIT_LSHR:
+ case SLJIT_ASHR:
+ FAIL_IF(sljit_emit_shift(compiler, op, dst, dstw, src1, src1w, src2, src2w));
+ break;
}
+ if (dst & SLJIT_MEM)
+ return store_word(compiler, tmp0, dst, dstw, op & SLJIT_I32_OP);
return SLJIT_SUCCESS;
}
@@ -2428,7 +2663,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_src(
case SLJIT_FAST_RETURN:
src_r = FAST_IS_REG(src) ? gpr(src) : tmp1;
if (src & SLJIT_MEM)
- FAIL_IF(load_word(compiler, tmp1, src, srcw, tmp1, 0));
+ FAIL_IF(load_word(compiler, tmp1, src, srcw, 0));
return push_inst(compiler, br(src_r));
case SLJIT_SKIP_FRAMES_BEFORE_FAST_RETURN:
@@ -2507,7 +2742,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_fast_enter(struct sljit_compiler *
return push_inst(compiler, lgr(gpr(dst), fast_link_r));
/* memory */
- return store_word(compiler, fast_link_r, dst, dstw, tmp1, 0);
+ return store_word(compiler, fast_link_r, dst, dstw, 0);
}
/* --------------------------------------------------------------------- */
@@ -2532,15 +2767,11 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_label(struct sljit_compi
SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compiler *compiler, sljit_s32 type)
{
- sljit_u8 mask = ((type & 0xff) < SLJIT_JUMP) ? get_cc(type & 0xff) : 0xf;
+ sljit_u8 mask = ((type & 0xff) < SLJIT_JUMP) ? get_cc(compiler, type & 0xff) : 0xf;
CHECK_ERROR_PTR();
CHECK_PTR(check_sljit_emit_jump(compiler, type));
- /* reload condition code */
- if (mask != 0xf)
- PTR_FAIL_IF(push_load_cc(compiler, type & 0xff));
-
/* record jump */
struct sljit_jump *jump = (struct sljit_jump *)
ensure_abuf(compiler, sizeof(struct sljit_jump));
@@ -2585,7 +2816,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_ijump(struct sljit_compiler *compi
FAIL_IF(push_load_imm_inst(compiler, src_r, srcw));
}
else if (src & SLJIT_MEM)
- FAIL_IF(load_word(compiler, src_r, src, srcw, tmp1, 0 /* 64-bit */));
+ FAIL_IF(load_word(compiler, src_r, src, srcw, 0 /* 64-bit */));
/* emit jump instruction */
if (type >= SLJIT_FAST_CALL)
@@ -2613,7 +2844,7 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co
sljit_s32 dst, sljit_sw dstw,
sljit_s32 type)
{
- sljit_u8 mask = get_cc(type & 0xff);
+ sljit_u8 mask = get_cc(compiler, type & 0xff);
CHECK_ERROR();
CHECK(check_sljit_emit_op_flags(compiler, op, dst, dstw, type));
@@ -2624,9 +2855,11 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co
case SLJIT_AND:
case SLJIT_OR:
case SLJIT_XOR:
+ compiler->status_flags_state = op & SLJIT_SET_Z;
+
/* dst is also source operand */
if (dst & SLJIT_MEM)
- FAIL_IF(load_word(compiler, dst_r, dst, dstw, tmp1, op & SLJIT_I32_OP));
+ FAIL_IF(load_word(compiler, dst_r, dst, dstw, op & SLJIT_I32_OP));
break;
case SLJIT_MOV:
@@ -2638,9 +2871,6 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co
SLJIT_UNREACHABLE();
}
- if (mask != 0xf)
- FAIL_IF(push_load_cc(compiler, type & 0xff));
-
/* TODO(mundaym): fold into cmov helper function? */
#define LEVAL(i) i(loc_r, 1, mask)
if (have_lscond2()) {
@@ -2671,14 +2901,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co
#undef LEVAL
}
- /* set zero flag if needed */
- if (op & SLJIT_SET_Z)
- FAIL_IF(push_store_zero_flag(compiler, op, dst_r));
-
/* store result to memory if required */
- /* TODO(carenas): s/FAIL_IF/ return */
if (dst & SLJIT_MEM)
- FAIL_IF(store_word(compiler, dst_r, dst, dstw, tmp1, op & SLJIT_I32_OP));
+ return store_word(compiler, dst_r, dst, dstw, op & SLJIT_I32_OP);
return SLJIT_SUCCESS;
}
@@ -2687,16 +2912,13 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_cmov(struct sljit_compiler *compil
sljit_s32 dst_reg,
sljit_s32 src, sljit_sw srcw)
{
- sljit_u8 mask = get_cc(type & 0xff);
+ sljit_u8 mask = get_cc(compiler, type & 0xff);
sljit_gpr dst_r = gpr(dst_reg & ~SLJIT_I32_OP);
sljit_gpr src_r = FAST_IS_REG(src) ? gpr(src) : tmp0;
CHECK_ERROR();
CHECK(check_sljit_emit_cmov(compiler, type, dst_reg, src, srcw));
- if (mask != 0xf)
- FAIL_IF(push_load_cc(compiler, type & 0xff));
-
if (src & SLJIT_IMM) {
/* TODO(mundaym): fast path with lscond2 */
FAIL_IF(push_load_imm_inst(compiler, src_r, srcw));
@@ -2750,7 +2972,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_const* sljit_emit_const(struct sljit_compi
}
if (dst & SLJIT_MEM)
- PTR_FAIL_IF(store_word(compiler, dst_r, dst, dstw, tmp1, 0 /* always 64-bit */));
+ PTR_FAIL_IF(store_word(compiler, dst_r, dst, dstw, 0 /* always 64-bit */));
return (struct sljit_const*)const_;
}
@@ -2797,7 +3019,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_put_label *sljit_emit_put_label(
}
if (dst & SLJIT_MEM)
- PTR_FAIL_IF(store_word(compiler, dst_r, dst, dstw, tmp1, 0));
+ PTR_FAIL_IF(store_word(compiler, dst_r, dst, dstw, 0));
return put_label;
}
diff --git a/thirdparty/pcre2/src/sljit/sljitNativeSPARC_32.c b/thirdparty/pcre2/src/sljit/sljitNativeSPARC_32.c
index e5167f02ba..28886405af 100644
--- a/thirdparty/pcre2/src/sljit/sljitNativeSPARC_32.c
+++ b/thirdparty/pcre2/src/sljit/sljitNativeSPARC_32.c
@@ -93,18 +93,21 @@ static SLJIT_INLINE sljit_s32 emit_single_op(struct sljit_compiler *compiler, sl
return push_inst(compiler, ADD | D(dst) | S1(dst) | IMM(1), UNMOVABLE_INS);
case SLJIT_ADD:
+ compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB;
return push_inst(compiler, ADD | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst) | (flags & SET_FLAGS));
case SLJIT_ADDC:
return push_inst(compiler, ADDC | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst) | (flags & SET_FLAGS));
case SLJIT_SUB:
+ compiler->status_flags_state = SLJIT_CURRENT_FLAGS_ADD_SUB;
return push_inst(compiler, SUB | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst) | (flags & SET_FLAGS));
case SLJIT_SUBC:
return push_inst(compiler, SUBC | (flags & SET_FLAGS) | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst) | (flags & SET_FLAGS));
case SLJIT_MUL:
+ compiler->status_flags_state = 0;
FAIL_IF(push_inst(compiler, SMUL | D(dst) | S1(src1) | ARG2(flags, src2), DR(dst)));
if (!(flags & SET_FLAGS))
return SLJIT_SUCCESS;
diff --git a/thirdparty/pcre2/src/sljit/sljitNativeSPARC_common.c b/thirdparty/pcre2/src/sljit/sljitNativeSPARC_common.c
index 544d80d028..e833f09d7a 100644
--- a/thirdparty/pcre2/src/sljit/sljitNativeSPARC_common.c
+++ b/thirdparty/pcre2/src/sljit/sljitNativeSPARC_common.c
@@ -1275,16 +1275,14 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_label* sljit_emit_label(struct sljit_compi
return label;
}
-static sljit_ins get_cc(sljit_s32 type)
+static sljit_ins get_cc(struct sljit_compiler *compiler, sljit_s32 type)
{
switch (type) {
case SLJIT_EQUAL:
- case SLJIT_MUL_NOT_OVERFLOW:
case SLJIT_NOT_EQUAL_F64: /* Unordered. */
return DA(0x1);
case SLJIT_NOT_EQUAL:
- case SLJIT_MUL_OVERFLOW:
case SLJIT_EQUAL_F64:
return DA(0x9);
@@ -1317,10 +1315,16 @@ static sljit_ins get_cc(sljit_s32 type)
return DA(0x2);
case SLJIT_OVERFLOW:
+ if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB))
+ return DA(0x9);
+
case SLJIT_UNORDERED_F64:
return DA(0x7);
case SLJIT_NOT_OVERFLOW:
+ if (!(compiler->status_flags_state & SLJIT_CURRENT_FLAGS_ADD_SUB))
+ return DA(0x1);
+
case SLJIT_ORDERED_F64:
return DA(0xf);
@@ -1347,7 +1351,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile
if (((compiler->delay_slot & DST_INS_MASK) != UNMOVABLE_INS) && !(compiler->delay_slot & ICC_IS_SET))
jump->flags |= IS_MOVABLE;
#if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)
- PTR_FAIL_IF(push_inst(compiler, BICC | get_cc(type ^ 1) | 5, UNMOVABLE_INS));
+ PTR_FAIL_IF(push_inst(compiler, BICC | get_cc(compiler, type ^ 1) | 5, UNMOVABLE_INS));
#else
#error "Implementation required"
#endif
@@ -1357,7 +1361,7 @@ SLJIT_API_FUNC_ATTRIBUTE struct sljit_jump* sljit_emit_jump(struct sljit_compile
if (((compiler->delay_slot & DST_INS_MASK) != UNMOVABLE_INS) && !(compiler->delay_slot & FCC_IS_SET))
jump->flags |= IS_MOVABLE;
#if (defined SLJIT_CONFIG_SPARC_32 && SLJIT_CONFIG_SPARC_32)
- PTR_FAIL_IF(push_inst(compiler, FBFCC | get_cc(type ^ 1) | 5, UNMOVABLE_INS));
+ PTR_FAIL_IF(push_inst(compiler, FBFCC | get_cc(compiler, type ^ 1) | 5, UNMOVABLE_INS));
#else
#error "Implementation required"
#endif
@@ -1474,9 +1478,9 @@ SLJIT_API_FUNC_ATTRIBUTE sljit_s32 sljit_emit_op_flags(struct sljit_compiler *co
type &= 0xff;
if (type < SLJIT_EQUAL_F64)
- FAIL_IF(push_inst(compiler, BICC | get_cc(type) | 3, UNMOVABLE_INS));
+ FAIL_IF(push_inst(compiler, BICC | get_cc(compiler, type) | 3, UNMOVABLE_INS));
else
- FAIL_IF(push_inst(compiler, FBFCC | get_cc(type) | 3, UNMOVABLE_INS));
+ FAIL_IF(push_inst(compiler, FBFCC | get_cc(compiler, type) | 3, UNMOVABLE_INS));
FAIL_IF(push_inst(compiler, OR | D(reg) | S1(0) | IMM(1), UNMOVABLE_INS));
FAIL_IF(push_inst(compiler, OR | D(reg) | S1(0) | IMM(0), UNMOVABLE_INS));
diff --git a/thirdparty/pcre2/src/sljit/sljitNativeX86_common.c b/thirdparty/pcre2/src/sljit/sljitNativeX86_common.c
index ddcc5ebf76..515d98aefd 100644
--- a/thirdparty/pcre2/src/sljit/sljitNativeX86_common.c
+++ b/thirdparty/pcre2/src/sljit/sljitNativeX86_common.c
@@ -411,11 +411,9 @@ static sljit_u8 get_jump_code(sljit_s32 type)
return 0x8e /* jle */;
case SLJIT_OVERFLOW:
- case SLJIT_MUL_OVERFLOW:
return 0x80 /* jo */;
case SLJIT_NOT_OVERFLOW:
- case SLJIT_MUL_NOT_OVERFLOW:
return 0x81 /* jno */;
case SLJIT_UNORDERED_F64:
diff --git a/thirdparty/pcre2/src/sljit/sljitUtils.c b/thirdparty/pcre2/src/sljit/sljitUtils.c
index 08ca35cf37..9bce714735 100644
--- a/thirdparty/pcre2/src/sljit/sljitUtils.c
+++ b/thirdparty/pcre2/src/sljit/sljitUtils.c
@@ -48,7 +48,7 @@ static HANDLE allocator_lock;
static SLJIT_INLINE void allocator_grab_lock(void)
{
HANDLE lock;
- if (SLJIT_UNLIKELY(!allocator_lock)) {
+ if (SLJIT_UNLIKELY(!InterlockedCompareExchangePointer(&allocator_lock, NULL, NULL))) {
lock = CreateMutex(NULL, FALSE, NULL);
if (InterlockedCompareExchangePointer(&allocator_lock, lock, NULL))
CloseHandle(lock);
@@ -146,9 +146,13 @@ static SLJIT_INLINE sljit_sw get_page_alignment(void) {
#include <unistd.h>
static SLJIT_INLINE sljit_sw get_page_alignment(void) {
- static sljit_sw sljit_page_align;
- if (!sljit_page_align) {
+ static sljit_sw sljit_page_align = -1;
+ if (sljit_page_align < 0) {
+#ifdef _SC_PAGESIZE
sljit_page_align = sysconf(_SC_PAGESIZE);
+#else
+ sljit_page_align = getpagesize();
+#endif
/* Should never happen. */
if (sljit_page_align < 0)
sljit_page_align = 4096;
diff --git a/thirdparty/pcre2/src/sljit/sljitWXExecAllocator.c b/thirdparty/pcre2/src/sljit/sljitWXExecAllocator.c
index 6ef71f7d83..72d5b8dd2b 100644
--- a/thirdparty/pcre2/src/sljit/sljitWXExecAllocator.c
+++ b/thirdparty/pcre2/src/sljit/sljitWXExecAllocator.c
@@ -121,14 +121,18 @@ SLJIT_API_FUNC_ATTRIBUTE void* sljit_malloc_exec(sljit_uw size)
static pthread_mutex_t se_lock = PTHREAD_MUTEX_INITIALIZER;
#endif
static int se_protected = !SLJIT_PROT_WX;
+ int prot = PROT_READ | PROT_WRITE | SLJIT_PROT_WX;
sljit_uw* ptr;
if (SLJIT_UNLIKELY(se_protected < 0))
return NULL;
+#ifdef PROT_MAX
+ prot |= PROT_MAX(PROT_READ | PROT_WRITE | PROT_EXEC);
+#endif
+
size += sizeof(sljit_uw);
- ptr = (sljit_uw*)mmap(NULL, size, PROT_READ | PROT_WRITE | SLJIT_PROT_WX,
- MAP_PRIVATE | MAP_ANON, -1, 0);
+ ptr = (sljit_uw*)mmap(NULL, size, prot, MAP_PRIVATE | MAP_ANON, -1, 0);
if (ptr == MAP_FAILED)
return NULL;
diff --git a/thirdparty/tinyexr/tinyexr.cc b/thirdparty/tinyexr/tinyexr.cc
index fef8f66c98..70115ea5c2 100644
--- a/thirdparty/tinyexr/tinyexr.cc
+++ b/thirdparty/tinyexr/tinyexr.cc
@@ -4,5 +4,9 @@
#endif
#endif
+// -- GODOT start --
+#include <zlib.h> // Should come before including tinyexr.
+// -- GODOT end --
+
#define TINYEXR_IMPLEMENTATION
#include "tinyexr.h"
diff --git a/thirdparty/tinyexr/tinyexr.h b/thirdparty/tinyexr/tinyexr.h
index a3e7b23161..969f07ad79 100644
--- a/thirdparty/tinyexr/tinyexr.h
+++ b/thirdparty/tinyexr/tinyexr.h
@@ -1,7 +1,7 @@
#ifndef TINYEXR_H_
#define TINYEXR_H_
/*
-Copyright (c) 2014 - 2020, Syoyo Fujita and many contributors.
+Copyright (c) 2014 - 2021, Syoyo Fujita and many contributors.
All rights reserved.
Redistribution and use in source and binary forms, with or without
@@ -65,6 +65,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// End of OpenEXR license -------------------------------------------------
+
//
//
// Do this:
@@ -88,7 +89,21 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
extern "C" {
#endif
-// Use embedded miniz or not to decode ZIP format pixel. Linking with zlib
+#if defined(_M_IX86) || defined(_M_X64) || defined(__i386__) || \
+ defined(__i386) || defined(__i486__) || defined(__i486) || \
+ defined(i386) || defined(__ia64__) || defined(__x86_64__)
+#define TINYEXR_X86_OR_X64_CPU 1
+#else
+#define TINYEXR_X86_OR_X64_CPU 0
+#endif
+
+#if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) || TINYEXR_X86_OR_X64_CPU
+#define TINYEXR_LITTLE_ENDIAN 1
+#else
+#define TINYEXR_LITTLE_ENDIAN 0
+#endif
+
+// Use miniz or not to decode ZIP format pixel. Linking with zlib
// required if this flas is 0.
#ifndef TINYEXR_USE_MINIZ
#define TINYEXR_USE_MINIZ (1)
@@ -162,9 +177,13 @@ extern "C" {
typedef struct _EXRVersion {
int version; // this must be 2
- int tiled; // tile format image
+ // tile format image;
+ // not zero for only a single-part "normal" tiled file (according to spec.)
+ int tiled;
int long_name; // long name attribute
- int non_image; // deep image(EXR 2.0)
+ // deep image(EXR 2.0);
+ // for a multi-part file, indicates that at least one part is of type deep* (according to spec.)
+ int non_image;
int multipart; // multi-part(EXR 2.0)
} EXRVersion;
@@ -222,6 +241,8 @@ typedef struct _EXRHeader {
int tile_rounding_mode;
int long_name;
+ // for a single-part file, agree with the version field bit 11
+ // for a multi-part file, it is consistent with the type of part
int non_image;
int multipart;
unsigned int header_len;
@@ -244,7 +265,11 @@ typedef struct _EXRHeader {
// ParseEXRHeaderFrom(Meomory|File), then users
// can edit it(only valid for HALF pixel type
// channel)
-
+ // name attribute required for multipart files;
+ // must be unique and non empty (according to spec.);
+ // use EXRSetNameAttr for setting value;
+ // max 255 character allowed - excluding terminating zero
+ char name[256];
} EXRHeader;
typedef struct _EXRMultiPartHeader {
@@ -256,6 +281,10 @@ typedef struct _EXRMultiPartHeader {
typedef struct _EXRImage {
EXRTile *tiles; // Tiled pixel data. The application must reconstruct image
// from tiles manually. NULL if scanline format.
+ struct _EXRImage* next_level; // NULL if scanline format or image is the last level.
+ int level_x; // x level index
+ int level_y; // y level index
+
unsigned char **images; // image[channels][pixels]. NULL if tiled format.
int width;
@@ -339,9 +368,15 @@ extern int SaveEXR(const float *data, const int width, const int height,
const int components, const int save_as_fp16,
const char *filename, const char **err);
+// Returns the number of resolution levels of the image (including the base)
+extern int EXRNumLevels(const EXRImage* exr_image);
+
// Initialize EXRHeader struct
extern void InitEXRHeader(EXRHeader *exr_header);
+// Set name attribute of EXRHeader struct (it makes a copy)
+extern void EXRSetNameAttr(EXRHeader *exr_header, const char* name);
+
// Initialize EXRImage struct
extern void InitEXRImage(EXRImage *exr_image);
@@ -465,6 +500,30 @@ extern size_t SaveEXRImageToMemory(const EXRImage *image,
const EXRHeader *exr_header,
unsigned char **memory, const char **err);
+// Saves multi-channel, multi-frame OpenEXR image to a memory.
+// Image is compressed using EXRImage.compression value.
+// File global attributes (eg. display_window) must be set in the first header.
+// Returns negative value and may set error string in `err` when there's an
+// error
+// When there was an error message, Application must free `err` with
+// FreeEXRErrorMessage()
+extern int SaveEXRMultipartImageToFile(const EXRImage *images,
+ const EXRHeader **exr_headers,
+ unsigned int num_parts,
+ const char *filename, const char **err);
+
+// Saves multi-channel, multi-frame OpenEXR image to a memory.
+// Image is compressed using EXRImage.compression value.
+// File global attributes (eg. display_window) must be set in the first header.
+// Return the number of bytes if success.
+// Return zero and will set error string in `err` when there's an
+// error.
+// When there was an error message, Application must free `err` with
+// FreeEXRErrorMessage()
+extern size_t SaveEXRMultipartImageToMemory(const EXRImage *images,
+ const EXRHeader **exr_headers,
+ unsigned int num_parts,
+ unsigned char **memory, const char **err);
// Loads single-frame OpenEXR deep image.
// Application must free memory of variables in DeepImage(image, offset_table)
// Returns negative value and may set error string in `err` when there's an
@@ -514,6 +573,9 @@ extern int LoadEXRFromMemory(float **out_rgba, int *width, int *height,
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
+#ifndef NOMINMAX
+#define NOMINMAX
+#endif
#include <windows.h> // for UTF-8
#endif
@@ -530,8 +592,11 @@ extern int LoadEXRFromMemory(float **out_rgba, int *width, int *height,
#include <limits>
#include <string>
#include <vector>
+#include <set>
-#if __cplusplus > 199711L
+// https://stackoverflow.com/questions/5047971/how-do-i-check-for-c11-support
+#if __cplusplus > 199711L || (defined(_MSC_VER) && _MSC_VER >= 1900)
+#define TINYEXR_HAS_CXX11 (1)
// C++11
#include <cstdint>
@@ -547,6 +612,7 @@ extern int LoadEXRFromMemory(float **out_rgba, int *width, int *height,
#endif
#if TINYEXR_USE_MINIZ
+#include <miniz.h>
#else
// Issue #46. Please include your own zlib-compatible API header before
// including `tinyexr.h`
@@ -588,6467 +654,6 @@ typedef long long tinyexr_int64;
#endif
#endif
-#if TINYEXR_USE_MINIZ
-
-namespace miniz {
-
-#ifdef __clang__
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wc++11-long-long"
-#pragma clang diagnostic ignored "-Wold-style-cast"
-#pragma clang diagnostic ignored "-Wpadded"
-#pragma clang diagnostic ignored "-Wsign-conversion"
-#pragma clang diagnostic ignored "-Wc++11-extensions"
-#pragma clang diagnostic ignored "-Wconversion"
-#pragma clang diagnostic ignored "-Wunused-function"
-#pragma clang diagnostic ignored "-Wc++98-compat-pedantic"
-#pragma clang diagnostic ignored "-Wundef"
-
-#if __has_warning("-Wcomma")
-#pragma clang diagnostic ignored "-Wcomma"
-#endif
-
-#if __has_warning("-Wmacro-redefined")
-#pragma clang diagnostic ignored "-Wmacro-redefined"
-#endif
-
-#if __has_warning("-Wcast-qual")
-#pragma clang diagnostic ignored "-Wcast-qual"
-#endif
-
-#if __has_warning("-Wzero-as-null-pointer-constant")
-#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant"
-#endif
-
-#if __has_warning("-Wtautological-constant-compare")
-#pragma clang diagnostic ignored "-Wtautological-constant-compare"
-#endif
-
-#if __has_warning("-Wextra-semi-stmt")
-#pragma clang diagnostic ignored "-Wextra-semi-stmt"
-#endif
-
-#endif
-
-/* miniz.c v1.15 - public domain deflate/inflate, zlib-subset, ZIP
- reading/writing/appending, PNG writing
- See "unlicense" statement at the end of this file.
- Rich Geldreich <richgel99@gmail.com>, last updated Oct. 13, 2013
- Implements RFC 1950: http://www.ietf.org/rfc/rfc1950.txt and RFC 1951:
- http://www.ietf.org/rfc/rfc1951.txt
-
- Most API's defined in miniz.c are optional. For example, to disable the
- archive related functions just define
- MINIZ_NO_ARCHIVE_APIS, or to get rid of all stdio usage define MINIZ_NO_STDIO
- (see the list below for more macros).
-
- * Change History
- 10/13/13 v1.15 r4 - Interim bugfix release while I work on the next major
- release with Zip64 support (almost there!):
- - Critical fix for the MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY bug
- (thanks kahmyong.moon@hp.com) which could cause locate files to not find
- files. This bug
- would only have occurred in earlier versions if you explicitly used this
- flag, OR if you used mz_zip_extract_archive_file_to_heap() or
- mz_zip_add_mem_to_archive_file_in_place()
- (which used this flag). If you can't switch to v1.15 but want to fix
- this bug, just remove the uses of this flag from both helper funcs (and of
- course don't use the flag).
- - Bugfix in mz_zip_reader_extract_to_mem_no_alloc() from kymoon when
- pUser_read_buf is not NULL and compressed size is > uncompressed size
- - Fixing mz_zip_reader_extract_*() funcs so they don't try to extract
- compressed data from directory entries, to account for weird zipfiles which
- contain zero-size compressed data on dir entries.
- Hopefully this fix won't cause any issues on weird zip archives,
- because it assumes the low 16-bits of zip external attributes are DOS
- attributes (which I believe they always are in practice).
- - Fixing mz_zip_reader_is_file_a_directory() so it doesn't check the
- internal attributes, just the filename and external attributes
- - mz_zip_reader_init_file() - missing MZ_FCLOSE() call if the seek failed
- - Added cmake support for Linux builds which builds all the examples,
- tested with clang v3.3 and gcc v4.6.
- - Clang fix for tdefl_write_image_to_png_file_in_memory() from toffaletti
- - Merged MZ_FORCEINLINE fix from hdeanclark
- - Fix <time.h> include before config #ifdef, thanks emil.brink
- - Added tdefl_write_image_to_png_file_in_memory_ex(): supports Y flipping
- (super useful for OpenGL apps), and explicit control over the compression
- level (so you can
- set it to 1 for real-time compression).
- - Merged in some compiler fixes from paulharris's github repro.
- - Retested this build under Windows (VS 2010, including static analysis),
- tcc 0.9.26, gcc v4.6 and clang v3.3.
- - Added example6.c, which dumps an image of the mandelbrot set to a PNG
- file.
- - Modified example2 to help test the
- MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY flag more.
- - In r3: Bugfix to mz_zip_writer_add_file() found during merge: Fix
- possible src file fclose() leak if alignment bytes+local header file write
- faiiled
- - In r4: Minor bugfix to mz_zip_writer_add_from_zip_reader():
- Was pushing the wrong central dir header offset, appears harmless in this
- release, but it became a problem in the zip64 branch
- 5/20/12 v1.14 - MinGW32/64 GCC 4.6.1 compiler fixes: added MZ_FORCEINLINE,
- #include <time.h> (thanks fermtect).
- 5/19/12 v1.13 - From jason@cornsyrup.org and kelwert@mtu.edu - Fix
- mz_crc32() so it doesn't compute the wrong CRC-32's when mz_ulong is 64-bit.
- - Temporarily/locally slammed in "typedef unsigned long mz_ulong" and
- re-ran a randomized regression test on ~500k files.
- - Eliminated a bunch of warnings when compiling with GCC 32-bit/64.
- - Ran all examples, miniz.c, and tinfl.c through MSVC 2008's /analyze
- (static analysis) option and fixed all warnings (except for the silly
- "Use of the comma-operator in a tested expression.." analysis warning,
- which I purposely use to work around a MSVC compiler warning).
- - Created 32-bit and 64-bit Codeblocks projects/workspace. Built and
- tested Linux executables. The codeblocks workspace is compatible with
- Linux+Win32/x64.
- - Added miniz_tester solution/project, which is a useful little app
- derived from LZHAM's tester app that I use as part of the regression test.
- - Ran miniz.c and tinfl.c through another series of regression testing on
- ~500,000 files and archives.
- - Modified example5.c so it purposely disables a bunch of high-level
- functionality (MINIZ_NO_STDIO, etc.). (Thanks to corysama for the
- MINIZ_NO_STDIO bug report.)
- - Fix ftell() usage in examples so they exit with an error on files which
- are too large (a limitation of the examples, not miniz itself).
- 4/12/12 v1.12 - More comments, added low-level example5.c, fixed a couple
- minor level_and_flags issues in the archive API's.
- level_and_flags can now be set to MZ_DEFAULT_COMPRESSION. Thanks to Bruce
- Dawson <bruced@valvesoftware.com> for the feedback/bug report.
- 5/28/11 v1.11 - Added statement from unlicense.org
- 5/27/11 v1.10 - Substantial compressor optimizations:
- - Level 1 is now ~4x faster than before. The L1 compressor's throughput
- now varies between 70-110MB/sec. on a
- - Core i7 (actual throughput varies depending on the type of data, and x64
- vs. x86).
- - Improved baseline L2-L9 compression perf. Also, greatly improved
- compression perf. issues on some file types.
- - Refactored the compression code for better readability and
- maintainability.
- - Added level 10 compression level (L10 has slightly better ratio than
- level 9, but could have a potentially large
- drop in throughput on some files).
- 5/15/11 v1.09 - Initial stable release.
-
- * Low-level Deflate/Inflate implementation notes:
-
- Compression: Use the "tdefl" API's. The compressor supports raw, static,
- and dynamic blocks, lazy or
- greedy parsing, match length filtering, RLE-only, and Huffman-only streams.
- It performs and compresses
- approximately as well as zlib.
-
- Decompression: Use the "tinfl" API's. The entire decompressor is
- implemented as a single function
- coroutine: see tinfl_decompress(). It supports decompression into a 32KB
- (or larger power of 2) wrapping buffer, or into a memory
- block large enough to hold the entire file.
-
- The low-level tdefl/tinfl API's do not make any use of dynamic memory
- allocation.
-
- * zlib-style API notes:
-
- miniz.c implements a fairly large subset of zlib. There's enough
- functionality present for it to be a drop-in
- zlib replacement in many apps:
- The z_stream struct, optional memory allocation callbacks
- deflateInit/deflateInit2/deflate/deflateReset/deflateEnd/deflateBound
- inflateInit/inflateInit2/inflate/inflateEnd
- compress, compress2, compressBound, uncompress
- CRC-32, Adler-32 - Using modern, minimal code size, CPU cache friendly
- routines.
- Supports raw deflate streams or standard zlib streams with adler-32
- checking.
-
- Limitations:
- The callback API's are not implemented yet. No support for gzip headers or
- zlib static dictionaries.
- I've tried to closely emulate zlib's various flavors of stream flushing
- and return status codes, but
- there are no guarantees that miniz.c pulls this off perfectly.
-
- * PNG writing: See the tdefl_write_image_to_png_file_in_memory() function,
- originally written by
- Alex Evans. Supports 1-4 bytes/pixel images.
-
- * ZIP archive API notes:
-
- The ZIP archive API's where designed with simplicity and efficiency in
- mind, with just enough abstraction to
- get the job done with minimal fuss. There are simple API's to retrieve file
- information, read files from
- existing archives, create new archives, append new files to existing
- archives, or clone archive data from
- one archive to another. It supports archives located in memory or the heap,
- on disk (using stdio.h),
- or you can specify custom file read/write callbacks.
-
- - Archive reading: Just call this function to read a single file from a
- disk archive:
-
- void *mz_zip_extract_archive_file_to_heap(const char *pZip_filename, const
- char *pArchive_name,
- size_t *pSize, mz_uint zip_flags);
-
- For more complex cases, use the "mz_zip_reader" functions. Upon opening an
- archive, the entire central
- directory is located and read as-is into memory, and subsequent file access
- only occurs when reading individual files.
-
- - Archives file scanning: The simple way is to use this function to scan a
- loaded archive for a specific file:
-
- int mz_zip_reader_locate_file(mz_zip_archive *pZip, const char *pName,
- const char *pComment, mz_uint flags);
-
- The locate operation can optionally check file comments too, which (as one
- example) can be used to identify
- multiple versions of the same file in an archive. This function uses a
- simple linear search through the central
- directory, so it's not very fast.
-
- Alternately, you can iterate through all the files in an archive (using
- mz_zip_reader_get_num_files()) and
- retrieve detailed info on each file by calling mz_zip_reader_file_stat().
-
- - Archive creation: Use the "mz_zip_writer" functions. The ZIP writer
- immediately writes compressed file data
- to disk and builds an exact image of the central directory in memory. The
- central directory image is written
- all at once at the end of the archive file when the archive is finalized.
-
- The archive writer can optionally align each file's local header and file
- data to any power of 2 alignment,
- which can be useful when the archive will be read from optical media. Also,
- the writer supports placing
- arbitrary data blobs at the very beginning of ZIP archives. Archives
- written using either feature are still
- readable by any ZIP tool.
-
- - Archive appending: The simple way to add a single file to an archive is
- to call this function:
-
- mz_bool mz_zip_add_mem_to_archive_file_in_place(const char *pZip_filename,
- const char *pArchive_name,
- const void *pBuf, size_t buf_size, const void *pComment, mz_uint16
- comment_size, mz_uint level_and_flags);
-
- The archive will be created if it doesn't already exist, otherwise it'll be
- appended to.
- Note the appending is done in-place and is not an atomic operation, so if
- something goes wrong
- during the operation it's possible the archive could be left without a
- central directory (although the local
- file headers and file data will be fine, so the archive will be
- recoverable).
-
- For more complex archive modification scenarios:
- 1. The safest way is to use a mz_zip_reader to read the existing archive,
- cloning only those bits you want to
- preserve into a new archive using using the
- mz_zip_writer_add_from_zip_reader() function (which compiles the
- compressed file data as-is). When you're done, delete the old archive and
- rename the newly written archive, and
- you're done. This is safe but requires a bunch of temporary disk space or
- heap memory.
-
- 2. Or, you can convert an mz_zip_reader in-place to an mz_zip_writer using
- mz_zip_writer_init_from_reader(),
- append new files as needed, then finalize the archive which will write an
- updated central directory to the
- original archive. (This is basically what
- mz_zip_add_mem_to_archive_file_in_place() does.) There's a
- possibility that the archive's central directory could be lost with this
- method if anything goes wrong, though.
-
- - ZIP archive support limitations:
- No zip64 or spanning support. Extraction functions can only handle
- unencrypted, stored or deflated files.
- Requires streams capable of seeking.
-
- * This is a header file library, like stb_image.c. To get only a header file,
- either cut and paste the
- below header, or create miniz.h, #define MINIZ_HEADER_FILE_ONLY, and then
- include miniz.c from it.
-
- * Important: For best perf. be sure to customize the below macros for your
- target platform:
- #define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 1
- #define MINIZ_LITTLE_ENDIAN 1
- #define MINIZ_HAS_64BIT_REGISTERS 1
-
- * On platforms using glibc, Be sure to "#define _LARGEFILE64_SOURCE 1" before
- including miniz.c to ensure miniz
- uses the 64-bit variants: fopen64(), stat64(), etc. Otherwise you won't be
- able to process large files
- (i.e. 32-bit stat() fails for me on files > 0x7FFFFFFF bytes).
-*/
-
-#ifndef MINIZ_HEADER_INCLUDED
-#define MINIZ_HEADER_INCLUDED
-
-//#include <stdlib.h>
-
-// Defines to completely disable specific portions of miniz.c:
-// If all macros here are defined the only functionality remaining will be
-// CRC-32, adler-32, tinfl, and tdefl.
-
-// Define MINIZ_NO_STDIO to disable all usage and any functions which rely on
-// stdio for file I/O.
-//#define MINIZ_NO_STDIO
-
-// If MINIZ_NO_TIME is specified then the ZIP archive functions will not be able
-// to get the current time, or
-// get/set file times, and the C run-time funcs that get/set times won't be
-// called.
-// The current downside is the times written to your archives will be from 1979.
-#define MINIZ_NO_TIME
-
-// Define MINIZ_NO_ARCHIVE_APIS to disable all ZIP archive API's.
-#define MINIZ_NO_ARCHIVE_APIS
-
-// Define MINIZ_NO_ARCHIVE_APIS to disable all writing related ZIP archive
-// API's.
-//#define MINIZ_NO_ARCHIVE_WRITING_APIS
-
-// Define MINIZ_NO_ZLIB_APIS to remove all ZLIB-style compression/decompression
-// API's.
-//#define MINIZ_NO_ZLIB_APIS
-
-// Define MINIZ_NO_ZLIB_COMPATIBLE_NAME to disable zlib names, to prevent
-// conflicts against stock zlib.
-//#define MINIZ_NO_ZLIB_COMPATIBLE_NAMES
-
-// Define MINIZ_NO_MALLOC to disable all calls to malloc, free, and realloc.
-// Note if MINIZ_NO_MALLOC is defined then the user must always provide custom
-// user alloc/free/realloc
-// callbacks to the zlib and archive API's, and a few stand-alone helper API's
-// which don't provide custom user
-// functions (such as tdefl_compress_mem_to_heap() and
-// tinfl_decompress_mem_to_heap()) won't work.
-//#define MINIZ_NO_MALLOC
-
-#if defined(__TINYC__) && (defined(__linux) || defined(__linux__))
-// TODO: Work around "error: include file 'sys\utime.h' when compiling with tcc
-// on Linux
-#define MINIZ_NO_TIME
-#endif
-
-#if !defined(MINIZ_NO_TIME) && !defined(MINIZ_NO_ARCHIVE_APIS)
-//#include <time.h>
-#endif
-
-#if defined(_M_IX86) || defined(_M_X64) || defined(__i386__) || \
- defined(__i386) || defined(__i486__) || defined(__i486) || \
- defined(i386) || defined(__ia64__) || defined(__x86_64__)
-// MINIZ_X86_OR_X64_CPU is only used to help set the below macros.
-#define MINIZ_X86_OR_X64_CPU 1
-#endif
-
-#if defined(__sparcv9)
-// Big endian
-#else
-#if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) || MINIZ_X86_OR_X64_CPU
-// Set MINIZ_LITTLE_ENDIAN to 1 if the processor is little endian.
-#define MINIZ_LITTLE_ENDIAN 1
-#endif
-#endif
-
-#if MINIZ_X86_OR_X64_CPU
-// Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES to 1 on CPU's that permit efficient
-// integer loads and stores from unaligned addresses.
-//#define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 1
-#define MINIZ_USE_UNALIGNED_LOADS_AND_STORES \
- 0 // disable to suppress compiler warnings
-#endif
-
-#if defined(_M_X64) || defined(_WIN64) || defined(__MINGW64__) || \
- defined(_LP64) || defined(__LP64__) || defined(__ia64__) || \
- defined(__x86_64__)
-// Set MINIZ_HAS_64BIT_REGISTERS to 1 if operations on 64-bit integers are
-// reasonably fast (and don't involve compiler generated calls to helper
-// functions).
-#define MINIZ_HAS_64BIT_REGISTERS 1
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// ------------------- zlib-style API Definitions.
-
-// For more compatibility with zlib, miniz.c uses unsigned long for some
-// parameters/struct members. Beware: mz_ulong can be either 32 or 64-bits!
-typedef unsigned long mz_ulong;
-
-// mz_free() internally uses the MZ_FREE() macro (which by default calls free()
-// unless you've modified the MZ_MALLOC macro) to release a block allocated from
-// the heap.
-void mz_free(void *p);
-
-#define MZ_ADLER32_INIT (1)
-// mz_adler32() returns the initial adler-32 value to use when called with
-// ptr==NULL.
-mz_ulong mz_adler32(mz_ulong adler, const unsigned char *ptr, size_t buf_len);
-
-#define MZ_CRC32_INIT (0)
-// mz_crc32() returns the initial CRC-32 value to use when called with
-// ptr==NULL.
-mz_ulong mz_crc32(mz_ulong crc, const unsigned char *ptr, size_t buf_len);
-
-// Compression strategies.
-enum {
- MZ_DEFAULT_STRATEGY = 0,
- MZ_FILTERED = 1,
- MZ_HUFFMAN_ONLY = 2,
- MZ_RLE = 3,
- MZ_FIXED = 4
-};
-
-// Method
-#define MZ_DEFLATED 8
-
-#ifndef MINIZ_NO_ZLIB_APIS
-
-// Heap allocation callbacks.
-// Note that mz_alloc_func parameter types purpsosely differ from zlib's:
-// items/size is size_t, not unsigned long.
-typedef void *(*mz_alloc_func)(void *opaque, size_t items, size_t size);
-typedef void (*mz_free_func)(void *opaque, void *address);
-typedef void *(*mz_realloc_func)(void *opaque, void *address, size_t items,
- size_t size);
-
-#define MZ_VERSION "9.1.15"
-#define MZ_VERNUM 0x91F0
-#define MZ_VER_MAJOR 9
-#define MZ_VER_MINOR 1
-#define MZ_VER_REVISION 15
-#define MZ_VER_SUBREVISION 0
-
-// Flush values. For typical usage you only need MZ_NO_FLUSH and MZ_FINISH. The
-// other values are for advanced use (refer to the zlib docs).
-enum {
- MZ_NO_FLUSH = 0,
- MZ_PARTIAL_FLUSH = 1,
- MZ_SYNC_FLUSH = 2,
- MZ_FULL_FLUSH = 3,
- MZ_FINISH = 4,
- MZ_BLOCK = 5
-};
-
-// Return status codes. MZ_PARAM_ERROR is non-standard.
-enum {
- MZ_OK = 0,
- MZ_STREAM_END = 1,
- MZ_NEED_DICT = 2,
- MZ_ERRNO = -1,
- MZ_STREAM_ERROR = -2,
- MZ_DATA_ERROR = -3,
- MZ_MEM_ERROR = -4,
- MZ_BUF_ERROR = -5,
- MZ_VERSION_ERROR = -6,
- MZ_PARAM_ERROR = -10000
-};
-
-// Compression levels: 0-9 are the standard zlib-style levels, 10 is best
-// possible compression (not zlib compatible, and may be very slow),
-// MZ_DEFAULT_COMPRESSION=MZ_DEFAULT_LEVEL.
-enum {
- MZ_NO_COMPRESSION = 0,
- MZ_BEST_SPEED = 1,
- MZ_BEST_COMPRESSION = 9,
- MZ_UBER_COMPRESSION = 10,
- MZ_DEFAULT_LEVEL = 6,
- MZ_DEFAULT_COMPRESSION = -1
-};
-
-// Window bits
-#define MZ_DEFAULT_WINDOW_BITS 15
-
-struct mz_internal_state;
-
-// Compression/decompression stream struct.
-typedef struct mz_stream_s {
- const unsigned char *next_in; // pointer to next byte to read
- unsigned int avail_in; // number of bytes available at next_in
- mz_ulong total_in; // total number of bytes consumed so far
-
- unsigned char *next_out; // pointer to next byte to write
- unsigned int avail_out; // number of bytes that can be written to next_out
- mz_ulong total_out; // total number of bytes produced so far
-
- char *msg; // error msg (unused)
- struct mz_internal_state *state; // internal state, allocated by zalloc/zfree
-
- mz_alloc_func
- zalloc; // optional heap allocation function (defaults to malloc)
- mz_free_func zfree; // optional heap free function (defaults to free)
- void *opaque; // heap alloc function user pointer
-
- int data_type; // data_type (unused)
- mz_ulong adler; // adler32 of the source or uncompressed data
- mz_ulong reserved; // not used
-} mz_stream;
-
-typedef mz_stream *mz_streamp;
-
-// Returns the version string of miniz.c.
-const char *mz_version(void);
-
-// mz_deflateInit() initializes a compressor with default options:
-// Parameters:
-// pStream must point to an initialized mz_stream struct.
-// level must be between [MZ_NO_COMPRESSION, MZ_BEST_COMPRESSION].
-// level 1 enables a specially optimized compression function that's been
-// optimized purely for performance, not ratio.
-// (This special func. is currently only enabled when
-// MINIZ_USE_UNALIGNED_LOADS_AND_STORES and MINIZ_LITTLE_ENDIAN are defined.)
-// Return values:
-// MZ_OK on success.
-// MZ_STREAM_ERROR if the stream is bogus.
-// MZ_PARAM_ERROR if the input parameters are bogus.
-// MZ_MEM_ERROR on out of memory.
-int mz_deflateInit(mz_streamp pStream, int level);
-
-// mz_deflateInit2() is like mz_deflate(), except with more control:
-// Additional parameters:
-// method must be MZ_DEFLATED
-// window_bits must be MZ_DEFAULT_WINDOW_BITS (to wrap the deflate stream with
-// zlib header/adler-32 footer) or -MZ_DEFAULT_WINDOW_BITS (raw deflate/no
-// header or footer)
-// mem_level must be between [1, 9] (it's checked but ignored by miniz.c)
-int mz_deflateInit2(mz_streamp pStream, int level, int method, int window_bits,
- int mem_level, int strategy);
-
-// Quickly resets a compressor without having to reallocate anything. Same as
-// calling mz_deflateEnd() followed by mz_deflateInit()/mz_deflateInit2().
-int mz_deflateReset(mz_streamp pStream);
-
-// mz_deflate() compresses the input to output, consuming as much of the input
-// and producing as much output as possible.
-// Parameters:
-// pStream is the stream to read from and write to. You must initialize/update
-// the next_in, avail_in, next_out, and avail_out members.
-// flush may be MZ_NO_FLUSH, MZ_PARTIAL_FLUSH/MZ_SYNC_FLUSH, MZ_FULL_FLUSH, or
-// MZ_FINISH.
-// Return values:
-// MZ_OK on success (when flushing, or if more input is needed but not
-// available, and/or there's more output to be written but the output buffer
-// is full).
-// MZ_STREAM_END if all input has been consumed and all output bytes have been
-// written. Don't call mz_deflate() on the stream anymore.
-// MZ_STREAM_ERROR if the stream is bogus.
-// MZ_PARAM_ERROR if one of the parameters is invalid.
-// MZ_BUF_ERROR if no forward progress is possible because the input and/or
-// output buffers are empty. (Fill up the input buffer or free up some output
-// space and try again.)
-int mz_deflate(mz_streamp pStream, int flush);
-
-// mz_deflateEnd() deinitializes a compressor:
-// Return values:
-// MZ_OK on success.
-// MZ_STREAM_ERROR if the stream is bogus.
-int mz_deflateEnd(mz_streamp pStream);
-
-// mz_deflateBound() returns a (very) conservative upper bound on the amount of
-// data that could be generated by deflate(), assuming flush is set to only
-// MZ_NO_FLUSH or MZ_FINISH.
-mz_ulong mz_deflateBound(mz_streamp pStream, mz_ulong source_len);
-
-// Single-call compression functions mz_compress() and mz_compress2():
-// Returns MZ_OK on success, or one of the error codes from mz_deflate() on
-// failure.
-int mz_compress(unsigned char *pDest, mz_ulong *pDest_len,
- const unsigned char *pSource, mz_ulong source_len);
-int mz_compress2(unsigned char *pDest, mz_ulong *pDest_len,
- const unsigned char *pSource, mz_ulong source_len, int level);
-
-// mz_compressBound() returns a (very) conservative upper bound on the amount of
-// data that could be generated by calling mz_compress().
-mz_ulong mz_compressBound(mz_ulong source_len);
-
-// Initializes a decompressor.
-int mz_inflateInit(mz_streamp pStream);
-
-// mz_inflateInit2() is like mz_inflateInit() with an additional option that
-// controls the window size and whether or not the stream has been wrapped with
-// a zlib header/footer:
-// window_bits must be MZ_DEFAULT_WINDOW_BITS (to parse zlib header/footer) or
-// -MZ_DEFAULT_WINDOW_BITS (raw deflate).
-int mz_inflateInit2(mz_streamp pStream, int window_bits);
-
-// Decompresses the input stream to the output, consuming only as much of the
-// input as needed, and writing as much to the output as possible.
-// Parameters:
-// pStream is the stream to read from and write to. You must initialize/update
-// the next_in, avail_in, next_out, and avail_out members.
-// flush may be MZ_NO_FLUSH, MZ_SYNC_FLUSH, or MZ_FINISH.
-// On the first call, if flush is MZ_FINISH it's assumed the input and output
-// buffers are both sized large enough to decompress the entire stream in a
-// single call (this is slightly faster).
-// MZ_FINISH implies that there are no more source bytes available beside
-// what's already in the input buffer, and that the output buffer is large
-// enough to hold the rest of the decompressed data.
-// Return values:
-// MZ_OK on success. Either more input is needed but not available, and/or
-// there's more output to be written but the output buffer is full.
-// MZ_STREAM_END if all needed input has been consumed and all output bytes
-// have been written. For zlib streams, the adler-32 of the decompressed data
-// has also been verified.
-// MZ_STREAM_ERROR if the stream is bogus.
-// MZ_DATA_ERROR if the deflate stream is invalid.
-// MZ_PARAM_ERROR if one of the parameters is invalid.
-// MZ_BUF_ERROR if no forward progress is possible because the input buffer is
-// empty but the inflater needs more input to continue, or if the output
-// buffer is not large enough. Call mz_inflate() again
-// with more input data, or with more room in the output buffer (except when
-// using single call decompression, described above).
-int mz_inflate(mz_streamp pStream, int flush);
-
-// Deinitializes a decompressor.
-int mz_inflateEnd(mz_streamp pStream);
-
-// Single-call decompression.
-// Returns MZ_OK on success, or one of the error codes from mz_inflate() on
-// failure.
-int mz_uncompress(unsigned char *pDest, mz_ulong *pDest_len,
- const unsigned char *pSource, mz_ulong source_len);
-
-// Returns a string description of the specified error code, or NULL if the
-// error code is invalid.
-const char *mz_error(int err);
-
-// Redefine zlib-compatible names to miniz equivalents, so miniz.c can be used
-// as a drop-in replacement for the subset of zlib that miniz.c supports.
-// Define MINIZ_NO_ZLIB_COMPATIBLE_NAMES to disable zlib-compatibility if you
-// use zlib in the same project.
-#ifndef MINIZ_NO_ZLIB_COMPATIBLE_NAMES
-typedef unsigned char Byte;
-typedef unsigned int uInt;
-typedef mz_ulong uLong;
-typedef Byte Bytef;
-typedef uInt uIntf;
-typedef char charf;
-typedef int intf;
-typedef void *voidpf;
-typedef uLong uLongf;
-typedef void *voidp;
-typedef void *const voidpc;
-#define Z_NULL 0
-#define Z_NO_FLUSH MZ_NO_FLUSH
-#define Z_PARTIAL_FLUSH MZ_PARTIAL_FLUSH
-#define Z_SYNC_FLUSH MZ_SYNC_FLUSH
-#define Z_FULL_FLUSH MZ_FULL_FLUSH
-#define Z_FINISH MZ_FINISH
-#define Z_BLOCK MZ_BLOCK
-#define Z_OK MZ_OK
-#define Z_STREAM_END MZ_STREAM_END
-#define Z_NEED_DICT MZ_NEED_DICT
-#define Z_ERRNO MZ_ERRNO
-#define Z_STREAM_ERROR MZ_STREAM_ERROR
-#define Z_DATA_ERROR MZ_DATA_ERROR
-#define Z_MEM_ERROR MZ_MEM_ERROR
-#define Z_BUF_ERROR MZ_BUF_ERROR
-#define Z_VERSION_ERROR MZ_VERSION_ERROR
-#define Z_PARAM_ERROR MZ_PARAM_ERROR
-#define Z_NO_COMPRESSION MZ_NO_COMPRESSION
-#define Z_BEST_SPEED MZ_BEST_SPEED
-#define Z_BEST_COMPRESSION MZ_BEST_COMPRESSION
-#define Z_DEFAULT_COMPRESSION MZ_DEFAULT_COMPRESSION
-#define Z_DEFAULT_STRATEGY MZ_DEFAULT_STRATEGY
-#define Z_FILTERED MZ_FILTERED
-#define Z_HUFFMAN_ONLY MZ_HUFFMAN_ONLY
-#define Z_RLE MZ_RLE
-#define Z_FIXED MZ_FIXED
-#define Z_DEFLATED MZ_DEFLATED
-#define Z_DEFAULT_WINDOW_BITS MZ_DEFAULT_WINDOW_BITS
-#define alloc_func mz_alloc_func
-#define free_func mz_free_func
-#define internal_state mz_internal_state
-#define z_stream mz_stream
-#define deflateInit mz_deflateInit
-#define deflateInit2 mz_deflateInit2
-#define deflateReset mz_deflateReset
-#define deflate mz_deflate
-#define deflateEnd mz_deflateEnd
-#define deflateBound mz_deflateBound
-#define compress mz_compress
-#define compress2 mz_compress2
-#define compressBound mz_compressBound
-#define inflateInit mz_inflateInit
-#define inflateInit2 mz_inflateInit2
-#define inflate mz_inflate
-#define inflateEnd mz_inflateEnd
-#define uncompress mz_uncompress
-#define crc32 mz_crc32
-#define adler32 mz_adler32
-#define MAX_WBITS 15
-#define MAX_MEM_LEVEL 9
-#define zError mz_error
-#define ZLIB_VERSION MZ_VERSION
-#define ZLIB_VERNUM MZ_VERNUM
-#define ZLIB_VER_MAJOR MZ_VER_MAJOR
-#define ZLIB_VER_MINOR MZ_VER_MINOR
-#define ZLIB_VER_REVISION MZ_VER_REVISION
-#define ZLIB_VER_SUBREVISION MZ_VER_SUBREVISION
-#define zlibVersion mz_version
-#define zlib_version mz_version()
-#endif // #ifndef MINIZ_NO_ZLIB_COMPATIBLE_NAMES
-
-#endif // MINIZ_NO_ZLIB_APIS
-
-// ------------------- Types and macros
-
-typedef unsigned char mz_uint8;
-typedef signed short mz_int16;
-typedef unsigned short mz_uint16;
-typedef unsigned int mz_uint32;
-typedef unsigned int mz_uint;
-typedef long long mz_int64;
-typedef unsigned long long mz_uint64;
-typedef int mz_bool;
-
-#define MZ_FALSE (0)
-#define MZ_TRUE (1)
-
-// An attempt to work around MSVC's spammy "warning C4127: conditional
-// expression is constant" message.
-#ifdef _MSC_VER
-#define MZ_MACRO_END while (0, 0)
-#else
-#define MZ_MACRO_END while (0)
-#endif
-
-// ------------------- ZIP archive reading/writing
-
-#ifndef MINIZ_NO_ARCHIVE_APIS
-
-enum {
- MZ_ZIP_MAX_IO_BUF_SIZE = 64 * 1024,
- MZ_ZIP_MAX_ARCHIVE_FILENAME_SIZE = 260,
- MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE = 256
-};
-
-typedef struct {
- mz_uint32 m_file_index;
- mz_uint32 m_central_dir_ofs;
- mz_uint16 m_version_made_by;
- mz_uint16 m_version_needed;
- mz_uint16 m_bit_flag;
- mz_uint16 m_method;
-#ifndef MINIZ_NO_TIME
- time_t m_time;
-#endif
- mz_uint32 m_crc32;
- mz_uint64 m_comp_size;
- mz_uint64 m_uncomp_size;
- mz_uint16 m_internal_attr;
- mz_uint32 m_external_attr;
- mz_uint64 m_local_header_ofs;
- mz_uint32 m_comment_size;
- char m_filename[MZ_ZIP_MAX_ARCHIVE_FILENAME_SIZE];
- char m_comment[MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE];
-} mz_zip_archive_file_stat;
-
-typedef size_t (*mz_file_read_func)(void *pOpaque, mz_uint64 file_ofs,
- void *pBuf, size_t n);
-typedef size_t (*mz_file_write_func)(void *pOpaque, mz_uint64 file_ofs,
- const void *pBuf, size_t n);
-
-struct mz_zip_internal_state_tag;
-typedef struct mz_zip_internal_state_tag mz_zip_internal_state;
-
-typedef enum {
- MZ_ZIP_MODE_INVALID = 0,
- MZ_ZIP_MODE_READING = 1,
- MZ_ZIP_MODE_WRITING = 2,
- MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED = 3
-} mz_zip_mode;
-
-typedef struct mz_zip_archive_tag {
- mz_uint64 m_archive_size;
- mz_uint64 m_central_directory_file_ofs;
- mz_uint m_total_files;
- mz_zip_mode m_zip_mode;
-
- mz_uint m_file_offset_alignment;
-
- mz_alloc_func m_pAlloc;
- mz_free_func m_pFree;
- mz_realloc_func m_pRealloc;
- void *m_pAlloc_opaque;
-
- mz_file_read_func m_pRead;
- mz_file_write_func m_pWrite;
- void *m_pIO_opaque;
-
- mz_zip_internal_state *m_pState;
-
-} mz_zip_archive;
-
-typedef enum {
- MZ_ZIP_FLAG_CASE_SENSITIVE = 0x0100,
- MZ_ZIP_FLAG_IGNORE_PATH = 0x0200,
- MZ_ZIP_FLAG_COMPRESSED_DATA = 0x0400,
- MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY = 0x0800
-} mz_zip_flags;
-
-// ZIP archive reading
-
-// Inits a ZIP archive reader.
-// These functions read and validate the archive's central directory.
-mz_bool mz_zip_reader_init(mz_zip_archive *pZip, mz_uint64 size,
- mz_uint32 flags);
-mz_bool mz_zip_reader_init_mem(mz_zip_archive *pZip, const void *pMem,
- size_t size, mz_uint32 flags);
-
-#ifndef MINIZ_NO_STDIO
-mz_bool mz_zip_reader_init_file(mz_zip_archive *pZip, const char *pFilename,
- mz_uint32 flags);
-#endif
-
-// Returns the total number of files in the archive.
-mz_uint mz_zip_reader_get_num_files(mz_zip_archive *pZip);
-
-// Returns detailed information about an archive file entry.
-mz_bool mz_zip_reader_file_stat(mz_zip_archive *pZip, mz_uint file_index,
- mz_zip_archive_file_stat *pStat);
-
-// Determines if an archive file entry is a directory entry.
-mz_bool mz_zip_reader_is_file_a_directory(mz_zip_archive *pZip,
- mz_uint file_index);
-mz_bool mz_zip_reader_is_file_encrypted(mz_zip_archive *pZip,
- mz_uint file_index);
-
-// Retrieves the filename of an archive file entry.
-// Returns the number of bytes written to pFilename, or if filename_buf_size is
-// 0 this function returns the number of bytes needed to fully store the
-// filename.
-mz_uint mz_zip_reader_get_filename(mz_zip_archive *pZip, mz_uint file_index,
- char *pFilename, mz_uint filename_buf_size);
-
-// Attempts to locates a file in the archive's central directory.
-// Valid flags: MZ_ZIP_FLAG_CASE_SENSITIVE, MZ_ZIP_FLAG_IGNORE_PATH
-// Returns -1 if the file cannot be found.
-int mz_zip_reader_locate_file(mz_zip_archive *pZip, const char *pName,
- const char *pComment, mz_uint flags);
-
-// Extracts a archive file to a memory buffer using no memory allocation.
-mz_bool mz_zip_reader_extract_to_mem_no_alloc(mz_zip_archive *pZip,
- mz_uint file_index, void *pBuf,
- size_t buf_size, mz_uint flags,
- void *pUser_read_buf,
- size_t user_read_buf_size);
-mz_bool mz_zip_reader_extract_file_to_mem_no_alloc(
- mz_zip_archive *pZip, const char *pFilename, void *pBuf, size_t buf_size,
- mz_uint flags, void *pUser_read_buf, size_t user_read_buf_size);
-
-// Extracts a archive file to a memory buffer.
-mz_bool mz_zip_reader_extract_to_mem(mz_zip_archive *pZip, mz_uint file_index,
- void *pBuf, size_t buf_size,
- mz_uint flags);
-mz_bool mz_zip_reader_extract_file_to_mem(mz_zip_archive *pZip,
- const char *pFilename, void *pBuf,
- size_t buf_size, mz_uint flags);
-
-// Extracts a archive file to a dynamically allocated heap buffer.
-void *mz_zip_reader_extract_to_heap(mz_zip_archive *pZip, mz_uint file_index,
- size_t *pSize, mz_uint flags);
-void *mz_zip_reader_extract_file_to_heap(mz_zip_archive *pZip,
- const char *pFilename, size_t *pSize,
- mz_uint flags);
-
-// Extracts a archive file using a callback function to output the file's data.
-mz_bool mz_zip_reader_extract_to_callback(mz_zip_archive *pZip,
- mz_uint file_index,
- mz_file_write_func pCallback,
- void *pOpaque, mz_uint flags);
-mz_bool mz_zip_reader_extract_file_to_callback(mz_zip_archive *pZip,
- const char *pFilename,
- mz_file_write_func pCallback,
- void *pOpaque, mz_uint flags);
-
-#ifndef MINIZ_NO_STDIO
-// Extracts a archive file to a disk file and sets its last accessed and
-// modified times.
-// This function only extracts files, not archive directory records.
-mz_bool mz_zip_reader_extract_to_file(mz_zip_archive *pZip, mz_uint file_index,
- const char *pDst_filename, mz_uint flags);
-mz_bool mz_zip_reader_extract_file_to_file(mz_zip_archive *pZip,
- const char *pArchive_filename,
- const char *pDst_filename,
- mz_uint flags);
-#endif
-
-// Ends archive reading, freeing all allocations, and closing the input archive
-// file if mz_zip_reader_init_file() was used.
-mz_bool mz_zip_reader_end(mz_zip_archive *pZip);
-
-// ZIP archive writing
-
-#ifndef MINIZ_NO_ARCHIVE_WRITING_APIS
-
-// Inits a ZIP archive writer.
-mz_bool mz_zip_writer_init(mz_zip_archive *pZip, mz_uint64 existing_size);
-mz_bool mz_zip_writer_init_heap(mz_zip_archive *pZip,
- size_t size_to_reserve_at_beginning,
- size_t initial_allocation_size);
-
-#ifndef MINIZ_NO_STDIO
-mz_bool mz_zip_writer_init_file(mz_zip_archive *pZip, const char *pFilename,
- mz_uint64 size_to_reserve_at_beginning);
-#endif
-
-// Converts a ZIP archive reader object into a writer object, to allow efficient
-// in-place file appends to occur on an existing archive.
-// For archives opened using mz_zip_reader_init_file, pFilename must be the
-// archive's filename so it can be reopened for writing. If the file can't be
-// reopened, mz_zip_reader_end() will be called.
-// For archives opened using mz_zip_reader_init_mem, the memory block must be
-// growable using the realloc callback (which defaults to realloc unless you've
-// overridden it).
-// Finally, for archives opened using mz_zip_reader_init, the mz_zip_archive's
-// user provided m_pWrite function cannot be NULL.
-// Note: In-place archive modification is not recommended unless you know what
-// you're doing, because if execution stops or something goes wrong before
-// the archive is finalized the file's central directory will be hosed.
-mz_bool mz_zip_writer_init_from_reader(mz_zip_archive *pZip,
- const char *pFilename);
-
-// Adds the contents of a memory buffer to an archive. These functions record
-// the current local time into the archive.
-// To add a directory entry, call this method with an archive name ending in a
-// forwardslash with empty buffer.
-// level_and_flags - compression level (0-10, see MZ_BEST_SPEED,
-// MZ_BEST_COMPRESSION, etc.) logically OR'd with zero or more mz_zip_flags, or
-// just set to MZ_DEFAULT_COMPRESSION.
-mz_bool mz_zip_writer_add_mem(mz_zip_archive *pZip, const char *pArchive_name,
- const void *pBuf, size_t buf_size,
- mz_uint level_and_flags);
-mz_bool mz_zip_writer_add_mem_ex(mz_zip_archive *pZip,
- const char *pArchive_name, const void *pBuf,
- size_t buf_size, const void *pComment,
- mz_uint16 comment_size,
- mz_uint level_and_flags, mz_uint64 uncomp_size,
- mz_uint32 uncomp_crc32);
-
-#ifndef MINIZ_NO_STDIO
-// Adds the contents of a disk file to an archive. This function also records
-// the disk file's modified time into the archive.
-// level_and_flags - compression level (0-10, see MZ_BEST_SPEED,
-// MZ_BEST_COMPRESSION, etc.) logically OR'd with zero or more mz_zip_flags, or
-// just set to MZ_DEFAULT_COMPRESSION.
-mz_bool mz_zip_writer_add_file(mz_zip_archive *pZip, const char *pArchive_name,
- const char *pSrc_filename, const void *pComment,
- mz_uint16 comment_size, mz_uint level_and_flags);
-#endif
-
-// Adds a file to an archive by fully cloning the data from another archive.
-// This function fully clones the source file's compressed data (no
-// recompression), along with its full filename, extra data, and comment fields.
-mz_bool mz_zip_writer_add_from_zip_reader(mz_zip_archive *pZip,
- mz_zip_archive *pSource_zip,
- mz_uint file_index);
-
-// Finalizes the archive by writing the central directory records followed by
-// the end of central directory record.
-// After an archive is finalized, the only valid call on the mz_zip_archive
-// struct is mz_zip_writer_end().
-// An archive must be manually finalized by calling this function for it to be
-// valid.
-mz_bool mz_zip_writer_finalize_archive(mz_zip_archive *pZip);
-mz_bool mz_zip_writer_finalize_heap_archive(mz_zip_archive *pZip, void **pBuf,
- size_t *pSize);
-
-// Ends archive writing, freeing all allocations, and closing the output file if
-// mz_zip_writer_init_file() was used.
-// Note for the archive to be valid, it must have been finalized before ending.
-mz_bool mz_zip_writer_end(mz_zip_archive *pZip);
-
-// Misc. high-level helper functions:
-
-// mz_zip_add_mem_to_archive_file_in_place() efficiently (but not atomically)
-// appends a memory blob to a ZIP archive.
-// level_and_flags - compression level (0-10, see MZ_BEST_SPEED,
-// MZ_BEST_COMPRESSION, etc.) logically OR'd with zero or more mz_zip_flags, or
-// just set to MZ_DEFAULT_COMPRESSION.
-mz_bool mz_zip_add_mem_to_archive_file_in_place(
- const char *pZip_filename, const char *pArchive_name, const void *pBuf,
- size_t buf_size, const void *pComment, mz_uint16 comment_size,
- mz_uint level_and_flags);
-
-// Reads a single file from an archive into a heap block.
-// Returns NULL on failure.
-void *mz_zip_extract_archive_file_to_heap(const char *pZip_filename,
- const char *pArchive_name,
- size_t *pSize, mz_uint zip_flags);
-
-#endif // #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS
-
-#endif // #ifndef MINIZ_NO_ARCHIVE_APIS
-
-// ------------------- Low-level Decompression API Definitions
-
-// Decompression flags used by tinfl_decompress().
-// TINFL_FLAG_PARSE_ZLIB_HEADER: If set, the input has a valid zlib header and
-// ends with an adler32 checksum (it's a valid zlib stream). Otherwise, the
-// input is a raw deflate stream.
-// TINFL_FLAG_HAS_MORE_INPUT: If set, there are more input bytes available
-// beyond the end of the supplied input buffer. If clear, the input buffer
-// contains all remaining input.
-// TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF: If set, the output buffer is large
-// enough to hold the entire decompressed stream. If clear, the output buffer is
-// at least the size of the dictionary (typically 32KB).
-// TINFL_FLAG_COMPUTE_ADLER32: Force adler-32 checksum computation of the
-// decompressed bytes.
-enum {
- TINFL_FLAG_PARSE_ZLIB_HEADER = 1,
- TINFL_FLAG_HAS_MORE_INPUT = 2,
- TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF = 4,
- TINFL_FLAG_COMPUTE_ADLER32 = 8
-};
-
-// High level decompression functions:
-// tinfl_decompress_mem_to_heap() decompresses a block in memory to a heap block
-// allocated via malloc().
-// On entry:
-// pSrc_buf, src_buf_len: Pointer and size of the Deflate or zlib source data
-// to decompress.
-// On return:
-// Function returns a pointer to the decompressed data, or NULL on failure.
-// *pOut_len will be set to the decompressed data's size, which could be larger
-// than src_buf_len on uncompressible data.
-// The caller must call mz_free() on the returned block when it's no longer
-// needed.
-void *tinfl_decompress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len,
- size_t *pOut_len, int flags);
-
-// tinfl_decompress_mem_to_mem() decompresses a block in memory to another block
-// in memory.
-// Returns TINFL_DECOMPRESS_MEM_TO_MEM_FAILED on failure, or the number of bytes
-// written on success.
-#define TINFL_DECOMPRESS_MEM_TO_MEM_FAILED ((size_t)(-1))
-size_t tinfl_decompress_mem_to_mem(void *pOut_buf, size_t out_buf_len,
- const void *pSrc_buf, size_t src_buf_len,
- int flags);
-
-// tinfl_decompress_mem_to_callback() decompresses a block in memory to an
-// internal 32KB buffer, and a user provided callback function will be called to
-// flush the buffer.
-// Returns 1 on success or 0 on failure.
-typedef int (*tinfl_put_buf_func_ptr)(const void *pBuf, int len, void *pUser);
-int tinfl_decompress_mem_to_callback(const void *pIn_buf, size_t *pIn_buf_size,
- tinfl_put_buf_func_ptr pPut_buf_func,
- void *pPut_buf_user, int flags);
-
-struct tinfl_decompressor_tag;
-typedef struct tinfl_decompressor_tag tinfl_decompressor;
-
-// Max size of LZ dictionary.
-#define TINFL_LZ_DICT_SIZE 32768
-
-// Return status.
-typedef enum {
- TINFL_STATUS_BAD_PARAM = -3,
- TINFL_STATUS_ADLER32_MISMATCH = -2,
- TINFL_STATUS_FAILED = -1,
- TINFL_STATUS_DONE = 0,
- TINFL_STATUS_NEEDS_MORE_INPUT = 1,
- TINFL_STATUS_HAS_MORE_OUTPUT = 2
-} tinfl_status;
-
-// Initializes the decompressor to its initial state.
-#define tinfl_init(r) \
- do { \
- (r)->m_state = 0; \
- } \
- MZ_MACRO_END
-#define tinfl_get_adler32(r) (r)->m_check_adler32
-
-// Main low-level decompressor coroutine function. This is the only function
-// actually needed for decompression. All the other functions are just
-// high-level helpers for improved usability.
-// This is a universal API, i.e. it can be used as a building block to build any
-// desired higher level decompression API. In the limit case, it can be called
-// once per every byte input or output.
-tinfl_status tinfl_decompress(tinfl_decompressor *r,
- const mz_uint8 *pIn_buf_next,
- size_t *pIn_buf_size, mz_uint8 *pOut_buf_start,
- mz_uint8 *pOut_buf_next, size_t *pOut_buf_size,
- const mz_uint32 decomp_flags);
-
-// Internal/private bits follow.
-enum {
- TINFL_MAX_HUFF_TABLES = 3,
- TINFL_MAX_HUFF_SYMBOLS_0 = 288,
- TINFL_MAX_HUFF_SYMBOLS_1 = 32,
- TINFL_MAX_HUFF_SYMBOLS_2 = 19,
- TINFL_FAST_LOOKUP_BITS = 10,
- TINFL_FAST_LOOKUP_SIZE = 1 << TINFL_FAST_LOOKUP_BITS
-};
-
-typedef struct {
- mz_uint8 m_code_size[TINFL_MAX_HUFF_SYMBOLS_0];
- mz_int16 m_look_up[TINFL_FAST_LOOKUP_SIZE],
- m_tree[TINFL_MAX_HUFF_SYMBOLS_0 * 2];
-} tinfl_huff_table;
-
-#if MINIZ_HAS_64BIT_REGISTERS
-#define TINFL_USE_64BIT_BITBUF 1
-#endif
-
-#if TINFL_USE_64BIT_BITBUF
-typedef mz_uint64 tinfl_bit_buf_t;
-#define TINFL_BITBUF_SIZE (64)
-#else
-typedef mz_uint32 tinfl_bit_buf_t;
-#define TINFL_BITBUF_SIZE (32)
-#endif
-
-struct tinfl_decompressor_tag {
- mz_uint32 m_state, m_num_bits, m_zhdr0, m_zhdr1, m_z_adler32, m_final, m_type,
- m_check_adler32, m_dist, m_counter, m_num_extra,
- m_table_sizes[TINFL_MAX_HUFF_TABLES];
- tinfl_bit_buf_t m_bit_buf;
- size_t m_dist_from_out_buf_start;
- tinfl_huff_table m_tables[TINFL_MAX_HUFF_TABLES];
- mz_uint8 m_raw_header[4],
- m_len_codes[TINFL_MAX_HUFF_SYMBOLS_0 + TINFL_MAX_HUFF_SYMBOLS_1 + 137];
-};
-
-// ------------------- Low-level Compression API Definitions
-
-// Set TDEFL_LESS_MEMORY to 1 to use less memory (compression will be slightly
-// slower, and raw/dynamic blocks will be output more frequently).
-#define TDEFL_LESS_MEMORY 0
-
-// tdefl_init() compression flags logically OR'd together (low 12 bits contain
-// the max. number of probes per dictionary search):
-// TDEFL_DEFAULT_MAX_PROBES: The compressor defaults to 128 dictionary probes
-// per dictionary search. 0=Huffman only, 1=Huffman+LZ (fastest/crap
-// compression), 4095=Huffman+LZ (slowest/best compression).
-enum {
- TDEFL_HUFFMAN_ONLY = 0,
- TDEFL_DEFAULT_MAX_PROBES = 128,
- TDEFL_MAX_PROBES_MASK = 0xFFF
-};
-
-// TDEFL_WRITE_ZLIB_HEADER: If set, the compressor outputs a zlib header before
-// the deflate data, and the Adler-32 of the source data at the end. Otherwise,
-// you'll get raw deflate data.
-// TDEFL_COMPUTE_ADLER32: Always compute the adler-32 of the input data (even
-// when not writing zlib headers).
-// TDEFL_GREEDY_PARSING_FLAG: Set to use faster greedy parsing, instead of more
-// efficient lazy parsing.
-// TDEFL_NONDETERMINISTIC_PARSING_FLAG: Enable to decrease the compressor's
-// initialization time to the minimum, but the output may vary from run to run
-// given the same input (depending on the contents of memory).
-// TDEFL_RLE_MATCHES: Only look for RLE matches (matches with a distance of 1)
-// TDEFL_FILTER_MATCHES: Discards matches <= 5 chars if enabled.
-// TDEFL_FORCE_ALL_STATIC_BLOCKS: Disable usage of optimized Huffman tables.
-// TDEFL_FORCE_ALL_RAW_BLOCKS: Only use raw (uncompressed) deflate blocks.
-// The low 12 bits are reserved to control the max # of hash probes per
-// dictionary lookup (see TDEFL_MAX_PROBES_MASK).
-enum {
- TDEFL_WRITE_ZLIB_HEADER = 0x01000,
- TDEFL_COMPUTE_ADLER32 = 0x02000,
- TDEFL_GREEDY_PARSING_FLAG = 0x04000,
- TDEFL_NONDETERMINISTIC_PARSING_FLAG = 0x08000,
- TDEFL_RLE_MATCHES = 0x10000,
- TDEFL_FILTER_MATCHES = 0x20000,
- TDEFL_FORCE_ALL_STATIC_BLOCKS = 0x40000,
- TDEFL_FORCE_ALL_RAW_BLOCKS = 0x80000
-};
-
-// High level compression functions:
-// tdefl_compress_mem_to_heap() compresses a block in memory to a heap block
-// allocated via malloc().
-// On entry:
-// pSrc_buf, src_buf_len: Pointer and size of source block to compress.
-// flags: The max match finder probes (default is 128) logically OR'd against
-// the above flags. Higher probes are slower but improve compression.
-// On return:
-// Function returns a pointer to the compressed data, or NULL on failure.
-// *pOut_len will be set to the compressed data's size, which could be larger
-// than src_buf_len on uncompressible data.
-// The caller must free() the returned block when it's no longer needed.
-void *tdefl_compress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len,
- size_t *pOut_len, int flags);
-
-// tdefl_compress_mem_to_mem() compresses a block in memory to another block in
-// memory.
-// Returns 0 on failure.
-size_t tdefl_compress_mem_to_mem(void *pOut_buf, size_t out_buf_len,
- const void *pSrc_buf, size_t src_buf_len,
- int flags);
-
-// Compresses an image to a compressed PNG file in memory.
-// On entry:
-// pImage, w, h, and num_chans describe the image to compress. num_chans may be
-// 1, 2, 3, or 4.
-// The image pitch in bytes per scanline will be w*num_chans. The leftmost
-// pixel on the top scanline is stored first in memory.
-// level may range from [0,10], use MZ_NO_COMPRESSION, MZ_BEST_SPEED,
-// MZ_BEST_COMPRESSION, etc. or a decent default is MZ_DEFAULT_LEVEL
-// If flip is true, the image will be flipped on the Y axis (useful for OpenGL
-// apps).
-// On return:
-// Function returns a pointer to the compressed data, or NULL on failure.
-// *pLen_out will be set to the size of the PNG image file.
-// The caller must mz_free() the returned heap block (which will typically be
-// larger than *pLen_out) when it's no longer needed.
-void *tdefl_write_image_to_png_file_in_memory_ex(const void *pImage, int w,
- int h, int num_chans,
- size_t *pLen_out,
- mz_uint level, mz_bool flip);
-void *tdefl_write_image_to_png_file_in_memory(const void *pImage, int w, int h,
- int num_chans, size_t *pLen_out);
-
-// Output stream interface. The compressor uses this interface to write
-// compressed data. It'll typically be called TDEFL_OUT_BUF_SIZE at a time.
-typedef mz_bool (*tdefl_put_buf_func_ptr)(const void *pBuf, int len,
- void *pUser);
-
-// tdefl_compress_mem_to_output() compresses a block to an output stream. The
-// above helpers use this function internally.
-mz_bool tdefl_compress_mem_to_output(const void *pBuf, size_t buf_len,
- tdefl_put_buf_func_ptr pPut_buf_func,
- void *pPut_buf_user, int flags);
-
-enum {
- TDEFL_MAX_HUFF_TABLES = 3,
- TDEFL_MAX_HUFF_SYMBOLS_0 = 288,
- TDEFL_MAX_HUFF_SYMBOLS_1 = 32,
- TDEFL_MAX_HUFF_SYMBOLS_2 = 19,
- TDEFL_LZ_DICT_SIZE = 32768,
- TDEFL_LZ_DICT_SIZE_MASK = TDEFL_LZ_DICT_SIZE - 1,
- TDEFL_MIN_MATCH_LEN = 3,
- TDEFL_MAX_MATCH_LEN = 258
-};
-
-// TDEFL_OUT_BUF_SIZE MUST be large enough to hold a single entire compressed
-// output block (using static/fixed Huffman codes).
-#if TDEFL_LESS_MEMORY
-enum {
- TDEFL_LZ_CODE_BUF_SIZE = 24 * 1024,
- TDEFL_OUT_BUF_SIZE = (TDEFL_LZ_CODE_BUF_SIZE * 13) / 10,
- TDEFL_MAX_HUFF_SYMBOLS = 288,
- TDEFL_LZ_HASH_BITS = 12,
- TDEFL_LEVEL1_HASH_SIZE_MASK = 4095,
- TDEFL_LZ_HASH_SHIFT = (TDEFL_LZ_HASH_BITS + 2) / 3,
- TDEFL_LZ_HASH_SIZE = 1 << TDEFL_LZ_HASH_BITS
-};
-#else
-enum {
- TDEFL_LZ_CODE_BUF_SIZE = 64 * 1024,
- TDEFL_OUT_BUF_SIZE = (TDEFL_LZ_CODE_BUF_SIZE * 13) / 10,
- TDEFL_MAX_HUFF_SYMBOLS = 288,
- TDEFL_LZ_HASH_BITS = 15,
- TDEFL_LEVEL1_HASH_SIZE_MASK = 4095,
- TDEFL_LZ_HASH_SHIFT = (TDEFL_LZ_HASH_BITS + 2) / 3,
- TDEFL_LZ_HASH_SIZE = 1 << TDEFL_LZ_HASH_BITS
-};
-#endif
-
-// The low-level tdefl functions below may be used directly if the above helper
-// functions aren't flexible enough. The low-level functions don't make any heap
-// allocations, unlike the above helper functions.
-typedef enum {
- TDEFL_STATUS_BAD_PARAM = -2,
- TDEFL_STATUS_PUT_BUF_FAILED = -1,
- TDEFL_STATUS_OKAY = 0,
- TDEFL_STATUS_DONE = 1
-} tdefl_status;
-
-// Must map to MZ_NO_FLUSH, MZ_SYNC_FLUSH, etc. enums
-typedef enum {
- TDEFL_NO_FLUSH = 0,
- TDEFL_SYNC_FLUSH = 2,
- TDEFL_FULL_FLUSH = 3,
- TDEFL_FINISH = 4
-} tdefl_flush;
-
-// tdefl's compression state structure.
-typedef struct {
- tdefl_put_buf_func_ptr m_pPut_buf_func;
- void *m_pPut_buf_user;
- mz_uint m_flags, m_max_probes[2];
- int m_greedy_parsing;
- mz_uint m_adler32, m_lookahead_pos, m_lookahead_size, m_dict_size;
- mz_uint8 *m_pLZ_code_buf, *m_pLZ_flags, *m_pOutput_buf, *m_pOutput_buf_end;
- mz_uint m_num_flags_left, m_total_lz_bytes, m_lz_code_buf_dict_pos, m_bits_in,
- m_bit_buffer;
- mz_uint m_saved_match_dist, m_saved_match_len, m_saved_lit,
- m_output_flush_ofs, m_output_flush_remaining, m_finished, m_block_index,
- m_wants_to_finish;
- tdefl_status m_prev_return_status;
- const void *m_pIn_buf;
- void *m_pOut_buf;
- size_t *m_pIn_buf_size, *m_pOut_buf_size;
- tdefl_flush m_flush;
- const mz_uint8 *m_pSrc;
- size_t m_src_buf_left, m_out_buf_ofs;
- mz_uint8 m_dict[TDEFL_LZ_DICT_SIZE + TDEFL_MAX_MATCH_LEN - 1];
- mz_uint16 m_huff_count[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS];
- mz_uint16 m_huff_codes[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS];
- mz_uint8 m_huff_code_sizes[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS];
- mz_uint8 m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE];
- mz_uint16 m_next[TDEFL_LZ_DICT_SIZE];
- mz_uint16 m_hash[TDEFL_LZ_HASH_SIZE];
- mz_uint8 m_output_buf[TDEFL_OUT_BUF_SIZE];
-} tdefl_compressor;
-
-// Initializes the compressor.
-// There is no corresponding deinit() function because the tdefl API's do not
-// dynamically allocate memory.
-// pBut_buf_func: If NULL, output data will be supplied to the specified
-// callback. In this case, the user should call the tdefl_compress_buffer() API
-// for compression.
-// If pBut_buf_func is NULL the user should always call the tdefl_compress()
-// API.
-// flags: See the above enums (TDEFL_HUFFMAN_ONLY, TDEFL_WRITE_ZLIB_HEADER,
-// etc.)
-tdefl_status tdefl_init(tdefl_compressor *d,
- tdefl_put_buf_func_ptr pPut_buf_func,
- void *pPut_buf_user, int flags);
-
-// Compresses a block of data, consuming as much of the specified input buffer
-// as possible, and writing as much compressed data to the specified output
-// buffer as possible.
-tdefl_status tdefl_compress(tdefl_compressor *d, const void *pIn_buf,
- size_t *pIn_buf_size, void *pOut_buf,
- size_t *pOut_buf_size, tdefl_flush flush);
-
-// tdefl_compress_buffer() is only usable when the tdefl_init() is called with a
-// non-NULL tdefl_put_buf_func_ptr.
-// tdefl_compress_buffer() always consumes the entire input buffer.
-tdefl_status tdefl_compress_buffer(tdefl_compressor *d, const void *pIn_buf,
- size_t in_buf_size, tdefl_flush flush);
-
-tdefl_status tdefl_get_prev_return_status(tdefl_compressor *d);
-mz_uint32 tdefl_get_adler32(tdefl_compressor *d);
-
-// Can't use tdefl_create_comp_flags_from_zip_params if MINIZ_NO_ZLIB_APIS isn't
-// defined, because it uses some of its macros.
-#ifndef MINIZ_NO_ZLIB_APIS
-// Create tdefl_compress() flags given zlib-style compression parameters.
-// level may range from [0,10] (where 10 is absolute max compression, but may be
-// much slower on some files)
-// window_bits may be -15 (raw deflate) or 15 (zlib)
-// strategy may be either MZ_DEFAULT_STRATEGY, MZ_FILTERED, MZ_HUFFMAN_ONLY,
-// MZ_RLE, or MZ_FIXED
-mz_uint tdefl_create_comp_flags_from_zip_params(int level, int window_bits,
- int strategy);
-#endif // #ifndef MINIZ_NO_ZLIB_APIS
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // MINIZ_HEADER_INCLUDED
-
-// ------------------- End of Header: Implementation follows. (If you only want
-// the header, define MINIZ_HEADER_FILE_ONLY.)
-
-#ifndef MINIZ_HEADER_FILE_ONLY
-
-typedef unsigned char mz_validate_uint16[sizeof(mz_uint16) == 2 ? 1 : -1];
-typedef unsigned char mz_validate_uint32[sizeof(mz_uint32) == 4 ? 1 : -1];
-typedef unsigned char mz_validate_uint64[sizeof(mz_uint64) == 8 ? 1 : -1];
-
-//#include <assert.h>
-//#include <string.h>
-
-#define MZ_ASSERT(x) assert(x)
-
-#ifdef MINIZ_NO_MALLOC
-#define MZ_MALLOC(x) NULL
-#define MZ_FREE(x) (void)x, ((void)0)
-#define MZ_REALLOC(p, x) NULL
-#else
-#define MZ_MALLOC(x) malloc(x)
-#define MZ_FREE(x) free(x)
-#define MZ_REALLOC(p, x) realloc(p, x)
-#endif
-
-#define MZ_MAX(a, b) (((a) > (b)) ? (a) : (b))
-#define MZ_MIN(a, b) (((a) < (b)) ? (a) : (b))
-#define MZ_CLEAR_OBJ(obj) memset(&(obj), 0, sizeof(obj))
-
-#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN
-#define MZ_READ_LE16(p) *((const mz_uint16 *)(p))
-#define MZ_READ_LE32(p) *((const mz_uint32 *)(p))
-#else
-#define MZ_READ_LE16(p) \
- ((mz_uint32)(((const mz_uint8 *)(p))[0]) | \
- ((mz_uint32)(((const mz_uint8 *)(p))[1]) << 8U))
-#define MZ_READ_LE32(p) \
- ((mz_uint32)(((const mz_uint8 *)(p))[0]) | \
- ((mz_uint32)(((const mz_uint8 *)(p))[1]) << 8U) | \
- ((mz_uint32)(((const mz_uint8 *)(p))[2]) << 16U) | \
- ((mz_uint32)(((const mz_uint8 *)(p))[3]) << 24U))
-#endif
-
-#ifdef _MSC_VER
-#define MZ_FORCEINLINE __forceinline
-#elif defined(__GNUC__)
-#define MZ_FORCEINLINE inline __attribute__((__always_inline__))
-#else
-#define MZ_FORCEINLINE inline
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// ------------------- zlib-style API's
-
-mz_ulong mz_adler32(mz_ulong adler, const unsigned char *ptr, size_t buf_len) {
- mz_uint32 i, s1 = (mz_uint32)(adler & 0xffff), s2 = (mz_uint32)(adler >> 16);
- size_t block_len = buf_len % 5552;
- if (!ptr) return MZ_ADLER32_INIT;
- while (buf_len) {
- for (i = 0; i + 7 < block_len; i += 8, ptr += 8) {
- s1 += ptr[0], s2 += s1;
- s1 += ptr[1], s2 += s1;
- s1 += ptr[2], s2 += s1;
- s1 += ptr[3], s2 += s1;
- s1 += ptr[4], s2 += s1;
- s1 += ptr[5], s2 += s1;
- s1 += ptr[6], s2 += s1;
- s1 += ptr[7], s2 += s1;
- }
- for (; i < block_len; ++i) s1 += *ptr++, s2 += s1;
- s1 %= 65521U, s2 %= 65521U;
- buf_len -= block_len;
- block_len = 5552;
- }
- return (s2 << 16) + s1;
-}
-
-// Karl Malbrain's compact CRC-32. See "A compact CCITT crc16 and crc32 C
-// implementation that balances processor cache usage against speed":
-// http://www.geocities.com/malbrain/
-mz_ulong mz_crc32(mz_ulong crc, const mz_uint8 *ptr, size_t buf_len) {
- static const mz_uint32 s_crc32[16] = {
- 0, 0x1db71064, 0x3b6e20c8, 0x26d930ac, 0x76dc4190, 0x6b6b51f4,
- 0x4db26158, 0x5005713c, 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c,
- 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c};
- mz_uint32 crcu32 = (mz_uint32)crc;
- if (!ptr) return MZ_CRC32_INIT;
- crcu32 = ~crcu32;
- while (buf_len--) {
- mz_uint8 b = *ptr++;
- crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b & 0xF)];
- crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b >> 4)];
- }
- return ~crcu32;
-}
-
-void mz_free(void *p) { MZ_FREE(p); }
-
-#ifndef MINIZ_NO_ZLIB_APIS
-
-static void *def_alloc_func(void *opaque, size_t items, size_t size) {
- (void)opaque, (void)items, (void)size;
- return MZ_MALLOC(items * size);
-}
-static void def_free_func(void *opaque, void *address) {
- (void)opaque, (void)address;
- MZ_FREE(address);
-}
-// static void *def_realloc_func(void *opaque, void *address, size_t items,
-// size_t size) {
-// (void)opaque, (void)address, (void)items, (void)size;
-// return MZ_REALLOC(address, items * size);
-//}
-
-const char *mz_version(void) { return MZ_VERSION; }
-
-int mz_deflateInit(mz_streamp pStream, int level) {
- return mz_deflateInit2(pStream, level, MZ_DEFLATED, MZ_DEFAULT_WINDOW_BITS, 9,
- MZ_DEFAULT_STRATEGY);
-}
-
-int mz_deflateInit2(mz_streamp pStream, int level, int method, int window_bits,
- int mem_level, int strategy) {
- tdefl_compressor *pComp;
- mz_uint comp_flags =
- TDEFL_COMPUTE_ADLER32 |
- tdefl_create_comp_flags_from_zip_params(level, window_bits, strategy);
-
- if (!pStream) return MZ_STREAM_ERROR;
- if ((method != MZ_DEFLATED) || ((mem_level < 1) || (mem_level > 9)) ||
- ((window_bits != MZ_DEFAULT_WINDOW_BITS) &&
- (-window_bits != MZ_DEFAULT_WINDOW_BITS)))
- return MZ_PARAM_ERROR;
-
- pStream->data_type = 0;
- pStream->adler = MZ_ADLER32_INIT;
- pStream->msg = NULL;
- pStream->reserved = 0;
- pStream->total_in = 0;
- pStream->total_out = 0;
- if (!pStream->zalloc) pStream->zalloc = def_alloc_func;
- if (!pStream->zfree) pStream->zfree = def_free_func;
-
- pComp = (tdefl_compressor *)pStream->zalloc(pStream->opaque, 1,
- sizeof(tdefl_compressor));
- if (!pComp) return MZ_MEM_ERROR;
-
- pStream->state = (struct mz_internal_state *)pComp;
-
- if (tdefl_init(pComp, NULL, NULL, comp_flags) != TDEFL_STATUS_OKAY) {
- mz_deflateEnd(pStream);
- return MZ_PARAM_ERROR;
- }
-
- return MZ_OK;
-}
-
-int mz_deflateReset(mz_streamp pStream) {
- if ((!pStream) || (!pStream->state) || (!pStream->zalloc) ||
- (!pStream->zfree))
- return MZ_STREAM_ERROR;
- pStream->total_in = pStream->total_out = 0;
- tdefl_init((tdefl_compressor *)pStream->state, NULL, NULL,
- ((tdefl_compressor *)pStream->state)->m_flags);
- return MZ_OK;
-}
-
-int mz_deflate(mz_streamp pStream, int flush) {
- size_t in_bytes, out_bytes;
- mz_ulong orig_total_in, orig_total_out;
- int mz_status = MZ_OK;
-
- if ((!pStream) || (!pStream->state) || (flush < 0) || (flush > MZ_FINISH) ||
- (!pStream->next_out))
- return MZ_STREAM_ERROR;
- if (!pStream->avail_out) return MZ_BUF_ERROR;
-
- if (flush == MZ_PARTIAL_FLUSH) flush = MZ_SYNC_FLUSH;
-
- if (((tdefl_compressor *)pStream->state)->m_prev_return_status ==
- TDEFL_STATUS_DONE)
- return (flush == MZ_FINISH) ? MZ_STREAM_END : MZ_BUF_ERROR;
-
- orig_total_in = pStream->total_in;
- orig_total_out = pStream->total_out;
- for (;;) {
- tdefl_status defl_status;
- in_bytes = pStream->avail_in;
- out_bytes = pStream->avail_out;
-
- defl_status = tdefl_compress((tdefl_compressor *)pStream->state,
- pStream->next_in, &in_bytes, pStream->next_out,
- &out_bytes, (tdefl_flush)flush);
- pStream->next_in += (mz_uint)in_bytes;
- pStream->avail_in -= (mz_uint)in_bytes;
- pStream->total_in += (mz_uint)in_bytes;
- pStream->adler = tdefl_get_adler32((tdefl_compressor *)pStream->state);
-
- pStream->next_out += (mz_uint)out_bytes;
- pStream->avail_out -= (mz_uint)out_bytes;
- pStream->total_out += (mz_uint)out_bytes;
-
- if (defl_status < 0) {
- mz_status = MZ_STREAM_ERROR;
- break;
- } else if (defl_status == TDEFL_STATUS_DONE) {
- mz_status = MZ_STREAM_END;
- break;
- } else if (!pStream->avail_out)
- break;
- else if ((!pStream->avail_in) && (flush != MZ_FINISH)) {
- if ((flush) || (pStream->total_in != orig_total_in) ||
- (pStream->total_out != orig_total_out))
- break;
- return MZ_BUF_ERROR; // Can't make forward progress without some input.
- }
- }
- return mz_status;
-}
-
-int mz_deflateEnd(mz_streamp pStream) {
- if (!pStream) return MZ_STREAM_ERROR;
- if (pStream->state) {
- pStream->zfree(pStream->opaque, pStream->state);
- pStream->state = NULL;
- }
- return MZ_OK;
-}
-
-mz_ulong mz_deflateBound(mz_streamp pStream, mz_ulong source_len) {
- (void)pStream;
- // This is really over conservative. (And lame, but it's actually pretty
- // tricky to compute a true upper bound given the way tdefl's blocking works.)
- return MZ_MAX(128 + (source_len * 110) / 100,
- 128 + source_len + ((source_len / (31 * 1024)) + 1) * 5);
-}
-
-int mz_compress2(unsigned char *pDest, mz_ulong *pDest_len,
- const unsigned char *pSource, mz_ulong source_len, int level) {
- int status;
- mz_stream stream;
- memset(&stream, 0, sizeof(stream));
-
- // In case mz_ulong is 64-bits (argh I hate longs).
- if ((source_len | *pDest_len) > 0xFFFFFFFFU) return MZ_PARAM_ERROR;
-
- stream.next_in = pSource;
- stream.avail_in = (mz_uint32)source_len;
- stream.next_out = pDest;
- stream.avail_out = (mz_uint32)*pDest_len;
-
- status = mz_deflateInit(&stream, level);
- if (status != MZ_OK) return status;
-
- status = mz_deflate(&stream, MZ_FINISH);
- if (status != MZ_STREAM_END) {
- mz_deflateEnd(&stream);
- return (status == MZ_OK) ? MZ_BUF_ERROR : status;
- }
-
- *pDest_len = stream.total_out;
- return mz_deflateEnd(&stream);
-}
-
-int mz_compress(unsigned char *pDest, mz_ulong *pDest_len,
- const unsigned char *pSource, mz_ulong source_len) {
- return mz_compress2(pDest, pDest_len, pSource, source_len,
- MZ_DEFAULT_COMPRESSION);
-}
-
-mz_ulong mz_compressBound(mz_ulong source_len) {
- return mz_deflateBound(NULL, source_len);
-}
-
-typedef struct {
- tinfl_decompressor m_decomp;
- mz_uint m_dict_ofs, m_dict_avail, m_first_call, m_has_flushed;
- int m_window_bits;
- mz_uint8 m_dict[TINFL_LZ_DICT_SIZE];
- tinfl_status m_last_status;
-} inflate_state;
-
-int mz_inflateInit2(mz_streamp pStream, int window_bits) {
- inflate_state *pDecomp;
- if (!pStream) return MZ_STREAM_ERROR;
- if ((window_bits != MZ_DEFAULT_WINDOW_BITS) &&
- (-window_bits != MZ_DEFAULT_WINDOW_BITS))
- return MZ_PARAM_ERROR;
-
- pStream->data_type = 0;
- pStream->adler = 0;
- pStream->msg = NULL;
- pStream->total_in = 0;
- pStream->total_out = 0;
- pStream->reserved = 0;
- if (!pStream->zalloc) pStream->zalloc = def_alloc_func;
- if (!pStream->zfree) pStream->zfree = def_free_func;
-
- pDecomp = (inflate_state *)pStream->zalloc(pStream->opaque, 1,
- sizeof(inflate_state));
- if (!pDecomp) return MZ_MEM_ERROR;
-
- pStream->state = (struct mz_internal_state *)pDecomp;
-
- tinfl_init(&pDecomp->m_decomp);
- pDecomp->m_dict_ofs = 0;
- pDecomp->m_dict_avail = 0;
- pDecomp->m_last_status = TINFL_STATUS_NEEDS_MORE_INPUT;
- pDecomp->m_first_call = 1;
- pDecomp->m_has_flushed = 0;
- pDecomp->m_window_bits = window_bits;
-
- return MZ_OK;
-}
-
-int mz_inflateInit(mz_streamp pStream) {
- return mz_inflateInit2(pStream, MZ_DEFAULT_WINDOW_BITS);
-}
-
-int mz_inflate(mz_streamp pStream, int flush) {
- inflate_state *pState;
- mz_uint n, first_call, decomp_flags = TINFL_FLAG_COMPUTE_ADLER32;
- size_t in_bytes, out_bytes, orig_avail_in;
- tinfl_status status;
-
- if ((!pStream) || (!pStream->state)) return MZ_STREAM_ERROR;
- if (flush == MZ_PARTIAL_FLUSH) flush = MZ_SYNC_FLUSH;
- if ((flush) && (flush != MZ_SYNC_FLUSH) && (flush != MZ_FINISH))
- return MZ_STREAM_ERROR;
-
- pState = (inflate_state *)pStream->state;
- if (pState->m_window_bits > 0) decomp_flags |= TINFL_FLAG_PARSE_ZLIB_HEADER;
- orig_avail_in = pStream->avail_in;
-
- first_call = pState->m_first_call;
- pState->m_first_call = 0;
- if (pState->m_last_status < 0) return MZ_DATA_ERROR;
-
- if (pState->m_has_flushed && (flush != MZ_FINISH)) return MZ_STREAM_ERROR;
- pState->m_has_flushed |= (flush == MZ_FINISH);
-
- if ((flush == MZ_FINISH) && (first_call)) {
- // MZ_FINISH on the first call implies that the input and output buffers are
- // large enough to hold the entire compressed/decompressed file.
- decomp_flags |= TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF;
- in_bytes = pStream->avail_in;
- out_bytes = pStream->avail_out;
- status = tinfl_decompress(&pState->m_decomp, pStream->next_in, &in_bytes,
- pStream->next_out, pStream->next_out, &out_bytes,
- decomp_flags);
- pState->m_last_status = status;
- pStream->next_in += (mz_uint)in_bytes;
- pStream->avail_in -= (mz_uint)in_bytes;
- pStream->total_in += (mz_uint)in_bytes;
- pStream->adler = tinfl_get_adler32(&pState->m_decomp);
- pStream->next_out += (mz_uint)out_bytes;
- pStream->avail_out -= (mz_uint)out_bytes;
- pStream->total_out += (mz_uint)out_bytes;
-
- if (status < 0)
- return MZ_DATA_ERROR;
- else if (status != TINFL_STATUS_DONE) {
- pState->m_last_status = TINFL_STATUS_FAILED;
- return MZ_BUF_ERROR;
- }
- return MZ_STREAM_END;
- }
- // flush != MZ_FINISH then we must assume there's more input.
- if (flush != MZ_FINISH) decomp_flags |= TINFL_FLAG_HAS_MORE_INPUT;
-
- if (pState->m_dict_avail) {
- n = MZ_MIN(pState->m_dict_avail, pStream->avail_out);
- memcpy(pStream->next_out, pState->m_dict + pState->m_dict_ofs, n);
- pStream->next_out += n;
- pStream->avail_out -= n;
- pStream->total_out += n;
- pState->m_dict_avail -= n;
- pState->m_dict_ofs = (pState->m_dict_ofs + n) & (TINFL_LZ_DICT_SIZE - 1);
- return ((pState->m_last_status == TINFL_STATUS_DONE) &&
- (!pState->m_dict_avail))
- ? MZ_STREAM_END
- : MZ_OK;
- }
-
- for (;;) {
- in_bytes = pStream->avail_in;
- out_bytes = TINFL_LZ_DICT_SIZE - pState->m_dict_ofs;
-
- status = tinfl_decompress(
- &pState->m_decomp, pStream->next_in, &in_bytes, pState->m_dict,
- pState->m_dict + pState->m_dict_ofs, &out_bytes, decomp_flags);
- pState->m_last_status = status;
-
- pStream->next_in += (mz_uint)in_bytes;
- pStream->avail_in -= (mz_uint)in_bytes;
- pStream->total_in += (mz_uint)in_bytes;
- pStream->adler = tinfl_get_adler32(&pState->m_decomp);
-
- pState->m_dict_avail = (mz_uint)out_bytes;
-
- n = MZ_MIN(pState->m_dict_avail, pStream->avail_out);
- memcpy(pStream->next_out, pState->m_dict + pState->m_dict_ofs, n);
- pStream->next_out += n;
- pStream->avail_out -= n;
- pStream->total_out += n;
- pState->m_dict_avail -= n;
- pState->m_dict_ofs = (pState->m_dict_ofs + n) & (TINFL_LZ_DICT_SIZE - 1);
-
- if (status < 0)
- return MZ_DATA_ERROR; // Stream is corrupted (there could be some
- // uncompressed data left in the output dictionary -
- // oh well).
- else if ((status == TINFL_STATUS_NEEDS_MORE_INPUT) && (!orig_avail_in))
- return MZ_BUF_ERROR; // Signal caller that we can't make forward progress
- // without supplying more input or by setting flush
- // to MZ_FINISH.
- else if (flush == MZ_FINISH) {
- // The output buffer MUST be large to hold the remaining uncompressed data
- // when flush==MZ_FINISH.
- if (status == TINFL_STATUS_DONE)
- return pState->m_dict_avail ? MZ_BUF_ERROR : MZ_STREAM_END;
- // status here must be TINFL_STATUS_HAS_MORE_OUTPUT, which means there's
- // at least 1 more byte on the way. If there's no more room left in the
- // output buffer then something is wrong.
- else if (!pStream->avail_out)
- return MZ_BUF_ERROR;
- } else if ((status == TINFL_STATUS_DONE) || (!pStream->avail_in) ||
- (!pStream->avail_out) || (pState->m_dict_avail))
- break;
- }
-
- return ((status == TINFL_STATUS_DONE) && (!pState->m_dict_avail))
- ? MZ_STREAM_END
- : MZ_OK;
-}
-
-int mz_inflateEnd(mz_streamp pStream) {
- if (!pStream) return MZ_STREAM_ERROR;
- if (pStream->state) {
- pStream->zfree(pStream->opaque, pStream->state);
- pStream->state = NULL;
- }
- return MZ_OK;
-}
-
-int mz_uncompress(unsigned char *pDest, mz_ulong *pDest_len,
- const unsigned char *pSource, mz_ulong source_len) {
- mz_stream stream;
- int status;
- memset(&stream, 0, sizeof(stream));
-
- // In case mz_ulong is 64-bits (argh I hate longs).
- if ((source_len | *pDest_len) > 0xFFFFFFFFU) return MZ_PARAM_ERROR;
-
- stream.next_in = pSource;
- stream.avail_in = (mz_uint32)source_len;
- stream.next_out = pDest;
- stream.avail_out = (mz_uint32)*pDest_len;
-
- status = mz_inflateInit(&stream);
- if (status != MZ_OK) return status;
-
- status = mz_inflate(&stream, MZ_FINISH);
- if (status != MZ_STREAM_END) {
- mz_inflateEnd(&stream);
- return ((status == MZ_BUF_ERROR) && (!stream.avail_in)) ? MZ_DATA_ERROR
- : status;
- }
- *pDest_len = stream.total_out;
-
- return mz_inflateEnd(&stream);
-}
-
-const char *mz_error(int err) {
- static struct {
- int m_err;
- const char *m_pDesc;
- } s_error_descs[] = {{MZ_OK, ""},
- {MZ_STREAM_END, "stream end"},
- {MZ_NEED_DICT, "need dictionary"},
- {MZ_ERRNO, "file error"},
- {MZ_STREAM_ERROR, "stream error"},
- {MZ_DATA_ERROR, "data error"},
- {MZ_MEM_ERROR, "out of memory"},
- {MZ_BUF_ERROR, "buf error"},
- {MZ_VERSION_ERROR, "version error"},
- {MZ_PARAM_ERROR, "parameter error"}};
- mz_uint i;
- for (i = 0; i < sizeof(s_error_descs) / sizeof(s_error_descs[0]); ++i)
- if (s_error_descs[i].m_err == err) return s_error_descs[i].m_pDesc;
- return NULL;
-}
-
-#endif // MINIZ_NO_ZLIB_APIS
-
-// ------------------- Low-level Decompression (completely independent from all
-// compression API's)
-
-#define TINFL_MEMCPY(d, s, l) memcpy(d, s, l)
-#define TINFL_MEMSET(p, c, l) memset(p, c, l)
-
-#define TINFL_CR_BEGIN \
- switch (r->m_state) { \
- case 0:
-#define TINFL_CR_RETURN(state_index, result) \
- do { \
- status = result; \
- r->m_state = state_index; \
- goto common_exit; \
- case state_index:; \
- } \
- MZ_MACRO_END
-#define TINFL_CR_RETURN_FOREVER(state_index, result) \
- do { \
- for (;;) { \
- TINFL_CR_RETURN(state_index, result); \
- } \
- } \
- MZ_MACRO_END
-#define TINFL_CR_FINISH }
-
-// TODO: If the caller has indicated that there's no more input, and we attempt
-// to read beyond the input buf, then something is wrong with the input because
-// the inflator never
-// reads ahead more than it needs to. Currently TINFL_GET_BYTE() pads the end of
-// the stream with 0's in this scenario.
-#define TINFL_GET_BYTE(state_index, c) \
- do { \
- if (pIn_buf_cur >= pIn_buf_end) { \
- for (;;) { \
- if (decomp_flags & TINFL_FLAG_HAS_MORE_INPUT) { \
- TINFL_CR_RETURN(state_index, TINFL_STATUS_NEEDS_MORE_INPUT); \
- if (pIn_buf_cur < pIn_buf_end) { \
- c = *pIn_buf_cur++; \
- break; \
- } \
- } else { \
- c = 0; \
- break; \
- } \
- } \
- } else \
- c = *pIn_buf_cur++; \
- } \
- MZ_MACRO_END
-
-#define TINFL_NEED_BITS(state_index, n) \
- do { \
- mz_uint c; \
- TINFL_GET_BYTE(state_index, c); \
- bit_buf |= (((tinfl_bit_buf_t)c) << num_bits); \
- num_bits += 8; \
- } while (num_bits < (mz_uint)(n))
-#define TINFL_SKIP_BITS(state_index, n) \
- do { \
- if (num_bits < (mz_uint)(n)) { \
- TINFL_NEED_BITS(state_index, n); \
- } \
- bit_buf >>= (n); \
- num_bits -= (n); \
- } \
- MZ_MACRO_END
-#define TINFL_GET_BITS(state_index, b, n) \
- do { \
- if (num_bits < (mz_uint)(n)) { \
- TINFL_NEED_BITS(state_index, n); \
- } \
- b = bit_buf & ((1 << (n)) - 1); \
- bit_buf >>= (n); \
- num_bits -= (n); \
- } \
- MZ_MACRO_END
-
-// TINFL_HUFF_BITBUF_FILL() is only used rarely, when the number of bytes
-// remaining in the input buffer falls below 2.
-// It reads just enough bytes from the input stream that are needed to decode
-// the next Huffman code (and absolutely no more). It works by trying to fully
-// decode a
-// Huffman code by using whatever bits are currently present in the bit buffer.
-// If this fails, it reads another byte, and tries again until it succeeds or
-// until the
-// bit buffer contains >=15 bits (deflate's max. Huffman code size).
-#define TINFL_HUFF_BITBUF_FILL(state_index, pHuff) \
- do { \
- temp = (pHuff)->m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]; \
- if (temp >= 0) { \
- code_len = temp >> 9; \
- if ((code_len) && (num_bits >= code_len)) break; \
- } else if (num_bits > TINFL_FAST_LOOKUP_BITS) { \
- code_len = TINFL_FAST_LOOKUP_BITS; \
- do { \
- temp = (pHuff)->m_tree[~temp + ((bit_buf >> code_len++) & 1)]; \
- } while ((temp < 0) && (num_bits >= (code_len + 1))); \
- if (temp >= 0) break; \
- } \
- TINFL_GET_BYTE(state_index, c); \
- bit_buf |= (((tinfl_bit_buf_t)c) << num_bits); \
- num_bits += 8; \
- } while (num_bits < 15);
-
-// TINFL_HUFF_DECODE() decodes the next Huffman coded symbol. It's more complex
-// than you would initially expect because the zlib API expects the decompressor
-// to never read
-// beyond the final byte of the deflate stream. (In other words, when this macro
-// wants to read another byte from the input, it REALLY needs another byte in
-// order to fully
-// decode the next Huffman code.) Handling this properly is particularly
-// important on raw deflate (non-zlib) streams, which aren't followed by a byte
-// aligned adler-32.
-// The slow path is only executed at the very end of the input buffer.
-#define TINFL_HUFF_DECODE(state_index, sym, pHuff) \
- do { \
- int temp; \
- mz_uint code_len, c; \
- if (num_bits < 15) { \
- if ((pIn_buf_end - pIn_buf_cur) < 2) { \
- TINFL_HUFF_BITBUF_FILL(state_index, pHuff); \
- } else { \
- bit_buf |= (((tinfl_bit_buf_t)pIn_buf_cur[0]) << num_bits) | \
- (((tinfl_bit_buf_t)pIn_buf_cur[1]) << (num_bits + 8)); \
- pIn_buf_cur += 2; \
- num_bits += 16; \
- } \
- } \
- if ((temp = (pHuff)->m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]) >= \
- 0) \
- code_len = temp >> 9, temp &= 511; \
- else { \
- code_len = TINFL_FAST_LOOKUP_BITS; \
- do { \
- temp = (pHuff)->m_tree[~temp + ((bit_buf >> code_len++) & 1)]; \
- } while (temp < 0); \
- } \
- sym = temp; \
- bit_buf >>= code_len; \
- num_bits -= code_len; \
- } \
- MZ_MACRO_END
-
-tinfl_status tinfl_decompress(tinfl_decompressor *r,
- const mz_uint8 *pIn_buf_next,
- size_t *pIn_buf_size, mz_uint8 *pOut_buf_start,
- mz_uint8 *pOut_buf_next, size_t *pOut_buf_size,
- const mz_uint32 decomp_flags) {
- static const int s_length_base[31] = {
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
- 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
- static const int s_length_extra[31] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
- 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4,
- 4, 4, 5, 5, 5, 5, 0, 0, 0};
- static const int s_dist_base[32] = {
- 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33,
- 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537,
- 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 0, 0};
- static const int s_dist_extra[32] = {0, 0, 0, 0, 1, 1, 2, 2, 3, 3,
- 4, 4, 5, 5, 6, 6, 7, 7, 8, 8,
- 9, 9, 10, 10, 11, 11, 12, 12, 13, 13};
- static const mz_uint8 s_length_dezigzag[19] = {
- 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
- static const int s_min_table_sizes[3] = {257, 1, 4};
-
- tinfl_status status = TINFL_STATUS_FAILED;
- mz_uint32 num_bits, dist, counter, num_extra;
- tinfl_bit_buf_t bit_buf;
- const mz_uint8 *pIn_buf_cur = pIn_buf_next, *const pIn_buf_end =
- pIn_buf_next + *pIn_buf_size;
- mz_uint8 *pOut_buf_cur = pOut_buf_next, *const pOut_buf_end =
- pOut_buf_next + *pOut_buf_size;
- size_t out_buf_size_mask =
- (decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF)
- ? (size_t)-1
- : ((pOut_buf_next - pOut_buf_start) + *pOut_buf_size) - 1,
- dist_from_out_buf_start;
-
- // Ensure the output buffer's size is a power of 2, unless the output buffer
- // is large enough to hold the entire output file (in which case it doesn't
- // matter).
- if (((out_buf_size_mask + 1) & out_buf_size_mask) ||
- (pOut_buf_next < pOut_buf_start)) {
- *pIn_buf_size = *pOut_buf_size = 0;
- return TINFL_STATUS_BAD_PARAM;
- }
-
- num_bits = r->m_num_bits;
- bit_buf = r->m_bit_buf;
- dist = r->m_dist;
- counter = r->m_counter;
- num_extra = r->m_num_extra;
- dist_from_out_buf_start = r->m_dist_from_out_buf_start;
- TINFL_CR_BEGIN
-
- bit_buf = num_bits = dist = counter = num_extra = r->m_zhdr0 = r->m_zhdr1 = 0;
- r->m_z_adler32 = r->m_check_adler32 = 1;
- if (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER) {
- TINFL_GET_BYTE(1, r->m_zhdr0);
- TINFL_GET_BYTE(2, r->m_zhdr1);
- counter = (((r->m_zhdr0 * 256 + r->m_zhdr1) % 31 != 0) ||
- (r->m_zhdr1 & 32) || ((r->m_zhdr0 & 15) != 8));
- if (!(decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF))
- counter |= (((1U << (8U + (r->m_zhdr0 >> 4))) > 32768U) ||
- ((out_buf_size_mask + 1) <
- (size_t)(1ULL << (8U + (r->m_zhdr0 >> 4)))));
- if (counter) {
- TINFL_CR_RETURN_FOREVER(36, TINFL_STATUS_FAILED);
- }
- }
-
- do {
- TINFL_GET_BITS(3, r->m_final, 3);
- r->m_type = r->m_final >> 1;
- if (r->m_type == 0) {
- TINFL_SKIP_BITS(5, num_bits & 7);
- for (counter = 0; counter < 4; ++counter) {
- if (num_bits)
- TINFL_GET_BITS(6, r->m_raw_header[counter], 8);
- else
- TINFL_GET_BYTE(7, r->m_raw_header[counter]);
- }
- if ((counter = (r->m_raw_header[0] | (r->m_raw_header[1] << 8))) !=
- (mz_uint)(0xFFFF ^
- (r->m_raw_header[2] | (r->m_raw_header[3] << 8)))) {
- TINFL_CR_RETURN_FOREVER(39, TINFL_STATUS_FAILED);
- }
- while ((counter) && (num_bits)) {
- TINFL_GET_BITS(51, dist, 8);
- while (pOut_buf_cur >= pOut_buf_end) {
- TINFL_CR_RETURN(52, TINFL_STATUS_HAS_MORE_OUTPUT);
- }
- *pOut_buf_cur++ = (mz_uint8)dist;
- counter--;
- }
- while (counter) {
- size_t n;
- while (pOut_buf_cur >= pOut_buf_end) {
- TINFL_CR_RETURN(9, TINFL_STATUS_HAS_MORE_OUTPUT);
- }
- while (pIn_buf_cur >= pIn_buf_end) {
- if (decomp_flags & TINFL_FLAG_HAS_MORE_INPUT) {
- TINFL_CR_RETURN(38, TINFL_STATUS_NEEDS_MORE_INPUT);
- } else {
- TINFL_CR_RETURN_FOREVER(40, TINFL_STATUS_FAILED);
- }
- }
- n = MZ_MIN(MZ_MIN((size_t)(pOut_buf_end - pOut_buf_cur),
- (size_t)(pIn_buf_end - pIn_buf_cur)),
- counter);
- TINFL_MEMCPY(pOut_buf_cur, pIn_buf_cur, n);
- pIn_buf_cur += n;
- pOut_buf_cur += n;
- counter -= (mz_uint)n;
- }
- } else if (r->m_type == 3) {
- TINFL_CR_RETURN_FOREVER(10, TINFL_STATUS_FAILED);
- } else {
- if (r->m_type == 1) {
- mz_uint8 *p = r->m_tables[0].m_code_size;
- mz_uint i;
- r->m_table_sizes[0] = 288;
- r->m_table_sizes[1] = 32;
- TINFL_MEMSET(r->m_tables[1].m_code_size, 5, 32);
- for (i = 0; i <= 143; ++i) *p++ = 8;
- for (; i <= 255; ++i) *p++ = 9;
- for (; i <= 279; ++i) *p++ = 7;
- for (; i <= 287; ++i) *p++ = 8;
- } else {
- for (counter = 0; counter < 3; counter++) {
- TINFL_GET_BITS(11, r->m_table_sizes[counter], "\05\05\04"[counter]);
- r->m_table_sizes[counter] += s_min_table_sizes[counter];
- }
- MZ_CLEAR_OBJ(r->m_tables[2].m_code_size);
- for (counter = 0; counter < r->m_table_sizes[2]; counter++) {
- mz_uint s;
- TINFL_GET_BITS(14, s, 3);
- r->m_tables[2].m_code_size[s_length_dezigzag[counter]] = (mz_uint8)s;
- }
- r->m_table_sizes[2] = 19;
- }
- for (; (int)r->m_type >= 0; r->m_type--) {
- int tree_next, tree_cur;
- tinfl_huff_table *pTable;
- mz_uint i, j, used_syms, total, sym_index, next_code[17],
- total_syms[16];
- pTable = &r->m_tables[r->m_type];
- MZ_CLEAR_OBJ(total_syms);
- MZ_CLEAR_OBJ(pTable->m_look_up);
- MZ_CLEAR_OBJ(pTable->m_tree);
- for (i = 0; i < r->m_table_sizes[r->m_type]; ++i)
- total_syms[pTable->m_code_size[i]]++;
- used_syms = 0, total = 0;
- next_code[0] = next_code[1] = 0;
- for (i = 1; i <= 15; ++i) {
- used_syms += total_syms[i];
- next_code[i + 1] = (total = ((total + total_syms[i]) << 1));
- }
- if ((65536 != total) && (used_syms > 1)) {
- TINFL_CR_RETURN_FOREVER(35, TINFL_STATUS_FAILED);
- }
- for (tree_next = -1, sym_index = 0;
- sym_index < r->m_table_sizes[r->m_type]; ++sym_index) {
- mz_uint rev_code = 0, l, cur_code,
- code_size = pTable->m_code_size[sym_index];
- if (!code_size) continue;
- cur_code = next_code[code_size]++;
- for (l = code_size; l > 0; l--, cur_code >>= 1)
- rev_code = (rev_code << 1) | (cur_code & 1);
- if (code_size <= TINFL_FAST_LOOKUP_BITS) {
- mz_int16 k = (mz_int16)((code_size << 9) | sym_index);
- while (rev_code < TINFL_FAST_LOOKUP_SIZE) {
- pTable->m_look_up[rev_code] = k;
- rev_code += (1 << code_size);
- }
- continue;
- }
- if (0 ==
- (tree_cur = pTable->m_look_up[rev_code &
- (TINFL_FAST_LOOKUP_SIZE - 1)])) {
- pTable->m_look_up[rev_code & (TINFL_FAST_LOOKUP_SIZE - 1)] =
- (mz_int16)tree_next;
- tree_cur = tree_next;
- tree_next -= 2;
- }
- rev_code >>= (TINFL_FAST_LOOKUP_BITS - 1);
- for (j = code_size; j > (TINFL_FAST_LOOKUP_BITS + 1); j--) {
- tree_cur -= ((rev_code >>= 1) & 1);
- if (!pTable->m_tree[-tree_cur - 1]) {
- pTable->m_tree[-tree_cur - 1] = (mz_int16)tree_next;
- tree_cur = tree_next;
- tree_next -= 2;
- } else
- tree_cur = pTable->m_tree[-tree_cur - 1];
- }
- tree_cur -= ((rev_code >>= 1) & 1);
- pTable->m_tree[-tree_cur - 1] = (mz_int16)sym_index;
- }
- if (r->m_type == 2) {
- for (counter = 0;
- counter < (r->m_table_sizes[0] + r->m_table_sizes[1]);) {
- mz_uint s;
- TINFL_HUFF_DECODE(16, dist, &r->m_tables[2]);
- if (dist < 16) {
- r->m_len_codes[counter++] = (mz_uint8)dist;
- continue;
- }
- if ((dist == 16) && (!counter)) {
- TINFL_CR_RETURN_FOREVER(17, TINFL_STATUS_FAILED);
- }
- num_extra = "\02\03\07"[dist - 16];
- TINFL_GET_BITS(18, s, num_extra);
- s += "\03\03\013"[dist - 16];
- TINFL_MEMSET(r->m_len_codes + counter,
- (dist == 16) ? r->m_len_codes[counter - 1] : 0, s);
- counter += s;
- }
- if ((r->m_table_sizes[0] + r->m_table_sizes[1]) != counter) {
- TINFL_CR_RETURN_FOREVER(21, TINFL_STATUS_FAILED);
- }
- TINFL_MEMCPY(r->m_tables[0].m_code_size, r->m_len_codes,
- r->m_table_sizes[0]);
- TINFL_MEMCPY(r->m_tables[1].m_code_size,
- r->m_len_codes + r->m_table_sizes[0],
- r->m_table_sizes[1]);
- }
- }
- for (;;) {
- mz_uint8 *pSrc;
- for (;;) {
- if (((pIn_buf_end - pIn_buf_cur) < 4) ||
- ((pOut_buf_end - pOut_buf_cur) < 2)) {
- TINFL_HUFF_DECODE(23, counter, &r->m_tables[0]);
- if (counter >= 256) break;
- while (pOut_buf_cur >= pOut_buf_end) {
- TINFL_CR_RETURN(24, TINFL_STATUS_HAS_MORE_OUTPUT);
- }
- *pOut_buf_cur++ = (mz_uint8)counter;
- } else {
- int sym2;
- mz_uint code_len;
-#if TINFL_USE_64BIT_BITBUF
- if (num_bits < 30) {
- bit_buf |=
- (((tinfl_bit_buf_t)MZ_READ_LE32(pIn_buf_cur)) << num_bits);
- pIn_buf_cur += 4;
- num_bits += 32;
- }
-#else
- if (num_bits < 15) {
- bit_buf |=
- (((tinfl_bit_buf_t)MZ_READ_LE16(pIn_buf_cur)) << num_bits);
- pIn_buf_cur += 2;
- num_bits += 16;
- }
-#endif
- if ((sym2 =
- r->m_tables[0]
- .m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]) >=
- 0)
- code_len = sym2 >> 9;
- else {
- code_len = TINFL_FAST_LOOKUP_BITS;
- do {
- sym2 = r->m_tables[0]
- .m_tree[~sym2 + ((bit_buf >> code_len++) & 1)];
- } while (sym2 < 0);
- }
- counter = sym2;
- bit_buf >>= code_len;
- num_bits -= code_len;
- if (counter & 256) break;
-
-#if !TINFL_USE_64BIT_BITBUF
- if (num_bits < 15) {
- bit_buf |=
- (((tinfl_bit_buf_t)MZ_READ_LE16(pIn_buf_cur)) << num_bits);
- pIn_buf_cur += 2;
- num_bits += 16;
- }
-#endif
- if ((sym2 =
- r->m_tables[0]
- .m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]) >=
- 0)
- code_len = sym2 >> 9;
- else {
- code_len = TINFL_FAST_LOOKUP_BITS;
- do {
- sym2 = r->m_tables[0]
- .m_tree[~sym2 + ((bit_buf >> code_len++) & 1)];
- } while (sym2 < 0);
- }
- bit_buf >>= code_len;
- num_bits -= code_len;
-
- pOut_buf_cur[0] = (mz_uint8)counter;
- if (sym2 & 256) {
- pOut_buf_cur++;
- counter = sym2;
- break;
- }
- pOut_buf_cur[1] = (mz_uint8)sym2;
- pOut_buf_cur += 2;
- }
- }
- if ((counter &= 511) == 256) break;
-
- num_extra = s_length_extra[counter - 257];
- counter = s_length_base[counter - 257];
- if (num_extra) {
- mz_uint extra_bits;
- TINFL_GET_BITS(25, extra_bits, num_extra);
- counter += extra_bits;
- }
-
- TINFL_HUFF_DECODE(26, dist, &r->m_tables[1]);
- num_extra = s_dist_extra[dist];
- dist = s_dist_base[dist];
- if (num_extra) {
- mz_uint extra_bits;
- TINFL_GET_BITS(27, extra_bits, num_extra);
- dist += extra_bits;
- }
-
- dist_from_out_buf_start = pOut_buf_cur - pOut_buf_start;
- if ((dist > dist_from_out_buf_start) &&
- (decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF)) {
- TINFL_CR_RETURN_FOREVER(37, TINFL_STATUS_FAILED);
- }
-
- pSrc = pOut_buf_start +
- ((dist_from_out_buf_start - dist) & out_buf_size_mask);
-
- if ((MZ_MAX(pOut_buf_cur, pSrc) + counter) > pOut_buf_end) {
- while (counter--) {
- while (pOut_buf_cur >= pOut_buf_end) {
- TINFL_CR_RETURN(53, TINFL_STATUS_HAS_MORE_OUTPUT);
- }
- *pOut_buf_cur++ =
- pOut_buf_start[(dist_from_out_buf_start++ - dist) &
- out_buf_size_mask];
- }
- continue;
- }
-#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES
- else if ((counter >= 9) && (counter <= dist)) {
- const mz_uint8 *pSrc_end = pSrc + (counter & ~7);
- do {
- ((mz_uint32 *)pOut_buf_cur)[0] = ((const mz_uint32 *)pSrc)[0];
- ((mz_uint32 *)pOut_buf_cur)[1] = ((const mz_uint32 *)pSrc)[1];
- pOut_buf_cur += 8;
- } while ((pSrc += 8) < pSrc_end);
- if ((counter &= 7) < 3) {
- if (counter) {
- pOut_buf_cur[0] = pSrc[0];
- if (counter > 1) pOut_buf_cur[1] = pSrc[1];
- pOut_buf_cur += counter;
- }
- continue;
- }
- }
-#endif
- do {
- pOut_buf_cur[0] = pSrc[0];
- pOut_buf_cur[1] = pSrc[1];
- pOut_buf_cur[2] = pSrc[2];
- pOut_buf_cur += 3;
- pSrc += 3;
- } while ((int)(counter -= 3) > 2);
- if ((int)counter > 0) {
- pOut_buf_cur[0] = pSrc[0];
- if ((int)counter > 1) pOut_buf_cur[1] = pSrc[1];
- pOut_buf_cur += counter;
- }
- }
- }
- } while (!(r->m_final & 1));
- if (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER) {
- TINFL_SKIP_BITS(32, num_bits & 7);
- for (counter = 0; counter < 4; ++counter) {
- mz_uint s;
- if (num_bits)
- TINFL_GET_BITS(41, s, 8);
- else
- TINFL_GET_BYTE(42, s);
- r->m_z_adler32 = (r->m_z_adler32 << 8) | s;
- }
- }
- TINFL_CR_RETURN_FOREVER(34, TINFL_STATUS_DONE);
- TINFL_CR_FINISH
-
-common_exit:
- r->m_num_bits = num_bits;
- r->m_bit_buf = bit_buf;
- r->m_dist = dist;
- r->m_counter = counter;
- r->m_num_extra = num_extra;
- r->m_dist_from_out_buf_start = dist_from_out_buf_start;
- *pIn_buf_size = pIn_buf_cur - pIn_buf_next;
- *pOut_buf_size = pOut_buf_cur - pOut_buf_next;
- if ((decomp_flags &
- (TINFL_FLAG_PARSE_ZLIB_HEADER | TINFL_FLAG_COMPUTE_ADLER32)) &&
- (status >= 0)) {
- const mz_uint8 *ptr = pOut_buf_next;
- size_t buf_len = *pOut_buf_size;
- mz_uint32 i, s1 = r->m_check_adler32 & 0xffff,
- s2 = r->m_check_adler32 >> 16;
- size_t block_len = buf_len % 5552;
- while (buf_len) {
- for (i = 0; i + 7 < block_len; i += 8, ptr += 8) {
- s1 += ptr[0], s2 += s1;
- s1 += ptr[1], s2 += s1;
- s1 += ptr[2], s2 += s1;
- s1 += ptr[3], s2 += s1;
- s1 += ptr[4], s2 += s1;
- s1 += ptr[5], s2 += s1;
- s1 += ptr[6], s2 += s1;
- s1 += ptr[7], s2 += s1;
- }
- for (; i < block_len; ++i) s1 += *ptr++, s2 += s1;
- s1 %= 65521U, s2 %= 65521U;
- buf_len -= block_len;
- block_len = 5552;
- }
- r->m_check_adler32 = (s2 << 16) + s1;
- if ((status == TINFL_STATUS_DONE) &&
- (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER) &&
- (r->m_check_adler32 != r->m_z_adler32))
- status = TINFL_STATUS_ADLER32_MISMATCH;
- }
- return status;
-}
-
-// Higher level helper functions.
-void *tinfl_decompress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len,
- size_t *pOut_len, int flags) {
- tinfl_decompressor decomp;
- void *pBuf = NULL, *pNew_buf;
- size_t src_buf_ofs = 0, out_buf_capacity = 0;
- *pOut_len = 0;
- tinfl_init(&decomp);
- for (;;) {
- size_t src_buf_size = src_buf_len - src_buf_ofs,
- dst_buf_size = out_buf_capacity - *pOut_len, new_out_buf_capacity;
- tinfl_status status = tinfl_decompress(
- &decomp, (const mz_uint8 *)pSrc_buf + src_buf_ofs, &src_buf_size,
- (mz_uint8 *)pBuf, pBuf ? (mz_uint8 *)pBuf + *pOut_len : NULL,
- &dst_buf_size,
- (flags & ~TINFL_FLAG_HAS_MORE_INPUT) |
- TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF);
- if ((status < 0) || (status == TINFL_STATUS_NEEDS_MORE_INPUT)) {
- MZ_FREE(pBuf);
- *pOut_len = 0;
- return NULL;
- }
- src_buf_ofs += src_buf_size;
- *pOut_len += dst_buf_size;
- if (status == TINFL_STATUS_DONE) break;
- new_out_buf_capacity = out_buf_capacity * 2;
- if (new_out_buf_capacity < 128) new_out_buf_capacity = 128;
- pNew_buf = MZ_REALLOC(pBuf, new_out_buf_capacity);
- if (!pNew_buf) {
- MZ_FREE(pBuf);
- *pOut_len = 0;
- return NULL;
- }
- pBuf = pNew_buf;
- out_buf_capacity = new_out_buf_capacity;
- }
- return pBuf;
-}
-
-size_t tinfl_decompress_mem_to_mem(void *pOut_buf, size_t out_buf_len,
- const void *pSrc_buf, size_t src_buf_len,
- int flags) {
- tinfl_decompressor decomp;
- tinfl_status status;
- tinfl_init(&decomp);
- status =
- tinfl_decompress(&decomp, (const mz_uint8 *)pSrc_buf, &src_buf_len,
- (mz_uint8 *)pOut_buf, (mz_uint8 *)pOut_buf, &out_buf_len,
- (flags & ~TINFL_FLAG_HAS_MORE_INPUT) |
- TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF);
- return (status != TINFL_STATUS_DONE) ? TINFL_DECOMPRESS_MEM_TO_MEM_FAILED
- : out_buf_len;
-}
-
-int tinfl_decompress_mem_to_callback(const void *pIn_buf, size_t *pIn_buf_size,
- tinfl_put_buf_func_ptr pPut_buf_func,
- void *pPut_buf_user, int flags) {
- int result = 0;
- tinfl_decompressor decomp;
- mz_uint8 *pDict = (mz_uint8 *)MZ_MALLOC(TINFL_LZ_DICT_SIZE);
- size_t in_buf_ofs = 0, dict_ofs = 0;
- if (!pDict) return TINFL_STATUS_FAILED;
- tinfl_init(&decomp);
- for (;;) {
- size_t in_buf_size = *pIn_buf_size - in_buf_ofs,
- dst_buf_size = TINFL_LZ_DICT_SIZE - dict_ofs;
- tinfl_status status =
- tinfl_decompress(&decomp, (const mz_uint8 *)pIn_buf + in_buf_ofs,
- &in_buf_size, pDict, pDict + dict_ofs, &dst_buf_size,
- (flags & ~(TINFL_FLAG_HAS_MORE_INPUT |
- TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF)));
- in_buf_ofs += in_buf_size;
- if ((dst_buf_size) &&
- (!(*pPut_buf_func)(pDict + dict_ofs, (int)dst_buf_size, pPut_buf_user)))
- break;
- if (status != TINFL_STATUS_HAS_MORE_OUTPUT) {
- result = (status == TINFL_STATUS_DONE);
- break;
- }
- dict_ofs = (dict_ofs + dst_buf_size) & (TINFL_LZ_DICT_SIZE - 1);
- }
- MZ_FREE(pDict);
- *pIn_buf_size = in_buf_ofs;
- return result;
-}
-
-// ------------------- Low-level Compression (independent from all decompression
-// API's)
-
-// Purposely making these tables static for faster init and thread safety.
-static const mz_uint16 s_tdefl_len_sym[256] = {
- 257, 258, 259, 260, 261, 262, 263, 264, 265, 265, 266, 266, 267, 267, 268,
- 268, 269, 269, 269, 269, 270, 270, 270, 270, 271, 271, 271, 271, 272, 272,
- 272, 272, 273, 273, 273, 273, 273, 273, 273, 273, 274, 274, 274, 274, 274,
- 274, 274, 274, 275, 275, 275, 275, 275, 275, 275, 275, 276, 276, 276, 276,
- 276, 276, 276, 276, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
- 277, 277, 277, 277, 277, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278,
- 278, 278, 278, 278, 278, 278, 279, 279, 279, 279, 279, 279, 279, 279, 279,
- 279, 279, 279, 279, 279, 279, 279, 280, 280, 280, 280, 280, 280, 280, 280,
- 280, 280, 280, 280, 280, 280, 280, 280, 281, 281, 281, 281, 281, 281, 281,
- 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281,
- 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 282, 282, 282, 282, 282,
- 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282,
- 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 283, 283, 283,
- 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283,
- 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 284,
- 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284,
- 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284,
- 285};
-
-static const mz_uint8 s_tdefl_len_extra[256] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0};
-
-static const mz_uint8 s_tdefl_small_dist_sym[512] = {
- 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8,
- 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10,
- 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17};
-
-static const mz_uint8 s_tdefl_small_dist_extra[512] = {
- 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7};
-
-static const mz_uint8 s_tdefl_large_dist_sym[128] = {
- 0, 0, 18, 19, 20, 20, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23, 24, 24, 24,
- 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26,
- 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29,
- 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29};
-
-static const mz_uint8 s_tdefl_large_dist_extra[128] = {
- 0, 0, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
- 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13};
-
-// Radix sorts tdefl_sym_freq[] array by 16-bit key m_key. Returns ptr to sorted
-// values.
-typedef struct {
- mz_uint16 m_key, m_sym_index;
-} tdefl_sym_freq;
-static tdefl_sym_freq *tdefl_radix_sort_syms(mz_uint num_syms,
- tdefl_sym_freq *pSyms0,
- tdefl_sym_freq *pSyms1) {
- mz_uint32 total_passes = 2, pass_shift, pass, i, hist[256 * 2];
- tdefl_sym_freq *pCur_syms = pSyms0, *pNew_syms = pSyms1;
- MZ_CLEAR_OBJ(hist);
- for (i = 0; i < num_syms; i++) {
- mz_uint freq = pSyms0[i].m_key;
- hist[freq & 0xFF]++;
- hist[256 + ((freq >> 8) & 0xFF)]++;
- }
- while ((total_passes > 1) && (num_syms == hist[(total_passes - 1) * 256]))
- total_passes--;
- for (pass_shift = 0, pass = 0; pass < total_passes; pass++, pass_shift += 8) {
- const mz_uint32 *pHist = &hist[pass << 8];
- mz_uint offsets[256], cur_ofs = 0;
- for (i = 0; i < 256; i++) {
- offsets[i] = cur_ofs;
- cur_ofs += pHist[i];
- }
- for (i = 0; i < num_syms; i++)
- pNew_syms[offsets[(pCur_syms[i].m_key >> pass_shift) & 0xFF]++] =
- pCur_syms[i];
- {
- tdefl_sym_freq *t = pCur_syms;
- pCur_syms = pNew_syms;
- pNew_syms = t;
- }
- }
- return pCur_syms;
-}
-
-// tdefl_calculate_minimum_redundancy() originally written by: Alistair Moffat,
-// alistair@cs.mu.oz.au, Jyrki Katajainen, jyrki@diku.dk, November 1996.
-static void tdefl_calculate_minimum_redundancy(tdefl_sym_freq *A, int n) {
- int root, leaf, next, avbl, used, dpth;
- if (n == 0)
- return;
- else if (n == 1) {
- A[0].m_key = 1;
- return;
- }
- A[0].m_key += A[1].m_key;
- root = 0;
- leaf = 2;
- for (next = 1; next < n - 1; next++) {
- if (leaf >= n || A[root].m_key < A[leaf].m_key) {
- A[next].m_key = A[root].m_key;
- A[root++].m_key = (mz_uint16)next;
- } else
- A[next].m_key = A[leaf++].m_key;
- if (leaf >= n || (root < next && A[root].m_key < A[leaf].m_key)) {
- A[next].m_key = (mz_uint16)(A[next].m_key + A[root].m_key);
- A[root++].m_key = (mz_uint16)next;
- } else
- A[next].m_key = (mz_uint16)(A[next].m_key + A[leaf++].m_key);
- }
- A[n - 2].m_key = 0;
- for (next = n - 3; next >= 0; next--)
- A[next].m_key = A[A[next].m_key].m_key + 1;
- avbl = 1;
- used = dpth = 0;
- root = n - 2;
- next = n - 1;
- while (avbl > 0) {
- while (root >= 0 && (int)A[root].m_key == dpth) {
- used++;
- root--;
- }
- while (avbl > used) {
- A[next--].m_key = (mz_uint16)(dpth);
- avbl--;
- }
- avbl = 2 * used;
- dpth++;
- used = 0;
- }
-}
-
-// Limits canonical Huffman code table's max code size.
-enum { TDEFL_MAX_SUPPORTED_HUFF_CODESIZE = 32 };
-static void tdefl_huffman_enforce_max_code_size(int *pNum_codes,
- int code_list_len,
- int max_code_size) {
- int i;
- mz_uint32 total = 0;
- if (code_list_len <= 1) return;
- for (i = max_code_size + 1; i <= TDEFL_MAX_SUPPORTED_HUFF_CODESIZE; i++)
- pNum_codes[max_code_size] += pNum_codes[i];
- for (i = max_code_size; i > 0; i--)
- total += (((mz_uint32)pNum_codes[i]) << (max_code_size - i));
- while (total != (1UL << max_code_size)) {
- pNum_codes[max_code_size]--;
- for (i = max_code_size - 1; i > 0; i--)
- if (pNum_codes[i]) {
- pNum_codes[i]--;
- pNum_codes[i + 1] += 2;
- break;
- }
- total--;
- }
-}
-
-static void tdefl_optimize_huffman_table(tdefl_compressor *d, int table_num,
- int table_len, int code_size_limit,
- int static_table) {
- int i, j, l, num_codes[1 + TDEFL_MAX_SUPPORTED_HUFF_CODESIZE];
- mz_uint next_code[TDEFL_MAX_SUPPORTED_HUFF_CODESIZE + 1];
- MZ_CLEAR_OBJ(num_codes);
- if (static_table) {
- for (i = 0; i < table_len; i++)
- num_codes[d->m_huff_code_sizes[table_num][i]]++;
- } else {
- tdefl_sym_freq syms0[TDEFL_MAX_HUFF_SYMBOLS], syms1[TDEFL_MAX_HUFF_SYMBOLS],
- *pSyms;
- int num_used_syms = 0;
- const mz_uint16 *pSym_count = &d->m_huff_count[table_num][0];
- for (i = 0; i < table_len; i++)
- if (pSym_count[i]) {
- syms0[num_used_syms].m_key = (mz_uint16)pSym_count[i];
- syms0[num_used_syms++].m_sym_index = (mz_uint16)i;
- }
-
- pSyms = tdefl_radix_sort_syms(num_used_syms, syms0, syms1);
- tdefl_calculate_minimum_redundancy(pSyms, num_used_syms);
-
- for (i = 0; i < num_used_syms; i++) num_codes[pSyms[i].m_key]++;
-
- tdefl_huffman_enforce_max_code_size(num_codes, num_used_syms,
- code_size_limit);
-
- MZ_CLEAR_OBJ(d->m_huff_code_sizes[table_num]);
- MZ_CLEAR_OBJ(d->m_huff_codes[table_num]);
- for (i = 1, j = num_used_syms; i <= code_size_limit; i++)
- for (l = num_codes[i]; l > 0; l--)
- d->m_huff_code_sizes[table_num][pSyms[--j].m_sym_index] = (mz_uint8)(i);
- }
-
- next_code[1] = 0;
- for (j = 0, i = 2; i <= code_size_limit; i++)
- next_code[i] = j = ((j + num_codes[i - 1]) << 1);
-
- for (i = 0; i < table_len; i++) {
- mz_uint rev_code = 0, code, code_size;
- if ((code_size = d->m_huff_code_sizes[table_num][i]) == 0) continue;
- code = next_code[code_size]++;
- for (l = code_size; l > 0; l--, code >>= 1)
- rev_code = (rev_code << 1) | (code & 1);
- d->m_huff_codes[table_num][i] = (mz_uint16)rev_code;
- }
-}
-
-#define TDEFL_PUT_BITS(b, l) \
- do { \
- mz_uint bits = b; \
- mz_uint len = l; \
- MZ_ASSERT(bits <= ((1U << len) - 1U)); \
- d->m_bit_buffer |= (bits << d->m_bits_in); \
- d->m_bits_in += len; \
- while (d->m_bits_in >= 8) { \
- if (d->m_pOutput_buf < d->m_pOutput_buf_end) \
- *d->m_pOutput_buf++ = (mz_uint8)(d->m_bit_buffer); \
- d->m_bit_buffer >>= 8; \
- d->m_bits_in -= 8; \
- } \
- } \
- MZ_MACRO_END
-
-#define TDEFL_RLE_PREV_CODE_SIZE() \
- { \
- if (rle_repeat_count) { \
- if (rle_repeat_count < 3) { \
- d->m_huff_count[2][prev_code_size] = (mz_uint16)( \
- d->m_huff_count[2][prev_code_size] + rle_repeat_count); \
- while (rle_repeat_count--) \
- packed_code_sizes[num_packed_code_sizes++] = prev_code_size; \
- } else { \
- d->m_huff_count[2][16] = (mz_uint16)(d->m_huff_count[2][16] + 1); \
- packed_code_sizes[num_packed_code_sizes++] = 16; \
- packed_code_sizes[num_packed_code_sizes++] = \
- (mz_uint8)(rle_repeat_count - 3); \
- } \
- rle_repeat_count = 0; \
- } \
- }
-
-#define TDEFL_RLE_ZERO_CODE_SIZE() \
- { \
- if (rle_z_count) { \
- if (rle_z_count < 3) { \
- d->m_huff_count[2][0] = \
- (mz_uint16)(d->m_huff_count[2][0] + rle_z_count); \
- while (rle_z_count--) packed_code_sizes[num_packed_code_sizes++] = 0; \
- } else if (rle_z_count <= 10) { \
- d->m_huff_count[2][17] = (mz_uint16)(d->m_huff_count[2][17] + 1); \
- packed_code_sizes[num_packed_code_sizes++] = 17; \
- packed_code_sizes[num_packed_code_sizes++] = \
- (mz_uint8)(rle_z_count - 3); \
- } else { \
- d->m_huff_count[2][18] = (mz_uint16)(d->m_huff_count[2][18] + 1); \
- packed_code_sizes[num_packed_code_sizes++] = 18; \
- packed_code_sizes[num_packed_code_sizes++] = \
- (mz_uint8)(rle_z_count - 11); \
- } \
- rle_z_count = 0; \
- } \
- }
-
-static mz_uint8 s_tdefl_packed_code_size_syms_swizzle[] = {
- 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
-
-static void tdefl_start_dynamic_block(tdefl_compressor *d) {
- int num_lit_codes, num_dist_codes, num_bit_lengths;
- mz_uint i, total_code_sizes_to_pack, num_packed_code_sizes, rle_z_count,
- rle_repeat_count, packed_code_sizes_index;
- mz_uint8
- code_sizes_to_pack[TDEFL_MAX_HUFF_SYMBOLS_0 + TDEFL_MAX_HUFF_SYMBOLS_1],
- packed_code_sizes[TDEFL_MAX_HUFF_SYMBOLS_0 + TDEFL_MAX_HUFF_SYMBOLS_1],
- prev_code_size = 0xFF;
-
- d->m_huff_count[0][256] = 1;
-
- tdefl_optimize_huffman_table(d, 0, TDEFL_MAX_HUFF_SYMBOLS_0, 15, MZ_FALSE);
- tdefl_optimize_huffman_table(d, 1, TDEFL_MAX_HUFF_SYMBOLS_1, 15, MZ_FALSE);
-
- for (num_lit_codes = 286; num_lit_codes > 257; num_lit_codes--)
- if (d->m_huff_code_sizes[0][num_lit_codes - 1]) break;
- for (num_dist_codes = 30; num_dist_codes > 1; num_dist_codes--)
- if (d->m_huff_code_sizes[1][num_dist_codes - 1]) break;
-
- memcpy(code_sizes_to_pack, &d->m_huff_code_sizes[0][0], num_lit_codes);
- memcpy(code_sizes_to_pack + num_lit_codes, &d->m_huff_code_sizes[1][0],
- num_dist_codes);
- total_code_sizes_to_pack = num_lit_codes + num_dist_codes;
- num_packed_code_sizes = 0;
- rle_z_count = 0;
- rle_repeat_count = 0;
-
- memset(&d->m_huff_count[2][0], 0,
- sizeof(d->m_huff_count[2][0]) * TDEFL_MAX_HUFF_SYMBOLS_2);
- for (i = 0; i < total_code_sizes_to_pack; i++) {
- mz_uint8 code_size = code_sizes_to_pack[i];
- if (!code_size) {
- TDEFL_RLE_PREV_CODE_SIZE();
- if (++rle_z_count == 138) {
- TDEFL_RLE_ZERO_CODE_SIZE();
- }
- } else {
- TDEFL_RLE_ZERO_CODE_SIZE();
- if (code_size != prev_code_size) {
- TDEFL_RLE_PREV_CODE_SIZE();
- d->m_huff_count[2][code_size] =
- (mz_uint16)(d->m_huff_count[2][code_size] + 1);
- packed_code_sizes[num_packed_code_sizes++] = code_size;
- } else if (++rle_repeat_count == 6) {
- TDEFL_RLE_PREV_CODE_SIZE();
- }
- }
- prev_code_size = code_size;
- }
- if (rle_repeat_count) {
- TDEFL_RLE_PREV_CODE_SIZE();
- } else {
- TDEFL_RLE_ZERO_CODE_SIZE();
- }
-
- tdefl_optimize_huffman_table(d, 2, TDEFL_MAX_HUFF_SYMBOLS_2, 7, MZ_FALSE);
-
- TDEFL_PUT_BITS(2, 2);
-
- TDEFL_PUT_BITS(num_lit_codes - 257, 5);
- TDEFL_PUT_BITS(num_dist_codes - 1, 5);
-
- for (num_bit_lengths = 18; num_bit_lengths >= 0; num_bit_lengths--)
- if (d->m_huff_code_sizes
- [2][s_tdefl_packed_code_size_syms_swizzle[num_bit_lengths]])
- break;
- num_bit_lengths = MZ_MAX(4, (num_bit_lengths + 1));
- TDEFL_PUT_BITS(num_bit_lengths - 4, 4);
- for (i = 0; (int)i < num_bit_lengths; i++)
- TDEFL_PUT_BITS(
- d->m_huff_code_sizes[2][s_tdefl_packed_code_size_syms_swizzle[i]], 3);
-
- for (packed_code_sizes_index = 0;
- packed_code_sizes_index < num_packed_code_sizes;) {
- mz_uint code = packed_code_sizes[packed_code_sizes_index++];
- MZ_ASSERT(code < TDEFL_MAX_HUFF_SYMBOLS_2);
- TDEFL_PUT_BITS(d->m_huff_codes[2][code], d->m_huff_code_sizes[2][code]);
- if (code >= 16)
- TDEFL_PUT_BITS(packed_code_sizes[packed_code_sizes_index++],
- "\02\03\07"[code - 16]);
- }
-}
-
-static void tdefl_start_static_block(tdefl_compressor *d) {
- mz_uint i;
- mz_uint8 *p = &d->m_huff_code_sizes[0][0];
-
- for (i = 0; i <= 143; ++i) *p++ = 8;
- for (; i <= 255; ++i) *p++ = 9;
- for (; i <= 279; ++i) *p++ = 7;
- for (; i <= 287; ++i) *p++ = 8;
-
- memset(d->m_huff_code_sizes[1], 5, 32);
-
- tdefl_optimize_huffman_table(d, 0, 288, 15, MZ_TRUE);
- tdefl_optimize_huffman_table(d, 1, 32, 15, MZ_TRUE);
-
- TDEFL_PUT_BITS(1, 2);
-}
-
-static const mz_uint mz_bitmasks[17] = {
- 0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F, 0x003F, 0x007F, 0x00FF,
- 0x01FF, 0x03FF, 0x07FF, 0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF};
-
-#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN && \
- MINIZ_HAS_64BIT_REGISTERS
-static mz_bool tdefl_compress_lz_codes(tdefl_compressor *d) {
- mz_uint flags;
- mz_uint8 *pLZ_codes;
- mz_uint8 *pOutput_buf = d->m_pOutput_buf;
- mz_uint8 *pLZ_code_buf_end = d->m_pLZ_code_buf;
- mz_uint64 bit_buffer = d->m_bit_buffer;
- mz_uint bits_in = d->m_bits_in;
-
-#define TDEFL_PUT_BITS_FAST(b, l) \
- { \
- bit_buffer |= (((mz_uint64)(b)) << bits_in); \
- bits_in += (l); \
- }
-
- flags = 1;
- for (pLZ_codes = d->m_lz_code_buf; pLZ_codes < pLZ_code_buf_end;
- flags >>= 1) {
- if (flags == 1) flags = *pLZ_codes++ | 0x100;
-
- if (flags & 1) {
- mz_uint s0, s1, n0, n1, sym, num_extra_bits;
- mz_uint match_len = pLZ_codes[0],
- match_dist = *(const mz_uint16 *)(pLZ_codes + 1);
- pLZ_codes += 3;
-
- MZ_ASSERT(d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]);
- TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][s_tdefl_len_sym[match_len]],
- d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]);
- TDEFL_PUT_BITS_FAST(match_len & mz_bitmasks[s_tdefl_len_extra[match_len]],
- s_tdefl_len_extra[match_len]);
-
- // This sequence coaxes MSVC into using cmov's vs. jmp's.
- s0 = s_tdefl_small_dist_sym[match_dist & 511];
- n0 = s_tdefl_small_dist_extra[match_dist & 511];
- s1 = s_tdefl_large_dist_sym[match_dist >> 8];
- n1 = s_tdefl_large_dist_extra[match_dist >> 8];
- sym = (match_dist < 512) ? s0 : s1;
- num_extra_bits = (match_dist < 512) ? n0 : n1;
-
- MZ_ASSERT(d->m_huff_code_sizes[1][sym]);
- TDEFL_PUT_BITS_FAST(d->m_huff_codes[1][sym],
- d->m_huff_code_sizes[1][sym]);
- TDEFL_PUT_BITS_FAST(match_dist & mz_bitmasks[num_extra_bits],
- num_extra_bits);
- } else {
- mz_uint lit = *pLZ_codes++;
- MZ_ASSERT(d->m_huff_code_sizes[0][lit]);
- TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][lit],
- d->m_huff_code_sizes[0][lit]);
-
- if (((flags & 2) == 0) && (pLZ_codes < pLZ_code_buf_end)) {
- flags >>= 1;
- lit = *pLZ_codes++;
- MZ_ASSERT(d->m_huff_code_sizes[0][lit]);
- TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][lit],
- d->m_huff_code_sizes[0][lit]);
-
- if (((flags & 2) == 0) && (pLZ_codes < pLZ_code_buf_end)) {
- flags >>= 1;
- lit = *pLZ_codes++;
- MZ_ASSERT(d->m_huff_code_sizes[0][lit]);
- TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][lit],
- d->m_huff_code_sizes[0][lit]);
- }
- }
- }
-
- if (pOutput_buf >= d->m_pOutput_buf_end) return MZ_FALSE;
-
- *(mz_uint64 *)pOutput_buf = bit_buffer;
- pOutput_buf += (bits_in >> 3);
- bit_buffer >>= (bits_in & ~7);
- bits_in &= 7;
- }
-
-#undef TDEFL_PUT_BITS_FAST
-
- d->m_pOutput_buf = pOutput_buf;
- d->m_bits_in = 0;
- d->m_bit_buffer = 0;
-
- while (bits_in) {
- mz_uint32 n = MZ_MIN(bits_in, 16);
- TDEFL_PUT_BITS((mz_uint)bit_buffer & mz_bitmasks[n], n);
- bit_buffer >>= n;
- bits_in -= n;
- }
-
- TDEFL_PUT_BITS(d->m_huff_codes[0][256], d->m_huff_code_sizes[0][256]);
-
- return (d->m_pOutput_buf < d->m_pOutput_buf_end);
-}
-#else
-static mz_bool tdefl_compress_lz_codes(tdefl_compressor *d) {
- mz_uint flags;
- mz_uint8 *pLZ_codes;
-
- flags = 1;
- for (pLZ_codes = d->m_lz_code_buf; pLZ_codes < d->m_pLZ_code_buf;
- flags >>= 1) {
- if (flags == 1) flags = *pLZ_codes++ | 0x100;
- if (flags & 1) {
- mz_uint sym, num_extra_bits;
- mz_uint match_len = pLZ_codes[0],
- match_dist = (pLZ_codes[1] | (pLZ_codes[2] << 8));
- pLZ_codes += 3;
-
- MZ_ASSERT(d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]);
- TDEFL_PUT_BITS(d->m_huff_codes[0][s_tdefl_len_sym[match_len]],
- d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]);
- TDEFL_PUT_BITS(match_len & mz_bitmasks[s_tdefl_len_extra[match_len]],
- s_tdefl_len_extra[match_len]);
-
- if (match_dist < 512) {
- sym = s_tdefl_small_dist_sym[match_dist];
- num_extra_bits = s_tdefl_small_dist_extra[match_dist];
- } else {
- sym = s_tdefl_large_dist_sym[match_dist >> 8];
- num_extra_bits = s_tdefl_large_dist_extra[match_dist >> 8];
- }
- MZ_ASSERT(d->m_huff_code_sizes[1][sym]);
- TDEFL_PUT_BITS(d->m_huff_codes[1][sym], d->m_huff_code_sizes[1][sym]);
- TDEFL_PUT_BITS(match_dist & mz_bitmasks[num_extra_bits], num_extra_bits);
- } else {
- mz_uint lit = *pLZ_codes++;
- MZ_ASSERT(d->m_huff_code_sizes[0][lit]);
- TDEFL_PUT_BITS(d->m_huff_codes[0][lit], d->m_huff_code_sizes[0][lit]);
- }
- }
-
- TDEFL_PUT_BITS(d->m_huff_codes[0][256], d->m_huff_code_sizes[0][256]);
-
- return (d->m_pOutput_buf < d->m_pOutput_buf_end);
-}
-#endif // MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN &&
- // MINIZ_HAS_64BIT_REGISTERS
-
-static mz_bool tdefl_compress_block(tdefl_compressor *d, mz_bool static_block) {
- if (static_block)
- tdefl_start_static_block(d);
- else
- tdefl_start_dynamic_block(d);
- return tdefl_compress_lz_codes(d);
-}
-
-static int tdefl_flush_block(tdefl_compressor *d, int flush) {
- mz_uint saved_bit_buf, saved_bits_in;
- mz_uint8 *pSaved_output_buf;
- mz_bool comp_block_succeeded = MZ_FALSE;
- int n, use_raw_block =
- ((d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS) != 0) &&
- (d->m_lookahead_pos - d->m_lz_code_buf_dict_pos) <= d->m_dict_size;
- mz_uint8 *pOutput_buf_start =
- ((d->m_pPut_buf_func == NULL) &&
- ((*d->m_pOut_buf_size - d->m_out_buf_ofs) >= TDEFL_OUT_BUF_SIZE))
- ? ((mz_uint8 *)d->m_pOut_buf + d->m_out_buf_ofs)
- : d->m_output_buf;
-
- d->m_pOutput_buf = pOutput_buf_start;
- d->m_pOutput_buf_end = d->m_pOutput_buf + TDEFL_OUT_BUF_SIZE - 16;
-
- MZ_ASSERT(!d->m_output_flush_remaining);
- d->m_output_flush_ofs = 0;
- d->m_output_flush_remaining = 0;
-
- *d->m_pLZ_flags = (mz_uint8)(*d->m_pLZ_flags >> d->m_num_flags_left);
- d->m_pLZ_code_buf -= (d->m_num_flags_left == 8);
-
- if ((d->m_flags & TDEFL_WRITE_ZLIB_HEADER) && (!d->m_block_index)) {
- TDEFL_PUT_BITS(0x78, 8);
- TDEFL_PUT_BITS(0x01, 8);
- }
-
- TDEFL_PUT_BITS(flush == TDEFL_FINISH, 1);
-
- pSaved_output_buf = d->m_pOutput_buf;
- saved_bit_buf = d->m_bit_buffer;
- saved_bits_in = d->m_bits_in;
-
- if (!use_raw_block)
- comp_block_succeeded =
- tdefl_compress_block(d, (d->m_flags & TDEFL_FORCE_ALL_STATIC_BLOCKS) ||
- (d->m_total_lz_bytes < 48));
-
- // If the block gets expanded, forget the current contents of the output
- // buffer and send a raw block instead.
- if (((use_raw_block) ||
- ((d->m_total_lz_bytes) && ((d->m_pOutput_buf - pSaved_output_buf + 1U) >=
- d->m_total_lz_bytes))) &&
- ((d->m_lookahead_pos - d->m_lz_code_buf_dict_pos) <= d->m_dict_size)) {
- mz_uint i;
- d->m_pOutput_buf = pSaved_output_buf;
- d->m_bit_buffer = saved_bit_buf, d->m_bits_in = saved_bits_in;
- TDEFL_PUT_BITS(0, 2);
- if (d->m_bits_in) {
- TDEFL_PUT_BITS(0, 8 - d->m_bits_in);
- }
- for (i = 2; i; --i, d->m_total_lz_bytes ^= 0xFFFF) {
- TDEFL_PUT_BITS(d->m_total_lz_bytes & 0xFFFF, 16);
- }
- for (i = 0; i < d->m_total_lz_bytes; ++i) {
- TDEFL_PUT_BITS(
- d->m_dict[(d->m_lz_code_buf_dict_pos + i) & TDEFL_LZ_DICT_SIZE_MASK],
- 8);
- }
- }
- // Check for the extremely unlikely (if not impossible) case of the compressed
- // block not fitting into the output buffer when using dynamic codes.
- else if (!comp_block_succeeded) {
- d->m_pOutput_buf = pSaved_output_buf;
- d->m_bit_buffer = saved_bit_buf, d->m_bits_in = saved_bits_in;
- tdefl_compress_block(d, MZ_TRUE);
- }
-
- if (flush) {
- if (flush == TDEFL_FINISH) {
- if (d->m_bits_in) {
- TDEFL_PUT_BITS(0, 8 - d->m_bits_in);
- }
- if (d->m_flags & TDEFL_WRITE_ZLIB_HEADER) {
- mz_uint i, a = d->m_adler32;
- for (i = 0; i < 4; i++) {
- TDEFL_PUT_BITS((a >> 24) & 0xFF, 8);
- a <<= 8;
- }
- }
- } else {
- mz_uint i, z = 0;
- TDEFL_PUT_BITS(0, 3);
- if (d->m_bits_in) {
- TDEFL_PUT_BITS(0, 8 - d->m_bits_in);
- }
- for (i = 2; i; --i, z ^= 0xFFFF) {
- TDEFL_PUT_BITS(z & 0xFFFF, 16);
- }
- }
- }
-
- MZ_ASSERT(d->m_pOutput_buf < d->m_pOutput_buf_end);
-
- memset(&d->m_huff_count[0][0], 0,
- sizeof(d->m_huff_count[0][0]) * TDEFL_MAX_HUFF_SYMBOLS_0);
- memset(&d->m_huff_count[1][0], 0,
- sizeof(d->m_huff_count[1][0]) * TDEFL_MAX_HUFF_SYMBOLS_1);
-
- d->m_pLZ_code_buf = d->m_lz_code_buf + 1;
- d->m_pLZ_flags = d->m_lz_code_buf;
- d->m_num_flags_left = 8;
- d->m_lz_code_buf_dict_pos += d->m_total_lz_bytes;
- d->m_total_lz_bytes = 0;
- d->m_block_index++;
-
- if ((n = (int)(d->m_pOutput_buf - pOutput_buf_start)) != 0) {
- if (d->m_pPut_buf_func) {
- *d->m_pIn_buf_size = d->m_pSrc - (const mz_uint8 *)d->m_pIn_buf;
- if (!(*d->m_pPut_buf_func)(d->m_output_buf, n, d->m_pPut_buf_user))
- return (d->m_prev_return_status = TDEFL_STATUS_PUT_BUF_FAILED);
- } else if (pOutput_buf_start == d->m_output_buf) {
- int bytes_to_copy = (int)MZ_MIN(
- (size_t)n, (size_t)(*d->m_pOut_buf_size - d->m_out_buf_ofs));
- memcpy((mz_uint8 *)d->m_pOut_buf + d->m_out_buf_ofs, d->m_output_buf,
- bytes_to_copy);
- d->m_out_buf_ofs += bytes_to_copy;
- if ((n -= bytes_to_copy) != 0) {
- d->m_output_flush_ofs = bytes_to_copy;
- d->m_output_flush_remaining = n;
- }
- } else {
- d->m_out_buf_ofs += n;
- }
- }
-
- return d->m_output_flush_remaining;
-}
-
-#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES
-#define TDEFL_READ_UNALIGNED_WORD(p) *(const mz_uint16 *)(p)
-static MZ_FORCEINLINE void tdefl_find_match(
- tdefl_compressor *d, mz_uint lookahead_pos, mz_uint max_dist,
- mz_uint max_match_len, mz_uint *pMatch_dist, mz_uint *pMatch_len) {
- mz_uint dist, pos = lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK,
- match_len = *pMatch_len, probe_pos = pos, next_probe_pos,
- probe_len;
- mz_uint num_probes_left = d->m_max_probes[match_len >= 32];
- const mz_uint16 *s = (const mz_uint16 *)(d->m_dict + pos), *p, *q;
- mz_uint16 c01 = TDEFL_READ_UNALIGNED_WORD(&d->m_dict[pos + match_len - 1]),
- s01 = TDEFL_READ_UNALIGNED_WORD(s);
- MZ_ASSERT(max_match_len <= TDEFL_MAX_MATCH_LEN);
- if (max_match_len <= match_len) return;
- for (;;) {
- for (;;) {
- if (--num_probes_left == 0) return;
-#define TDEFL_PROBE \
- next_probe_pos = d->m_next[probe_pos]; \
- if ((!next_probe_pos) || \
- ((dist = (mz_uint16)(lookahead_pos - next_probe_pos)) > max_dist)) \
- return; \
- probe_pos = next_probe_pos & TDEFL_LZ_DICT_SIZE_MASK; \
- if (TDEFL_READ_UNALIGNED_WORD(&d->m_dict[probe_pos + match_len - 1]) == c01) \
- break;
- TDEFL_PROBE;
- TDEFL_PROBE;
- TDEFL_PROBE;
- }
- if (!dist) break;
- q = (const mz_uint16 *)(d->m_dict + probe_pos);
- if (TDEFL_READ_UNALIGNED_WORD(q) != s01) continue;
- p = s;
- probe_len = 32;
- do {
- } while (
- (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) &&
- (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) &&
- (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) &&
- (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) &&
- (--probe_len > 0));
- if (!probe_len) {
- *pMatch_dist = dist;
- *pMatch_len = MZ_MIN(max_match_len, TDEFL_MAX_MATCH_LEN);
- break;
- } else if ((probe_len = ((mz_uint)(p - s) * 2) +
- (mz_uint)(*(const mz_uint8 *)p ==
- *(const mz_uint8 *)q)) > match_len) {
- *pMatch_dist = dist;
- if ((*pMatch_len = match_len = MZ_MIN(max_match_len, probe_len)) ==
- max_match_len)
- break;
- c01 = TDEFL_READ_UNALIGNED_WORD(&d->m_dict[pos + match_len - 1]);
- }
- }
-}
-#else
-static MZ_FORCEINLINE void tdefl_find_match(
- tdefl_compressor *d, mz_uint lookahead_pos, mz_uint max_dist,
- mz_uint max_match_len, mz_uint *pMatch_dist, mz_uint *pMatch_len) {
- mz_uint dist, pos = lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK,
- match_len = *pMatch_len, probe_pos = pos, next_probe_pos,
- probe_len;
- mz_uint num_probes_left = d->m_max_probes[match_len >= 32];
- const mz_uint8 *s = d->m_dict + pos, *p, *q;
- mz_uint8 c0 = d->m_dict[pos + match_len], c1 = d->m_dict[pos + match_len - 1];
- MZ_ASSERT(max_match_len <= TDEFL_MAX_MATCH_LEN);
- if (max_match_len <= match_len) return;
- for (;;) {
- for (;;) {
- if (--num_probes_left == 0) return;
-#define TDEFL_PROBE \
- next_probe_pos = d->m_next[probe_pos]; \
- if ((!next_probe_pos) || \
- ((dist = (mz_uint16)(lookahead_pos - next_probe_pos)) > max_dist)) \
- return; \
- probe_pos = next_probe_pos & TDEFL_LZ_DICT_SIZE_MASK; \
- if ((d->m_dict[probe_pos + match_len] == c0) && \
- (d->m_dict[probe_pos + match_len - 1] == c1)) \
- break;
- TDEFL_PROBE;
- TDEFL_PROBE;
- TDEFL_PROBE;
- }
- if (!dist) break;
- p = s;
- q = d->m_dict + probe_pos;
- for (probe_len = 0; probe_len < max_match_len; probe_len++)
- if (*p++ != *q++) break;
- if (probe_len > match_len) {
- *pMatch_dist = dist;
- if ((*pMatch_len = match_len = probe_len) == max_match_len) return;
- c0 = d->m_dict[pos + match_len];
- c1 = d->m_dict[pos + match_len - 1];
- }
- }
-}
-#endif // #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES
-
-#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN
-static mz_bool tdefl_compress_fast(tdefl_compressor *d) {
- // Faster, minimally featured LZRW1-style match+parse loop with better
- // register utilization. Intended for applications where raw throughput is
- // valued more highly than ratio.
- mz_uint lookahead_pos = d->m_lookahead_pos,
- lookahead_size = d->m_lookahead_size, dict_size = d->m_dict_size,
- total_lz_bytes = d->m_total_lz_bytes,
- num_flags_left = d->m_num_flags_left;
- mz_uint8 *pLZ_code_buf = d->m_pLZ_code_buf, *pLZ_flags = d->m_pLZ_flags;
- mz_uint cur_pos = lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK;
-
- while ((d->m_src_buf_left) || ((d->m_flush) && (lookahead_size))) {
- const mz_uint TDEFL_COMP_FAST_LOOKAHEAD_SIZE = 4096;
- mz_uint dst_pos =
- (lookahead_pos + lookahead_size) & TDEFL_LZ_DICT_SIZE_MASK;
- mz_uint num_bytes_to_process = (mz_uint)MZ_MIN(
- d->m_src_buf_left, TDEFL_COMP_FAST_LOOKAHEAD_SIZE - lookahead_size);
- d->m_src_buf_left -= num_bytes_to_process;
- lookahead_size += num_bytes_to_process;
-
- while (num_bytes_to_process) {
- mz_uint32 n = MZ_MIN(TDEFL_LZ_DICT_SIZE - dst_pos, num_bytes_to_process);
- memcpy(d->m_dict + dst_pos, d->m_pSrc, n);
- if (dst_pos < (TDEFL_MAX_MATCH_LEN - 1))
- memcpy(d->m_dict + TDEFL_LZ_DICT_SIZE + dst_pos, d->m_pSrc,
- MZ_MIN(n, (TDEFL_MAX_MATCH_LEN - 1) - dst_pos));
- d->m_pSrc += n;
- dst_pos = (dst_pos + n) & TDEFL_LZ_DICT_SIZE_MASK;
- num_bytes_to_process -= n;
- }
-
- dict_size = MZ_MIN(TDEFL_LZ_DICT_SIZE - lookahead_size, dict_size);
- if ((!d->m_flush) && (lookahead_size < TDEFL_COMP_FAST_LOOKAHEAD_SIZE))
- break;
-
- while (lookahead_size >= 4) {
- mz_uint cur_match_dist, cur_match_len = 1;
- mz_uint8 *pCur_dict = d->m_dict + cur_pos;
- mz_uint first_trigram = (*(const mz_uint32 *)pCur_dict) & 0xFFFFFF;
- mz_uint hash =
- (first_trigram ^ (first_trigram >> (24 - (TDEFL_LZ_HASH_BITS - 8)))) &
- TDEFL_LEVEL1_HASH_SIZE_MASK;
- mz_uint probe_pos = d->m_hash[hash];
- d->m_hash[hash] = (mz_uint16)lookahead_pos;
-
- if (((cur_match_dist = (mz_uint16)(lookahead_pos - probe_pos)) <=
- dict_size) &&
- ((*(const mz_uint32 *)(d->m_dict +
- (probe_pos &= TDEFL_LZ_DICT_SIZE_MASK)) &
- 0xFFFFFF) == first_trigram)) {
- const mz_uint16 *p = (const mz_uint16 *)pCur_dict;
- const mz_uint16 *q = (const mz_uint16 *)(d->m_dict + probe_pos);
- mz_uint32 probe_len = 32;
- do {
- } while ((TDEFL_READ_UNALIGNED_WORD(++p) ==
- TDEFL_READ_UNALIGNED_WORD(++q)) &&
- (TDEFL_READ_UNALIGNED_WORD(++p) ==
- TDEFL_READ_UNALIGNED_WORD(++q)) &&
- (TDEFL_READ_UNALIGNED_WORD(++p) ==
- TDEFL_READ_UNALIGNED_WORD(++q)) &&
- (TDEFL_READ_UNALIGNED_WORD(++p) ==
- TDEFL_READ_UNALIGNED_WORD(++q)) &&
- (--probe_len > 0));
- cur_match_len = ((mz_uint)(p - (const mz_uint16 *)pCur_dict) * 2) +
- (mz_uint)(*(const mz_uint8 *)p == *(const mz_uint8 *)q);
- if (!probe_len)
- cur_match_len = cur_match_dist ? TDEFL_MAX_MATCH_LEN : 0;
-
- if ((cur_match_len < TDEFL_MIN_MATCH_LEN) ||
- ((cur_match_len == TDEFL_MIN_MATCH_LEN) &&
- (cur_match_dist >= 8U * 1024U))) {
- cur_match_len = 1;
- *pLZ_code_buf++ = (mz_uint8)first_trigram;
- *pLZ_flags = (mz_uint8)(*pLZ_flags >> 1);
- d->m_huff_count[0][(mz_uint8)first_trigram]++;
- } else {
- mz_uint32 s0, s1;
- cur_match_len = MZ_MIN(cur_match_len, lookahead_size);
-
- MZ_ASSERT((cur_match_len >= TDEFL_MIN_MATCH_LEN) &&
- (cur_match_dist >= 1) &&
- (cur_match_dist <= TDEFL_LZ_DICT_SIZE));
-
- cur_match_dist--;
-
- pLZ_code_buf[0] = (mz_uint8)(cur_match_len - TDEFL_MIN_MATCH_LEN);
- *(mz_uint16 *)(&pLZ_code_buf[1]) = (mz_uint16)cur_match_dist;
- pLZ_code_buf += 3;
- *pLZ_flags = (mz_uint8)((*pLZ_flags >> 1) | 0x80);
-
- s0 = s_tdefl_small_dist_sym[cur_match_dist & 511];
- s1 = s_tdefl_large_dist_sym[cur_match_dist >> 8];
- d->m_huff_count[1][(cur_match_dist < 512) ? s0 : s1]++;
-
- d->m_huff_count[0][s_tdefl_len_sym[cur_match_len -
- TDEFL_MIN_MATCH_LEN]]++;
- }
- } else {
- *pLZ_code_buf++ = (mz_uint8)first_trigram;
- *pLZ_flags = (mz_uint8)(*pLZ_flags >> 1);
- d->m_huff_count[0][(mz_uint8)first_trigram]++;
- }
-
- if (--num_flags_left == 0) {
- num_flags_left = 8;
- pLZ_flags = pLZ_code_buf++;
- }
-
- total_lz_bytes += cur_match_len;
- lookahead_pos += cur_match_len;
- dict_size = MZ_MIN(dict_size + cur_match_len, TDEFL_LZ_DICT_SIZE);
- cur_pos = (cur_pos + cur_match_len) & TDEFL_LZ_DICT_SIZE_MASK;
- MZ_ASSERT(lookahead_size >= cur_match_len);
- lookahead_size -= cur_match_len;
-
- if (pLZ_code_buf > &d->m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE - 8]) {
- int n;
- d->m_lookahead_pos = lookahead_pos;
- d->m_lookahead_size = lookahead_size;
- d->m_dict_size = dict_size;
- d->m_total_lz_bytes = total_lz_bytes;
- d->m_pLZ_code_buf = pLZ_code_buf;
- d->m_pLZ_flags = pLZ_flags;
- d->m_num_flags_left = num_flags_left;
- if ((n = tdefl_flush_block(d, 0)) != 0)
- return (n < 0) ? MZ_FALSE : MZ_TRUE;
- total_lz_bytes = d->m_total_lz_bytes;
- pLZ_code_buf = d->m_pLZ_code_buf;
- pLZ_flags = d->m_pLZ_flags;
- num_flags_left = d->m_num_flags_left;
- }
- }
-
- while (lookahead_size) {
- mz_uint8 lit = d->m_dict[cur_pos];
-
- total_lz_bytes++;
- *pLZ_code_buf++ = lit;
- *pLZ_flags = (mz_uint8)(*pLZ_flags >> 1);
- if (--num_flags_left == 0) {
- num_flags_left = 8;
- pLZ_flags = pLZ_code_buf++;
- }
-
- d->m_huff_count[0][lit]++;
-
- lookahead_pos++;
- dict_size = MZ_MIN(dict_size + 1, TDEFL_LZ_DICT_SIZE);
- cur_pos = (cur_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK;
- lookahead_size--;
-
- if (pLZ_code_buf > &d->m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE - 8]) {
- int n;
- d->m_lookahead_pos = lookahead_pos;
- d->m_lookahead_size = lookahead_size;
- d->m_dict_size = dict_size;
- d->m_total_lz_bytes = total_lz_bytes;
- d->m_pLZ_code_buf = pLZ_code_buf;
- d->m_pLZ_flags = pLZ_flags;
- d->m_num_flags_left = num_flags_left;
- if ((n = tdefl_flush_block(d, 0)) != 0)
- return (n < 0) ? MZ_FALSE : MZ_TRUE;
- total_lz_bytes = d->m_total_lz_bytes;
- pLZ_code_buf = d->m_pLZ_code_buf;
- pLZ_flags = d->m_pLZ_flags;
- num_flags_left = d->m_num_flags_left;
- }
- }
- }
-
- d->m_lookahead_pos = lookahead_pos;
- d->m_lookahead_size = lookahead_size;
- d->m_dict_size = dict_size;
- d->m_total_lz_bytes = total_lz_bytes;
- d->m_pLZ_code_buf = pLZ_code_buf;
- d->m_pLZ_flags = pLZ_flags;
- d->m_num_flags_left = num_flags_left;
- return MZ_TRUE;
-}
-#endif // MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN
-
-static MZ_FORCEINLINE void tdefl_record_literal(tdefl_compressor *d,
- mz_uint8 lit) {
- d->m_total_lz_bytes++;
- *d->m_pLZ_code_buf++ = lit;
- *d->m_pLZ_flags = (mz_uint8)(*d->m_pLZ_flags >> 1);
- if (--d->m_num_flags_left == 0) {
- d->m_num_flags_left = 8;
- d->m_pLZ_flags = d->m_pLZ_code_buf++;
- }
- d->m_huff_count[0][lit]++;
-}
-
-static MZ_FORCEINLINE void tdefl_record_match(tdefl_compressor *d,
- mz_uint match_len,
- mz_uint match_dist) {
- mz_uint32 s0, s1;
-
- MZ_ASSERT((match_len >= TDEFL_MIN_MATCH_LEN) && (match_dist >= 1) &&
- (match_dist <= TDEFL_LZ_DICT_SIZE));
-
- d->m_total_lz_bytes += match_len;
-
- d->m_pLZ_code_buf[0] = (mz_uint8)(match_len - TDEFL_MIN_MATCH_LEN);
-
- match_dist -= 1;
- d->m_pLZ_code_buf[1] = (mz_uint8)(match_dist & 0xFF);
- d->m_pLZ_code_buf[2] = (mz_uint8)(match_dist >> 8);
- d->m_pLZ_code_buf += 3;
-
- *d->m_pLZ_flags = (mz_uint8)((*d->m_pLZ_flags >> 1) | 0x80);
- if (--d->m_num_flags_left == 0) {
- d->m_num_flags_left = 8;
- d->m_pLZ_flags = d->m_pLZ_code_buf++;
- }
-
- s0 = s_tdefl_small_dist_sym[match_dist & 511];
- s1 = s_tdefl_large_dist_sym[(match_dist >> 8) & 127];
- d->m_huff_count[1][(match_dist < 512) ? s0 : s1]++;
-
- if (match_len >= TDEFL_MIN_MATCH_LEN)
- d->m_huff_count[0][s_tdefl_len_sym[match_len - TDEFL_MIN_MATCH_LEN]]++;
-}
-
-static mz_bool tdefl_compress_normal(tdefl_compressor *d) {
- const mz_uint8 *pSrc = d->m_pSrc;
- size_t src_buf_left = d->m_src_buf_left;
- tdefl_flush flush = d->m_flush;
-
- while ((src_buf_left) || ((flush) && (d->m_lookahead_size))) {
- mz_uint len_to_move, cur_match_dist, cur_match_len, cur_pos;
- // Update dictionary and hash chains. Keeps the lookahead size equal to
- // TDEFL_MAX_MATCH_LEN.
- if ((d->m_lookahead_size + d->m_dict_size) >= (TDEFL_MIN_MATCH_LEN - 1)) {
- mz_uint dst_pos = (d->m_lookahead_pos + d->m_lookahead_size) &
- TDEFL_LZ_DICT_SIZE_MASK,
- ins_pos = d->m_lookahead_pos + d->m_lookahead_size - 2;
- mz_uint hash = (d->m_dict[ins_pos & TDEFL_LZ_DICT_SIZE_MASK]
- << TDEFL_LZ_HASH_SHIFT) ^
- d->m_dict[(ins_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK];
- mz_uint num_bytes_to_process = (mz_uint)MZ_MIN(
- src_buf_left, TDEFL_MAX_MATCH_LEN - d->m_lookahead_size);
- const mz_uint8 *pSrc_end = pSrc + num_bytes_to_process;
- src_buf_left -= num_bytes_to_process;
- d->m_lookahead_size += num_bytes_to_process;
- while (pSrc != pSrc_end) {
- mz_uint8 c = *pSrc++;
- d->m_dict[dst_pos] = c;
- if (dst_pos < (TDEFL_MAX_MATCH_LEN - 1))
- d->m_dict[TDEFL_LZ_DICT_SIZE + dst_pos] = c;
- hash = ((hash << TDEFL_LZ_HASH_SHIFT) ^ c) & (TDEFL_LZ_HASH_SIZE - 1);
- d->m_next[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] = d->m_hash[hash];
- d->m_hash[hash] = (mz_uint16)(ins_pos);
- dst_pos = (dst_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK;
- ins_pos++;
- }
- } else {
- while ((src_buf_left) && (d->m_lookahead_size < TDEFL_MAX_MATCH_LEN)) {
- mz_uint8 c = *pSrc++;
- mz_uint dst_pos = (d->m_lookahead_pos + d->m_lookahead_size) &
- TDEFL_LZ_DICT_SIZE_MASK;
- src_buf_left--;
- d->m_dict[dst_pos] = c;
- if (dst_pos < (TDEFL_MAX_MATCH_LEN - 1))
- d->m_dict[TDEFL_LZ_DICT_SIZE + dst_pos] = c;
- if ((++d->m_lookahead_size + d->m_dict_size) >= TDEFL_MIN_MATCH_LEN) {
- mz_uint ins_pos = d->m_lookahead_pos + (d->m_lookahead_size - 1) - 2;
- mz_uint hash = ((d->m_dict[ins_pos & TDEFL_LZ_DICT_SIZE_MASK]
- << (TDEFL_LZ_HASH_SHIFT * 2)) ^
- (d->m_dict[(ins_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK]
- << TDEFL_LZ_HASH_SHIFT) ^
- c) &
- (TDEFL_LZ_HASH_SIZE - 1);
- d->m_next[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] = d->m_hash[hash];
- d->m_hash[hash] = (mz_uint16)(ins_pos);
- }
- }
- }
- d->m_dict_size =
- MZ_MIN(TDEFL_LZ_DICT_SIZE - d->m_lookahead_size, d->m_dict_size);
- if ((!flush) && (d->m_lookahead_size < TDEFL_MAX_MATCH_LEN)) break;
-
- // Simple lazy/greedy parsing state machine.
- len_to_move = 1;
- cur_match_dist = 0;
- cur_match_len =
- d->m_saved_match_len ? d->m_saved_match_len : (TDEFL_MIN_MATCH_LEN - 1);
- cur_pos = d->m_lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK;
- if (d->m_flags & (TDEFL_RLE_MATCHES | TDEFL_FORCE_ALL_RAW_BLOCKS)) {
- if ((d->m_dict_size) && (!(d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS))) {
- mz_uint8 c = d->m_dict[(cur_pos - 1) & TDEFL_LZ_DICT_SIZE_MASK];
- cur_match_len = 0;
- while (cur_match_len < d->m_lookahead_size) {
- if (d->m_dict[cur_pos + cur_match_len] != c) break;
- cur_match_len++;
- }
- if (cur_match_len < TDEFL_MIN_MATCH_LEN)
- cur_match_len = 0;
- else
- cur_match_dist = 1;
- }
- } else {
- tdefl_find_match(d, d->m_lookahead_pos, d->m_dict_size,
- d->m_lookahead_size, &cur_match_dist, &cur_match_len);
- }
- if (((cur_match_len == TDEFL_MIN_MATCH_LEN) &&
- (cur_match_dist >= 8U * 1024U)) ||
- (cur_pos == cur_match_dist) ||
- ((d->m_flags & TDEFL_FILTER_MATCHES) && (cur_match_len <= 5))) {
- cur_match_dist = cur_match_len = 0;
- }
- if (d->m_saved_match_len) {
- if (cur_match_len > d->m_saved_match_len) {
- tdefl_record_literal(d, (mz_uint8)d->m_saved_lit);
- if (cur_match_len >= 128) {
- tdefl_record_match(d, cur_match_len, cur_match_dist);
- d->m_saved_match_len = 0;
- len_to_move = cur_match_len;
- } else {
- d->m_saved_lit = d->m_dict[cur_pos];
- d->m_saved_match_dist = cur_match_dist;
- d->m_saved_match_len = cur_match_len;
- }
- } else {
- tdefl_record_match(d, d->m_saved_match_len, d->m_saved_match_dist);
- len_to_move = d->m_saved_match_len - 1;
- d->m_saved_match_len = 0;
- }
- } else if (!cur_match_dist)
- tdefl_record_literal(d,
- d->m_dict[MZ_MIN(cur_pos, sizeof(d->m_dict) - 1)]);
- else if ((d->m_greedy_parsing) || (d->m_flags & TDEFL_RLE_MATCHES) ||
- (cur_match_len >= 128)) {
- tdefl_record_match(d, cur_match_len, cur_match_dist);
- len_to_move = cur_match_len;
- } else {
- d->m_saved_lit = d->m_dict[MZ_MIN(cur_pos, sizeof(d->m_dict) - 1)];
- d->m_saved_match_dist = cur_match_dist;
- d->m_saved_match_len = cur_match_len;
- }
- // Move the lookahead forward by len_to_move bytes.
- d->m_lookahead_pos += len_to_move;
- MZ_ASSERT(d->m_lookahead_size >= len_to_move);
- d->m_lookahead_size -= len_to_move;
- d->m_dict_size =
- MZ_MIN(d->m_dict_size + len_to_move, (mz_uint)TDEFL_LZ_DICT_SIZE);
- // Check if it's time to flush the current LZ codes to the internal output
- // buffer.
- if ((d->m_pLZ_code_buf > &d->m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE - 8]) ||
- ((d->m_total_lz_bytes > 31 * 1024) &&
- (((((mz_uint)(d->m_pLZ_code_buf - d->m_lz_code_buf) * 115) >> 7) >=
- d->m_total_lz_bytes) ||
- (d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS)))) {
- int n;
- d->m_pSrc = pSrc;
- d->m_src_buf_left = src_buf_left;
- if ((n = tdefl_flush_block(d, 0)) != 0)
- return (n < 0) ? MZ_FALSE : MZ_TRUE;
- }
- }
-
- d->m_pSrc = pSrc;
- d->m_src_buf_left = src_buf_left;
- return MZ_TRUE;
-}
-
-static tdefl_status tdefl_flush_output_buffer(tdefl_compressor *d) {
- if (d->m_pIn_buf_size) {
- *d->m_pIn_buf_size = d->m_pSrc - (const mz_uint8 *)d->m_pIn_buf;
- }
-
- if (d->m_pOut_buf_size) {
- size_t n = MZ_MIN(*d->m_pOut_buf_size - d->m_out_buf_ofs,
- d->m_output_flush_remaining);
- memcpy((mz_uint8 *)d->m_pOut_buf + d->m_out_buf_ofs,
- d->m_output_buf + d->m_output_flush_ofs, n);
- d->m_output_flush_ofs += (mz_uint)n;
- d->m_output_flush_remaining -= (mz_uint)n;
- d->m_out_buf_ofs += n;
-
- *d->m_pOut_buf_size = d->m_out_buf_ofs;
- }
-
- return (d->m_finished && !d->m_output_flush_remaining) ? TDEFL_STATUS_DONE
- : TDEFL_STATUS_OKAY;
-}
-
-tdefl_status tdefl_compress(tdefl_compressor *d, const void *pIn_buf,
- size_t *pIn_buf_size, void *pOut_buf,
- size_t *pOut_buf_size, tdefl_flush flush) {
- if (!d) {
- if (pIn_buf_size) *pIn_buf_size = 0;
- if (pOut_buf_size) *pOut_buf_size = 0;
- return TDEFL_STATUS_BAD_PARAM;
- }
-
- d->m_pIn_buf = pIn_buf;
- d->m_pIn_buf_size = pIn_buf_size;
- d->m_pOut_buf = pOut_buf;
- d->m_pOut_buf_size = pOut_buf_size;
- d->m_pSrc = (const mz_uint8 *)(pIn_buf);
- d->m_src_buf_left = pIn_buf_size ? *pIn_buf_size : 0;
- d->m_out_buf_ofs = 0;
- d->m_flush = flush;
-
- if (((d->m_pPut_buf_func != NULL) ==
- ((pOut_buf != NULL) || (pOut_buf_size != NULL))) ||
- (d->m_prev_return_status != TDEFL_STATUS_OKAY) ||
- (d->m_wants_to_finish && (flush != TDEFL_FINISH)) ||
- (pIn_buf_size && *pIn_buf_size && !pIn_buf) ||
- (pOut_buf_size && *pOut_buf_size && !pOut_buf)) {
- if (pIn_buf_size) *pIn_buf_size = 0;
- if (pOut_buf_size) *pOut_buf_size = 0;
- return (d->m_prev_return_status = TDEFL_STATUS_BAD_PARAM);
- }
- d->m_wants_to_finish |= (flush == TDEFL_FINISH);
-
- if ((d->m_output_flush_remaining) || (d->m_finished))
- return (d->m_prev_return_status = tdefl_flush_output_buffer(d));
-
-#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN
- if (((d->m_flags & TDEFL_MAX_PROBES_MASK) == 1) &&
- ((d->m_flags & TDEFL_GREEDY_PARSING_FLAG) != 0) &&
- ((d->m_flags & (TDEFL_FILTER_MATCHES | TDEFL_FORCE_ALL_RAW_BLOCKS |
- TDEFL_RLE_MATCHES)) == 0)) {
- if (!tdefl_compress_fast(d)) return d->m_prev_return_status;
- } else
-#endif // #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN
- {
- if (!tdefl_compress_normal(d)) return d->m_prev_return_status;
- }
-
- if ((d->m_flags & (TDEFL_WRITE_ZLIB_HEADER | TDEFL_COMPUTE_ADLER32)) &&
- (pIn_buf))
- d->m_adler32 =
- (mz_uint32)mz_adler32(d->m_adler32, (const mz_uint8 *)pIn_buf,
- d->m_pSrc - (const mz_uint8 *)pIn_buf);
-
- if ((flush) && (!d->m_lookahead_size) && (!d->m_src_buf_left) &&
- (!d->m_output_flush_remaining)) {
- if (tdefl_flush_block(d, flush) < 0) return d->m_prev_return_status;
- d->m_finished = (flush == TDEFL_FINISH);
- if (flush == TDEFL_FULL_FLUSH) {
- MZ_CLEAR_OBJ(d->m_hash);
- MZ_CLEAR_OBJ(d->m_next);
- d->m_dict_size = 0;
- }
- }
-
- return (d->m_prev_return_status = tdefl_flush_output_buffer(d));
-}
-
-tdefl_status tdefl_compress_buffer(tdefl_compressor *d, const void *pIn_buf,
- size_t in_buf_size, tdefl_flush flush) {
- MZ_ASSERT(d->m_pPut_buf_func);
- return tdefl_compress(d, pIn_buf, &in_buf_size, NULL, NULL, flush);
-}
-
-tdefl_status tdefl_init(tdefl_compressor *d,
- tdefl_put_buf_func_ptr pPut_buf_func,
- void *pPut_buf_user, int flags) {
- d->m_pPut_buf_func = pPut_buf_func;
- d->m_pPut_buf_user = pPut_buf_user;
- d->m_flags = (mz_uint)(flags);
- d->m_max_probes[0] = 1 + ((flags & 0xFFF) + 2) / 3;
- d->m_greedy_parsing = (flags & TDEFL_GREEDY_PARSING_FLAG) != 0;
- d->m_max_probes[1] = 1 + (((flags & 0xFFF) >> 2) + 2) / 3;
- if (!(flags & TDEFL_NONDETERMINISTIC_PARSING_FLAG)) MZ_CLEAR_OBJ(d->m_hash);
- d->m_lookahead_pos = d->m_lookahead_size = d->m_dict_size =
- d->m_total_lz_bytes = d->m_lz_code_buf_dict_pos = d->m_bits_in = 0;
- d->m_output_flush_ofs = d->m_output_flush_remaining = d->m_finished =
- d->m_block_index = d->m_bit_buffer = d->m_wants_to_finish = 0;
- d->m_pLZ_code_buf = d->m_lz_code_buf + 1;
- d->m_pLZ_flags = d->m_lz_code_buf;
- d->m_num_flags_left = 8;
- d->m_pOutput_buf = d->m_output_buf;
- d->m_pOutput_buf_end = d->m_output_buf;
- d->m_prev_return_status = TDEFL_STATUS_OKAY;
- d->m_saved_match_dist = d->m_saved_match_len = d->m_saved_lit = 0;
- d->m_adler32 = 1;
- d->m_pIn_buf = NULL;
- d->m_pOut_buf = NULL;
- d->m_pIn_buf_size = NULL;
- d->m_pOut_buf_size = NULL;
- d->m_flush = TDEFL_NO_FLUSH;
- d->m_pSrc = NULL;
- d->m_src_buf_left = 0;
- d->m_out_buf_ofs = 0;
- memset(&d->m_huff_count[0][0], 0,
- sizeof(d->m_huff_count[0][0]) * TDEFL_MAX_HUFF_SYMBOLS_0);
- memset(&d->m_huff_count[1][0], 0,
- sizeof(d->m_huff_count[1][0]) * TDEFL_MAX_HUFF_SYMBOLS_1);
- return TDEFL_STATUS_OKAY;
-}
-
-tdefl_status tdefl_get_prev_return_status(tdefl_compressor *d) {
- return d->m_prev_return_status;
-}
-
-mz_uint32 tdefl_get_adler32(tdefl_compressor *d) { return d->m_adler32; }
-
-mz_bool tdefl_compress_mem_to_output(const void *pBuf, size_t buf_len,
- tdefl_put_buf_func_ptr pPut_buf_func,
- void *pPut_buf_user, int flags) {
- tdefl_compressor *pComp;
- mz_bool succeeded;
- if (((buf_len) && (!pBuf)) || (!pPut_buf_func)) return MZ_FALSE;
- pComp = (tdefl_compressor *)MZ_MALLOC(sizeof(tdefl_compressor));
- if (!pComp) return MZ_FALSE;
- succeeded = (tdefl_init(pComp, pPut_buf_func, pPut_buf_user, flags) ==
- TDEFL_STATUS_OKAY);
- succeeded =
- succeeded && (tdefl_compress_buffer(pComp, pBuf, buf_len, TDEFL_FINISH) ==
- TDEFL_STATUS_DONE);
- MZ_FREE(pComp);
- return succeeded;
-}
-
-typedef struct {
- size_t m_size, m_capacity;
- mz_uint8 *m_pBuf;
- mz_bool m_expandable;
-} tdefl_output_buffer;
-
-static mz_bool tdefl_output_buffer_putter(const void *pBuf, int len,
- void *pUser) {
- tdefl_output_buffer *p = (tdefl_output_buffer *)pUser;
- size_t new_size = p->m_size + len;
- if (new_size > p->m_capacity) {
- size_t new_capacity = p->m_capacity;
- mz_uint8 *pNew_buf;
- if (!p->m_expandable) return MZ_FALSE;
- do {
- new_capacity = MZ_MAX(128U, new_capacity << 1U);
- } while (new_size > new_capacity);
- pNew_buf = (mz_uint8 *)MZ_REALLOC(p->m_pBuf, new_capacity);
- if (!pNew_buf) return MZ_FALSE;
- p->m_pBuf = pNew_buf;
- p->m_capacity = new_capacity;
- }
- memcpy((mz_uint8 *)p->m_pBuf + p->m_size, pBuf, len);
- p->m_size = new_size;
- return MZ_TRUE;
-}
-
-void *tdefl_compress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len,
- size_t *pOut_len, int flags) {
- tdefl_output_buffer out_buf;
- MZ_CLEAR_OBJ(out_buf);
- if (!pOut_len)
- return MZ_FALSE;
- else
- *pOut_len = 0;
- out_buf.m_expandable = MZ_TRUE;
- if (!tdefl_compress_mem_to_output(
- pSrc_buf, src_buf_len, tdefl_output_buffer_putter, &out_buf, flags))
- return NULL;
- *pOut_len = out_buf.m_size;
- return out_buf.m_pBuf;
-}
-
-size_t tdefl_compress_mem_to_mem(void *pOut_buf, size_t out_buf_len,
- const void *pSrc_buf, size_t src_buf_len,
- int flags) {
- tdefl_output_buffer out_buf;
- MZ_CLEAR_OBJ(out_buf);
- if (!pOut_buf) return 0;
- out_buf.m_pBuf = (mz_uint8 *)pOut_buf;
- out_buf.m_capacity = out_buf_len;
- if (!tdefl_compress_mem_to_output(
- pSrc_buf, src_buf_len, tdefl_output_buffer_putter, &out_buf, flags))
- return 0;
- return out_buf.m_size;
-}
-
-#ifndef MINIZ_NO_ZLIB_APIS
-static const mz_uint s_tdefl_num_probes[11] = {0, 1, 6, 32, 16, 32,
- 128, 256, 512, 768, 1500};
-
-// level may actually range from [0,10] (10 is a "hidden" max level, where we
-// want a bit more compression and it's fine if throughput to fall off a cliff
-// on some files).
-mz_uint tdefl_create_comp_flags_from_zip_params(int level, int window_bits,
- int strategy) {
- mz_uint comp_flags =
- s_tdefl_num_probes[(level >= 0) ? MZ_MIN(10, level) : MZ_DEFAULT_LEVEL] |
- ((level <= 3) ? TDEFL_GREEDY_PARSING_FLAG : 0);
- if (window_bits > 0) comp_flags |= TDEFL_WRITE_ZLIB_HEADER;
-
- if (!level)
- comp_flags |= TDEFL_FORCE_ALL_RAW_BLOCKS;
- else if (strategy == MZ_FILTERED)
- comp_flags |= TDEFL_FILTER_MATCHES;
- else if (strategy == MZ_HUFFMAN_ONLY)
- comp_flags &= ~TDEFL_MAX_PROBES_MASK;
- else if (strategy == MZ_FIXED)
- comp_flags |= TDEFL_FORCE_ALL_STATIC_BLOCKS;
- else if (strategy == MZ_RLE)
- comp_flags |= TDEFL_RLE_MATCHES;
-
- return comp_flags;
-}
-#endif // MINIZ_NO_ZLIB_APIS
-
-#ifdef _MSC_VER
-#pragma warning(push)
-#pragma warning(disable : 4204) // nonstandard extension used : non-constant
- // aggregate initializer (also supported by GNU
- // C and C99, so no big deal)
-#pragma warning(disable : 4244) // 'initializing': conversion from '__int64' to
- // 'int', possible loss of data
-#pragma warning(disable : 4267) // 'argument': conversion from '__int64' to
- // 'int', possible loss of data
-#pragma warning(disable : 4996) // 'strdup': The POSIX name for this item is
- // deprecated. Instead, use the ISO C and C++
- // conformant name: _strdup.
-#endif
-
-// Simple PNG writer function by Alex Evans, 2011. Released into the public
-// domain: https://gist.github.com/908299, more context at
-// http://altdevblogaday.org/2011/04/06/a-smaller-jpg-encoder/.
-// This is actually a modification of Alex's original code so PNG files
-// generated by this function pass pngcheck.
-void *tdefl_write_image_to_png_file_in_memory_ex(const void *pImage, int w,
- int h, int num_chans,
- size_t *pLen_out,
- mz_uint level, mz_bool flip) {
- // Using a local copy of this array here in case MINIZ_NO_ZLIB_APIS was
- // defined.
- static const mz_uint s_tdefl_png_num_probes[11] = {
- 0, 1, 6, 32, 16, 32, 128, 256, 512, 768, 1500};
- tdefl_compressor *pComp =
- (tdefl_compressor *)MZ_MALLOC(sizeof(tdefl_compressor));
- tdefl_output_buffer out_buf;
- int i, bpl = w * num_chans, y, z;
- mz_uint32 c;
- *pLen_out = 0;
- if (!pComp) return NULL;
- MZ_CLEAR_OBJ(out_buf);
- out_buf.m_expandable = MZ_TRUE;
- out_buf.m_capacity = 57 + MZ_MAX(64, (1 + bpl) * h);
- if (NULL == (out_buf.m_pBuf = (mz_uint8 *)MZ_MALLOC(out_buf.m_capacity))) {
- MZ_FREE(pComp);
- return NULL;
- }
- // write dummy header
- for (z = 41; z; --z) tdefl_output_buffer_putter(&z, 1, &out_buf);
- // compress image data
- tdefl_init(
- pComp, tdefl_output_buffer_putter, &out_buf,
- s_tdefl_png_num_probes[MZ_MIN(10, level)] | TDEFL_WRITE_ZLIB_HEADER);
- for (y = 0; y < h; ++y) {
- tdefl_compress_buffer(pComp, &z, 1, TDEFL_NO_FLUSH);
- tdefl_compress_buffer(pComp,
- (mz_uint8 *)pImage + (flip ? (h - 1 - y) : y) * bpl,
- bpl, TDEFL_NO_FLUSH);
- }
- if (tdefl_compress_buffer(pComp, NULL, 0, TDEFL_FINISH) !=
- TDEFL_STATUS_DONE) {
- MZ_FREE(pComp);
- MZ_FREE(out_buf.m_pBuf);
- return NULL;
- }
- // write real header
- *pLen_out = out_buf.m_size - 41;
- {
- static const mz_uint8 chans[] = {0x00, 0x00, 0x04, 0x02, 0x06};
- mz_uint8 pnghdr[41] = {0x89,
- 0x50,
- 0x4e,
- 0x47,
- 0x0d,
- 0x0a,
- 0x1a,
- 0x0a,
- 0x00,
- 0x00,
- 0x00,
- 0x0d,
- 0x49,
- 0x48,
- 0x44,
- 0x52,
- 0,
- 0,
- (mz_uint8)(w >> 8),
- (mz_uint8)w,
- 0,
- 0,
- (mz_uint8)(h >> 8),
- (mz_uint8)h,
- 8,
- chans[num_chans],
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- 0,
- (mz_uint8)(*pLen_out >> 24),
- (mz_uint8)(*pLen_out >> 16),
- (mz_uint8)(*pLen_out >> 8),
- (mz_uint8)*pLen_out,
- 0x49,
- 0x44,
- 0x41,
- 0x54};
- c = (mz_uint32)mz_crc32(MZ_CRC32_INIT, pnghdr + 12, 17);
- for (i = 0; i < 4; ++i, c <<= 8)
- ((mz_uint8 *)(pnghdr + 29))[i] = (mz_uint8)(c >> 24);
- memcpy(out_buf.m_pBuf, pnghdr, 41);
- }
- // write footer (IDAT CRC-32, followed by IEND chunk)
- if (!tdefl_output_buffer_putter(
- "\0\0\0\0\0\0\0\0\x49\x45\x4e\x44\xae\x42\x60\x82", 16, &out_buf)) {
- *pLen_out = 0;
- MZ_FREE(pComp);
- MZ_FREE(out_buf.m_pBuf);
- return NULL;
- }
- c = (mz_uint32)mz_crc32(MZ_CRC32_INIT, out_buf.m_pBuf + 41 - 4,
- *pLen_out + 4);
- for (i = 0; i < 4; ++i, c <<= 8)
- (out_buf.m_pBuf + out_buf.m_size - 16)[i] = (mz_uint8)(c >> 24);
- // compute final size of file, grab compressed data buffer and return
- *pLen_out += 57;
- MZ_FREE(pComp);
- return out_buf.m_pBuf;
-}
-void *tdefl_write_image_to_png_file_in_memory(const void *pImage, int w, int h,
- int num_chans, size_t *pLen_out) {
- // Level 6 corresponds to TDEFL_DEFAULT_MAX_PROBES or MZ_DEFAULT_LEVEL (but we
- // can't depend on MZ_DEFAULT_LEVEL being available in case the zlib API's
- // where #defined out)
- return tdefl_write_image_to_png_file_in_memory_ex(pImage, w, h, num_chans,
- pLen_out, 6, MZ_FALSE);
-}
-
-// ------------------- .ZIP archive reading
-
-#ifndef MINIZ_NO_ARCHIVE_APIS
-#error "No arvhive APIs"
-
-#ifdef MINIZ_NO_STDIO
-#define MZ_FILE void *
-#else
-#include <stdio.h>
-#include <sys/stat.h>
-
-#if defined(_MSC_VER) || defined(__MINGW64__)
-static FILE *mz_fopen(const char *pFilename, const char *pMode) {
- FILE *pFile = NULL;
- fopen_s(&pFile, pFilename, pMode);
- return pFile;
-}
-static FILE *mz_freopen(const char *pPath, const char *pMode, FILE *pStream) {
- FILE *pFile = NULL;
- if (freopen_s(&pFile, pPath, pMode, pStream)) return NULL;
- return pFile;
-}
-#ifndef MINIZ_NO_TIME
-#include <sys/utime.h>
-#endif
-#define MZ_FILE FILE
-#define MZ_FOPEN mz_fopen
-#define MZ_FCLOSE fclose
-#define MZ_FREAD fread
-#define MZ_FWRITE fwrite
-#define MZ_FTELL64 _ftelli64
-#define MZ_FSEEK64 _fseeki64
-#define MZ_FILE_STAT_STRUCT _stat
-#define MZ_FILE_STAT _stat
-#define MZ_FFLUSH fflush
-#define MZ_FREOPEN mz_freopen
-#define MZ_DELETE_FILE remove
-#elif defined(__MINGW32__)
-#ifndef MINIZ_NO_TIME
-#include <sys/utime.h>
-#endif
-#define MZ_FILE FILE
-#define MZ_FOPEN(f, m) fopen(f, m)
-#define MZ_FCLOSE fclose
-#define MZ_FREAD fread
-#define MZ_FWRITE fwrite
-#define MZ_FTELL64 ftello64
-#define MZ_FSEEK64 fseeko64
-#define MZ_FILE_STAT_STRUCT _stat
-#define MZ_FILE_STAT _stat
-#define MZ_FFLUSH fflush
-#define MZ_FREOPEN(f, m, s) freopen(f, m, s)
-#define MZ_DELETE_FILE remove
-#elif defined(__TINYC__)
-#ifndef MINIZ_NO_TIME
-#include <sys/utime.h>
-#endif
-#define MZ_FILE FILE
-#define MZ_FOPEN(f, m) fopen(f, m)
-#define MZ_FCLOSE fclose
-#define MZ_FREAD fread
-#define MZ_FWRITE fwrite
-#define MZ_FTELL64 ftell
-#define MZ_FSEEK64 fseek
-#define MZ_FILE_STAT_STRUCT stat
-#define MZ_FILE_STAT stat
-#define MZ_FFLUSH fflush
-#define MZ_FREOPEN(f, m, s) freopen(f, m, s)
-#define MZ_DELETE_FILE remove
-#elif defined(__GNUC__) && defined(_LARGEFILE64_SOURCE) && _LARGEFILE64_SOURCE
-#ifndef MINIZ_NO_TIME
-#include <utime.h>
-#endif
-#define MZ_FILE FILE
-#define MZ_FOPEN(f, m) fopen64(f, m)
-#define MZ_FCLOSE fclose
-#define MZ_FREAD fread
-#define MZ_FWRITE fwrite
-#define MZ_FTELL64 ftello64
-#define MZ_FSEEK64 fseeko64
-#define MZ_FILE_STAT_STRUCT stat64
-#define MZ_FILE_STAT stat64
-#define MZ_FFLUSH fflush
-#define MZ_FREOPEN(p, m, s) freopen64(p, m, s)
-#define MZ_DELETE_FILE remove
-#else
-#ifndef MINIZ_NO_TIME
-#include <utime.h>
-#endif
-#define MZ_FILE FILE
-#define MZ_FOPEN(f, m) fopen(f, m)
-#define MZ_FCLOSE fclose
-#define MZ_FREAD fread
-#define MZ_FWRITE fwrite
-#define MZ_FTELL64 ftello
-#define MZ_FSEEK64 fseeko
-#define MZ_FILE_STAT_STRUCT stat
-#define MZ_FILE_STAT stat
-#define MZ_FFLUSH fflush
-#define MZ_FREOPEN(f, m, s) freopen(f, m, s)
-#define MZ_DELETE_FILE remove
-#endif // #ifdef _MSC_VER
-#endif // #ifdef MINIZ_NO_STDIO
-
-#define MZ_TOLOWER(c) ((((c) >= 'A') && ((c) <= 'Z')) ? ((c) - 'A' + 'a') : (c))
-
-// Various ZIP archive enums. To completely avoid cross platform compiler
-// alignment and platform endian issues, miniz.c doesn't use structs for any of
-// this stuff.
-enum {
- // ZIP archive identifiers and record sizes
- MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG = 0x06054b50,
- MZ_ZIP_CENTRAL_DIR_HEADER_SIG = 0x02014b50,
- MZ_ZIP_LOCAL_DIR_HEADER_SIG = 0x04034b50,
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE = 30,
- MZ_ZIP_CENTRAL_DIR_HEADER_SIZE = 46,
- MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE = 22,
- // Central directory header record offsets
- MZ_ZIP_CDH_SIG_OFS = 0,
- MZ_ZIP_CDH_VERSION_MADE_BY_OFS = 4,
- MZ_ZIP_CDH_VERSION_NEEDED_OFS = 6,
- MZ_ZIP_CDH_BIT_FLAG_OFS = 8,
- MZ_ZIP_CDH_METHOD_OFS = 10,
- MZ_ZIP_CDH_FILE_TIME_OFS = 12,
- MZ_ZIP_CDH_FILE_DATE_OFS = 14,
- MZ_ZIP_CDH_CRC32_OFS = 16,
- MZ_ZIP_CDH_COMPRESSED_SIZE_OFS = 20,
- MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS = 24,
- MZ_ZIP_CDH_FILENAME_LEN_OFS = 28,
- MZ_ZIP_CDH_EXTRA_LEN_OFS = 30,
- MZ_ZIP_CDH_COMMENT_LEN_OFS = 32,
- MZ_ZIP_CDH_DISK_START_OFS = 34,
- MZ_ZIP_CDH_INTERNAL_ATTR_OFS = 36,
- MZ_ZIP_CDH_EXTERNAL_ATTR_OFS = 38,
- MZ_ZIP_CDH_LOCAL_HEADER_OFS = 42,
- // Local directory header offsets
- MZ_ZIP_LDH_SIG_OFS = 0,
- MZ_ZIP_LDH_VERSION_NEEDED_OFS = 4,
- MZ_ZIP_LDH_BIT_FLAG_OFS = 6,
- MZ_ZIP_LDH_METHOD_OFS = 8,
- MZ_ZIP_LDH_FILE_TIME_OFS = 10,
- MZ_ZIP_LDH_FILE_DATE_OFS = 12,
- MZ_ZIP_LDH_CRC32_OFS = 14,
- MZ_ZIP_LDH_COMPRESSED_SIZE_OFS = 18,
- MZ_ZIP_LDH_DECOMPRESSED_SIZE_OFS = 22,
- MZ_ZIP_LDH_FILENAME_LEN_OFS = 26,
- MZ_ZIP_LDH_EXTRA_LEN_OFS = 28,
- // End of central directory offsets
- MZ_ZIP_ECDH_SIG_OFS = 0,
- MZ_ZIP_ECDH_NUM_THIS_DISK_OFS = 4,
- MZ_ZIP_ECDH_NUM_DISK_CDIR_OFS = 6,
- MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS = 8,
- MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS = 10,
- MZ_ZIP_ECDH_CDIR_SIZE_OFS = 12,
- MZ_ZIP_ECDH_CDIR_OFS_OFS = 16,
- MZ_ZIP_ECDH_COMMENT_SIZE_OFS = 20,
-};
-
-typedef struct {
- void *m_p;
- size_t m_size, m_capacity;
- mz_uint m_element_size;
-} mz_zip_array;
-
-struct mz_zip_internal_state_tag {
- mz_zip_array m_central_dir;
- mz_zip_array m_central_dir_offsets;
- mz_zip_array m_sorted_central_dir_offsets;
- MZ_FILE *m_pFile;
- void *m_pMem;
- size_t m_mem_size;
- size_t m_mem_capacity;
-};
-
-#define MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(array_ptr, element_size) \
- (array_ptr)->m_element_size = element_size
-#define MZ_ZIP_ARRAY_ELEMENT(array_ptr, element_type, index) \
- ((element_type *)((array_ptr)->m_p))[index]
-
-static MZ_FORCEINLINE void mz_zip_array_clear(mz_zip_archive *pZip,
- mz_zip_array *pArray) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pArray->m_p);
- memset(pArray, 0, sizeof(mz_zip_array));
-}
-
-static mz_bool mz_zip_array_ensure_capacity(mz_zip_archive *pZip,
- mz_zip_array *pArray,
- size_t min_new_capacity,
- mz_uint growing) {
- void *pNew_p;
- size_t new_capacity = min_new_capacity;
- MZ_ASSERT(pArray->m_element_size);
- if (pArray->m_capacity >= min_new_capacity) return MZ_TRUE;
- if (growing) {
- new_capacity = MZ_MAX(1, pArray->m_capacity);
- while (new_capacity < min_new_capacity) new_capacity *= 2;
- }
- if (NULL == (pNew_p = pZip->m_pRealloc(pZip->m_pAlloc_opaque, pArray->m_p,
- pArray->m_element_size, new_capacity)))
- return MZ_FALSE;
- pArray->m_p = pNew_p;
- pArray->m_capacity = new_capacity;
- return MZ_TRUE;
-}
-
-static MZ_FORCEINLINE mz_bool mz_zip_array_reserve(mz_zip_archive *pZip,
- mz_zip_array *pArray,
- size_t new_capacity,
- mz_uint growing) {
- if (new_capacity > pArray->m_capacity) {
- if (!mz_zip_array_ensure_capacity(pZip, pArray, new_capacity, growing))
- return MZ_FALSE;
- }
- return MZ_TRUE;
-}
-
-static MZ_FORCEINLINE mz_bool mz_zip_array_resize(mz_zip_archive *pZip,
- mz_zip_array *pArray,
- size_t new_size,
- mz_uint growing) {
- if (new_size > pArray->m_capacity) {
- if (!mz_zip_array_ensure_capacity(pZip, pArray, new_size, growing))
- return MZ_FALSE;
- }
- pArray->m_size = new_size;
- return MZ_TRUE;
-}
-
-static MZ_FORCEINLINE mz_bool mz_zip_array_ensure_room(mz_zip_archive *pZip,
- mz_zip_array *pArray,
- size_t n) {
- return mz_zip_array_reserve(pZip, pArray, pArray->m_size + n, MZ_TRUE);
-}
-
-static MZ_FORCEINLINE mz_bool mz_zip_array_push_back(mz_zip_archive *pZip,
- mz_zip_array *pArray,
- const void *pElements,
- size_t n) {
- size_t orig_size = pArray->m_size;
- if (!mz_zip_array_resize(pZip, pArray, orig_size + n, MZ_TRUE))
- return MZ_FALSE;
- memcpy((mz_uint8 *)pArray->m_p + orig_size * pArray->m_element_size,
- pElements, n * pArray->m_element_size);
- return MZ_TRUE;
-}
-
-#ifndef MINIZ_NO_TIME
-static time_t mz_zip_dos_to_time_t(int dos_time, int dos_date) {
- struct tm tm;
- memset(&tm, 0, sizeof(tm));
- tm.tm_isdst = -1;
- tm.tm_year = ((dos_date >> 9) & 127) + 1980 - 1900;
- tm.tm_mon = ((dos_date >> 5) & 15) - 1;
- tm.tm_mday = dos_date & 31;
- tm.tm_hour = (dos_time >> 11) & 31;
- tm.tm_min = (dos_time >> 5) & 63;
- tm.tm_sec = (dos_time << 1) & 62;
- return mktime(&tm);
-}
-
-static void mz_zip_time_to_dos_time(time_t time, mz_uint16 *pDOS_time,
- mz_uint16 *pDOS_date) {
-#ifdef _MSC_VER
- struct tm tm_struct;
- struct tm *tm = &tm_struct;
- errno_t err = localtime_s(tm, &time);
- if (err) {
- *pDOS_date = 0;
- *pDOS_time = 0;
- return;
- }
-#else
- struct tm *tm = localtime(&time);
-#endif
- *pDOS_time = (mz_uint16)(((tm->tm_hour) << 11) + ((tm->tm_min) << 5) +
- ((tm->tm_sec) >> 1));
- *pDOS_date = (mz_uint16)(((tm->tm_year + 1900 - 1980) << 9) +
- ((tm->tm_mon + 1) << 5) + tm->tm_mday);
-}
-#endif
-
-#ifndef MINIZ_NO_STDIO
-static mz_bool mz_zip_get_file_modified_time(const char *pFilename,
- mz_uint16 *pDOS_time,
- mz_uint16 *pDOS_date) {
-#ifdef MINIZ_NO_TIME
- (void)pFilename;
- *pDOS_date = *pDOS_time = 0;
-#else
- struct MZ_FILE_STAT_STRUCT file_stat;
- // On Linux with x86 glibc, this call will fail on large files (>= 0x80000000
- // bytes) unless you compiled with _LARGEFILE64_SOURCE. Argh.
- if (MZ_FILE_STAT(pFilename, &file_stat) != 0) return MZ_FALSE;
- mz_zip_time_to_dos_time(file_stat.st_mtime, pDOS_time, pDOS_date);
-#endif // #ifdef MINIZ_NO_TIME
- return MZ_TRUE;
-}
-
-#ifndef MINIZ_NO_TIME
-static mz_bool mz_zip_set_file_times(const char *pFilename, time_t access_time,
- time_t modified_time) {
- struct utimbuf t;
- t.actime = access_time;
- t.modtime = modified_time;
- return !utime(pFilename, &t);
-}
-#endif // #ifndef MINIZ_NO_TIME
-#endif // #ifndef MINIZ_NO_STDIO
-
-static mz_bool mz_zip_reader_init_internal(mz_zip_archive *pZip,
- mz_uint32 flags) {
- (void)flags;
- if ((!pZip) || (pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_INVALID))
- return MZ_FALSE;
-
- if (!pZip->m_pAlloc) pZip->m_pAlloc = def_alloc_func;
- if (!pZip->m_pFree) pZip->m_pFree = def_free_func;
- if (!pZip->m_pRealloc) pZip->m_pRealloc = def_realloc_func;
-
- pZip->m_zip_mode = MZ_ZIP_MODE_READING;
- pZip->m_archive_size = 0;
- pZip->m_central_directory_file_ofs = 0;
- pZip->m_total_files = 0;
-
- if (NULL == (pZip->m_pState = (mz_zip_internal_state *)pZip->m_pAlloc(
- pZip->m_pAlloc_opaque, 1, sizeof(mz_zip_internal_state))))
- return MZ_FALSE;
- memset(pZip->m_pState, 0, sizeof(mz_zip_internal_state));
- MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_central_dir,
- sizeof(mz_uint8));
- MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_central_dir_offsets,
- sizeof(mz_uint32));
- MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_sorted_central_dir_offsets,
- sizeof(mz_uint32));
- return MZ_TRUE;
-}
-
-static MZ_FORCEINLINE mz_bool
-mz_zip_reader_filename_less(const mz_zip_array *pCentral_dir_array,
- const mz_zip_array *pCentral_dir_offsets,
- mz_uint l_index, mz_uint r_index) {
- const mz_uint8 *pL = &MZ_ZIP_ARRAY_ELEMENT(
- pCentral_dir_array, mz_uint8,
- MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_offsets, mz_uint32,
- l_index)),
- *pE;
- const mz_uint8 *pR = &MZ_ZIP_ARRAY_ELEMENT(
- pCentral_dir_array, mz_uint8,
- MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_offsets, mz_uint32, r_index));
- mz_uint l_len = MZ_READ_LE16(pL + MZ_ZIP_CDH_FILENAME_LEN_OFS),
- r_len = MZ_READ_LE16(pR + MZ_ZIP_CDH_FILENAME_LEN_OFS);
- mz_uint8 l = 0, r = 0;
- pL += MZ_ZIP_CENTRAL_DIR_HEADER_SIZE;
- pR += MZ_ZIP_CENTRAL_DIR_HEADER_SIZE;
- pE = pL + MZ_MIN(l_len, r_len);
- while (pL < pE) {
- if ((l = MZ_TOLOWER(*pL)) != (r = MZ_TOLOWER(*pR))) break;
- pL++;
- pR++;
- }
- return (pL == pE) ? (l_len < r_len) : (l < r);
-}
-
-#define MZ_SWAP_UINT32(a, b) \
- do { \
- mz_uint32 t = a; \
- a = b; \
- b = t; \
- } \
- MZ_MACRO_END
-
-// Heap sort of lowercased filenames, used to help accelerate plain central
-// directory searches by mz_zip_reader_locate_file(). (Could also use qsort(),
-// but it could allocate memory.)
-static void mz_zip_reader_sort_central_dir_offsets_by_filename(
- mz_zip_archive *pZip) {
- mz_zip_internal_state *pState = pZip->m_pState;
- const mz_zip_array *pCentral_dir_offsets = &pState->m_central_dir_offsets;
- const mz_zip_array *pCentral_dir = &pState->m_central_dir;
- mz_uint32 *pIndices = &MZ_ZIP_ARRAY_ELEMENT(
- &pState->m_sorted_central_dir_offsets, mz_uint32, 0);
- const int size = pZip->m_total_files;
- int start = (size - 2) >> 1, end;
- while (start >= 0) {
- int child, root = start;
- for (;;) {
- if ((child = (root << 1) + 1) >= size) break;
- child +=
- (((child + 1) < size) &&
- (mz_zip_reader_filename_less(pCentral_dir, pCentral_dir_offsets,
- pIndices[child], pIndices[child + 1])));
- if (!mz_zip_reader_filename_less(pCentral_dir, pCentral_dir_offsets,
- pIndices[root], pIndices[child]))
- break;
- MZ_SWAP_UINT32(pIndices[root], pIndices[child]);
- root = child;
- }
- start--;
- }
-
- end = size - 1;
- while (end > 0) {
- int child, root = 0;
- MZ_SWAP_UINT32(pIndices[end], pIndices[0]);
- for (;;) {
- if ((child = (root << 1) + 1) >= end) break;
- child +=
- (((child + 1) < end) &&
- mz_zip_reader_filename_less(pCentral_dir, pCentral_dir_offsets,
- pIndices[child], pIndices[child + 1]));
- if (!mz_zip_reader_filename_less(pCentral_dir, pCentral_dir_offsets,
- pIndices[root], pIndices[child]))
- break;
- MZ_SWAP_UINT32(pIndices[root], pIndices[child]);
- root = child;
- }
- end--;
- }
-}
-
-static mz_bool mz_zip_reader_read_central_dir(mz_zip_archive *pZip,
- mz_uint32 flags) {
- mz_uint cdir_size, num_this_disk, cdir_disk_index;
- mz_uint64 cdir_ofs;
- mz_int64 cur_file_ofs;
- const mz_uint8 *p;
- mz_uint32 buf_u32[4096 / sizeof(mz_uint32)];
- mz_uint8 *pBuf = (mz_uint8 *)buf_u32;
- mz_bool sort_central_dir =
- ((flags & MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY) == 0);
- // Basic sanity checks - reject files which are too small, and check the first
- // 4 bytes of the file to make sure a local header is there.
- if (pZip->m_archive_size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE)
- return MZ_FALSE;
- // Find the end of central directory record by scanning the file from the end
- // towards the beginning.
- cur_file_ofs =
- MZ_MAX((mz_int64)pZip->m_archive_size - (mz_int64)sizeof(buf_u32), 0);
- for (;;) {
- int i,
- n = (int)MZ_MIN(sizeof(buf_u32), pZip->m_archive_size - cur_file_ofs);
- if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf, n) != (mz_uint)n)
- return MZ_FALSE;
- for (i = n - 4; i >= 0; --i)
- if (MZ_READ_LE32(pBuf + i) == MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG) break;
- if (i >= 0) {
- cur_file_ofs += i;
- break;
- }
- if ((!cur_file_ofs) || ((pZip->m_archive_size - cur_file_ofs) >=
- (0xFFFF + MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE)))
- return MZ_FALSE;
- cur_file_ofs = MZ_MAX(cur_file_ofs - (sizeof(buf_u32) - 3), 0);
- }
- // Read and verify the end of central directory record.
- if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf,
- MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) !=
- MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE)
- return MZ_FALSE;
- if ((MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_SIG_OFS) !=
- MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG) ||
- ((pZip->m_total_files =
- MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS)) !=
- MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS)))
- return MZ_FALSE;
-
- num_this_disk = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_NUM_THIS_DISK_OFS);
- cdir_disk_index = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_NUM_DISK_CDIR_OFS);
- if (((num_this_disk | cdir_disk_index) != 0) &&
- ((num_this_disk != 1) || (cdir_disk_index != 1)))
- return MZ_FALSE;
-
- if ((cdir_size = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_SIZE_OFS)) <
- pZip->m_total_files * MZ_ZIP_CENTRAL_DIR_HEADER_SIZE)
- return MZ_FALSE;
-
- cdir_ofs = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_OFS_OFS);
- if ((cdir_ofs + (mz_uint64)cdir_size) > pZip->m_archive_size) return MZ_FALSE;
-
- pZip->m_central_directory_file_ofs = cdir_ofs;
-
- if (pZip->m_total_files) {
- mz_uint i, n;
-
- // Read the entire central directory into a heap block, and allocate another
- // heap block to hold the unsorted central dir file record offsets, and
- // another to hold the sorted indices.
- if ((!mz_zip_array_resize(pZip, &pZip->m_pState->m_central_dir, cdir_size,
- MZ_FALSE)) ||
- (!mz_zip_array_resize(pZip, &pZip->m_pState->m_central_dir_offsets,
- pZip->m_total_files, MZ_FALSE)))
- return MZ_FALSE;
-
- if (sort_central_dir) {
- if (!mz_zip_array_resize(pZip,
- &pZip->m_pState->m_sorted_central_dir_offsets,
- pZip->m_total_files, MZ_FALSE))
- return MZ_FALSE;
- }
-
- if (pZip->m_pRead(pZip->m_pIO_opaque, cdir_ofs,
- pZip->m_pState->m_central_dir.m_p,
- cdir_size) != cdir_size)
- return MZ_FALSE;
-
- // Now create an index into the central directory file records, do some
- // basic sanity checking on each record, and check for zip64 entries (which
- // are not yet supported).
- p = (const mz_uint8 *)pZip->m_pState->m_central_dir.m_p;
- for (n = cdir_size, i = 0; i < pZip->m_total_files; ++i) {
- mz_uint total_header_size, comp_size, decomp_size, disk_index;
- if ((n < MZ_ZIP_CENTRAL_DIR_HEADER_SIZE) ||
- (MZ_READ_LE32(p) != MZ_ZIP_CENTRAL_DIR_HEADER_SIG))
- return MZ_FALSE;
- MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets, mz_uint32,
- i) =
- (mz_uint32)(p - (const mz_uint8 *)pZip->m_pState->m_central_dir.m_p);
- if (sort_central_dir)
- MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_sorted_central_dir_offsets,
- mz_uint32, i) = i;
- comp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS);
- decomp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS);
- if (((!MZ_READ_LE32(p + MZ_ZIP_CDH_METHOD_OFS)) &&
- (decomp_size != comp_size)) ||
- (decomp_size && !comp_size) || (decomp_size == 0xFFFFFFFF) ||
- (comp_size == 0xFFFFFFFF))
- return MZ_FALSE;
- disk_index = MZ_READ_LE16(p + MZ_ZIP_CDH_DISK_START_OFS);
- if ((disk_index != num_this_disk) && (disk_index != 1)) return MZ_FALSE;
- if (((mz_uint64)MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS) +
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE + comp_size) > pZip->m_archive_size)
- return MZ_FALSE;
- if ((total_header_size = MZ_ZIP_CENTRAL_DIR_HEADER_SIZE +
- MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS) +
- MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS) +
- MZ_READ_LE16(p + MZ_ZIP_CDH_COMMENT_LEN_OFS)) >
- n)
- return MZ_FALSE;
- n -= total_header_size;
- p += total_header_size;
- }
- }
-
- if (sort_central_dir)
- mz_zip_reader_sort_central_dir_offsets_by_filename(pZip);
-
- return MZ_TRUE;
-}
-
-mz_bool mz_zip_reader_init(mz_zip_archive *pZip, mz_uint64 size,
- mz_uint32 flags) {
- if ((!pZip) || (!pZip->m_pRead)) return MZ_FALSE;
- if (!mz_zip_reader_init_internal(pZip, flags)) return MZ_FALSE;
- pZip->m_archive_size = size;
- if (!mz_zip_reader_read_central_dir(pZip, flags)) {
- mz_zip_reader_end(pZip);
- return MZ_FALSE;
- }
- return MZ_TRUE;
-}
-
-static size_t mz_zip_mem_read_func(void *pOpaque, mz_uint64 file_ofs,
- void *pBuf, size_t n) {
- mz_zip_archive *pZip = (mz_zip_archive *)pOpaque;
- size_t s = (file_ofs >= pZip->m_archive_size)
- ? 0
- : (size_t)MZ_MIN(pZip->m_archive_size - file_ofs, n);
- memcpy(pBuf, (const mz_uint8 *)pZip->m_pState->m_pMem + file_ofs, s);
- return s;
-}
-
-mz_bool mz_zip_reader_init_mem(mz_zip_archive *pZip, const void *pMem,
- size_t size, mz_uint32 flags) {
- if (!mz_zip_reader_init_internal(pZip, flags)) return MZ_FALSE;
- pZip->m_archive_size = size;
- pZip->m_pRead = mz_zip_mem_read_func;
- pZip->m_pIO_opaque = pZip;
-#ifdef __cplusplus
- pZip->m_pState->m_pMem = const_cast<void *>(pMem);
-#else
- pZip->m_pState->m_pMem = (void *)pMem;
-#endif
- pZip->m_pState->m_mem_size = size;
- if (!mz_zip_reader_read_central_dir(pZip, flags)) {
- mz_zip_reader_end(pZip);
- return MZ_FALSE;
- }
- return MZ_TRUE;
-}
-
-#ifndef MINIZ_NO_STDIO
-static size_t mz_zip_file_read_func(void *pOpaque, mz_uint64 file_ofs,
- void *pBuf, size_t n) {
- mz_zip_archive *pZip = (mz_zip_archive *)pOpaque;
- mz_int64 cur_ofs = MZ_FTELL64(pZip->m_pState->m_pFile);
- if (((mz_int64)file_ofs < 0) ||
- (((cur_ofs != (mz_int64)file_ofs)) &&
- (MZ_FSEEK64(pZip->m_pState->m_pFile, (mz_int64)file_ofs, SEEK_SET))))
- return 0;
- return MZ_FREAD(pBuf, 1, n, pZip->m_pState->m_pFile);
-}
-
-mz_bool mz_zip_reader_init_file(mz_zip_archive *pZip, const char *pFilename,
- mz_uint32 flags) {
- mz_uint64 file_size;
- MZ_FILE *pFile = MZ_FOPEN(pFilename, "rb");
- if (!pFile) return MZ_FALSE;
- if (MZ_FSEEK64(pFile, 0, SEEK_END)) {
- MZ_FCLOSE(pFile);
- return MZ_FALSE;
- }
- file_size = MZ_FTELL64(pFile);
- if (!mz_zip_reader_init_internal(pZip, flags)) {
- MZ_FCLOSE(pFile);
- return MZ_FALSE;
- }
- pZip->m_pRead = mz_zip_file_read_func;
- pZip->m_pIO_opaque = pZip;
- pZip->m_pState->m_pFile = pFile;
- pZip->m_archive_size = file_size;
- if (!mz_zip_reader_read_central_dir(pZip, flags)) {
- mz_zip_reader_end(pZip);
- return MZ_FALSE;
- }
- return MZ_TRUE;
-}
-#endif // #ifndef MINIZ_NO_STDIO
-
-mz_uint mz_zip_reader_get_num_files(mz_zip_archive *pZip) {
- return pZip ? pZip->m_total_files : 0;
-}
-
-static MZ_FORCEINLINE const mz_uint8 *mz_zip_reader_get_cdh(
- mz_zip_archive *pZip, mz_uint file_index) {
- if ((!pZip) || (!pZip->m_pState) || (file_index >= pZip->m_total_files) ||
- (pZip->m_zip_mode != MZ_ZIP_MODE_READING))
- return NULL;
- return &MZ_ZIP_ARRAY_ELEMENT(
- &pZip->m_pState->m_central_dir, mz_uint8,
- MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets, mz_uint32,
- file_index));
-}
-
-mz_bool mz_zip_reader_is_file_encrypted(mz_zip_archive *pZip,
- mz_uint file_index) {
- mz_uint m_bit_flag;
- const mz_uint8 *p = mz_zip_reader_get_cdh(pZip, file_index);
- if (!p) return MZ_FALSE;
- m_bit_flag = MZ_READ_LE16(p + MZ_ZIP_CDH_BIT_FLAG_OFS);
- return (m_bit_flag & 1);
-}
-
-mz_bool mz_zip_reader_is_file_a_directory(mz_zip_archive *pZip,
- mz_uint file_index) {
- mz_uint filename_len, external_attr;
- const mz_uint8 *p = mz_zip_reader_get_cdh(pZip, file_index);
- if (!p) return MZ_FALSE;
-
- // First see if the filename ends with a '/' character.
- filename_len = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS);
- if (filename_len) {
- if (*(p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + filename_len - 1) == '/')
- return MZ_TRUE;
- }
-
- // Bugfix: This code was also checking if the internal attribute was non-zero,
- // which wasn't correct.
- // Most/all zip writers (hopefully) set DOS file/directory attributes in the
- // low 16-bits, so check for the DOS directory flag and ignore the source OS
- // ID in the created by field.
- // FIXME: Remove this check? Is it necessary - we already check the filename.
- external_attr = MZ_READ_LE32(p + MZ_ZIP_CDH_EXTERNAL_ATTR_OFS);
- if ((external_attr & 0x10) != 0) return MZ_TRUE;
-
- return MZ_FALSE;
-}
-
-mz_bool mz_zip_reader_file_stat(mz_zip_archive *pZip, mz_uint file_index,
- mz_zip_archive_file_stat *pStat) {
- mz_uint n;
- const mz_uint8 *p = mz_zip_reader_get_cdh(pZip, file_index);
- if ((!p) || (!pStat)) return MZ_FALSE;
-
- // Unpack the central directory record.
- pStat->m_file_index = file_index;
- pStat->m_central_dir_ofs = MZ_ZIP_ARRAY_ELEMENT(
- &pZip->m_pState->m_central_dir_offsets, mz_uint32, file_index);
- pStat->m_version_made_by = MZ_READ_LE16(p + MZ_ZIP_CDH_VERSION_MADE_BY_OFS);
- pStat->m_version_needed = MZ_READ_LE16(p + MZ_ZIP_CDH_VERSION_NEEDED_OFS);
- pStat->m_bit_flag = MZ_READ_LE16(p + MZ_ZIP_CDH_BIT_FLAG_OFS);
- pStat->m_method = MZ_READ_LE16(p + MZ_ZIP_CDH_METHOD_OFS);
-#ifndef MINIZ_NO_TIME
- pStat->m_time =
- mz_zip_dos_to_time_t(MZ_READ_LE16(p + MZ_ZIP_CDH_FILE_TIME_OFS),
- MZ_READ_LE16(p + MZ_ZIP_CDH_FILE_DATE_OFS));
-#endif
- pStat->m_crc32 = MZ_READ_LE32(p + MZ_ZIP_CDH_CRC32_OFS);
- pStat->m_comp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS);
- pStat->m_uncomp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS);
- pStat->m_internal_attr = MZ_READ_LE16(p + MZ_ZIP_CDH_INTERNAL_ATTR_OFS);
- pStat->m_external_attr = MZ_READ_LE32(p + MZ_ZIP_CDH_EXTERNAL_ATTR_OFS);
- pStat->m_local_header_ofs = MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS);
-
- // Copy as much of the filename and comment as possible.
- n = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS);
- n = MZ_MIN(n, MZ_ZIP_MAX_ARCHIVE_FILENAME_SIZE - 1);
- memcpy(pStat->m_filename, p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE, n);
- pStat->m_filename[n] = '\0';
-
- n = MZ_READ_LE16(p + MZ_ZIP_CDH_COMMENT_LEN_OFS);
- n = MZ_MIN(n, MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE - 1);
- pStat->m_comment_size = n;
- memcpy(pStat->m_comment,
- p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE +
- MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS) +
- MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS),
- n);
- pStat->m_comment[n] = '\0';
-
- return MZ_TRUE;
-}
-
-mz_uint mz_zip_reader_get_filename(mz_zip_archive *pZip, mz_uint file_index,
- char *pFilename, mz_uint filename_buf_size) {
- mz_uint n;
- const mz_uint8 *p = mz_zip_reader_get_cdh(pZip, file_index);
- if (!p) {
- if (filename_buf_size) pFilename[0] = '\0';
- return 0;
- }
- n = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS);
- if (filename_buf_size) {
- n = MZ_MIN(n, filename_buf_size - 1);
- memcpy(pFilename, p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE, n);
- pFilename[n] = '\0';
- }
- return n + 1;
-}
-
-static MZ_FORCEINLINE mz_bool mz_zip_reader_string_equal(const char *pA,
- const char *pB,
- mz_uint len,
- mz_uint flags) {
- mz_uint i;
- if (flags & MZ_ZIP_FLAG_CASE_SENSITIVE) return 0 == memcmp(pA, pB, len);
- for (i = 0; i < len; ++i)
- if (MZ_TOLOWER(pA[i]) != MZ_TOLOWER(pB[i])) return MZ_FALSE;
- return MZ_TRUE;
-}
-
-static MZ_FORCEINLINE int mz_zip_reader_filename_compare(
- const mz_zip_array *pCentral_dir_array,
- const mz_zip_array *pCentral_dir_offsets, mz_uint l_index, const char *pR,
- mz_uint r_len) {
- const mz_uint8 *pL = &MZ_ZIP_ARRAY_ELEMENT(
- pCentral_dir_array, mz_uint8,
- MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_offsets, mz_uint32,
- l_index)),
- *pE;
- mz_uint l_len = MZ_READ_LE16(pL + MZ_ZIP_CDH_FILENAME_LEN_OFS);
- mz_uint8 l = 0, r = 0;
- pL += MZ_ZIP_CENTRAL_DIR_HEADER_SIZE;
- pE = pL + MZ_MIN(l_len, r_len);
- while (pL < pE) {
- if ((l = MZ_TOLOWER(*pL)) != (r = MZ_TOLOWER(*pR))) break;
- pL++;
- pR++;
- }
- return (pL == pE) ? (int)(l_len - r_len) : (l - r);
-}
-
-static int mz_zip_reader_locate_file_binary_search(mz_zip_archive *pZip,
- const char *pFilename) {
- mz_zip_internal_state *pState = pZip->m_pState;
- const mz_zip_array *pCentral_dir_offsets = &pState->m_central_dir_offsets;
- const mz_zip_array *pCentral_dir = &pState->m_central_dir;
- mz_uint32 *pIndices = &MZ_ZIP_ARRAY_ELEMENT(
- &pState->m_sorted_central_dir_offsets, mz_uint32, 0);
- const int size = pZip->m_total_files;
- const mz_uint filename_len = (mz_uint)strlen(pFilename);
- int l = 0, h = size - 1;
- while (l <= h) {
- int m = (l + h) >> 1, file_index = pIndices[m],
- comp =
- mz_zip_reader_filename_compare(pCentral_dir, pCentral_dir_offsets,
- file_index, pFilename, filename_len);
- if (!comp)
- return file_index;
- else if (comp < 0)
- l = m + 1;
- else
- h = m - 1;
- }
- return -1;
-}
-
-int mz_zip_reader_locate_file(mz_zip_archive *pZip, const char *pName,
- const char *pComment, mz_uint flags) {
- mz_uint file_index;
- size_t name_len, comment_len;
- if ((!pZip) || (!pZip->m_pState) || (!pName) ||
- (pZip->m_zip_mode != MZ_ZIP_MODE_READING))
- return -1;
- if (((flags & (MZ_ZIP_FLAG_IGNORE_PATH | MZ_ZIP_FLAG_CASE_SENSITIVE)) == 0) &&
- (!pComment) && (pZip->m_pState->m_sorted_central_dir_offsets.m_size))
- return mz_zip_reader_locate_file_binary_search(pZip, pName);
- name_len = strlen(pName);
- if (name_len > 0xFFFF) return -1;
- comment_len = pComment ? strlen(pComment) : 0;
- if (comment_len > 0xFFFF) return -1;
- for (file_index = 0; file_index < pZip->m_total_files; file_index++) {
- const mz_uint8 *pHeader = &MZ_ZIP_ARRAY_ELEMENT(
- &pZip->m_pState->m_central_dir, mz_uint8,
- MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets, mz_uint32,
- file_index));
- mz_uint filename_len = MZ_READ_LE16(pHeader + MZ_ZIP_CDH_FILENAME_LEN_OFS);
- const char *pFilename =
- (const char *)pHeader + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE;
- if (filename_len < name_len) continue;
- if (comment_len) {
- mz_uint file_extra_len = MZ_READ_LE16(pHeader + MZ_ZIP_CDH_EXTRA_LEN_OFS),
- file_comment_len =
- MZ_READ_LE16(pHeader + MZ_ZIP_CDH_COMMENT_LEN_OFS);
- const char *pFile_comment = pFilename + filename_len + file_extra_len;
- if ((file_comment_len != comment_len) ||
- (!mz_zip_reader_string_equal(pComment, pFile_comment,
- file_comment_len, flags)))
- continue;
- }
- if ((flags & MZ_ZIP_FLAG_IGNORE_PATH) && (filename_len)) {
- int ofs = filename_len - 1;
- do {
- if ((pFilename[ofs] == '/') || (pFilename[ofs] == '\\') ||
- (pFilename[ofs] == ':'))
- break;
- } while (--ofs >= 0);
- ofs++;
- pFilename += ofs;
- filename_len -= ofs;
- }
- if ((filename_len == name_len) &&
- (mz_zip_reader_string_equal(pName, pFilename, filename_len, flags)))
- return file_index;
- }
- return -1;
-}
-
-mz_bool mz_zip_reader_extract_to_mem_no_alloc(mz_zip_archive *pZip,
- mz_uint file_index, void *pBuf,
- size_t buf_size, mz_uint flags,
- void *pUser_read_buf,
- size_t user_read_buf_size) {
- int status = TINFL_STATUS_DONE;
- mz_uint64 needed_size, cur_file_ofs, comp_remaining,
- out_buf_ofs = 0, read_buf_size, read_buf_ofs = 0, read_buf_avail;
- mz_zip_archive_file_stat file_stat;
- void *pRead_buf;
- mz_uint32
- local_header_u32[(MZ_ZIP_LOCAL_DIR_HEADER_SIZE + sizeof(mz_uint32) - 1) /
- sizeof(mz_uint32)];
- mz_uint8 *pLocal_header = (mz_uint8 *)local_header_u32;
- tinfl_decompressor inflator;
-
- if ((buf_size) && (!pBuf)) return MZ_FALSE;
-
- if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat)) return MZ_FALSE;
-
- // Empty file, or a directory (but not always a directory - I've seen odd zips
- // with directories that have compressed data which inflates to 0 bytes)
- if (!file_stat.m_comp_size) return MZ_TRUE;
-
- // Entry is a subdirectory (I've seen old zips with dir entries which have
- // compressed deflate data which inflates to 0 bytes, but these entries claim
- // to uncompress to 512 bytes in the headers).
- // I'm torn how to handle this case - should it fail instead?
- if (mz_zip_reader_is_file_a_directory(pZip, file_index)) return MZ_TRUE;
-
- // Encryption and patch files are not supported.
- if (file_stat.m_bit_flag & (1 | 32)) return MZ_FALSE;
-
- // This function only supports stored and deflate.
- if ((!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) && (file_stat.m_method != 0) &&
- (file_stat.m_method != MZ_DEFLATED))
- return MZ_FALSE;
-
- // Ensure supplied output buffer is large enough.
- needed_size = (flags & MZ_ZIP_FLAG_COMPRESSED_DATA) ? file_stat.m_comp_size
- : file_stat.m_uncomp_size;
- if (buf_size < needed_size) return MZ_FALSE;
-
- // Read and parse the local directory entry.
- cur_file_ofs = file_stat.m_local_header_ofs;
- if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pLocal_header,
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE) !=
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE)
- return MZ_FALSE;
- if (MZ_READ_LE32(pLocal_header) != MZ_ZIP_LOCAL_DIR_HEADER_SIG)
- return MZ_FALSE;
-
- cur_file_ofs += MZ_ZIP_LOCAL_DIR_HEADER_SIZE +
- MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_FILENAME_LEN_OFS) +
- MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_EXTRA_LEN_OFS);
- if ((cur_file_ofs + file_stat.m_comp_size) > pZip->m_archive_size)
- return MZ_FALSE;
-
- if ((flags & MZ_ZIP_FLAG_COMPRESSED_DATA) || (!file_stat.m_method)) {
- // The file is stored or the caller has requested the compressed data.
- if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf,
- (size_t)needed_size) != needed_size)
- return MZ_FALSE;
- return ((flags & MZ_ZIP_FLAG_COMPRESSED_DATA) != 0) ||
- (mz_crc32(MZ_CRC32_INIT, (const mz_uint8 *)pBuf,
- (size_t)file_stat.m_uncomp_size) == file_stat.m_crc32);
- }
-
- // Decompress the file either directly from memory or from a file input
- // buffer.
- tinfl_init(&inflator);
-
- if (pZip->m_pState->m_pMem) {
- // Read directly from the archive in memory.
- pRead_buf = (mz_uint8 *)pZip->m_pState->m_pMem + cur_file_ofs;
- read_buf_size = read_buf_avail = file_stat.m_comp_size;
- comp_remaining = 0;
- } else if (pUser_read_buf) {
- // Use a user provided read buffer.
- if (!user_read_buf_size) return MZ_FALSE;
- pRead_buf = (mz_uint8 *)pUser_read_buf;
- read_buf_size = user_read_buf_size;
- read_buf_avail = 0;
- comp_remaining = file_stat.m_comp_size;
- } else {
- // Temporarily allocate a read buffer.
- read_buf_size =
- MZ_MIN(file_stat.m_comp_size, (mz_uint)MZ_ZIP_MAX_IO_BUF_SIZE);
-#ifdef _MSC_VER
- if (((0, sizeof(size_t) == sizeof(mz_uint32))) &&
- (read_buf_size > 0x7FFFFFFF))
-#else
- if (((sizeof(size_t) == sizeof(mz_uint32))) && (read_buf_size > 0x7FFFFFFF))
-#endif
- return MZ_FALSE;
- if (NULL == (pRead_buf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1,
- (size_t)read_buf_size)))
- return MZ_FALSE;
- read_buf_avail = 0;
- comp_remaining = file_stat.m_comp_size;
- }
-
- do {
- size_t in_buf_size,
- out_buf_size = (size_t)(file_stat.m_uncomp_size - out_buf_ofs);
- if ((!read_buf_avail) && (!pZip->m_pState->m_pMem)) {
- read_buf_avail = MZ_MIN(read_buf_size, comp_remaining);
- if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pRead_buf,
- (size_t)read_buf_avail) != read_buf_avail) {
- status = TINFL_STATUS_FAILED;
- break;
- }
- cur_file_ofs += read_buf_avail;
- comp_remaining -= read_buf_avail;
- read_buf_ofs = 0;
- }
- in_buf_size = (size_t)read_buf_avail;
- status = tinfl_decompress(
- &inflator, (mz_uint8 *)pRead_buf + read_buf_ofs, &in_buf_size,
- (mz_uint8 *)pBuf, (mz_uint8 *)pBuf + out_buf_ofs, &out_buf_size,
- TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF |
- (comp_remaining ? TINFL_FLAG_HAS_MORE_INPUT : 0));
- read_buf_avail -= in_buf_size;
- read_buf_ofs += in_buf_size;
- out_buf_ofs += out_buf_size;
- } while (status == TINFL_STATUS_NEEDS_MORE_INPUT);
-
- if (status == TINFL_STATUS_DONE) {
- // Make sure the entire file was decompressed, and check its CRC.
- if ((out_buf_ofs != file_stat.m_uncomp_size) ||
- (mz_crc32(MZ_CRC32_INIT, (const mz_uint8 *)pBuf,
- (size_t)file_stat.m_uncomp_size) != file_stat.m_crc32))
- status = TINFL_STATUS_FAILED;
- }
-
- if ((!pZip->m_pState->m_pMem) && (!pUser_read_buf))
- pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf);
-
- return status == TINFL_STATUS_DONE;
-}
-
-mz_bool mz_zip_reader_extract_file_to_mem_no_alloc(
- mz_zip_archive *pZip, const char *pFilename, void *pBuf, size_t buf_size,
- mz_uint flags, void *pUser_read_buf, size_t user_read_buf_size) {
- int file_index = mz_zip_reader_locate_file(pZip, pFilename, NULL, flags);
- if (file_index < 0) return MZ_FALSE;
- return mz_zip_reader_extract_to_mem_no_alloc(pZip, file_index, pBuf, buf_size,
- flags, pUser_read_buf,
- user_read_buf_size);
-}
-
-mz_bool mz_zip_reader_extract_to_mem(mz_zip_archive *pZip, mz_uint file_index,
- void *pBuf, size_t buf_size,
- mz_uint flags) {
- return mz_zip_reader_extract_to_mem_no_alloc(pZip, file_index, pBuf, buf_size,
- flags, NULL, 0);
-}
-
-mz_bool mz_zip_reader_extract_file_to_mem(mz_zip_archive *pZip,
- const char *pFilename, void *pBuf,
- size_t buf_size, mz_uint flags) {
- return mz_zip_reader_extract_file_to_mem_no_alloc(pZip, pFilename, pBuf,
- buf_size, flags, NULL, 0);
-}
-
-void *mz_zip_reader_extract_to_heap(mz_zip_archive *pZip, mz_uint file_index,
- size_t *pSize, mz_uint flags) {
- mz_uint64 comp_size, uncomp_size, alloc_size;
- const mz_uint8 *p = mz_zip_reader_get_cdh(pZip, file_index);
- void *pBuf;
-
- if (pSize) *pSize = 0;
- if (!p) return NULL;
-
- comp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS);
- uncomp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS);
-
- alloc_size = (flags & MZ_ZIP_FLAG_COMPRESSED_DATA) ? comp_size : uncomp_size;
-#ifdef _MSC_VER
- if (((0, sizeof(size_t) == sizeof(mz_uint32))) && (alloc_size > 0x7FFFFFFF))
-#else
- if (((sizeof(size_t) == sizeof(mz_uint32))) && (alloc_size > 0x7FFFFFFF))
-#endif
- return NULL;
- if (NULL ==
- (pBuf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, (size_t)alloc_size)))
- return NULL;
-
- if (!mz_zip_reader_extract_to_mem(pZip, file_index, pBuf, (size_t)alloc_size,
- flags)) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf);
- return NULL;
- }
-
- if (pSize) *pSize = (size_t)alloc_size;
- return pBuf;
-}
-
-void *mz_zip_reader_extract_file_to_heap(mz_zip_archive *pZip,
- const char *pFilename, size_t *pSize,
- mz_uint flags) {
- int file_index = mz_zip_reader_locate_file(pZip, pFilename, NULL, flags);
- if (file_index < 0) {
- if (pSize) *pSize = 0;
- return MZ_FALSE;
- }
- return mz_zip_reader_extract_to_heap(pZip, file_index, pSize, flags);
-}
-
-mz_bool mz_zip_reader_extract_to_callback(mz_zip_archive *pZip,
- mz_uint file_index,
- mz_file_write_func pCallback,
- void *pOpaque, mz_uint flags) {
- int status = TINFL_STATUS_DONE;
- mz_uint file_crc32 = MZ_CRC32_INIT;
- mz_uint64 read_buf_size, read_buf_ofs = 0, read_buf_avail, comp_remaining,
- out_buf_ofs = 0, cur_file_ofs;
- mz_zip_archive_file_stat file_stat;
- void *pRead_buf = NULL;
- void *pWrite_buf = NULL;
- mz_uint32
- local_header_u32[(MZ_ZIP_LOCAL_DIR_HEADER_SIZE + sizeof(mz_uint32) - 1) /
- sizeof(mz_uint32)];
- mz_uint8 *pLocal_header = (mz_uint8 *)local_header_u32;
-
- if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat)) return MZ_FALSE;
-
- // Empty file, or a directory (but not always a directory - I've seen odd zips
- // with directories that have compressed data which inflates to 0 bytes)
- if (!file_stat.m_comp_size) return MZ_TRUE;
-
- // Entry is a subdirectory (I've seen old zips with dir entries which have
- // compressed deflate data which inflates to 0 bytes, but these entries claim
- // to uncompress to 512 bytes in the headers).
- // I'm torn how to handle this case - should it fail instead?
- if (mz_zip_reader_is_file_a_directory(pZip, file_index)) return MZ_TRUE;
-
- // Encryption and patch files are not supported.
- if (file_stat.m_bit_flag & (1 | 32)) return MZ_FALSE;
-
- // This function only supports stored and deflate.
- if ((!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) && (file_stat.m_method != 0) &&
- (file_stat.m_method != MZ_DEFLATED))
- return MZ_FALSE;
-
- // Read and parse the local directory entry.
- cur_file_ofs = file_stat.m_local_header_ofs;
- if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pLocal_header,
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE) !=
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE)
- return MZ_FALSE;
- if (MZ_READ_LE32(pLocal_header) != MZ_ZIP_LOCAL_DIR_HEADER_SIG)
- return MZ_FALSE;
-
- cur_file_ofs += MZ_ZIP_LOCAL_DIR_HEADER_SIZE +
- MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_FILENAME_LEN_OFS) +
- MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_EXTRA_LEN_OFS);
- if ((cur_file_ofs + file_stat.m_comp_size) > pZip->m_archive_size)
- return MZ_FALSE;
-
- // Decompress the file either directly from memory or from a file input
- // buffer.
- if (pZip->m_pState->m_pMem) {
- pRead_buf = (mz_uint8 *)pZip->m_pState->m_pMem + cur_file_ofs;
- read_buf_size = read_buf_avail = file_stat.m_comp_size;
- comp_remaining = 0;
- } else {
- read_buf_size =
- MZ_MIN(file_stat.m_comp_size, (mz_uint)MZ_ZIP_MAX_IO_BUF_SIZE);
- if (NULL == (pRead_buf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1,
- (size_t)read_buf_size)))
- return MZ_FALSE;
- read_buf_avail = 0;
- comp_remaining = file_stat.m_comp_size;
- }
-
- if ((flags & MZ_ZIP_FLAG_COMPRESSED_DATA) || (!file_stat.m_method)) {
- // The file is stored or the caller has requested the compressed data.
- if (pZip->m_pState->m_pMem) {
-#ifdef _MSC_VER
- if (((0, sizeof(size_t) == sizeof(mz_uint32))) &&
- (file_stat.m_comp_size > 0xFFFFFFFF))
-#else
- if (((sizeof(size_t) == sizeof(mz_uint32))) &&
- (file_stat.m_comp_size > 0xFFFFFFFF))
-#endif
- return MZ_FALSE;
- if (pCallback(pOpaque, out_buf_ofs, pRead_buf,
- (size_t)file_stat.m_comp_size) != file_stat.m_comp_size)
- status = TINFL_STATUS_FAILED;
- else if (!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA))
- file_crc32 =
- (mz_uint32)mz_crc32(file_crc32, (const mz_uint8 *)pRead_buf,
- (size_t)file_stat.m_comp_size);
- cur_file_ofs += file_stat.m_comp_size;
- out_buf_ofs += file_stat.m_comp_size;
- comp_remaining = 0;
- } else {
- while (comp_remaining) {
- read_buf_avail = MZ_MIN(read_buf_size, comp_remaining);
- if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pRead_buf,
- (size_t)read_buf_avail) != read_buf_avail) {
- status = TINFL_STATUS_FAILED;
- break;
- }
-
- if (!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA))
- file_crc32 = (mz_uint32)mz_crc32(
- file_crc32, (const mz_uint8 *)pRead_buf, (size_t)read_buf_avail);
-
- if (pCallback(pOpaque, out_buf_ofs, pRead_buf,
- (size_t)read_buf_avail) != read_buf_avail) {
- status = TINFL_STATUS_FAILED;
- break;
- }
- cur_file_ofs += read_buf_avail;
- out_buf_ofs += read_buf_avail;
- comp_remaining -= read_buf_avail;
- }
- }
- } else {
- tinfl_decompressor inflator;
- tinfl_init(&inflator);
-
- if (NULL == (pWrite_buf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1,
- TINFL_LZ_DICT_SIZE)))
- status = TINFL_STATUS_FAILED;
- else {
- do {
- mz_uint8 *pWrite_buf_cur =
- (mz_uint8 *)pWrite_buf + (out_buf_ofs & (TINFL_LZ_DICT_SIZE - 1));
- size_t in_buf_size,
- out_buf_size =
- TINFL_LZ_DICT_SIZE - (out_buf_ofs & (TINFL_LZ_DICT_SIZE - 1));
- if ((!read_buf_avail) && (!pZip->m_pState->m_pMem)) {
- read_buf_avail = MZ_MIN(read_buf_size, comp_remaining);
- if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pRead_buf,
- (size_t)read_buf_avail) != read_buf_avail) {
- status = TINFL_STATUS_FAILED;
- break;
- }
- cur_file_ofs += read_buf_avail;
- comp_remaining -= read_buf_avail;
- read_buf_ofs = 0;
- }
-
- in_buf_size = (size_t)read_buf_avail;
- status = tinfl_decompress(
- &inflator, (const mz_uint8 *)pRead_buf + read_buf_ofs, &in_buf_size,
- (mz_uint8 *)pWrite_buf, pWrite_buf_cur, &out_buf_size,
- comp_remaining ? TINFL_FLAG_HAS_MORE_INPUT : 0);
- read_buf_avail -= in_buf_size;
- read_buf_ofs += in_buf_size;
-
- if (out_buf_size) {
- if (pCallback(pOpaque, out_buf_ofs, pWrite_buf_cur, out_buf_size) !=
- out_buf_size) {
- status = TINFL_STATUS_FAILED;
- break;
- }
- file_crc32 =
- (mz_uint32)mz_crc32(file_crc32, pWrite_buf_cur, out_buf_size);
- if ((out_buf_ofs += out_buf_size) > file_stat.m_uncomp_size) {
- status = TINFL_STATUS_FAILED;
- break;
- }
- }
- } while ((status == TINFL_STATUS_NEEDS_MORE_INPUT) ||
- (status == TINFL_STATUS_HAS_MORE_OUTPUT));
- }
- }
-
- if ((status == TINFL_STATUS_DONE) &&
- (!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA))) {
- // Make sure the entire file was decompressed, and check its CRC.
- if ((out_buf_ofs != file_stat.m_uncomp_size) ||
- (file_crc32 != file_stat.m_crc32))
- status = TINFL_STATUS_FAILED;
- }
-
- if (!pZip->m_pState->m_pMem) pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf);
- if (pWrite_buf) pZip->m_pFree(pZip->m_pAlloc_opaque, pWrite_buf);
-
- return status == TINFL_STATUS_DONE;
-}
-
-mz_bool mz_zip_reader_extract_file_to_callback(mz_zip_archive *pZip,
- const char *pFilename,
- mz_file_write_func pCallback,
- void *pOpaque, mz_uint flags) {
- int file_index = mz_zip_reader_locate_file(pZip, pFilename, NULL, flags);
- if (file_index < 0) return MZ_FALSE;
- return mz_zip_reader_extract_to_callback(pZip, file_index, pCallback, pOpaque,
- flags);
-}
-
-#ifndef MINIZ_NO_STDIO
-static size_t mz_zip_file_write_callback(void *pOpaque, mz_uint64 ofs,
- const void *pBuf, size_t n) {
- (void)ofs;
- return MZ_FWRITE(pBuf, 1, n, (MZ_FILE *)pOpaque);
-}
-
-mz_bool mz_zip_reader_extract_to_file(mz_zip_archive *pZip, mz_uint file_index,
- const char *pDst_filename,
- mz_uint flags) {
- mz_bool status;
- mz_zip_archive_file_stat file_stat;
- MZ_FILE *pFile;
- if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat)) return MZ_FALSE;
- pFile = MZ_FOPEN(pDst_filename, "wb");
- if (!pFile) return MZ_FALSE;
- status = mz_zip_reader_extract_to_callback(
- pZip, file_index, mz_zip_file_write_callback, pFile, flags);
- if (MZ_FCLOSE(pFile) == EOF) return MZ_FALSE;
-#ifndef MINIZ_NO_TIME
- if (status)
- mz_zip_set_file_times(pDst_filename, file_stat.m_time, file_stat.m_time);
-#endif
- return status;
-}
-#endif // #ifndef MINIZ_NO_STDIO
-
-mz_bool mz_zip_reader_end(mz_zip_archive *pZip) {
- if ((!pZip) || (!pZip->m_pState) || (!pZip->m_pAlloc) || (!pZip->m_pFree) ||
- (pZip->m_zip_mode != MZ_ZIP_MODE_READING))
- return MZ_FALSE;
-
- if (pZip->m_pState) {
- mz_zip_internal_state *pState = pZip->m_pState;
- pZip->m_pState = NULL;
- mz_zip_array_clear(pZip, &pState->m_central_dir);
- mz_zip_array_clear(pZip, &pState->m_central_dir_offsets);
- mz_zip_array_clear(pZip, &pState->m_sorted_central_dir_offsets);
-
-#ifndef MINIZ_NO_STDIO
- if (pState->m_pFile) {
- MZ_FCLOSE(pState->m_pFile);
- pState->m_pFile = NULL;
- }
-#endif // #ifndef MINIZ_NO_STDIO
-
- pZip->m_pFree(pZip->m_pAlloc_opaque, pState);
- }
- pZip->m_zip_mode = MZ_ZIP_MODE_INVALID;
-
- return MZ_TRUE;
-}
-
-#ifndef MINIZ_NO_STDIO
-mz_bool mz_zip_reader_extract_file_to_file(mz_zip_archive *pZip,
- const char *pArchive_filename,
- const char *pDst_filename,
- mz_uint flags) {
- int file_index =
- mz_zip_reader_locate_file(pZip, pArchive_filename, NULL, flags);
- if (file_index < 0) return MZ_FALSE;
- return mz_zip_reader_extract_to_file(pZip, file_index, pDst_filename, flags);
-}
-#endif
-
-// ------------------- .ZIP archive writing
-
-#ifndef MINIZ_NO_ARCHIVE_WRITING_APIS
-
-static void mz_write_le16(mz_uint8 *p, mz_uint16 v) {
- p[0] = (mz_uint8)v;
- p[1] = (mz_uint8)(v >> 8);
-}
-static void mz_write_le32(mz_uint8 *p, mz_uint32 v) {
- p[0] = (mz_uint8)v;
- p[1] = (mz_uint8)(v >> 8);
- p[2] = (mz_uint8)(v >> 16);
- p[3] = (mz_uint8)(v >> 24);
-}
-#define MZ_WRITE_LE16(p, v) mz_write_le16((mz_uint8 *)(p), (mz_uint16)(v))
-#define MZ_WRITE_LE32(p, v) mz_write_le32((mz_uint8 *)(p), (mz_uint32)(v))
-
-mz_bool mz_zip_writer_init(mz_zip_archive *pZip, mz_uint64 existing_size) {
- if ((!pZip) || (pZip->m_pState) || (!pZip->m_pWrite) ||
- (pZip->m_zip_mode != MZ_ZIP_MODE_INVALID))
- return MZ_FALSE;
-
- if (pZip->m_file_offset_alignment) {
- // Ensure user specified file offset alignment is a power of 2.
- if (pZip->m_file_offset_alignment & (pZip->m_file_offset_alignment - 1))
- return MZ_FALSE;
- }
-
- if (!pZip->m_pAlloc) pZip->m_pAlloc = def_alloc_func;
- if (!pZip->m_pFree) pZip->m_pFree = def_free_func;
- if (!pZip->m_pRealloc) pZip->m_pRealloc = def_realloc_func;
-
- pZip->m_zip_mode = MZ_ZIP_MODE_WRITING;
- pZip->m_archive_size = existing_size;
- pZip->m_central_directory_file_ofs = 0;
- pZip->m_total_files = 0;
-
- if (NULL == (pZip->m_pState = (mz_zip_internal_state *)pZip->m_pAlloc(
- pZip->m_pAlloc_opaque, 1, sizeof(mz_zip_internal_state))))
- return MZ_FALSE;
- memset(pZip->m_pState, 0, sizeof(mz_zip_internal_state));
- MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_central_dir,
- sizeof(mz_uint8));
- MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_central_dir_offsets,
- sizeof(mz_uint32));
- MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_sorted_central_dir_offsets,
- sizeof(mz_uint32));
- return MZ_TRUE;
-}
-
-static size_t mz_zip_heap_write_func(void *pOpaque, mz_uint64 file_ofs,
- const void *pBuf, size_t n) {
- mz_zip_archive *pZip = (mz_zip_archive *)pOpaque;
- mz_zip_internal_state *pState = pZip->m_pState;
- mz_uint64 new_size = MZ_MAX(file_ofs + n, pState->m_mem_size);
-#ifdef _MSC_VER
- if ((!n) ||
- ((0, sizeof(size_t) == sizeof(mz_uint32)) && (new_size > 0x7FFFFFFF)))
-#else
- if ((!n) ||
- ((sizeof(size_t) == sizeof(mz_uint32)) && (new_size > 0x7FFFFFFF)))
-#endif
- return 0;
- if (new_size > pState->m_mem_capacity) {
- void *pNew_block;
- size_t new_capacity = MZ_MAX(64, pState->m_mem_capacity);
- while (new_capacity < new_size) new_capacity *= 2;
- if (NULL == (pNew_block = pZip->m_pRealloc(
- pZip->m_pAlloc_opaque, pState->m_pMem, 1, new_capacity)))
- return 0;
- pState->m_pMem = pNew_block;
- pState->m_mem_capacity = new_capacity;
- }
- memcpy((mz_uint8 *)pState->m_pMem + file_ofs, pBuf, n);
- pState->m_mem_size = (size_t)new_size;
- return n;
-}
-
-mz_bool mz_zip_writer_init_heap(mz_zip_archive *pZip,
- size_t size_to_reserve_at_beginning,
- size_t initial_allocation_size) {
- pZip->m_pWrite = mz_zip_heap_write_func;
- pZip->m_pIO_opaque = pZip;
- if (!mz_zip_writer_init(pZip, size_to_reserve_at_beginning)) return MZ_FALSE;
- if (0 != (initial_allocation_size = MZ_MAX(initial_allocation_size,
- size_to_reserve_at_beginning))) {
- if (NULL == (pZip->m_pState->m_pMem = pZip->m_pAlloc(
- pZip->m_pAlloc_opaque, 1, initial_allocation_size))) {
- mz_zip_writer_end(pZip);
- return MZ_FALSE;
- }
- pZip->m_pState->m_mem_capacity = initial_allocation_size;
- }
- return MZ_TRUE;
-}
-
-#ifndef MINIZ_NO_STDIO
-static size_t mz_zip_file_write_func(void *pOpaque, mz_uint64 file_ofs,
- const void *pBuf, size_t n) {
- mz_zip_archive *pZip = (mz_zip_archive *)pOpaque;
- mz_int64 cur_ofs = MZ_FTELL64(pZip->m_pState->m_pFile);
- if (((mz_int64)file_ofs < 0) ||
- (((cur_ofs != (mz_int64)file_ofs)) &&
- (MZ_FSEEK64(pZip->m_pState->m_pFile, (mz_int64)file_ofs, SEEK_SET))))
- return 0;
- return MZ_FWRITE(pBuf, 1, n, pZip->m_pState->m_pFile);
-}
-
-mz_bool mz_zip_writer_init_file(mz_zip_archive *pZip, const char *pFilename,
- mz_uint64 size_to_reserve_at_beginning) {
- MZ_FILE *pFile;
- pZip->m_pWrite = mz_zip_file_write_func;
- pZip->m_pIO_opaque = pZip;
- if (!mz_zip_writer_init(pZip, size_to_reserve_at_beginning)) return MZ_FALSE;
- if (NULL == (pFile = MZ_FOPEN(pFilename, "wb"))) {
- mz_zip_writer_end(pZip);
- return MZ_FALSE;
- }
- pZip->m_pState->m_pFile = pFile;
- if (size_to_reserve_at_beginning) {
- mz_uint64 cur_ofs = 0;
- char buf[4096];
- MZ_CLEAR_OBJ(buf);
- do {
- size_t n = (size_t)MZ_MIN(sizeof(buf), size_to_reserve_at_beginning);
- if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_ofs, buf, n) != n) {
- mz_zip_writer_end(pZip);
- return MZ_FALSE;
- }
- cur_ofs += n;
- size_to_reserve_at_beginning -= n;
- } while (size_to_reserve_at_beginning);
- }
- return MZ_TRUE;
-}
-#endif // #ifndef MINIZ_NO_STDIO
-
-mz_bool mz_zip_writer_init_from_reader(mz_zip_archive *pZip,
- const char *pFilename) {
- mz_zip_internal_state *pState;
- if ((!pZip) || (!pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_READING))
- return MZ_FALSE;
- // No sense in trying to write to an archive that's already at the support max
- // size
- if ((pZip->m_total_files == 0xFFFF) ||
- ((pZip->m_archive_size + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE +
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE) > 0xFFFFFFFF))
- return MZ_FALSE;
-
- pState = pZip->m_pState;
-
- if (pState->m_pFile) {
-#ifdef MINIZ_NO_STDIO
- pFilename;
- return MZ_FALSE;
-#else
- // Archive is being read from stdio - try to reopen as writable.
- if (pZip->m_pIO_opaque != pZip) return MZ_FALSE;
- if (!pFilename) return MZ_FALSE;
- pZip->m_pWrite = mz_zip_file_write_func;
- if (NULL ==
- (pState->m_pFile = MZ_FREOPEN(pFilename, "r+b", pState->m_pFile))) {
- // The mz_zip_archive is now in a bogus state because pState->m_pFile is
- // NULL, so just close it.
- mz_zip_reader_end(pZip);
- return MZ_FALSE;
- }
-#endif // #ifdef MINIZ_NO_STDIO
- } else if (pState->m_pMem) {
- // Archive lives in a memory block. Assume it's from the heap that we can
- // resize using the realloc callback.
- if (pZip->m_pIO_opaque != pZip) return MZ_FALSE;
- pState->m_mem_capacity = pState->m_mem_size;
- pZip->m_pWrite = mz_zip_heap_write_func;
- }
- // Archive is being read via a user provided read function - make sure the
- // user has specified a write function too.
- else if (!pZip->m_pWrite)
- return MZ_FALSE;
-
- // Start writing new files at the archive's current central directory
- // location.
- pZip->m_archive_size = pZip->m_central_directory_file_ofs;
- pZip->m_zip_mode = MZ_ZIP_MODE_WRITING;
- pZip->m_central_directory_file_ofs = 0;
-
- return MZ_TRUE;
-}
-
-mz_bool mz_zip_writer_add_mem(mz_zip_archive *pZip, const char *pArchive_name,
- const void *pBuf, size_t buf_size,
- mz_uint level_and_flags) {
- return mz_zip_writer_add_mem_ex(pZip, pArchive_name, pBuf, buf_size, NULL, 0,
- level_and_flags, 0, 0);
-}
-
-typedef struct {
- mz_zip_archive *m_pZip;
- mz_uint64 m_cur_archive_file_ofs;
- mz_uint64 m_comp_size;
-} mz_zip_writer_add_state;
-
-static mz_bool mz_zip_writer_add_put_buf_callback(const void *pBuf, int len,
- void *pUser) {
- mz_zip_writer_add_state *pState = (mz_zip_writer_add_state *)pUser;
- if ((int)pState->m_pZip->m_pWrite(pState->m_pZip->m_pIO_opaque,
- pState->m_cur_archive_file_ofs, pBuf,
- len) != len)
- return MZ_FALSE;
- pState->m_cur_archive_file_ofs += len;
- pState->m_comp_size += len;
- return MZ_TRUE;
-}
-
-static mz_bool mz_zip_writer_create_local_dir_header(
- mz_zip_archive *pZip, mz_uint8 *pDst, mz_uint16 filename_size,
- mz_uint16 extra_size, mz_uint64 uncomp_size, mz_uint64 comp_size,
- mz_uint32 uncomp_crc32, mz_uint16 method, mz_uint16 bit_flags,
- mz_uint16 dos_time, mz_uint16 dos_date) {
- (void)pZip;
- memset(pDst, 0, MZ_ZIP_LOCAL_DIR_HEADER_SIZE);
- MZ_WRITE_LE32(pDst + MZ_ZIP_LDH_SIG_OFS, MZ_ZIP_LOCAL_DIR_HEADER_SIG);
- MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_VERSION_NEEDED_OFS, method ? 20 : 0);
- MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_BIT_FLAG_OFS, bit_flags);
- MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_METHOD_OFS, method);
- MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_FILE_TIME_OFS, dos_time);
- MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_FILE_DATE_OFS, dos_date);
- MZ_WRITE_LE32(pDst + MZ_ZIP_LDH_CRC32_OFS, uncomp_crc32);
- MZ_WRITE_LE32(pDst + MZ_ZIP_LDH_COMPRESSED_SIZE_OFS, comp_size);
- MZ_WRITE_LE32(pDst + MZ_ZIP_LDH_DECOMPRESSED_SIZE_OFS, uncomp_size);
- MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_FILENAME_LEN_OFS, filename_size);
- MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_EXTRA_LEN_OFS, extra_size);
- return MZ_TRUE;
-}
-
-static mz_bool mz_zip_writer_create_central_dir_header(
- mz_zip_archive *pZip, mz_uint8 *pDst, mz_uint16 filename_size,
- mz_uint16 extra_size, mz_uint16 comment_size, mz_uint64 uncomp_size,
- mz_uint64 comp_size, mz_uint32 uncomp_crc32, mz_uint16 method,
- mz_uint16 bit_flags, mz_uint16 dos_time, mz_uint16 dos_date,
- mz_uint64 local_header_ofs, mz_uint32 ext_attributes) {
- (void)pZip;
- memset(pDst, 0, MZ_ZIP_CENTRAL_DIR_HEADER_SIZE);
- MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_SIG_OFS, MZ_ZIP_CENTRAL_DIR_HEADER_SIG);
- MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_VERSION_NEEDED_OFS, method ? 20 : 0);
- MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_BIT_FLAG_OFS, bit_flags);
- MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_METHOD_OFS, method);
- MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_FILE_TIME_OFS, dos_time);
- MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_FILE_DATE_OFS, dos_date);
- MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_CRC32_OFS, uncomp_crc32);
- MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS, comp_size);
- MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS, uncomp_size);
- MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_FILENAME_LEN_OFS, filename_size);
- MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_EXTRA_LEN_OFS, extra_size);
- MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_COMMENT_LEN_OFS, comment_size);
- MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_EXTERNAL_ATTR_OFS, ext_attributes);
- MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_LOCAL_HEADER_OFS, local_header_ofs);
- return MZ_TRUE;
-}
-
-static mz_bool mz_zip_writer_add_to_central_dir(
- mz_zip_archive *pZip, const char *pFilename, mz_uint16 filename_size,
- const void *pExtra, mz_uint16 extra_size, const void *pComment,
- mz_uint16 comment_size, mz_uint64 uncomp_size, mz_uint64 comp_size,
- mz_uint32 uncomp_crc32, mz_uint16 method, mz_uint16 bit_flags,
- mz_uint16 dos_time, mz_uint16 dos_date, mz_uint64 local_header_ofs,
- mz_uint32 ext_attributes) {
- mz_zip_internal_state *pState = pZip->m_pState;
- mz_uint32 central_dir_ofs = (mz_uint32)pState->m_central_dir.m_size;
- size_t orig_central_dir_size = pState->m_central_dir.m_size;
- mz_uint8 central_dir_header[MZ_ZIP_CENTRAL_DIR_HEADER_SIZE];
-
- // No zip64 support yet
- if ((local_header_ofs > 0xFFFFFFFF) ||
- (((mz_uint64)pState->m_central_dir.m_size +
- MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + filename_size + extra_size +
- comment_size) > 0xFFFFFFFF))
- return MZ_FALSE;
-
- if (!mz_zip_writer_create_central_dir_header(
- pZip, central_dir_header, filename_size, extra_size, comment_size,
- uncomp_size, comp_size, uncomp_crc32, method, bit_flags, dos_time,
- dos_date, local_header_ofs, ext_attributes))
- return MZ_FALSE;
-
- if ((!mz_zip_array_push_back(pZip, &pState->m_central_dir, central_dir_header,
- MZ_ZIP_CENTRAL_DIR_HEADER_SIZE)) ||
- (!mz_zip_array_push_back(pZip, &pState->m_central_dir, pFilename,
- filename_size)) ||
- (!mz_zip_array_push_back(pZip, &pState->m_central_dir, pExtra,
- extra_size)) ||
- (!mz_zip_array_push_back(pZip, &pState->m_central_dir, pComment,
- comment_size)) ||
- (!mz_zip_array_push_back(pZip, &pState->m_central_dir_offsets,
- &central_dir_ofs, 1))) {
- // Try to push the central directory array back into its original state.
- mz_zip_array_resize(pZip, &pState->m_central_dir, orig_central_dir_size,
- MZ_FALSE);
- return MZ_FALSE;
- }
-
- return MZ_TRUE;
-}
-
-static mz_bool mz_zip_writer_validate_archive_name(const char *pArchive_name) {
- // Basic ZIP archive filename validity checks: Valid filenames cannot start
- // with a forward slash, cannot contain a drive letter, and cannot use
- // DOS-style backward slashes.
- if (*pArchive_name == '/') return MZ_FALSE;
- while (*pArchive_name) {
- if ((*pArchive_name == '\\') || (*pArchive_name == ':')) return MZ_FALSE;
- pArchive_name++;
- }
- return MZ_TRUE;
-}
-
-static mz_uint mz_zip_writer_compute_padding_needed_for_file_alignment(
- mz_zip_archive *pZip) {
- mz_uint32 n;
- if (!pZip->m_file_offset_alignment) return 0;
- n = (mz_uint32)(pZip->m_archive_size & (pZip->m_file_offset_alignment - 1));
- return (pZip->m_file_offset_alignment - n) &
- (pZip->m_file_offset_alignment - 1);
-}
-
-static mz_bool mz_zip_writer_write_zeros(mz_zip_archive *pZip,
- mz_uint64 cur_file_ofs, mz_uint32 n) {
- char buf[4096];
- memset(buf, 0, MZ_MIN(sizeof(buf), n));
- while (n) {
- mz_uint32 s = MZ_MIN(sizeof(buf), n);
- if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_file_ofs, buf, s) != s)
- return MZ_FALSE;
- cur_file_ofs += s;
- n -= s;
- }
- return MZ_TRUE;
-}
-
-mz_bool mz_zip_writer_add_mem_ex(mz_zip_archive *pZip,
- const char *pArchive_name, const void *pBuf,
- size_t buf_size, const void *pComment,
- mz_uint16 comment_size,
- mz_uint level_and_flags, mz_uint64 uncomp_size,
- mz_uint32 uncomp_crc32) {
- mz_uint16 method = 0, dos_time = 0, dos_date = 0;
- mz_uint level, ext_attributes = 0, num_alignment_padding_bytes;
- mz_uint64 local_dir_header_ofs = pZip->m_archive_size,
- cur_archive_file_ofs = pZip->m_archive_size, comp_size = 0;
- size_t archive_name_size;
- mz_uint8 local_dir_header[MZ_ZIP_LOCAL_DIR_HEADER_SIZE];
- tdefl_compressor *pComp = NULL;
- mz_bool store_data_uncompressed;
- mz_zip_internal_state *pState;
-
- if ((int)level_and_flags < 0) level_and_flags = MZ_DEFAULT_LEVEL;
- level = level_and_flags & 0xF;
- store_data_uncompressed =
- ((!level) || (level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA));
-
- if ((!pZip) || (!pZip->m_pState) ||
- (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING) || ((buf_size) && (!pBuf)) ||
- (!pArchive_name) || ((comment_size) && (!pComment)) ||
- (pZip->m_total_files == 0xFFFF) || (level > MZ_UBER_COMPRESSION))
- return MZ_FALSE;
-
- pState = pZip->m_pState;
-
- if ((!(level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) && (uncomp_size))
- return MZ_FALSE;
- // No zip64 support yet
- if ((buf_size > 0xFFFFFFFF) || (uncomp_size > 0xFFFFFFFF)) return MZ_FALSE;
- if (!mz_zip_writer_validate_archive_name(pArchive_name)) return MZ_FALSE;
-
-#ifndef MINIZ_NO_TIME
- {
- time_t cur_time;
- time(&cur_time);
- mz_zip_time_to_dos_time(cur_time, &dos_time, &dos_date);
- }
-#endif // #ifndef MINIZ_NO_TIME
-
- archive_name_size = strlen(pArchive_name);
- if (archive_name_size > 0xFFFF) return MZ_FALSE;
-
- num_alignment_padding_bytes =
- mz_zip_writer_compute_padding_needed_for_file_alignment(pZip);
-
- // no zip64 support yet
- if ((pZip->m_total_files == 0xFFFF) ||
- ((pZip->m_archive_size + num_alignment_padding_bytes +
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE +
- comment_size + archive_name_size) > 0xFFFFFFFF))
- return MZ_FALSE;
-
- if ((archive_name_size) && (pArchive_name[archive_name_size - 1] == '/')) {
- // Set DOS Subdirectory attribute bit.
- ext_attributes |= 0x10;
- // Subdirectories cannot contain data.
- if ((buf_size) || (uncomp_size)) return MZ_FALSE;
- }
-
- // Try to do any allocations before writing to the archive, so if an
- // allocation fails the file remains unmodified. (A good idea if we're doing
- // an in-place modification.)
- if ((!mz_zip_array_ensure_room(
- pZip, &pState->m_central_dir,
- MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + archive_name_size + comment_size)) ||
- (!mz_zip_array_ensure_room(pZip, &pState->m_central_dir_offsets, 1)))
- return MZ_FALSE;
-
- if ((!store_data_uncompressed) && (buf_size)) {
- if (NULL == (pComp = (tdefl_compressor *)pZip->m_pAlloc(
- pZip->m_pAlloc_opaque, 1, sizeof(tdefl_compressor))))
- return MZ_FALSE;
- }
-
- if (!mz_zip_writer_write_zeros(
- pZip, cur_archive_file_ofs,
- num_alignment_padding_bytes + sizeof(local_dir_header))) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pComp);
- return MZ_FALSE;
- }
- local_dir_header_ofs += num_alignment_padding_bytes;
- if (pZip->m_file_offset_alignment) {
- MZ_ASSERT((local_dir_header_ofs & (pZip->m_file_offset_alignment - 1)) ==
- 0);
- }
- cur_archive_file_ofs +=
- num_alignment_padding_bytes + sizeof(local_dir_header);
-
- MZ_CLEAR_OBJ(local_dir_header);
- if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, pArchive_name,
- archive_name_size) != archive_name_size) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pComp);
- return MZ_FALSE;
- }
- cur_archive_file_ofs += archive_name_size;
-
- if (!(level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) {
- uncomp_crc32 =
- (mz_uint32)mz_crc32(MZ_CRC32_INIT, (const mz_uint8 *)pBuf, buf_size);
- uncomp_size = buf_size;
- if (uncomp_size <= 3) {
- level = 0;
- store_data_uncompressed = MZ_TRUE;
- }
- }
-
- if (store_data_uncompressed) {
- if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, pBuf,
- buf_size) != buf_size) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pComp);
- return MZ_FALSE;
- }
-
- cur_archive_file_ofs += buf_size;
- comp_size = buf_size;
-
- if (level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA) method = MZ_DEFLATED;
- } else if (buf_size) {
- mz_zip_writer_add_state state;
-
- state.m_pZip = pZip;
- state.m_cur_archive_file_ofs = cur_archive_file_ofs;
- state.m_comp_size = 0;
-
- if ((tdefl_init(pComp, mz_zip_writer_add_put_buf_callback, &state,
- tdefl_create_comp_flags_from_zip_params(
- level, -15, MZ_DEFAULT_STRATEGY)) !=
- TDEFL_STATUS_OKAY) ||
- (tdefl_compress_buffer(pComp, pBuf, buf_size, TDEFL_FINISH) !=
- TDEFL_STATUS_DONE)) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pComp);
- return MZ_FALSE;
- }
-
- comp_size = state.m_comp_size;
- cur_archive_file_ofs = state.m_cur_archive_file_ofs;
-
- method = MZ_DEFLATED;
- }
-
- pZip->m_pFree(pZip->m_pAlloc_opaque, pComp);
- pComp = NULL;
-
- // no zip64 support yet
- if ((comp_size > 0xFFFFFFFF) || (cur_archive_file_ofs > 0xFFFFFFFF))
- return MZ_FALSE;
-
- if (!mz_zip_writer_create_local_dir_header(
- pZip, local_dir_header, (mz_uint16)archive_name_size, 0, uncomp_size,
- comp_size, uncomp_crc32, method, 0, dos_time, dos_date))
- return MZ_FALSE;
-
- if (pZip->m_pWrite(pZip->m_pIO_opaque, local_dir_header_ofs, local_dir_header,
- sizeof(local_dir_header)) != sizeof(local_dir_header))
- return MZ_FALSE;
-
- if (!mz_zip_writer_add_to_central_dir(
- pZip, pArchive_name, (mz_uint16)archive_name_size, NULL, 0, pComment,
- comment_size, uncomp_size, comp_size, uncomp_crc32, method, 0,
- dos_time, dos_date, local_dir_header_ofs, ext_attributes))
- return MZ_FALSE;
-
- pZip->m_total_files++;
- pZip->m_archive_size = cur_archive_file_ofs;
-
- return MZ_TRUE;
-}
-
-#ifndef MINIZ_NO_STDIO
-mz_bool mz_zip_writer_add_file(mz_zip_archive *pZip, const char *pArchive_name,
- const char *pSrc_filename, const void *pComment,
- mz_uint16 comment_size,
- mz_uint level_and_flags) {
- mz_uint uncomp_crc32 = MZ_CRC32_INIT, level, num_alignment_padding_bytes;
- mz_uint16 method = 0, dos_time = 0, dos_date = 0, ext_attributes = 0;
- mz_uint64 local_dir_header_ofs = pZip->m_archive_size,
- cur_archive_file_ofs = pZip->m_archive_size, uncomp_size = 0,
- comp_size = 0;
- size_t archive_name_size;
- mz_uint8 local_dir_header[MZ_ZIP_LOCAL_DIR_HEADER_SIZE];
- MZ_FILE *pSrc_file = NULL;
-
- if ((int)level_and_flags < 0) level_and_flags = MZ_DEFAULT_LEVEL;
- level = level_and_flags & 0xF;
-
- if ((!pZip) || (!pZip->m_pState) ||
- (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING) || (!pArchive_name) ||
- ((comment_size) && (!pComment)) || (level > MZ_UBER_COMPRESSION))
- return MZ_FALSE;
- if (level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA) return MZ_FALSE;
- if (!mz_zip_writer_validate_archive_name(pArchive_name)) return MZ_FALSE;
-
- archive_name_size = strlen(pArchive_name);
- if (archive_name_size > 0xFFFF) return MZ_FALSE;
-
- num_alignment_padding_bytes =
- mz_zip_writer_compute_padding_needed_for_file_alignment(pZip);
-
- // no zip64 support yet
- if ((pZip->m_total_files == 0xFFFF) ||
- ((pZip->m_archive_size + num_alignment_padding_bytes +
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE +
- comment_size + archive_name_size) > 0xFFFFFFFF))
- return MZ_FALSE;
-
- if (!mz_zip_get_file_modified_time(pSrc_filename, &dos_time, &dos_date))
- return MZ_FALSE;
-
- pSrc_file = MZ_FOPEN(pSrc_filename, "rb");
- if (!pSrc_file) return MZ_FALSE;
- MZ_FSEEK64(pSrc_file, 0, SEEK_END);
- uncomp_size = MZ_FTELL64(pSrc_file);
- MZ_FSEEK64(pSrc_file, 0, SEEK_SET);
-
- if (uncomp_size > 0xFFFFFFFF) {
- // No zip64 support yet
- MZ_FCLOSE(pSrc_file);
- return MZ_FALSE;
- }
- if (uncomp_size <= 3) level = 0;
-
- if (!mz_zip_writer_write_zeros(
- pZip, cur_archive_file_ofs,
- num_alignment_padding_bytes + sizeof(local_dir_header))) {
- MZ_FCLOSE(pSrc_file);
- return MZ_FALSE;
- }
- local_dir_header_ofs += num_alignment_padding_bytes;
- if (pZip->m_file_offset_alignment) {
- MZ_ASSERT((local_dir_header_ofs & (pZip->m_file_offset_alignment - 1)) ==
- 0);
- }
- cur_archive_file_ofs +=
- num_alignment_padding_bytes + sizeof(local_dir_header);
-
- MZ_CLEAR_OBJ(local_dir_header);
- if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, pArchive_name,
- archive_name_size) != archive_name_size) {
- MZ_FCLOSE(pSrc_file);
- return MZ_FALSE;
- }
- cur_archive_file_ofs += archive_name_size;
-
- if (uncomp_size) {
- mz_uint64 uncomp_remaining = uncomp_size;
- void *pRead_buf =
- pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, MZ_ZIP_MAX_IO_BUF_SIZE);
- if (!pRead_buf) {
- MZ_FCLOSE(pSrc_file);
- return MZ_FALSE;
- }
-
- if (!level) {
- while (uncomp_remaining) {
- mz_uint n =
- (mz_uint)MZ_MIN((mz_uint)MZ_ZIP_MAX_IO_BUF_SIZE, uncomp_remaining);
- if ((MZ_FREAD(pRead_buf, 1, n, pSrc_file) != n) ||
- (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, pRead_buf,
- n) != n)) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf);
- MZ_FCLOSE(pSrc_file);
- return MZ_FALSE;
- }
- uncomp_crc32 =
- (mz_uint32)mz_crc32(uncomp_crc32, (const mz_uint8 *)pRead_buf, n);
- uncomp_remaining -= n;
- cur_archive_file_ofs += n;
- }
- comp_size = uncomp_size;
- } else {
- mz_bool result = MZ_FALSE;
- mz_zip_writer_add_state state;
- tdefl_compressor *pComp = (tdefl_compressor *)pZip->m_pAlloc(
- pZip->m_pAlloc_opaque, 1, sizeof(tdefl_compressor));
- if (!pComp) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf);
- MZ_FCLOSE(pSrc_file);
- return MZ_FALSE;
- }
-
- state.m_pZip = pZip;
- state.m_cur_archive_file_ofs = cur_archive_file_ofs;
- state.m_comp_size = 0;
-
- if (tdefl_init(pComp, mz_zip_writer_add_put_buf_callback, &state,
- tdefl_create_comp_flags_from_zip_params(
- level, -15, MZ_DEFAULT_STRATEGY)) !=
- TDEFL_STATUS_OKAY) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pComp);
- pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf);
- MZ_FCLOSE(pSrc_file);
- return MZ_FALSE;
- }
-
- for (;;) {
- size_t in_buf_size = (mz_uint32)MZ_MIN(uncomp_remaining,
- (mz_uint)MZ_ZIP_MAX_IO_BUF_SIZE);
- tdefl_status status;
-
- if (MZ_FREAD(pRead_buf, 1, in_buf_size, pSrc_file) != in_buf_size)
- break;
-
- uncomp_crc32 = (mz_uint32)mz_crc32(
- uncomp_crc32, (const mz_uint8 *)pRead_buf, in_buf_size);
- uncomp_remaining -= in_buf_size;
-
- status = tdefl_compress_buffer(
- pComp, pRead_buf, in_buf_size,
- uncomp_remaining ? TDEFL_NO_FLUSH : TDEFL_FINISH);
- if (status == TDEFL_STATUS_DONE) {
- result = MZ_TRUE;
- break;
- } else if (status != TDEFL_STATUS_OKAY)
- break;
- }
-
- pZip->m_pFree(pZip->m_pAlloc_opaque, pComp);
-
- if (!result) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf);
- MZ_FCLOSE(pSrc_file);
- return MZ_FALSE;
- }
-
- comp_size = state.m_comp_size;
- cur_archive_file_ofs = state.m_cur_archive_file_ofs;
-
- method = MZ_DEFLATED;
- }
-
- pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf);
- }
-
- MZ_FCLOSE(pSrc_file);
- pSrc_file = NULL;
-
- // no zip64 support yet
- if ((comp_size > 0xFFFFFFFF) || (cur_archive_file_ofs > 0xFFFFFFFF))
- return MZ_FALSE;
-
- if (!mz_zip_writer_create_local_dir_header(
- pZip, local_dir_header, (mz_uint16)archive_name_size, 0, uncomp_size,
- comp_size, uncomp_crc32, method, 0, dos_time, dos_date))
- return MZ_FALSE;
-
- if (pZip->m_pWrite(pZip->m_pIO_opaque, local_dir_header_ofs, local_dir_header,
- sizeof(local_dir_header)) != sizeof(local_dir_header))
- return MZ_FALSE;
-
- if (!mz_zip_writer_add_to_central_dir(
- pZip, pArchive_name, (mz_uint16)archive_name_size, NULL, 0, pComment,
- comment_size, uncomp_size, comp_size, uncomp_crc32, method, 0,
- dos_time, dos_date, local_dir_header_ofs, ext_attributes))
- return MZ_FALSE;
-
- pZip->m_total_files++;
- pZip->m_archive_size = cur_archive_file_ofs;
-
- return MZ_TRUE;
-}
-#endif // #ifndef MINIZ_NO_STDIO
-
-mz_bool mz_zip_writer_add_from_zip_reader(mz_zip_archive *pZip,
- mz_zip_archive *pSource_zip,
- mz_uint file_index) {
- mz_uint n, bit_flags, num_alignment_padding_bytes;
- mz_uint64 comp_bytes_remaining, local_dir_header_ofs;
- mz_uint64 cur_src_file_ofs, cur_dst_file_ofs;
- mz_uint32
- local_header_u32[(MZ_ZIP_LOCAL_DIR_HEADER_SIZE + sizeof(mz_uint32) - 1) /
- sizeof(mz_uint32)];
- mz_uint8 *pLocal_header = (mz_uint8 *)local_header_u32;
- mz_uint8 central_header[MZ_ZIP_CENTRAL_DIR_HEADER_SIZE];
- size_t orig_central_dir_size;
- mz_zip_internal_state *pState;
- void *pBuf;
- const mz_uint8 *pSrc_central_header;
-
- if ((!pZip) || (!pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING))
- return MZ_FALSE;
- if (NULL ==
- (pSrc_central_header = mz_zip_reader_get_cdh(pSource_zip, file_index)))
- return MZ_FALSE;
- pState = pZip->m_pState;
-
- num_alignment_padding_bytes =
- mz_zip_writer_compute_padding_needed_for_file_alignment(pZip);
-
- // no zip64 support yet
- if ((pZip->m_total_files == 0xFFFF) ||
- ((pZip->m_archive_size + num_alignment_padding_bytes +
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE) >
- 0xFFFFFFFF))
- return MZ_FALSE;
-
- cur_src_file_ofs =
- MZ_READ_LE32(pSrc_central_header + MZ_ZIP_CDH_LOCAL_HEADER_OFS);
- cur_dst_file_ofs = pZip->m_archive_size;
-
- if (pSource_zip->m_pRead(pSource_zip->m_pIO_opaque, cur_src_file_ofs,
- pLocal_header, MZ_ZIP_LOCAL_DIR_HEADER_SIZE) !=
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE)
- return MZ_FALSE;
- if (MZ_READ_LE32(pLocal_header) != MZ_ZIP_LOCAL_DIR_HEADER_SIG)
- return MZ_FALSE;
- cur_src_file_ofs += MZ_ZIP_LOCAL_DIR_HEADER_SIZE;
-
- if (!mz_zip_writer_write_zeros(pZip, cur_dst_file_ofs,
- num_alignment_padding_bytes))
- return MZ_FALSE;
- cur_dst_file_ofs += num_alignment_padding_bytes;
- local_dir_header_ofs = cur_dst_file_ofs;
- if (pZip->m_file_offset_alignment) {
- MZ_ASSERT((local_dir_header_ofs & (pZip->m_file_offset_alignment - 1)) ==
- 0);
- }
-
- if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_dst_file_ofs, pLocal_header,
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE) !=
- MZ_ZIP_LOCAL_DIR_HEADER_SIZE)
- return MZ_FALSE;
- cur_dst_file_ofs += MZ_ZIP_LOCAL_DIR_HEADER_SIZE;
-
- n = MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_FILENAME_LEN_OFS) +
- MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_EXTRA_LEN_OFS);
- comp_bytes_remaining =
- n + MZ_READ_LE32(pSrc_central_header + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS);
-
- if (NULL == (pBuf = pZip->m_pAlloc(
- pZip->m_pAlloc_opaque, 1,
- (size_t)MZ_MAX(sizeof(mz_uint32) * 4,
- MZ_MIN((mz_uint)MZ_ZIP_MAX_IO_BUF_SIZE,
- comp_bytes_remaining)))))
- return MZ_FALSE;
-
- while (comp_bytes_remaining) {
- n = (mz_uint)MZ_MIN((mz_uint)MZ_ZIP_MAX_IO_BUF_SIZE, comp_bytes_remaining);
- if (pSource_zip->m_pRead(pSource_zip->m_pIO_opaque, cur_src_file_ofs, pBuf,
- n) != n) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf);
- return MZ_FALSE;
- }
- cur_src_file_ofs += n;
-
- if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_dst_file_ofs, pBuf, n) != n) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf);
- return MZ_FALSE;
- }
- cur_dst_file_ofs += n;
-
- comp_bytes_remaining -= n;
- }
-
- bit_flags = MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_BIT_FLAG_OFS);
- if (bit_flags & 8) {
- // Copy data descriptor
- if (pSource_zip->m_pRead(pSource_zip->m_pIO_opaque, cur_src_file_ofs, pBuf,
- sizeof(mz_uint32) * 4) != sizeof(mz_uint32) * 4) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf);
- return MZ_FALSE;
- }
-
- n = sizeof(mz_uint32) * ((MZ_READ_LE32(pBuf) == 0x08074b50) ? 4 : 3);
- if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_dst_file_ofs, pBuf, n) != n) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf);
- return MZ_FALSE;
- }
-
- cur_src_file_ofs += n;
- cur_dst_file_ofs += n;
- }
- pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf);
-
- // no zip64 support yet
- if (cur_dst_file_ofs > 0xFFFFFFFF) return MZ_FALSE;
-
- orig_central_dir_size = pState->m_central_dir.m_size;
-
- memcpy(central_header, pSrc_central_header, MZ_ZIP_CENTRAL_DIR_HEADER_SIZE);
- MZ_WRITE_LE32(central_header + MZ_ZIP_CDH_LOCAL_HEADER_OFS,
- local_dir_header_ofs);
- if (!mz_zip_array_push_back(pZip, &pState->m_central_dir, central_header,
- MZ_ZIP_CENTRAL_DIR_HEADER_SIZE))
- return MZ_FALSE;
-
- n = MZ_READ_LE16(pSrc_central_header + MZ_ZIP_CDH_FILENAME_LEN_OFS) +
- MZ_READ_LE16(pSrc_central_header + MZ_ZIP_CDH_EXTRA_LEN_OFS) +
- MZ_READ_LE16(pSrc_central_header + MZ_ZIP_CDH_COMMENT_LEN_OFS);
- if (!mz_zip_array_push_back(
- pZip, &pState->m_central_dir,
- pSrc_central_header + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE, n)) {
- mz_zip_array_resize(pZip, &pState->m_central_dir, orig_central_dir_size,
- MZ_FALSE);
- return MZ_FALSE;
- }
-
- if (pState->m_central_dir.m_size > 0xFFFFFFFF) return MZ_FALSE;
- n = (mz_uint32)orig_central_dir_size;
- if (!mz_zip_array_push_back(pZip, &pState->m_central_dir_offsets, &n, 1)) {
- mz_zip_array_resize(pZip, &pState->m_central_dir, orig_central_dir_size,
- MZ_FALSE);
- return MZ_FALSE;
- }
-
- pZip->m_total_files++;
- pZip->m_archive_size = cur_dst_file_ofs;
-
- return MZ_TRUE;
-}
-
-mz_bool mz_zip_writer_finalize_archive(mz_zip_archive *pZip) {
- mz_zip_internal_state *pState;
- mz_uint64 central_dir_ofs, central_dir_size;
- mz_uint8 hdr[MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE];
-
- if ((!pZip) || (!pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING))
- return MZ_FALSE;
-
- pState = pZip->m_pState;
-
- // no zip64 support yet
- if ((pZip->m_total_files > 0xFFFF) ||
- ((pZip->m_archive_size + pState->m_central_dir.m_size +
- MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) > 0xFFFFFFFF))
- return MZ_FALSE;
-
- central_dir_ofs = 0;
- central_dir_size = 0;
- if (pZip->m_total_files) {
- // Write central directory
- central_dir_ofs = pZip->m_archive_size;
- central_dir_size = pState->m_central_dir.m_size;
- pZip->m_central_directory_file_ofs = central_dir_ofs;
- if (pZip->m_pWrite(pZip->m_pIO_opaque, central_dir_ofs,
- pState->m_central_dir.m_p,
- (size_t)central_dir_size) != central_dir_size)
- return MZ_FALSE;
- pZip->m_archive_size += central_dir_size;
- }
-
- // Write end of central directory record
- MZ_CLEAR_OBJ(hdr);
- MZ_WRITE_LE32(hdr + MZ_ZIP_ECDH_SIG_OFS,
- MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG);
- MZ_WRITE_LE16(hdr + MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS,
- pZip->m_total_files);
- MZ_WRITE_LE16(hdr + MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS, pZip->m_total_files);
- MZ_WRITE_LE32(hdr + MZ_ZIP_ECDH_CDIR_SIZE_OFS, central_dir_size);
- MZ_WRITE_LE32(hdr + MZ_ZIP_ECDH_CDIR_OFS_OFS, central_dir_ofs);
-
- if (pZip->m_pWrite(pZip->m_pIO_opaque, pZip->m_archive_size, hdr,
- sizeof(hdr)) != sizeof(hdr))
- return MZ_FALSE;
-#ifndef MINIZ_NO_STDIO
- if ((pState->m_pFile) && (MZ_FFLUSH(pState->m_pFile) == EOF)) return MZ_FALSE;
-#endif // #ifndef MINIZ_NO_STDIO
-
- pZip->m_archive_size += sizeof(hdr);
-
- pZip->m_zip_mode = MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED;
- return MZ_TRUE;
-}
-
-mz_bool mz_zip_writer_finalize_heap_archive(mz_zip_archive *pZip, void **pBuf,
- size_t *pSize) {
- if ((!pZip) || (!pZip->m_pState) || (!pBuf) || (!pSize)) return MZ_FALSE;
- if (pZip->m_pWrite != mz_zip_heap_write_func) return MZ_FALSE;
- if (!mz_zip_writer_finalize_archive(pZip)) return MZ_FALSE;
-
- *pBuf = pZip->m_pState->m_pMem;
- *pSize = pZip->m_pState->m_mem_size;
- pZip->m_pState->m_pMem = NULL;
- pZip->m_pState->m_mem_size = pZip->m_pState->m_mem_capacity = 0;
- return MZ_TRUE;
-}
-
-mz_bool mz_zip_writer_end(mz_zip_archive *pZip) {
- mz_zip_internal_state *pState;
- mz_bool status = MZ_TRUE;
- if ((!pZip) || (!pZip->m_pState) || (!pZip->m_pAlloc) || (!pZip->m_pFree) ||
- ((pZip->m_zip_mode != MZ_ZIP_MODE_WRITING) &&
- (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED)))
- return MZ_FALSE;
-
- pState = pZip->m_pState;
- pZip->m_pState = NULL;
- mz_zip_array_clear(pZip, &pState->m_central_dir);
- mz_zip_array_clear(pZip, &pState->m_central_dir_offsets);
- mz_zip_array_clear(pZip, &pState->m_sorted_central_dir_offsets);
-
-#ifndef MINIZ_NO_STDIO
- if (pState->m_pFile) {
- MZ_FCLOSE(pState->m_pFile);
- pState->m_pFile = NULL;
- }
-#endif // #ifndef MINIZ_NO_STDIO
-
- if ((pZip->m_pWrite == mz_zip_heap_write_func) && (pState->m_pMem)) {
- pZip->m_pFree(pZip->m_pAlloc_opaque, pState->m_pMem);
- pState->m_pMem = NULL;
- }
-
- pZip->m_pFree(pZip->m_pAlloc_opaque, pState);
- pZip->m_zip_mode = MZ_ZIP_MODE_INVALID;
- return status;
-}
-
-#ifndef MINIZ_NO_STDIO
-mz_bool mz_zip_add_mem_to_archive_file_in_place(
- const char *pZip_filename, const char *pArchive_name, const void *pBuf,
- size_t buf_size, const void *pComment, mz_uint16 comment_size,
- mz_uint level_and_flags) {
- mz_bool status, created_new_archive = MZ_FALSE;
- mz_zip_archive zip_archive;
- struct MZ_FILE_STAT_STRUCT file_stat;
- MZ_CLEAR_OBJ(zip_archive);
- if ((int)level_and_flags < 0) level_and_flags = MZ_DEFAULT_LEVEL;
- if ((!pZip_filename) || (!pArchive_name) || ((buf_size) && (!pBuf)) ||
- ((comment_size) && (!pComment)) ||
- ((level_and_flags & 0xF) > MZ_UBER_COMPRESSION))
- return MZ_FALSE;
- if (!mz_zip_writer_validate_archive_name(pArchive_name)) return MZ_FALSE;
- if (MZ_FILE_STAT(pZip_filename, &file_stat) != 0) {
- // Create a new archive.
- if (!mz_zip_writer_init_file(&zip_archive, pZip_filename, 0))
- return MZ_FALSE;
- created_new_archive = MZ_TRUE;
- } else {
- // Append to an existing archive.
- if (!mz_zip_reader_init_file(
- &zip_archive, pZip_filename,
- level_and_flags | MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY))
- return MZ_FALSE;
- if (!mz_zip_writer_init_from_reader(&zip_archive, pZip_filename)) {
- mz_zip_reader_end(&zip_archive);
- return MZ_FALSE;
- }
- }
- status =
- mz_zip_writer_add_mem_ex(&zip_archive, pArchive_name, pBuf, buf_size,
- pComment, comment_size, level_and_flags, 0, 0);
- // Always finalize, even if adding failed for some reason, so we have a valid
- // central directory. (This may not always succeed, but we can try.)
- if (!mz_zip_writer_finalize_archive(&zip_archive)) status = MZ_FALSE;
- if (!mz_zip_writer_end(&zip_archive)) status = MZ_FALSE;
- if ((!status) && (created_new_archive)) {
- // It's a new archive and something went wrong, so just delete it.
- int ignoredStatus = MZ_DELETE_FILE(pZip_filename);
- (void)ignoredStatus;
- }
- return status;
-}
-
-void *mz_zip_extract_archive_file_to_heap(const char *pZip_filename,
- const char *pArchive_name,
- size_t *pSize, mz_uint flags) {
- int file_index;
- mz_zip_archive zip_archive;
- void *p = NULL;
-
- if (pSize) *pSize = 0;
-
- if ((!pZip_filename) || (!pArchive_name)) return NULL;
-
- MZ_CLEAR_OBJ(zip_archive);
- if (!mz_zip_reader_init_file(
- &zip_archive, pZip_filename,
- flags | MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY))
- return NULL;
-
- if ((file_index = mz_zip_reader_locate_file(&zip_archive, pArchive_name, NULL,
- flags)) >= 0)
- p = mz_zip_reader_extract_to_heap(&zip_archive, file_index, pSize, flags);
-
- mz_zip_reader_end(&zip_archive);
- return p;
-}
-
-#endif // #ifndef MINIZ_NO_STDIO
-
-#endif // #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS
-
-#endif // #ifndef MINIZ_NO_ARCHIVE_APIS
-
-#ifdef __cplusplus
-}
-#endif
-
-#ifdef _MSC_VER
-#pragma warning(pop)
-#endif
-
-#endif // MINIZ_HEADER_FILE_ONLY
-
-/*
- This is free and unencumbered software released into the public domain.
-
- Anyone is free to copy, modify, publish, use, compile, sell, or
- distribute this software, either in source code form or as a compiled
- binary, for any purpose, commercial or non-commercial, and by any
- means.
-
- In jurisdictions that recognize copyright laws, the author or authors
- of this software dedicate any and all copyright interest in the
- software to the public domain. We make this dedication for the benefit
- of the public at large and to the detriment of our heirs and
- successors. We intend this dedication to be an overt act of
- relinquishment in perpetuity of all present and future rights to this
- software under copyright law.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- OTHER DEALINGS IN THE SOFTWARE.
-
- For more information, please refer to <http://unlicense.org/>
-*/
-
-// ---------------------- end of miniz ----------------------------------------
-
-#ifdef __clang__
-#pragma clang diagnostic pop
-#endif
-
-} // namespace miniz
-#else
-
-// Reuse MINIZ_LITTE_ENDIAN macro
-
-#if defined(_M_IX86) || defined(_M_X64) || defined(__i386__) || \
- defined(__i386) || defined(__i486__) || defined(__i486) || \
- defined(i386) || defined(__ia64__) || defined(__x86_64__)
-// MINIZ_X86_OR_X64_CPU is only used to help set the below macros.
-#define MINIZ_X86_OR_X64_CPU 1
-#endif
-
-#if defined(__sparcv9)
-// Big endian
-#else
-#if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) || MINIZ_X86_OR_X64_CPU
-// Set MINIZ_LITTLE_ENDIAN to 1 if the processor is little endian.
-#define MINIZ_LITTLE_ENDIAN 1
-#endif
-#endif
-
-#endif // TINYEXR_USE_MINIZ
-
// static bool IsBigEndian(void) {
// union {
// unsigned int i;
@@ -7079,7 +684,7 @@ static void cpy2(unsigned short *dst_val, const unsigned short *src_val) {
}
static void swap2(unsigned short *val) {
-#ifdef MINIZ_LITTLE_ENDIAN
+#ifdef TINYEXR_LITTLE_ENDIAN
(void)val;
#else
unsigned short tmp = *val;
@@ -7138,7 +743,7 @@ static void cpy4(float *dst_val, const float *src_val) {
#endif
static void swap4(unsigned int *val) {
-#ifdef MINIZ_LITTLE_ENDIAN
+#ifdef TINYEXR_LITTLE_ENDIAN
(void)val;
#else
unsigned int tmp = *val;
@@ -7153,7 +758,7 @@ static void swap4(unsigned int *val) {
}
static void swap4(int *val) {
-#ifdef MINIZ_LITTLE_ENDIAN
+#ifdef TINYEXR_LITTLE_ENDIAN
(void)val;
#else
int tmp = *val;
@@ -7168,7 +773,7 @@ static void swap4(int *val) {
}
static void swap4(float *val) {
-#ifdef MINIZ_LITTLE_ENDIAN
+#ifdef TINYEXR_LITTLE_ENDIAN
(void)val;
#else
float tmp = *val;
@@ -7199,7 +804,7 @@ static void cpy8(tinyexr::tinyexr_uint64 *dst_val, const tinyexr::tinyexr_uint64
#endif
static void swap8(tinyexr::tinyexr_uint64 *val) {
-#ifdef MINIZ_LITTLE_ENDIAN
+#ifdef TINYEXR_LITTLE_ENDIAN
(void)val;
#else
tinyexr::tinyexr_uint64 tmp = (*val);
@@ -7218,12 +823,11 @@ static void swap8(tinyexr::tinyexr_uint64 *val) {
}
// https://gist.github.com/rygorous/2156668
-// Reuse MINIZ_LITTLE_ENDIAN flag from miniz.
union FP32 {
unsigned int u;
float f;
struct {
-#if MINIZ_LITTLE_ENDIAN
+#if TINYEXR_LITTLE_ENDIAN
unsigned int Mantissa : 23;
unsigned int Exponent : 8;
unsigned int Sign : 1;
@@ -7243,7 +847,7 @@ union FP32 {
union FP16 {
unsigned short u;
struct {
-#if MINIZ_LITTLE_ENDIAN
+#if TINYEXR_LITTLE_ENDIAN
unsigned int Mantissa : 10;
unsigned int Exponent : 5;
unsigned int Sign : 1;
@@ -7351,7 +955,7 @@ static const char *ReadString(std::string *s, const char *ptr, size_t len) {
}
if (size_t(q - ptr) >= len) {
- (*s) = std::string();
+ (*s).clear();
return NULL;
}
@@ -7438,6 +1042,7 @@ static void WriteAttributeToMemory(std::vector<unsigned char> *out,
typedef struct {
std::string name; // less than 255 bytes long
int pixel_type;
+ int requested_pixel_type;
int x_sampling;
int y_sampling;
unsigned char p_linear;
@@ -7465,6 +1070,7 @@ struct HeaderInfo {
int chunk_count;
// Tiled format
+ int tiled; // Non-zero if the part is tiled.
int tile_size_x;
int tile_size_y;
int tile_level_mode;
@@ -7474,6 +1080,11 @@ struct HeaderInfo {
int compression_type;
+ // required for multi-part or non-image files
+ std::string name;
+ // required for multi-part or non-image files
+ std::string type;
+
void clear() {
channels.clear();
attributes.clear();
@@ -7495,6 +1106,7 @@ struct HeaderInfo {
chunk_count = 0;
// Tiled format
+ tiled = 0;
tile_size_x = 0;
tile_size_y = 0;
tile_level_mode = 0;
@@ -7502,6 +1114,9 @@ struct HeaderInfo {
header_len = 0;
compression_type = 0;
+
+ name.clear();
+ type.clear();
}
};
@@ -7558,7 +1173,7 @@ static void WriteChannelInfo(std::vector<unsigned char> &data,
// Calculate total size.
for (size_t c = 0; c < channels.size(); c++) {
- sz += strlen(channels[c].name.c_str()) + 1; // +1 for \0
+ sz += channels[c].name.length() + 1; // +1 for \0
sz += 16; // 4 * int
}
data.resize(sz + 1);
@@ -7566,12 +1181,12 @@ static void WriteChannelInfo(std::vector<unsigned char> &data,
unsigned char *p = &data.at(0);
for (size_t c = 0; c < channels.size(); c++) {
- memcpy(p, channels[c].name.c_str(), strlen(channels[c].name.c_str()));
- p += strlen(channels[c].name.c_str());
+ memcpy(p, channels[c].name.c_str(), channels[c].name.length());
+ p += channels[c].name.length();
(*p) = '\0';
p++;
- int pixel_type = channels[c].pixel_type;
+ int pixel_type = channels[c].requested_pixel_type;
int x_sampling = channels[c].x_sampling;
int y_sampling = channels[c].y_sampling;
tinyexr::swap4(&pixel_type);
@@ -7650,11 +1265,11 @@ static void CompressZip(unsigned char *dst,
// Compress the data using miniz
//
- miniz::mz_ulong outSize = miniz::mz_compressBound(src_size);
- int ret = miniz::mz_compress(
+ mz_ulong outSize = mz_compressBound(src_size);
+ int ret = mz_compress(
dst, &outSize, static_cast<const unsigned char *>(&tmpBuf.at(0)),
src_size);
- assert(ret == miniz::MZ_OK);
+ assert(ret == MZ_OK);
(void)ret;
compressedSize = outSize;
@@ -7687,8 +1302,8 @@ static bool DecompressZip(unsigned char *dst,
#if TINYEXR_USE_MINIZ
int ret =
- miniz::mz_uncompress(&tmpBuf.at(0), uncompressed_size, src, src_size);
- if (miniz::MZ_OK != ret) {
+ mz_uncompress(&tmpBuf.at(0), uncompressed_size, src, src_size);
+ if (MZ_OK != ret) {
return false;
}
#else
@@ -8989,7 +2604,8 @@ static bool getCode(int po, int rlc, long long &c, int &lc, const char *&in,
if (po == rlc) {
if (lc < 8) {
/* TinyEXR issue 78 */
- if ((in + 1) >= in_end) {
+ /* TinyEXR issue 160. in + 1 -> in */
+ if (in >= in_end) {
return false;
}
@@ -9332,7 +2948,7 @@ static bool CompressPiz(unsigned char *outPtr, unsigned int *outSize,
unsigned short minNonZero;
unsigned short maxNonZero;
-#if !MINIZ_LITTLE_ENDIAN
+#if !TINYEXR_LITTLE_ENDIAN
// @todo { PIZ compression on BigEndian architecture. }
assert(0);
return false;
@@ -9355,7 +2971,7 @@ static bool CompressPiz(unsigned char *outPtr, unsigned int *outSize,
// cd.ys = c.channel().ySampling;
size_t pixelSize = sizeof(int); // UINT and FLOAT
- if (channelInfo[c].pixel_type == TINYEXR_PIXELTYPE_HALF) {
+ if (channelInfo[c].requested_pixel_type == TINYEXR_PIXELTYPE_HALF) {
pixelSize = sizeof(short);
}
@@ -9445,10 +3061,10 @@ static bool CompressPiz(unsigned char *outPtr, unsigned int *outSize,
}
static bool DecompressPiz(unsigned char *outPtr, const unsigned char *inPtr,
- size_t tmpBufSize, size_t inLen, int num_channels,
+ size_t tmpBufSizeInBytes, size_t inLen, int num_channels,
const EXRChannelInfo *channels, int data_width,
int num_lines) {
- if (inLen == tmpBufSize) {
+ if (inLen == tmpBufSizeInBytes) {
// Data is not compressed(Issue 40).
memcpy(outPtr, inPtr, inLen);
return true;
@@ -9458,7 +3074,7 @@ static bool DecompressPiz(unsigned char *outPtr, const unsigned char *inPtr,
unsigned short minNonZero;
unsigned short maxNonZero;
-#if !MINIZ_LITTLE_ENDIAN
+#if !TINYEXR_LITTLE_ENDIAN
// @todo { PIZ compression on BigEndian architecture. }
assert(0);
return false;
@@ -9501,7 +3117,7 @@ static bool DecompressPiz(unsigned char *outPtr, const unsigned char *inPtr,
return false;
}
- std::vector<unsigned short> tmpBuffer(tmpBufSize);
+ std::vector<unsigned short> tmpBuffer(tmpBufSizeInBytes / sizeof(unsigned short));
hufUncompress(reinterpret_cast<const char *>(ptr), length, &tmpBuffer);
//
@@ -9543,7 +3159,7 @@ static bool DecompressPiz(unsigned char *outPtr, const unsigned char *inPtr,
// Expand the pixel data to their original range
//
- applyLut(lut.data(), &tmpBuffer.at(0), static_cast<int>(tmpBufSize));
+ applyLut(lut.data(), &tmpBuffer.at(0), static_cast<int>(tmpBufSizeInBytes / sizeof(unsigned short)));
for (int y = 0; y < num_lines; y++) {
for (size_t i = 0; i < channelData.size(); ++i) {
@@ -9802,6 +3418,9 @@ static bool CompressZfp(std::vector<unsigned char> *outBuf,
// -----------------------------------------------------------------
//
+// heuristics
+#define TINYEXR_DIMENSION_THRESHOLD (1024 * 8192)
+
// TODO(syoyo): Refactor function arguments.
static bool DecodePixelData(/* out */ unsigned char **out_images,
const int *requested_pixel_types,
@@ -10432,8 +4051,8 @@ static bool DecodeTiledPixelData(
const EXRAttribute *attributes, size_t num_channels,
const EXRChannelInfo *channels,
const std::vector<size_t> &channel_offset_list) {
- if (tile_size_x > data_width || tile_size_y > data_height ||
- tile_size_x * tile_offset_x > data_width ||
+ // Here, data_width and data_height are the dimensions of the current (sub)level.
+ if (tile_size_x * tile_offset_x > data_width ||
tile_size_y * tile_offset_y > data_height) {
return false;
}
@@ -10541,6 +4160,7 @@ static inline std::wstring UTF8ToWchar(const std::string &str) {
}
#endif
+
static int ParseEXRHeader(HeaderInfo *info, bool *empty_header,
const EXRVersion *version, std::string *err,
const unsigned char *buf, size_t size) {
@@ -10579,6 +4199,11 @@ static int ParseEXRHeader(HeaderInfo *info, bool *empty_header,
bool has_pixel_aspect_ratio = false;
bool has_screen_window_center = false;
bool has_screen_window_width = false;
+ bool has_name = false;
+ bool has_type = false;
+
+ info->name.clear();
+ info->type.clear();
info->data_window.min_x = 0;
info->data_window.min_y = 0;
@@ -10594,6 +4219,7 @@ static int ParseEXRHeader(HeaderInfo *info, bool *empty_header,
info->screen_window_width = -1.0f;
info->pixel_aspect_ratio = -1.0f;
+ info->tiled = 0;
info->tile_size_x = -1;
info->tile_size_y = -1;
info->tile_level_mode = -1;
@@ -10628,7 +4254,8 @@ static int ParseEXRHeader(HeaderInfo *info, bool *empty_header,
marker += marker_size;
size -= marker_size;
- if (version->tiled && attr_name.compare("tiles") == 0) {
+ // For a multipart file, the version field 9th bit is 0.
+ if ((version->tiled || version->multipart || version->non_image) && attr_name.compare("tiles") == 0) {
unsigned int x_size, y_size;
unsigned char tile_mode;
assert(data.size() == 9);
@@ -10652,7 +4279,7 @@ static int ParseEXRHeader(HeaderInfo *info, bool *empty_header,
// mode = levelMode + roundingMode * 16
info->tile_level_mode = tile_mode & 0x3;
info->tile_rounding_mode = (tile_mode >> 4) & 0x1;
-
+ info->tiled = 1;
} else if (attr_name.compare("compression") == 0) {
bool ok = false;
if (data[0] < TINYEXR_COMPRESSIONTYPE_PIZ) {
@@ -10771,6 +4398,22 @@ static int ParseEXRHeader(HeaderInfo *info, bool *empty_header,
memcpy(&info->chunk_count, &data.at(0), sizeof(int));
tinyexr::swap4(&info->chunk_count);
}
+ } else if (attr_name.compare("name") == 0) {
+ if (!data.empty() && data[0]) {
+ data.push_back(0);
+ size_t len = strlen(reinterpret_cast<const char*>(&data[0]));
+ info->name.resize(len);
+ info->name.assign(reinterpret_cast<const char*>(&data[0]), len);
+ has_name = true;
+ }
+ } else if (attr_name.compare("type") == 0) {
+ if (!data.empty() && data[0]) {
+ data.push_back(0);
+ size_t len = strlen(reinterpret_cast<const char*>(&data[0]));
+ info->type.resize(len);
+ info->type.assign(reinterpret_cast<const char*>(&data[0]), len);
+ has_type = true;
+ }
} else {
// Custom attribute(up to TINYEXR_MAX_CUSTOM_ATTRIBUTES)
if (info->attributes.size() < TINYEXR_MAX_CUSTOM_ATTRIBUTES) {
@@ -10835,6 +4478,17 @@ static int ParseEXRHeader(HeaderInfo *info, bool *empty_header,
<< std::endl;
}
+ if (version->multipart || version->non_image) {
+ if (!has_name) {
+ ss_err << "\"name\" attribute not found in the header."
+ << std::endl;
+ }
+ if (!has_type) {
+ ss_err << "\"type\" attribute not found in the header."
+ << std::endl;
+ }
+ }
+
if (!(ss_err.str().empty())) {
if (err) {
(*err) += ss_err.str();
@@ -10865,12 +4519,30 @@ static void ConvertHeader(EXRHeader *exr_header, const HeaderInfo &info) {
exr_header->data_window.max_y = info.data_window.max_y;
exr_header->line_order = info.line_order;
exr_header->compression_type = info.compression_type;
-
+ exr_header->tiled = info.tiled;
exr_header->tile_size_x = info.tile_size_x;
exr_header->tile_size_y = info.tile_size_y;
exr_header->tile_level_mode = info.tile_level_mode;
exr_header->tile_rounding_mode = info.tile_rounding_mode;
+ EXRSetNameAttr(exr_header, info.name.c_str());
+
+ if (!info.type.empty()) {
+ if (info.type == "scanlineimage") {
+ assert(!exr_header->tiled);
+ } else if (info.type == "tiledimage") {
+ assert(exr_header->tiled);
+ } else if (info.type == "deeptile") {
+ exr_header->non_image = 1;
+ assert(exr_header->tiled);
+ } else if (info.type == "deepscanline") {
+ exr_header->non_image = 1;
+ assert(!exr_header->tiled);
+ } else {
+ assert(false);
+ }
+ }
+
exr_header->num_channels = static_cast<int>(info.channels.size());
exr_header->channels = static_cast<EXRChannelInfo *>(malloc(
@@ -10932,8 +4604,216 @@ static void ConvertHeader(EXRHeader *exr_header, const HeaderInfo &info) {
exr_header->header_len = info.header_len;
}
+struct OffsetData {
+ OffsetData() : num_x_levels(0), num_y_levels(0) {}
+ std::vector<std::vector<std::vector <tinyexr::tinyexr_uint64> > > offsets;
+ int num_x_levels;
+ int num_y_levels;
+};
+
+int LevelIndex(int lx, int ly, int tile_level_mode, int num_x_levels) {
+ switch (tile_level_mode) {
+ case TINYEXR_TILE_ONE_LEVEL:
+ return 0;
+
+ case TINYEXR_TILE_MIPMAP_LEVELS:
+ return lx;
+
+ case TINYEXR_TILE_RIPMAP_LEVELS:
+ return lx + ly * num_x_levels;
+
+ default:
+ assert(false);
+ }
+ return 0;
+}
+
+static int LevelSize(int toplevel_size, int level, int tile_rounding_mode) {
+ assert(level >= 0);
+
+ int b = (int)(1u << (unsigned)level);
+ int level_size = toplevel_size / b;
+
+ if (tile_rounding_mode == TINYEXR_TILE_ROUND_UP && level_size * b < toplevel_size)
+ level_size += 1;
+
+ return std::max(level_size, 1);
+}
+
+static int DecodeTiledLevel(EXRImage* exr_image, const EXRHeader* exr_header,
+ const OffsetData& offset_data,
+ const std::vector<size_t>& channel_offset_list,
+ int pixel_data_size,
+ const unsigned char* head, const size_t size,
+ std::string* err) {
+ int num_channels = exr_header->num_channels;
+
+ int level_index = LevelIndex(exr_image->level_x, exr_image->level_y, exr_header->tile_level_mode, offset_data.num_x_levels);
+ int num_y_tiles = (int)offset_data.offsets[level_index].size();
+ assert(num_y_tiles);
+ int num_x_tiles = (int)offset_data.offsets[level_index][0].size();
+ assert(num_x_tiles);
+ int num_tiles = num_x_tiles * num_y_tiles;
+
+ int err_code = TINYEXR_SUCCESS;
+
+ enum {
+ EF_SUCCESS = 0,
+ EF_INVALID_DATA = 1,
+ EF_INSUFFICIENT_DATA = 2,
+ EF_FAILED_TO_DECODE = 4
+ };
+#if TINYEXR_HAS_CXX11 && (TINYEXR_USE_THREAD > 0)
+ std::atomic<unsigned> error_flag(EF_SUCCESS);
+#else
+ unsigned error_flag(EF_SUCCESS);
+#endif
+
+ // Although the spec says : "...the data window is subdivided into an array of smaller rectangles...",
+ // the IlmImf library allows the dimensions of the tile to be larger (or equal) than the dimensions of the data window.
+#if 0
+ if ((exr_header->tile_size_x > exr_image->width || exr_header->tile_size_y > exr_image->height) &&
+ exr_image->level_x == 0 && exr_image->level_y == 0) {
+ if (err) {
+ (*err) += "Failed to decode tile data.\n";
+ }
+ err_code = TINYEXR_ERROR_INVALID_DATA;
+ }
+#endif
+ exr_image->tiles = static_cast<EXRTile*>(
+ calloc(sizeof(EXRTile), static_cast<size_t>(num_tiles)));
+
+#if TINYEXR_HAS_CXX11 && (TINYEXR_USE_THREAD > 0)
+ std::vector<std::thread> workers;
+ std::atomic<int> tile_count(0);
+
+ int num_threads = std::max(1, int(std::thread::hardware_concurrency()));
+ if (num_threads > int(num_tiles)) {
+ num_threads = int(num_tiles);
+ }
+
+ for (int t = 0; t < num_threads; t++) {
+ workers.emplace_back(std::thread([&]()
+ {
+ int tile_idx = 0;
+ while ((tile_idx = tile_count++) < num_tiles) {
+
+#else
+#if TINYEXR_USE_OPENMP
+#pragma omp parallel for
+#endif
+ for (int tile_idx = 0; tile_idx < num_tiles; tile_idx++) {
+#endif
+ // Allocate memory for each tile.
+ exr_image->tiles[tile_idx].images = tinyexr::AllocateImage(
+ num_channels, exr_header->channels,
+ exr_header->requested_pixel_types, exr_header->tile_size_x,
+ exr_header->tile_size_y);
+
+ int x_tile = tile_idx % num_x_tiles;
+ int y_tile = tile_idx / num_x_tiles;
+ // 16 byte: tile coordinates
+ // 4 byte : data size
+ // ~ : data(uncompressed or compressed)
+ tinyexr::tinyexr_uint64 offset = offset_data.offsets[level_index][y_tile][x_tile];
+ if (offset + sizeof(int) * 5 > size) {
+ // Insufficient data size.
+ error_flag |= EF_INSUFFICIENT_DATA;
+ continue;
+ }
+
+ size_t data_size =
+ size_t(size - (offset + sizeof(int) * 5));
+ const unsigned char* data_ptr =
+ reinterpret_cast<const unsigned char*>(head + offset);
+
+ int tile_coordinates[4];
+ memcpy(tile_coordinates, data_ptr, sizeof(int) * 4);
+ tinyexr::swap4(&tile_coordinates[0]);
+ tinyexr::swap4(&tile_coordinates[1]);
+ tinyexr::swap4(&tile_coordinates[2]);
+ tinyexr::swap4(&tile_coordinates[3]);
+
+ if (tile_coordinates[2] != exr_image->level_x) {
+ // Invalid data.
+ error_flag |= EF_INVALID_DATA;
+ continue;
+ }
+ if (tile_coordinates[3] != exr_image->level_y) {
+ // Invalid data.
+ error_flag |= EF_INVALID_DATA;
+ continue;
+ }
+
+ int data_len;
+ memcpy(&data_len, data_ptr + 16,
+ sizeof(int)); // 16 = sizeof(tile_coordinates)
+ tinyexr::swap4(&data_len);
+
+ if (data_len < 2 || size_t(data_len) > data_size) {
+ // Insufficient data size.
+ error_flag |= EF_INSUFFICIENT_DATA;
+ continue;
+ }
+
+ // Move to data addr: 20 = 16 + 4;
+ data_ptr += 20;
+ bool ret = tinyexr::DecodeTiledPixelData(
+ exr_image->tiles[tile_idx].images,
+ &(exr_image->tiles[tile_idx].width),
+ &(exr_image->tiles[tile_idx].height),
+ exr_header->requested_pixel_types, data_ptr,
+ static_cast<size_t>(data_len), exr_header->compression_type,
+ exr_header->line_order,
+ exr_image->width, exr_image->height,
+ tile_coordinates[0], tile_coordinates[1], exr_header->tile_size_x,
+ exr_header->tile_size_y, static_cast<size_t>(pixel_data_size),
+ static_cast<size_t>(exr_header->num_custom_attributes),
+ exr_header->custom_attributes,
+ static_cast<size_t>(exr_header->num_channels),
+ exr_header->channels, channel_offset_list);
+
+ if (!ret) {
+ // Failed to decode tile data.
+ error_flag |= EF_FAILED_TO_DECODE;
+ }
+
+ exr_image->tiles[tile_idx].offset_x = tile_coordinates[0];
+ exr_image->tiles[tile_idx].offset_y = tile_coordinates[1];
+ exr_image->tiles[tile_idx].level_x = tile_coordinates[2];
+ exr_image->tiles[tile_idx].level_y = tile_coordinates[3];
+
+#if TINYEXR_HAS_CXX11 && (TINYEXR_USE_THREAD > 0)
+ }
+ }));
+ } // num_thread loop
+
+ for (auto& t : workers) {
+ t.join();
+ }
+
+#else
+ } // parallel for
+#endif
+
+ // Even in the event of an error, the reserved memory may be freed.
+ exr_image->num_channels = num_channels;
+ exr_image->num_tiles = static_cast<int>(num_tiles);
+
+ if (error_flag) err_code = TINYEXR_ERROR_INVALID_DATA;
+ if (err) {
+ if (error_flag & EF_INSUFFICIENT_DATA) {
+ (*err) += "Insufficient data length.\n";
+ }
+ if (error_flag & EF_FAILED_TO_DECODE) {
+ (*err) += "Failed to decode tile data.\n";
+ }
+ }
+ return err_code;
+}
+
static int DecodeChunk(EXRImage *exr_image, const EXRHeader *exr_header,
- const std::vector<tinyexr::tinyexr_uint64> &offsets,
+ const OffsetData& offset_data,
const unsigned char *head, const size_t size,
std::string *err) {
int num_channels = exr_header->num_channels;
@@ -10971,8 +4851,7 @@ static int DecodeChunk(EXRImage *exr_image, const EXRHeader *exr_header,
// Do not allow too large data_width and data_height. header invalid?
{
- const int threshold = 1024 * 8192; // heuristics
- if ((data_width > threshold) || (data_height > threshold)) {
+ if ((data_width > TINYEXR_DIMENSION_THRESHOLD) || (data_height > TINYEXR_DIMENSION_THRESHOLD)) {
if (err) {
std::stringstream ss;
ss << "data_with or data_height too large. data_width: " << data_width
@@ -10982,8 +4861,21 @@ static int DecodeChunk(EXRImage *exr_image, const EXRHeader *exr_header,
}
return TINYEXR_ERROR_INVALID_DATA;
}
+ if (exr_header->tiled) {
+ if ((exr_header->tile_size_x > TINYEXR_DIMENSION_THRESHOLD) || (exr_header->tile_size_y > TINYEXR_DIMENSION_THRESHOLD)) {
+ if (err) {
+ std::stringstream ss;
+ ss << "tile with or tile height too large. tile width: " << exr_header->tile_size_x
+ << ", "
+ << "tile height = " << exr_header->tile_size_y << std::endl;
+ (*err) += ss.str();
+ }
+ return TINYEXR_ERROR_INVALID_DATA;
+ }
+ }
}
+ const std::vector<tinyexr::tinyexr_uint64>& offsets = offset_data.offsets[0][0];
size_t num_blocks = offsets.size();
std::vector<size_t> channel_offset_list;
@@ -10998,7 +4890,11 @@ static int DecodeChunk(EXRImage *exr_image, const EXRHeader *exr_header,
return TINYEXR_ERROR_INVALID_DATA;
}
- bool invalid_data = false; // TODO(LTE): Use atomic lock for MT safety.
+#if TINYEXR_HAS_CXX11 && (TINYEXR_USE_THREAD > 0)
+ std::atomic<bool> invalid_data(false);
+#else
+ bool invalid_data(false);
+#endif
if (exr_header->tiled) {
// value check
@@ -11019,136 +4915,60 @@ static int DecodeChunk(EXRImage *exr_image, const EXRHeader *exr_header,
}
return TINYEXR_ERROR_INVALID_HEADER;
}
-
- size_t num_tiles = offsets.size(); // = # of blocks
-
- exr_image->tiles = static_cast<EXRTile *>(
- calloc(sizeof(EXRTile), static_cast<size_t>(num_tiles)));
-
- int err_code = TINYEXR_SUCCESS;
-
-#if (__cplusplus > 199711L) && (TINYEXR_USE_THREAD > 0)
-
- std::vector<std::thread> workers;
- std::atomic<size_t> tile_count(0);
-
- int num_threads = std::max(1, int(std::thread::hardware_concurrency()));
- if (num_threads > int(num_tiles)) {
- num_threads = int(num_tiles);
- }
-
- for (int t = 0; t < num_threads; t++) {
- workers.emplace_back(std::thread([&]() {
- size_t tile_idx = 0;
- while ((tile_idx = tile_count++) < num_tiles) {
-
-#else
- for (size_t tile_idx = 0; tile_idx < num_tiles; tile_idx++) {
-#endif
- // Allocate memory for each tile.
- exr_image->tiles[tile_idx].images = tinyexr::AllocateImage(
- num_channels, exr_header->channels,
- exr_header->requested_pixel_types, exr_header->tile_size_x,
- exr_header->tile_size_y);
-
- // 16 byte: tile coordinates
- // 4 byte : data size
- // ~ : data(uncompressed or compressed)
- if (offsets[tile_idx] + sizeof(int) * 5 > size) {
- // TODO(LTE): atomic
- if (err) {
- (*err) += "Insufficient data size.\n";
- }
- err_code = TINYEXR_ERROR_INVALID_DATA;
- break;
- }
-
- size_t data_size =
- size_t(size - (offsets[tile_idx] + sizeof(int) * 5));
- const unsigned char *data_ptr =
- reinterpret_cast<const unsigned char *>(head + offsets[tile_idx]);
-
- int tile_coordinates[4];
- memcpy(tile_coordinates, data_ptr, sizeof(int) * 4);
- tinyexr::swap4(&tile_coordinates[0]);
- tinyexr::swap4(&tile_coordinates[1]);
- tinyexr::swap4(&tile_coordinates[2]);
- tinyexr::swap4(&tile_coordinates[3]);
-
- // @todo{ LoD }
- if (tile_coordinates[2] != 0) {
- err_code = TINYEXR_ERROR_UNSUPPORTED_FEATURE;
- break;
- }
- if (tile_coordinates[3] != 0) {
- err_code = TINYEXR_ERROR_UNSUPPORTED_FEATURE;
- break;
- }
-
- int data_len;
- memcpy(&data_len, data_ptr + 16,
- sizeof(int)); // 16 = sizeof(tile_coordinates)
- tinyexr::swap4(&data_len);
-
- if (data_len < 4 || size_t(data_len) > data_size) {
- // TODO(LTE): atomic
- if (err) {
- (*err) += "Insufficient data length.\n";
- }
- err_code = TINYEXR_ERROR_INVALID_DATA;
- break;
- }
-
- // Move to data addr: 20 = 16 + 4;
- data_ptr += 20;
-
- bool ret = tinyexr::DecodeTiledPixelData(
- exr_image->tiles[tile_idx].images,
- &(exr_image->tiles[tile_idx].width),
- &(exr_image->tiles[tile_idx].height),
- exr_header->requested_pixel_types, data_ptr,
- static_cast<size_t>(data_len), exr_header->compression_type,
- exr_header->line_order, data_width, data_height,
- tile_coordinates[0], tile_coordinates[1], exr_header->tile_size_x,
- exr_header->tile_size_y, static_cast<size_t>(pixel_data_size),
- static_cast<size_t>(exr_header->num_custom_attributes),
- exr_header->custom_attributes,
- static_cast<size_t>(exr_header->num_channels),
- exr_header->channels, channel_offset_list);
-
- if (!ret) {
- // TODO(LTE): atomic
- if (err) {
- (*err) += "Failed to decode tile data.\n";
- }
- err_code = TINYEXR_ERROR_INVALID_DATA;
+ if (exr_header->tile_level_mode != TINYEXR_TILE_RIPMAP_LEVELS) {
+ EXRImage* level_image = NULL;
+ for (int level = 0; level < offset_data.num_x_levels; ++level) {
+ if (!level_image) {
+ level_image = exr_image;
+ } else {
+ level_image->next_level = new EXRImage;
+ InitEXRImage(level_image->next_level);
+ level_image = level_image->next_level;
+ }
+ level_image->width =
+ LevelSize(exr_header->data_window.max_x - exr_header->data_window.min_x + 1, level, exr_header->tile_rounding_mode);
+ level_image->height =
+ LevelSize(exr_header->data_window.max_y - exr_header->data_window.min_y + 1, level, exr_header->tile_rounding_mode);
+ level_image->level_x = level;
+ level_image->level_y = level;
+
+ int ret = DecodeTiledLevel(level_image, exr_header,
+ offset_data,
+ channel_offset_list,
+ pixel_data_size,
+ head, size,
+ err);
+ if (ret != TINYEXR_SUCCESS) return ret;
+ }
+ } else {
+ EXRImage* level_image = NULL;
+ for (int level_y = 0; level_y < offset_data.num_y_levels; ++level_y)
+ for (int level_x = 0; level_x < offset_data.num_x_levels; ++level_x) {
+ if (!level_image) {
+ level_image = exr_image;
+ } else {
+ level_image->next_level = new EXRImage;
+ InitEXRImage(level_image->next_level);
+ level_image = level_image->next_level;
}
- exr_image->tiles[tile_idx].offset_x = tile_coordinates[0];
- exr_image->tiles[tile_idx].offset_y = tile_coordinates[1];
- exr_image->tiles[tile_idx].level_x = tile_coordinates[2];
- exr_image->tiles[tile_idx].level_y = tile_coordinates[3];
-
-#if (__cplusplus > 199711L) && (TINYEXR_USE_THREAD > 0)
+ level_image->width =
+ LevelSize(exr_header->data_window.max_x - exr_header->data_window.min_x + 1, level_x, exr_header->tile_rounding_mode);
+ level_image->height =
+ LevelSize(exr_header->data_window.max_y - exr_header->data_window.min_y + 1, level_y, exr_header->tile_rounding_mode);
+ level_image->level_x = level_x;
+ level_image->level_y = level_y;
+
+ int ret = DecodeTiledLevel(level_image, exr_header,
+ offset_data,
+ channel_offset_list,
+ pixel_data_size,
+ head, size,
+ err);
+ if (ret != TINYEXR_SUCCESS) return ret;
}
- }));
- } // num_thread loop
-
- for (auto &t : workers) {
- t.join();
}
-
-#else
- }
-#endif
-
- if (err_code != TINYEXR_SUCCESS) {
- return err_code;
- }
-
- exr_image->num_tiles = static_cast<int>(num_tiles);
} else { // scanline format
-
// Don't allow too large image(256GB * pixel_data_size or more). Workaround
// for #104.
size_t total_data_len =
@@ -11170,7 +4990,7 @@ static int DecodeChunk(EXRImage *exr_image, const EXRHeader *exr_header,
num_channels, exr_header->channels, exr_header->requested_pixel_types,
data_width, data_height);
-#if (__cplusplus > 199711L) && (TINYEXR_USE_THREAD > 0)
+#if TINYEXR_HAS_CXX11 && (TINYEXR_USE_THREAD > 0)
std::vector<std::thread> workers;
std::atomic<int> y_count(0);
@@ -11271,7 +5091,7 @@ static int DecodeChunk(EXRImage *exr_image, const EXRHeader *exr_header,
}
}
-#if (__cplusplus > 199711L) && (TINYEXR_USE_THREAD > 0)
+#if TINYEXR_HAS_CXX11 && (TINYEXR_USE_THREAD > 0)
}
}));
}
@@ -11286,7 +5106,6 @@ static int DecodeChunk(EXRImage *exr_image, const EXRHeader *exr_header,
if (invalid_data) {
if (err) {
- std::stringstream ss;
(*err) += "Invalid data found when decoding pixels.\n";
}
return TINYEXR_ERROR_INVALID_DATA;
@@ -11343,6 +5162,370 @@ static bool ReconstructLineOffsets(
return true;
}
+
+static int FloorLog2(unsigned x) {
+ //
+ // For x > 0, floorLog2(y) returns floor(log(x)/log(2)).
+ //
+ int y = 0;
+ while (x > 1) {
+ y += 1;
+ x >>= 1u;
+ }
+ return y;
+}
+
+
+static int CeilLog2(unsigned x) {
+ //
+ // For x > 0, ceilLog2(y) returns ceil(log(x)/log(2)).
+ //
+ int y = 0;
+ int r = 0;
+ while (x > 1) {
+ if (x & 1)
+ r = 1;
+
+ y += 1;
+ x >>= 1u;
+ }
+ return y + r;
+}
+
+static int RoundLog2(int x, int tile_rounding_mode) {
+ return (tile_rounding_mode == TINYEXR_TILE_ROUND_DOWN) ? FloorLog2(static_cast<unsigned>(x)) : CeilLog2(static_cast<unsigned>(x));
+}
+
+static int CalculateNumXLevels(const EXRHeader* exr_header) {
+ int min_x = exr_header->data_window.min_x;
+ int max_x = exr_header->data_window.max_x;
+ int min_y = exr_header->data_window.min_y;
+ int max_y = exr_header->data_window.max_y;
+
+ int num = 0;
+ switch (exr_header->tile_level_mode) {
+ case TINYEXR_TILE_ONE_LEVEL:
+
+ num = 1;
+ break;
+
+ case TINYEXR_TILE_MIPMAP_LEVELS:
+
+ {
+ int w = max_x - min_x + 1;
+ int h = max_y - min_y + 1;
+ num = RoundLog2(std::max(w, h), exr_header->tile_rounding_mode) + 1;
+ }
+ break;
+
+ case TINYEXR_TILE_RIPMAP_LEVELS:
+
+ {
+ int w = max_x - min_x + 1;
+ num = RoundLog2(w, exr_header->tile_rounding_mode) + 1;
+ }
+ break;
+
+ default:
+
+ assert(false);
+ }
+
+ return num;
+}
+
+static int CalculateNumYLevels(const EXRHeader* exr_header) {
+ int min_x = exr_header->data_window.min_x;
+ int max_x = exr_header->data_window.max_x;
+ int min_y = exr_header->data_window.min_y;
+ int max_y = exr_header->data_window.max_y;
+ int num = 0;
+
+ switch (exr_header->tile_level_mode) {
+ case TINYEXR_TILE_ONE_LEVEL:
+
+ num = 1;
+ break;
+
+ case TINYEXR_TILE_MIPMAP_LEVELS:
+
+ {
+ int w = max_x - min_x + 1;
+ int h = max_y - min_y + 1;
+ num = RoundLog2(std::max(w, h), exr_header->tile_rounding_mode) + 1;
+ }
+ break;
+
+ case TINYEXR_TILE_RIPMAP_LEVELS:
+
+ {
+ int h = max_y - min_y + 1;
+ num = RoundLog2(h, exr_header->tile_rounding_mode) + 1;
+ }
+ break;
+
+ default:
+
+ assert(false);
+ }
+
+ return num;
+}
+
+static void CalculateNumTiles(std::vector<int>& numTiles,
+ int toplevel_size,
+ int size,
+ int tile_rounding_mode) {
+ for (unsigned i = 0; i < numTiles.size(); i++) {
+ int l = LevelSize(toplevel_size, i, tile_rounding_mode);
+ assert(l <= std::numeric_limits<int>::max() - size + 1);
+
+ numTiles[i] = (l + size - 1) / size;
+ }
+}
+
+static void PrecalculateTileInfo(std::vector<int>& num_x_tiles,
+ std::vector<int>& num_y_tiles,
+ const EXRHeader* exr_header) {
+ int min_x = exr_header->data_window.min_x;
+ int max_x = exr_header->data_window.max_x;
+ int min_y = exr_header->data_window.min_y;
+ int max_y = exr_header->data_window.max_y;
+
+ int num_x_levels = CalculateNumXLevels(exr_header);
+ int num_y_levels = CalculateNumYLevels(exr_header);
+
+ num_x_tiles.resize(num_x_levels);
+ num_y_tiles.resize(num_y_levels);
+
+ CalculateNumTiles(num_x_tiles,
+ max_x - min_x + 1,
+ exr_header->tile_size_x,
+ exr_header->tile_rounding_mode);
+
+ CalculateNumTiles(num_y_tiles,
+ max_y - min_y + 1,
+ exr_header->tile_size_y,
+ exr_header->tile_rounding_mode);
+}
+
+static void InitSingleResolutionOffsets(OffsetData& offset_data, size_t num_blocks) {
+ offset_data.offsets.resize(1);
+ offset_data.offsets[0].resize(1);
+ offset_data.offsets[0][0].resize(num_blocks);
+ offset_data.num_x_levels = 1;
+ offset_data.num_y_levels = 1;
+}
+
+// Return sum of tile blocks.
+static int InitTileOffsets(OffsetData& offset_data,
+ const EXRHeader* exr_header,
+ const std::vector<int>& num_x_tiles,
+ const std::vector<int>& num_y_tiles) {
+ int num_tile_blocks = 0;
+ offset_data.num_x_levels = static_cast<int>(num_x_tiles.size());
+ offset_data.num_y_levels = static_cast<int>(num_y_tiles.size());
+ switch (exr_header->tile_level_mode) {
+ case TINYEXR_TILE_ONE_LEVEL:
+ case TINYEXR_TILE_MIPMAP_LEVELS:
+ assert(offset_data.num_x_levels == offset_data.num_y_levels);
+ offset_data.offsets.resize(offset_data.num_x_levels);
+
+ for (unsigned int l = 0; l < offset_data.offsets.size(); ++l) {
+ offset_data.offsets[l].resize(num_y_tiles[l]);
+
+ for (unsigned int dy = 0; dy < offset_data.offsets[l].size(); ++dy) {
+ offset_data.offsets[l][dy].resize(num_x_tiles[l]);
+ num_tile_blocks += num_x_tiles[l];
+ }
+ }
+ break;
+
+ case TINYEXR_TILE_RIPMAP_LEVELS:
+
+ offset_data.offsets.resize(static_cast<size_t>(offset_data.num_x_levels) * static_cast<size_t>(offset_data.num_y_levels));
+
+ for (int ly = 0; ly < offset_data.num_y_levels; ++ly) {
+ for (int lx = 0; lx < offset_data.num_x_levels; ++lx) {
+ int l = ly * offset_data.num_x_levels + lx;
+ offset_data.offsets[l].resize(num_y_tiles[ly]);
+
+ for (size_t dy = 0; dy < offset_data.offsets[l].size(); ++dy) {
+ offset_data.offsets[l][dy].resize(num_x_tiles[lx]);
+ num_tile_blocks += num_x_tiles[lx];
+ }
+ }
+ }
+ break;
+
+ default:
+ assert(false);
+ }
+ return num_tile_blocks;
+}
+
+static bool IsAnyOffsetsAreInvalid(const OffsetData& offset_data) {
+ for (unsigned int l = 0; l < offset_data.offsets.size(); ++l)
+ for (unsigned int dy = 0; dy < offset_data.offsets[l].size(); ++dy)
+ for (unsigned int dx = 0; dx < offset_data.offsets[l][dy].size(); ++dx)
+ if (reinterpret_cast<const tinyexr::tinyexr_int64&>(offset_data.offsets[l][dy][dx]) <= 0)
+ return true;
+
+ return false;
+}
+
+static bool isValidTile(const EXRHeader* exr_header,
+ const OffsetData& offset_data,
+ int dx, int dy, int lx, int ly) {
+ if (lx < 0 || ly < 0 || dx < 0 || dy < 0) return false;
+ int num_x_levels = offset_data.num_x_levels;
+ int num_y_levels = offset_data.num_y_levels;
+ switch (exr_header->tile_level_mode) {
+ case TINYEXR_TILE_ONE_LEVEL:
+
+ if (lx == 0 &&
+ ly == 0 &&
+ offset_data.offsets.size() > 0 &&
+ offset_data.offsets[0].size() > static_cast<size_t>(dy) &&
+ offset_data.offsets[0][dy].size() > static_cast<size_t>(dx)) {
+ return true;
+ }
+
+ break;
+
+ case TINYEXR_TILE_MIPMAP_LEVELS:
+
+ if (lx < num_x_levels &&
+ ly < num_y_levels &&
+ offset_data.offsets.size() > static_cast<size_t>(lx) &&
+ offset_data.offsets[lx].size() > static_cast<size_t>(dy) &&
+ offset_data.offsets[lx][dy].size() > static_cast<size_t>(dx)) {
+ return true;
+ }
+
+ break;
+
+ case TINYEXR_TILE_RIPMAP_LEVELS:
+ {
+ size_t idx = static_cast<size_t>(lx) + static_cast<size_t>(ly)* static_cast<size_t>(num_x_levels);
+ if (lx < num_x_levels &&
+ ly < num_y_levels &&
+ (offset_data.offsets.size() > idx) &&
+ offset_data.offsets[idx].size() > static_cast<size_t>(dy) &&
+ offset_data.offsets[idx][dy].size() > static_cast<size_t>(dx)) {
+ return true;
+ }
+ }
+
+ break;
+
+ default:
+
+ return false;
+ }
+
+ return false;
+}
+
+static void ReconstructTileOffsets(OffsetData& offset_data,
+ const EXRHeader* exr_header,
+ const unsigned char* head, const unsigned char* marker, const size_t /*size*/,
+ bool isMultiPartFile,
+ bool isDeep) {
+ int numXLevels = offset_data.num_x_levels;
+ for (unsigned int l = 0; l < offset_data.offsets.size(); ++l) {
+ for (unsigned int dy = 0; dy < offset_data.offsets[l].size(); ++dy) {
+ for (unsigned int dx = 0; dx < offset_data.offsets[l][dy].size(); ++dx) {
+ tinyexr::tinyexr_uint64 tileOffset = marker - head;
+
+ if (isMultiPartFile) {
+ //int partNumber;
+ marker += sizeof(int);
+ }
+
+ int tileX;
+ memcpy(&tileX, marker, sizeof(int));
+ tinyexr::swap4(&tileX);
+ marker += sizeof(int);
+
+ int tileY;
+ memcpy(&tileY, marker, sizeof(int));
+ tinyexr::swap4(&tileY);
+ marker += sizeof(int);
+
+ int levelX;
+ memcpy(&levelX, marker, sizeof(int));
+ tinyexr::swap4(&levelX);
+ marker += sizeof(int);
+
+ int levelY;
+ memcpy(&levelY, marker, sizeof(int));
+ tinyexr::swap4(&levelY);
+ marker += sizeof(int);
+
+ if (isDeep) {
+ tinyexr::tinyexr_int64 packed_offset_table_size;
+ memcpy(&packed_offset_table_size, marker, sizeof(tinyexr::tinyexr_int64));
+ tinyexr::swap8(reinterpret_cast<tinyexr::tinyexr_uint64*>(&packed_offset_table_size));
+ marker += sizeof(tinyexr::tinyexr_int64);
+
+ tinyexr::tinyexr_int64 packed_sample_size;
+ memcpy(&packed_sample_size, marker, sizeof(tinyexr::tinyexr_int64));
+ tinyexr::swap8(reinterpret_cast<tinyexr::tinyexr_uint64*>(&packed_sample_size));
+ marker += sizeof(tinyexr::tinyexr_int64);
+
+ // next Int64 is unpacked sample size - skip that too
+ marker += packed_offset_table_size + packed_sample_size + 8;
+
+ } else {
+
+ int dataSize;
+ memcpy(&dataSize, marker, sizeof(int));
+ tinyexr::swap4(&dataSize);
+ marker += sizeof(int);
+ marker += dataSize;
+ }
+
+ if (!isValidTile(exr_header, offset_data,
+ tileX, tileY, levelX, levelY))
+ return;
+
+ int level_idx = LevelIndex(levelX, levelY, exr_header->tile_level_mode, numXLevels);
+ offset_data.offsets[level_idx][tileY][tileX] = tileOffset;
+ }
+ }
+ }
+}
+
+// marker output is also
+static int ReadOffsets(OffsetData& offset_data,
+ const unsigned char* head,
+ const unsigned char*& marker,
+ const size_t size,
+ const char** err) {
+ for (unsigned int l = 0; l < offset_data.offsets.size(); ++l) {
+ for (unsigned int dy = 0; dy < offset_data.offsets[l].size(); ++dy) {
+ for (unsigned int dx = 0; dx < offset_data.offsets[l][dy].size(); ++dx) {
+ tinyexr::tinyexr_uint64 offset;
+ if ((marker + sizeof(tinyexr_uint64)) >= (head + size)) {
+ tinyexr::SetErrorMessage("Insufficient data size in offset table.", err);
+ return TINYEXR_ERROR_INVALID_DATA;
+ }
+
+ memcpy(&offset, marker, sizeof(tinyexr::tinyexr_uint64));
+ tinyexr::swap8(&offset);
+ if (offset >= size) {
+ tinyexr::SetErrorMessage("Invalid offset value in DecodeEXRImage.", err);
+ return TINYEXR_ERROR_INVALID_DATA;
+ }
+ marker += sizeof(tinyexr::tinyexr_uint64); // = 8
+ offset_data.offsets[l][dy][dx] = offset;
+ }
+ }
+ }
+ return TINYEXR_SUCCESS;
+}
+
static int DecodeEXRImage(EXRImage *exr_image, const EXRHeader *exr_header,
const unsigned char *head,
const unsigned char *marker, const size_t size,
@@ -11383,100 +5566,114 @@ static int DecodeEXRImage(EXRImage *exr_image, const EXRHeader *exr_header,
// Do not allow too large data_width and data_height. header invalid?
{
- const int threshold = 1024 * 8192; // heuristics
- if (data_width > threshold) {
+ if (data_width > TINYEXR_DIMENSION_THRESHOLD) {
tinyexr::SetErrorMessage("data width too large.", err);
return TINYEXR_ERROR_INVALID_DATA;
}
- if (data_height > threshold) {
+ if (data_height > TINYEXR_DIMENSION_THRESHOLD) {
tinyexr::SetErrorMessage("data height too large.", err);
return TINYEXR_ERROR_INVALID_DATA;
}
}
- // Read offset tables.
- size_t num_blocks = 0;
-
- if (exr_header->chunk_count > 0) {
- // Use `chunkCount` attribute.
- num_blocks = static_cast<size_t>(exr_header->chunk_count);
- } else if (exr_header->tiled) {
- // @todo { LoD }
- if (exr_header->tile_size_x > data_width || exr_header->tile_size_x < 1 ||
- exr_header->tile_size_y > data_height || exr_header->tile_size_y < 1) {
- tinyexr::SetErrorMessage("tile sizes are invalid.", err);
+ if (exr_header->tiled) {
+ if (exr_header->tile_size_x > TINYEXR_DIMENSION_THRESHOLD) {
+ tinyexr::SetErrorMessage("tile width too large.", err);
return TINYEXR_ERROR_INVALID_DATA;
}
-
- size_t num_x_tiles = static_cast<size_t>(data_width) /
- static_cast<size_t>(exr_header->tile_size_x);
- if (num_x_tiles * static_cast<size_t>(exr_header->tile_size_x) <
- static_cast<size_t>(data_width)) {
- num_x_tiles++;
+ if (exr_header->tile_size_y > TINYEXR_DIMENSION_THRESHOLD) {
+ tinyexr::SetErrorMessage("tile height too large.", err);
+ return TINYEXR_ERROR_INVALID_DATA;
}
- size_t num_y_tiles = static_cast<size_t>(data_height) /
- static_cast<size_t>(exr_header->tile_size_y);
- if (num_y_tiles * static_cast<size_t>(exr_header->tile_size_y) <
- static_cast<size_t>(data_height)) {
- num_y_tiles++;
+ }
+
+ // Read offset tables.
+ OffsetData offset_data;
+ size_t num_blocks = 0;
+ // For a multi-resolution image, the size of the offset table will be calculated from the other attributes of the header.
+ // If chunk_count > 0 then chunk_count must be equal to the calculated tile count.
+ if (exr_header->tiled) {
+ {
+ std::vector<int> num_x_tiles, num_y_tiles;
+ PrecalculateTileInfo(num_x_tiles, num_y_tiles, exr_header);
+ num_blocks = InitTileOffsets(offset_data, exr_header, num_x_tiles, num_y_tiles);
+ if (exr_header->chunk_count > 0) {
+ if (exr_header->chunk_count != static_cast<int>(num_blocks)) {
+ tinyexr::SetErrorMessage("Invalid offset table size.", err);
+ return TINYEXR_ERROR_INVALID_DATA;
+ }
+ }
}
- num_blocks = num_x_tiles * num_y_tiles;
+ int ret = ReadOffsets(offset_data, head, marker, size, err);
+ if (ret != TINYEXR_SUCCESS) return ret;
+ if (IsAnyOffsetsAreInvalid(offset_data)) {
+ ReconstructTileOffsets(offset_data, exr_header,
+ head, marker, size,
+ exr_header->multipart, exr_header->non_image);
+ }
+ } else if (exr_header->chunk_count > 0) {
+ // Use `chunkCount` attribute.
+ num_blocks = static_cast<size_t>(exr_header->chunk_count);
+ InitSingleResolutionOffsets(offset_data, num_blocks);
} else {
num_blocks = static_cast<size_t>(data_height) /
- static_cast<size_t>(num_scanline_blocks);
+ static_cast<size_t>(num_scanline_blocks);
if (num_blocks * static_cast<size_t>(num_scanline_blocks) <
- static_cast<size_t>(data_height)) {
+ static_cast<size_t>(data_height)) {
num_blocks++;
}
- }
-
- std::vector<tinyexr::tinyexr_uint64> offsets(num_blocks);
-
- for (size_t y = 0; y < num_blocks; y++) {
- tinyexr::tinyexr_uint64 offset;
- // Issue #81
- if ((marker + sizeof(tinyexr_uint64)) >= (head + size)) {
- tinyexr::SetErrorMessage("Insufficient data size in offset table.", err);
- return TINYEXR_ERROR_INVALID_DATA;
- }
- memcpy(&offset, marker, sizeof(tinyexr::tinyexr_uint64));
- tinyexr::swap8(&offset);
- if (offset >= size) {
- tinyexr::SetErrorMessage("Invalid offset value in DecodeEXRImage.", err);
- return TINYEXR_ERROR_INVALID_DATA;
- }
- marker += sizeof(tinyexr::tinyexr_uint64); // = 8
- offsets[y] = offset;
+ InitSingleResolutionOffsets(offset_data, num_blocks);
}
- // If line offsets are invalid, we try to reconstruct it.
- // See OpenEXR/IlmImf/ImfScanLineInputFile.cpp::readLineOffsets() for details.
- for (size_t y = 0; y < num_blocks; y++) {
- if (offsets[y] <= 0) {
- // TODO(syoyo) Report as warning?
- // if (err) {
- // stringstream ss;
- // ss << "Incomplete lineOffsets." << std::endl;
- // (*err) += ss.str();
- //}
- bool ret =
+ if (!exr_header->tiled) {
+ std::vector<tinyexr::tinyexr_uint64>& offsets = offset_data.offsets[0][0];
+ for (size_t y = 0; y < num_blocks; y++) {
+ tinyexr::tinyexr_uint64 offset;
+ // Issue #81
+ if ((marker + sizeof(tinyexr_uint64)) >= (head + size)) {
+ tinyexr::SetErrorMessage("Insufficient data size in offset table.", err);
+ return TINYEXR_ERROR_INVALID_DATA;
+ }
+
+ memcpy(&offset, marker, sizeof(tinyexr::tinyexr_uint64));
+ tinyexr::swap8(&offset);
+ if (offset >= size) {
+ tinyexr::SetErrorMessage("Invalid offset value in DecodeEXRImage.", err);
+ return TINYEXR_ERROR_INVALID_DATA;
+ }
+ marker += sizeof(tinyexr::tinyexr_uint64); // = 8
+ offsets[y] = offset;
+ }
+
+ // If line offsets are invalid, we try to reconstruct it.
+ // See OpenEXR/IlmImf/ImfScanLineInputFile.cpp::readLineOffsets() for details.
+ for (size_t y = 0; y < num_blocks; y++) {
+ if (offsets[y] <= 0) {
+ // TODO(syoyo) Report as warning?
+ // if (err) {
+ // stringstream ss;
+ // ss << "Incomplete lineOffsets." << std::endl;
+ // (*err) += ss.str();
+ //}
+ bool ret =
ReconstructLineOffsets(&offsets, num_blocks, head, marker, size);
- if (ret) {
- // OK
- break;
- } else {
- tinyexr::SetErrorMessage(
+ if (ret) {
+ // OK
+ break;
+ } else {
+ tinyexr::SetErrorMessage(
"Cannot reconstruct lineOffset table in DecodeEXRImage.", err);
- return TINYEXR_ERROR_INVALID_DATA;
+ return TINYEXR_ERROR_INVALID_DATA;
+ }
}
}
}
{
std::string e;
- int ret = DecodeChunk(exr_image, exr_header, offsets, head, size, &e);
+ int ret = DecodeChunk(exr_image, exr_header, offset_data, head, size, &e);
if (ret != TINYEXR_SUCCESS) {
if (!e.empty()) {
@@ -11530,7 +5727,7 @@ struct LayerChannel {
};
static void ChannelsInLayer(const EXRHeader &exr_header,
- const std::string layer_name,
+ const std::string &layer_name,
std::vector<LayerChannel> &channels) {
channels.clear();
for (int c = 0; c < exr_header.num_channels; c++) {
@@ -11881,8 +6078,8 @@ int ParseEXRHeaderFromMemory(EXRHeader *exr_header, const EXRVersion *version,
ConvertHeader(exr_header, info);
- // transfoer `tiled` from version.
- exr_header->tiled = version->tiled;
+ exr_header->multipart = version->multipart ? 1 : 0;
+ exr_header->non_image = version->non_image ? 1 : 0;
return ret;
}
@@ -12087,7 +6284,7 @@ int LoadEXRImageFromFile(EXRImage *exr_image, const EXRHeader *exr_header,
FILE *fp = NULL;
#ifdef _WIN32
-#if defined(_MSC_VER) || defined(__MINGW32__) // MSVC, MinGW gcc or clang
+#if defined(_MSC_VER) || (defined(MINGW_HAS_SECURE_API) && MINGW_HAS_SECURE_API) // MSVC, MinGW GCC, or Clang.
errno_t errcode =
_wfopen_s(&fp, tinyexr::UTF8ToWchar(filename).c_str(), L"rb");
if (errcode != 0) {
@@ -12096,7 +6293,7 @@ int LoadEXRImageFromFile(EXRImage *exr_image, const EXRHeader *exr_header,
return TINYEXR_ERROR_CANT_OPEN_FILE;
}
#else
- // Unknown compiler
+ // Unknown compiler or MinGW without MINGW_HAS_SECURE_API.
fp = fopen(filename, "rb");
#endif
#else
@@ -12155,207 +6352,400 @@ int LoadEXRImageFromMemory(EXRImage *exr_image, const EXRHeader *exr_header,
err);
}
-size_t SaveEXRImageToMemory(const EXRImage *exr_image,
- const EXRHeader *exr_header,
- unsigned char **memory_out, const char **err) {
- if (exr_image == NULL || memory_out == NULL ||
- exr_header->compression_type < 0) {
- tinyexr::SetErrorMessage("Invalid argument for SaveEXRImageToMemory", err);
- return 0;
- }
+namespace tinyexr
+{
-#if !TINYEXR_USE_PIZ
- if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_PIZ) {
- tinyexr::SetErrorMessage("PIZ compression is not supported in this build",
- err);
- return 0;
- }
-#endif
+// out_data must be allocated initially with the block-header size
+// of the current image(-part) type
+static bool EncodePixelData(/* out */ std::vector<unsigned char>& out_data,
+ const unsigned char* const* images,
+ int compression_type,
+ int /*line_order*/,
+ int width, // for tiled : tile.width
+ int /*height*/, // for tiled : header.tile_size_y
+ int x_stride, // for tiled : header.tile_size_x
+ int line_no, // for tiled : 0
+ int num_lines, // for tiled : tile.height
+ size_t pixel_data_size,
+ const std::vector<ChannelInfo>& channels,
+ const std::vector<size_t>& channel_offset_list,
+ const void* compression_param = 0) // zfp compression param
+{
+ size_t buf_size = static_cast<size_t>(width) *
+ static_cast<size_t>(num_lines) *
+ static_cast<size_t>(pixel_data_size);
+ //int last2bit = (buf_size & 3);
+ // buf_size must be multiple of four
+ //if(last2bit) buf_size += 4 - last2bit;
+ std::vector<unsigned char> buf(buf_size);
-#if !TINYEXR_USE_ZFP
- if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_ZFP) {
- tinyexr::SetErrorMessage("ZFP compression is not supported in this build",
- err);
- return 0;
- }
-#endif
+ size_t start_y = static_cast<size_t>(line_no);
+ for (size_t c = 0; c < channels.size(); c++) {
+ if (channels[c].pixel_type == TINYEXR_PIXELTYPE_HALF) {
+ if (channels[c].requested_pixel_type == TINYEXR_PIXELTYPE_FLOAT) {
+ for (int y = 0; y < num_lines; y++) {
+ // Assume increasing Y
+ float *line_ptr = reinterpret_cast<float *>(&buf.at(
+ static_cast<size_t>(pixel_data_size * y * width) +
+ channel_offset_list[c] *
+ static_cast<size_t>(width)));
+ for (int x = 0; x < width; x++) {
+ tinyexr::FP16 h16;
+ h16.u = reinterpret_cast<const unsigned short * const *>(
+ images)[c][(y + start_y) * x_stride + x];
-#if TINYEXR_USE_ZFP
- for (size_t i = 0; i < static_cast<size_t>(exr_header->num_channels); i++) {
- if (exr_header->requested_pixel_types[i] != TINYEXR_PIXELTYPE_FLOAT) {
- tinyexr::SetErrorMessage("Pixel type must be FLOAT for ZFP compression",
- err);
- return 0;
+ tinyexr::FP32 f32 = half_to_float(h16);
+
+ tinyexr::swap4(&f32.f);
+
+ // line_ptr[x] = f32.f;
+ tinyexr::cpy4(line_ptr + x, &(f32.f));
+ }
+ }
+ } else if (channels[c].requested_pixel_type == TINYEXR_PIXELTYPE_HALF) {
+ for (int y = 0; y < num_lines; y++) {
+ // Assume increasing Y
+ unsigned short *line_ptr = reinterpret_cast<unsigned short *>(
+ &buf.at(static_cast<size_t>(pixel_data_size * y *
+ width) +
+ channel_offset_list[c] *
+ static_cast<size_t>(width)));
+ for (int x = 0; x < width; x++) {
+ unsigned short val = reinterpret_cast<const unsigned short * const *>(
+ images)[c][(y + start_y) * x_stride + x];
+
+ tinyexr::swap2(&val);
+
+ // line_ptr[x] = val;
+ tinyexr::cpy2(line_ptr + x, &val);
+ }
+ }
+ } else {
+ assert(0);
+ }
+
+ } else if (channels[c].pixel_type == TINYEXR_PIXELTYPE_FLOAT) {
+ if (channels[c].requested_pixel_type == TINYEXR_PIXELTYPE_HALF) {
+ for (int y = 0; y < num_lines; y++) {
+ // Assume increasing Y
+ unsigned short *line_ptr = reinterpret_cast<unsigned short *>(
+ &buf.at(static_cast<size_t>(pixel_data_size * y *
+ width) +
+ channel_offset_list[c] *
+ static_cast<size_t>(width)));
+ for (int x = 0; x < width; x++) {
+ tinyexr::FP32 f32;
+ f32.f = reinterpret_cast<const float * const *>(
+ images)[c][(y + start_y) * x_stride + x];
+
+ tinyexr::FP16 h16;
+ h16 = float_to_half_full(f32);
+
+ tinyexr::swap2(reinterpret_cast<unsigned short *>(&h16.u));
+
+ // line_ptr[x] = h16.u;
+ tinyexr::cpy2(line_ptr + x, &(h16.u));
+ }
+ }
+ } else if (channels[c].requested_pixel_type == TINYEXR_PIXELTYPE_FLOAT) {
+ for (int y = 0; y < num_lines; y++) {
+ // Assume increasing Y
+ float *line_ptr = reinterpret_cast<float *>(&buf.at(
+ static_cast<size_t>(pixel_data_size * y * width) +
+ channel_offset_list[c] *
+ static_cast<size_t>(width)));
+ for (int x = 0; x < width; x++) {
+ float val = reinterpret_cast<const float * const *>(
+ images)[c][(y + start_y) * x_stride + x];
+
+ tinyexr::swap4(&val);
+
+ // line_ptr[x] = val;
+ tinyexr::cpy4(line_ptr + x, &val);
+ }
+ }
+ } else {
+ assert(0);
+ }
+ } else if (channels[c].pixel_type == TINYEXR_PIXELTYPE_UINT) {
+ for (int y = 0; y < num_lines; y++) {
+ // Assume increasing Y
+ unsigned int *line_ptr = reinterpret_cast<unsigned int *>(&buf.at(
+ static_cast<size_t>(pixel_data_size * y * width) +
+ channel_offset_list[c] * static_cast<size_t>(width)));
+ for (int x = 0; x < width; x++) {
+ unsigned int val = reinterpret_cast<const unsigned int * const *>(
+ images)[c][(y + start_y) * x_stride + x];
+
+ tinyexr::swap4(&val);
+
+ // line_ptr[x] = val;
+ tinyexr::cpy4(line_ptr + x, &val);
+ }
+ }
}
}
+
+ if (compression_type == TINYEXR_COMPRESSIONTYPE_NONE) {
+ // 4 byte: scan line
+ // 4 byte: data size
+ // ~ : pixel data(uncompressed)
+ out_data.insert(out_data.end(), buf.begin(), buf.end());
+
+ } else if ((compression_type == TINYEXR_COMPRESSIONTYPE_ZIPS) ||
+ (compression_type == TINYEXR_COMPRESSIONTYPE_ZIP)) {
+#if TINYEXR_USE_MINIZ
+ std::vector<unsigned char> block(mz_compressBound(
+ static_cast<unsigned long>(buf.size())));
+#else
+ std::vector<unsigned char> block(
+ compressBound(static_cast<uLong>(buf.size())));
#endif
+ tinyexr::tinyexr_uint64 outSize = block.size();
- std::vector<unsigned char> memory;
+ tinyexr::CompressZip(&block.at(0), outSize,
+ reinterpret_cast<const unsigned char *>(&buf.at(0)),
+ static_cast<unsigned long>(buf.size()));
- // Header
- {
- const char header[] = {0x76, 0x2f, 0x31, 0x01};
- memory.insert(memory.end(), header, header + 4);
- }
+ // 4 byte: scan line
+ // 4 byte: data size
+ // ~ : pixel data(compressed)
+ unsigned int data_len = static_cast<unsigned int>(outSize); // truncate
- // Version, scanline.
- {
- char marker[] = {2, 0, 0, 0};
- /* @todo
- if (exr_header->tiled) {
- marker[1] |= 0x2;
- }
- if (exr_header->long_name) {
- marker[1] |= 0x4;
- }
- if (exr_header->non_image) {
- marker[1] |= 0x8;
- }
- if (exr_header->multipart) {
- marker[1] |= 0x10;
- }
- */
- memory.insert(memory.end(), marker, marker + 4);
- }
+ out_data.insert(out_data.end(), block.begin(), block.begin() + data_len);
- int num_scanlines = 1;
- if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_ZIP) {
- num_scanlines = 16;
- } else if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_PIZ) {
- num_scanlines = 32;
- } else if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_ZFP) {
- num_scanlines = 16;
- }
+ } else if (compression_type == TINYEXR_COMPRESSIONTYPE_RLE) {
+ // (buf.size() * 3) / 2 would be enough.
+ std::vector<unsigned char> block((buf.size() * 3) / 2);
- // Write attributes.
- std::vector<tinyexr::ChannelInfo> channels;
- {
- std::vector<unsigned char> data;
+ tinyexr::tinyexr_uint64 outSize = block.size();
- for (int c = 0; c < exr_header->num_channels; c++) {
- tinyexr::ChannelInfo info;
- info.p_linear = 0;
- info.pixel_type = exr_header->requested_pixel_types[c];
- info.x_sampling = 1;
- info.y_sampling = 1;
- info.name = std::string(exr_header->channels[c].name);
- channels.push_back(info);
- }
+ tinyexr::CompressRle(&block.at(0), outSize,
+ reinterpret_cast<const unsigned char *>(&buf.at(0)),
+ static_cast<unsigned long>(buf.size()));
- tinyexr::WriteChannelInfo(data, channels);
+ // 4 byte: scan line
+ // 4 byte: data size
+ // ~ : pixel data(compressed)
+ unsigned int data_len = static_cast<unsigned int>(outSize); // truncate
+ out_data.insert(out_data.end(), block.begin(), block.begin() + data_len);
- tinyexr::WriteAttributeToMemory(&memory, "channels", "chlist", &data.at(0),
- static_cast<int>(data.size()));
- }
+ } else if (compression_type == TINYEXR_COMPRESSIONTYPE_PIZ) {
+#if TINYEXR_USE_PIZ
+ unsigned int bufLen =
+ 8192 + static_cast<unsigned int>(
+ 2 * static_cast<unsigned int>(
+ buf.size())); // @fixme { compute good bound. }
+ std::vector<unsigned char> block(bufLen);
+ unsigned int outSize = static_cast<unsigned int>(block.size());
+
+ CompressPiz(&block.at(0), &outSize,
+ reinterpret_cast<const unsigned char *>(&buf.at(0)),
+ buf.size(), channels, width, num_lines);
+
+ // 4 byte: scan line
+ // 4 byte: data size
+ // ~ : pixel data(compressed)
+ unsigned int data_len = outSize;
+ out_data.insert(out_data.end(), block.begin(), block.begin() + data_len);
- {
- int comp = exr_header->compression_type;
- tinyexr::swap4(&comp);
- tinyexr::WriteAttributeToMemory(
- &memory, "compression", "compression",
- reinterpret_cast<const unsigned char *>(&comp), 1);
- }
+#else
+ assert(0);
+#endif
+ } else if (compression_type == TINYEXR_COMPRESSIONTYPE_ZFP) {
+#if TINYEXR_USE_ZFP
+ const ZFPCompressionParam* zfp_compression_param = reinterpret_cast<const ZFPCompressionParam*>(compression_param);
+ std::vector<unsigned char> block;
+ unsigned int outSize;
- {
- int data[4] = {0, 0, exr_image->width - 1, exr_image->height - 1};
- tinyexr::swap4(&data[0]);
- tinyexr::swap4(&data[1]);
- tinyexr::swap4(&data[2]);
- tinyexr::swap4(&data[3]);
- tinyexr::WriteAttributeToMemory(
- &memory, "dataWindow", "box2i",
- reinterpret_cast<const unsigned char *>(data), sizeof(int) * 4);
- tinyexr::WriteAttributeToMemory(
- &memory, "displayWindow", "box2i",
- reinterpret_cast<const unsigned char *>(data), sizeof(int) * 4);
- }
+ tinyexr::CompressZfp(
+ &block, &outSize, reinterpret_cast<const float *>(&buf.at(0)),
+ width, num_lines, static_cast<int>(channels.size()), *zfp_compression_param);
- {
- unsigned char line_order = 0; // @fixme { read line_order from EXRHeader }
- tinyexr::WriteAttributeToMemory(&memory, "lineOrder", "lineOrder",
- &line_order, 1);
- }
+ // 4 byte: scan line
+ // 4 byte: data size
+ // ~ : pixel data(compressed)
+ unsigned int data_len = outSize;
+ out_data.insert(out_data.end(), block.begin(), block.begin() + data_len);
- {
- float aspectRatio = 1.0f;
- tinyexr::swap4(&aspectRatio);
- tinyexr::WriteAttributeToMemory(
- &memory, "pixelAspectRatio", "float",
- reinterpret_cast<const unsigned char *>(&aspectRatio), sizeof(float));
+#else
+ (void)compression_param;
+ assert(0);
+#endif
+ } else {
+ assert(0);
+ return false;
}
- {
- float center[2] = {0.0f, 0.0f};
- tinyexr::swap4(&center[0]);
- tinyexr::swap4(&center[1]);
- tinyexr::WriteAttributeToMemory(
- &memory, "screenWindowCenter", "v2f",
- reinterpret_cast<const unsigned char *>(center), 2 * sizeof(float));
+ return true;
+}
+
+static int EncodeTiledLevel(const EXRImage* level_image, const EXRHeader* exr_header,
+ const std::vector<tinyexr::ChannelInfo>& channels,
+ std::vector<std::vector<unsigned char> >& data_list,
+ size_t start_index, // for data_list
+ int num_x_tiles, int num_y_tiles,
+ const std::vector<size_t>& channel_offset_list,
+ int pixel_data_size,
+ const void* compression_param, // must be set if zfp compression is enabled
+ std::string* err) {
+ int num_tiles = num_x_tiles * num_y_tiles;
+ assert(num_tiles == level_image->num_tiles);
+
+ if ((exr_header->tile_size_x > level_image->width || exr_header->tile_size_y > level_image->height) &&
+ level_image->level_x == 0 && level_image->level_y == 0) {
+ if (err) {
+ (*err) += "Failed to encode tile data.\n";
+ }
+ return TINYEXR_ERROR_INVALID_DATA;
}
- {
- float w = static_cast<float>(exr_image->width);
- tinyexr::swap4(&w);
- tinyexr::WriteAttributeToMemory(&memory, "screenWindowWidth", "float",
- reinterpret_cast<const unsigned char *>(&w),
- sizeof(float));
+
+#if TINYEXR_HAS_CXX11 && (TINYEXR_USE_THREAD > 0)
+ std::atomic<bool> invalid_data(false);
+#else
+ bool invalid_data(false);
+#endif
+
+#if TINYEXR_HAS_CXX11 && (TINYEXR_USE_THREAD > 0)
+ std::vector<std::thread> workers;
+ std::atomic<int> tile_count(0);
+
+ int num_threads = std::max(1, int(std::thread::hardware_concurrency()));
+ if (num_threads > int(num_tiles)) {
+ num_threads = int(num_tiles);
}
- // Custom attributes
- if (exr_header->num_custom_attributes > 0) {
- for (int i = 0; i < exr_header->num_custom_attributes; i++) {
- tinyexr::WriteAttributeToMemory(
- &memory, exr_header->custom_attributes[i].name,
- exr_header->custom_attributes[i].type,
- reinterpret_cast<const unsigned char *>(
- exr_header->custom_attributes[i].value),
- exr_header->custom_attributes[i].size);
+ for (int t = 0; t < num_threads; t++) {
+ workers.emplace_back(std::thread([&]() {
+ int i = 0;
+ while ((i = tile_count++) < num_tiles) {
+
+#else
+ // Use signed int since some OpenMP compiler doesn't allow unsigned type for
+ // `parallel for`
+#if TINYEXR_USE_OPENMP
+#pragma omp parallel for
+#endif
+ for (int i = 0; i < num_tiles; i++) {
+
+#endif
+ size_t tile_idx = static_cast<size_t>(i);
+ size_t data_idx = tile_idx + start_index;
+
+ int x_tile = i % num_x_tiles;
+ int y_tile = i / num_x_tiles;
+
+ EXRTile& tile = level_image->tiles[tile_idx];
+
+ const unsigned char* const* images =
+ static_cast<const unsigned char* const*>(tile.images);
+
+ data_list[data_idx].resize(5*sizeof(int));
+ size_t data_header_size = data_list[data_idx].size();
+ bool ret = EncodePixelData(data_list[data_idx],
+ images,
+ exr_header->compression_type,
+ 0, // increasing y
+ tile.width,
+ exr_header->tile_size_y,
+ exr_header->tile_size_x,
+ 0,
+ tile.height,
+ pixel_data_size,
+ channels,
+ channel_offset_list,
+ compression_param);
+ if (!ret) {
+ invalid_data = true;
+ continue;
}
+ assert(data_list[data_idx].size() > data_header_size);
+ int data_len = static_cast<int>(data_list[data_idx].size() - data_header_size);
+ //tileX, tileY, levelX, levelY // pixel_data_size(int)
+ memcpy(&data_list[data_idx][0], &x_tile, sizeof(int));
+ memcpy(&data_list[data_idx][4], &y_tile, sizeof(int));
+ memcpy(&data_list[data_idx][8], &level_image->level_x, sizeof(int));
+ memcpy(&data_list[data_idx][12], &level_image->level_y, sizeof(int));
+ memcpy(&data_list[data_idx][16], &data_len, sizeof(int));
+
+ swap4(reinterpret_cast<int*>(&data_list[data_idx][0]));
+ swap4(reinterpret_cast<int*>(&data_list[data_idx][4]));
+ swap4(reinterpret_cast<int*>(&data_list[data_idx][8]));
+ swap4(reinterpret_cast<int*>(&data_list[data_idx][12]));
+ swap4(reinterpret_cast<int*>(&data_list[data_idx][16]));
+
+#if TINYEXR_HAS_CXX11 && (TINYEXR_USE_THREAD > 0)
}
+}));
+ }
- { // end of header
- unsigned char e = 0;
- memory.push_back(e);
+ for (auto &t : workers) {
+ t.join();
+ }
+#else
+ } // omp parallel
+#endif
+
+ if (invalid_data) {
+ if (err) {
+ (*err) += "Failed to encode tile data.\n";
+ }
+ return TINYEXR_ERROR_INVALID_DATA;
}
+ return TINYEXR_SUCCESS;
+}
- int num_blocks = exr_image->height / num_scanlines;
- if (num_blocks * num_scanlines < exr_image->height) {
- num_blocks++;
+static int NumScanlines(int compression_type) {
+ int num_scanlines = 1;
+ if (compression_type == TINYEXR_COMPRESSIONTYPE_ZIP) {
+ num_scanlines = 16;
+ } else if (compression_type == TINYEXR_COMPRESSIONTYPE_PIZ) {
+ num_scanlines = 32;
+ } else if (compression_type == TINYEXR_COMPRESSIONTYPE_ZFP) {
+ num_scanlines = 16;
}
+ return num_scanlines;
+}
- std::vector<tinyexr::tinyexr_uint64> offsets(static_cast<size_t>(num_blocks));
+static int EncodeChunk(const EXRImage* exr_image, const EXRHeader* exr_header,
+ const std::vector<ChannelInfo>& channels,
+ int num_blocks,
+ tinyexr_uint64 chunk_offset, // starting offset of current chunk
+ bool is_multipart,
+ OffsetData& offset_data, // output block offsets, must be initialized
+ std::vector<std::vector<unsigned char> >& data_list, // output
+ tinyexr_uint64& total_size, // output: ending offset of current chunk
+ std::string* err) {
+ int num_scanlines = NumScanlines(exr_header->compression_type);
- size_t headerSize = memory.size();
- tinyexr::tinyexr_uint64 offset =
- headerSize +
- static_cast<size_t>(num_blocks) *
- sizeof(
- tinyexr::tinyexr_int64); // sizeof(header) + sizeof(offsetTable)
+ data_list.resize(num_blocks);
- std::vector<std::vector<unsigned char> > data_list(
- static_cast<size_t>(num_blocks));
std::vector<size_t> channel_offset_list(
- static_cast<size_t>(exr_header->num_channels));
+ static_cast<size_t>(exr_header->num_channels));
int pixel_data_size = 0;
- size_t channel_offset = 0;
- for (size_t c = 0; c < static_cast<size_t>(exr_header->num_channels); c++) {
- channel_offset_list[c] = channel_offset;
- if (exr_header->requested_pixel_types[c] == TINYEXR_PIXELTYPE_HALF) {
- pixel_data_size += sizeof(unsigned short);
- channel_offset += sizeof(unsigned short);
- } else if (exr_header->requested_pixel_types[c] ==
- TINYEXR_PIXELTYPE_FLOAT) {
- pixel_data_size += sizeof(float);
- channel_offset += sizeof(float);
- } else if (exr_header->requested_pixel_types[c] == TINYEXR_PIXELTYPE_UINT) {
- pixel_data_size += sizeof(unsigned int);
- channel_offset += sizeof(unsigned int);
- } else {
- assert(0);
+ {
+ size_t channel_offset = 0;
+ for (size_t c = 0; c < static_cast<size_t>(exr_header->num_channels); c++) {
+ channel_offset_list[c] = channel_offset;
+ if (channels[c].requested_pixel_type == TINYEXR_PIXELTYPE_HALF) {
+ pixel_data_size += sizeof(unsigned short);
+ channel_offset += sizeof(unsigned short);
+ } else if (channels[c].requested_pixel_type ==
+ TINYEXR_PIXELTYPE_FLOAT) {
+ pixel_data_size += sizeof(float);
+ channel_offset += sizeof(float);
+ } else if (channels[c].requested_pixel_type == TINYEXR_PIXELTYPE_UINT) {
+ pixel_data_size += sizeof(unsigned int);
+ channel_offset += sizeof(unsigned int);
+ } else {
+ assert(0);
+ }
}
}
+ const void* compression_param = 0;
#if TINYEXR_USE_ZFP
tinyexr::ZFPCompressionParam zfp_compression_param;
@@ -12364,304 +6754,517 @@ size_t SaveEXRImageToMemory(const EXRImage *exr_image,
{
std::string e;
bool ret = tinyexr::FindZFPCompressionParam(
- &zfp_compression_param, exr_header->custom_attributes,
- exr_header->num_custom_attributes, &e);
+ &zfp_compression_param, exr_header->custom_attributes,
+ exr_header->num_custom_attributes, &e);
if (!ret) {
// Use predefined compression parameter.
zfp_compression_param.type = 0;
zfp_compression_param.rate = 2;
}
+ compression_param = &zfp_compression_param;
}
#endif
- // TODO(LTE): C++11 thread
+ tinyexr_uint64 offset = chunk_offset;
+ tinyexr_uint64 doffset = is_multipart ? 4u : 0u;
-// Use signed int since some OpenMP compiler doesn't allow unsigned type for
-// `parallel for`
-#if TINYEXR_USE_OPENMP
-#pragma omp parallel for
-#endif
- for (int i = 0; i < num_blocks; i++) {
- size_t ii = static_cast<size_t>(i);
- int start_y = num_scanlines * i;
- int endY = (std::min)(num_scanlines * (i + 1), exr_image->height);
- int h = endY - start_y;
-
- std::vector<unsigned char> buf(
- static_cast<size_t>(exr_image->width * h * pixel_data_size));
+ if (exr_image->tiles) {
+ const EXRImage* level_image = exr_image;
+ size_t block_idx = 0;
+ tinyexr::tinyexr_uint64 block_data_size = 0;
+ int num_levels = (exr_header->tile_level_mode != TINYEXR_TILE_RIPMAP_LEVELS) ?
+ offset_data.num_x_levels : (offset_data.num_x_levels * offset_data.num_y_levels);
+ for (int level_index = 0; level_index < num_levels; ++level_index) {
+ if (!level_image) {
+ if (err) {
+ (*err) += "Invalid number of tiled levels for EncodeChunk\n";
+ }
+ return TINYEXR_ERROR_INVALID_DATA;
+ }
- for (size_t c = 0; c < static_cast<size_t>(exr_header->num_channels); c++) {
- if (exr_header->pixel_types[c] == TINYEXR_PIXELTYPE_HALF) {
- if (exr_header->requested_pixel_types[c] == TINYEXR_PIXELTYPE_FLOAT) {
- for (int y = 0; y < h; y++) {
- // Assume increasing Y
- float *line_ptr = reinterpret_cast<float *>(&buf.at(
- static_cast<size_t>(pixel_data_size * y * exr_image->width) +
- channel_offset_list[c] *
- static_cast<size_t>(exr_image->width)));
- for (int x = 0; x < exr_image->width; x++) {
- tinyexr::FP16 h16;
- h16.u = reinterpret_cast<unsigned short **>(
- exr_image->images)[c][(y + start_y) * exr_image->width + x];
-
- tinyexr::FP32 f32 = half_to_float(h16);
-
- tinyexr::swap4(&f32.f);
-
- // line_ptr[x] = f32.f;
- tinyexr::cpy4(line_ptr + x, &(f32.f));
- }
- }
- } else if (exr_header->requested_pixel_types[c] ==
- TINYEXR_PIXELTYPE_HALF) {
- for (int y = 0; y < h; y++) {
- // Assume increasing Y
- unsigned short *line_ptr = reinterpret_cast<unsigned short *>(
- &buf.at(static_cast<size_t>(pixel_data_size * y *
- exr_image->width) +
- channel_offset_list[c] *
- static_cast<size_t>(exr_image->width)));
- for (int x = 0; x < exr_image->width; x++) {
- unsigned short val = reinterpret_cast<unsigned short **>(
- exr_image->images)[c][(y + start_y) * exr_image->width + x];
-
- tinyexr::swap2(&val);
-
- // line_ptr[x] = val;
- tinyexr::cpy2(line_ptr + x, &val);
- }
- }
- } else {
- assert(0);
+ int level_index_from_image = LevelIndex(level_image->level_x, level_image->level_y,
+ exr_header->tile_level_mode, offset_data.num_x_levels);
+ if (level_index_from_image != level_index) {
+ if (err) {
+ (*err) += "Incorrect level ordering in tiled image\n";
}
+ return TINYEXR_ERROR_INVALID_DATA;
+ }
+ int num_y_tiles = (int)offset_data.offsets[level_index].size();
+ assert(num_y_tiles);
+ int num_x_tiles = (int)offset_data.offsets[level_index][0].size();
+ assert(num_x_tiles);
+
+ std::string e;
+ int ret = EncodeTiledLevel(level_image,
+ exr_header,
+ channels,
+ data_list,
+ block_idx,
+ num_x_tiles,
+ num_y_tiles,
+ channel_offset_list,
+ pixel_data_size,
+ compression_param,
+ &e);
+ if (ret != TINYEXR_SUCCESS) {
+ if (!e.empty() && err) {
+ (*err) += e;
+ }
+ return ret;
+ }
- } else if (exr_header->pixel_types[c] == TINYEXR_PIXELTYPE_FLOAT) {
- if (exr_header->requested_pixel_types[c] == TINYEXR_PIXELTYPE_HALF) {
- for (int y = 0; y < h; y++) {
- // Assume increasing Y
- unsigned short *line_ptr = reinterpret_cast<unsigned short *>(
- &buf.at(static_cast<size_t>(pixel_data_size * y *
- exr_image->width) +
- channel_offset_list[c] *
- static_cast<size_t>(exr_image->width)));
- for (int x = 0; x < exr_image->width; x++) {
- tinyexr::FP32 f32;
- f32.f = reinterpret_cast<float **>(
- exr_image->images)[c][(y + start_y) * exr_image->width + x];
-
- tinyexr::FP16 h16;
- h16 = float_to_half_full(f32);
-
- tinyexr::swap2(reinterpret_cast<unsigned short *>(&h16.u));
-
- // line_ptr[x] = h16.u;
- tinyexr::cpy2(line_ptr + x, &(h16.u));
- }
- }
- } else if (exr_header->requested_pixel_types[c] ==
- TINYEXR_PIXELTYPE_FLOAT) {
- for (int y = 0; y < h; y++) {
- // Assume increasing Y
- float *line_ptr = reinterpret_cast<float *>(&buf.at(
- static_cast<size_t>(pixel_data_size * y * exr_image->width) +
- channel_offset_list[c] *
- static_cast<size_t>(exr_image->width)));
- for (int x = 0; x < exr_image->width; x++) {
- float val = reinterpret_cast<float **>(
- exr_image->images)[c][(y + start_y) * exr_image->width + x];
-
- tinyexr::swap4(&val);
-
- // line_ptr[x] = val;
- tinyexr::cpy4(line_ptr + x, &val);
- }
- }
- } else {
- assert(0);
+ for (size_t j = 0; j < static_cast<size_t>(num_y_tiles); ++j)
+ for (size_t i = 0; i < static_cast<size_t>(num_x_tiles); ++i) {
+ offset_data.offsets[level_index][j][i] = offset;
+ swap8(reinterpret_cast<tinyexr_uint64*>(&offset_data.offsets[level_index][j][i]));
+ offset += data_list[block_idx].size() + doffset;
+ block_data_size += data_list[block_idx].size();
+ ++block_idx;
}
- } else if (exr_header->pixel_types[c] == TINYEXR_PIXELTYPE_UINT) {
- for (int y = 0; y < h; y++) {
- // Assume increasing Y
- unsigned int *line_ptr = reinterpret_cast<unsigned int *>(&buf.at(
- static_cast<size_t>(pixel_data_size * y * exr_image->width) +
- channel_offset_list[c] * static_cast<size_t>(exr_image->width)));
- for (int x = 0; x < exr_image->width; x++) {
- unsigned int val = reinterpret_cast<unsigned int **>(
- exr_image->images)[c][(y + start_y) * exr_image->width + x];
+ level_image = level_image->next_level;
+ }
+ assert(static_cast<int>(block_idx) == num_blocks);
+ total_size = offset;
+ } else { // scanlines
+ std::vector<tinyexr::tinyexr_uint64>& offsets = offset_data.offsets[0][0];
- tinyexr::swap4(&val);
+#if TINYEXR_HAS_CXX11 && (TINYEXR_USE_THREAD > 0)
+ std::atomic<bool> invalid_data(false);
+ std::vector<std::thread> workers;
+ std::atomic<int> block_count(0);
- // line_ptr[x] = val;
- tinyexr::cpy4(line_ptr + x, &val);
- }
- }
+ int num_threads = std::min(std::max(1, int(std::thread::hardware_concurrency())), num_blocks);
+
+ for (int t = 0; t < num_threads; t++) {
+ workers.emplace_back(std::thread([&]() {
+ int i = 0;
+ while ((i = block_count++) < num_blocks) {
+
+#else
+ bool invalid_data(false);
+#if TINYEXR_USE_OPENMP
+#pragma omp parallel for
+#endif
+ for (int i = 0; i < num_blocks; i++) {
+
+#endif
+ int start_y = num_scanlines * i;
+ int end_Y = (std::min)(num_scanlines * (i + 1), exr_image->height);
+ int num_lines = end_Y - start_y;
+
+ const unsigned char* const* images =
+ static_cast<const unsigned char* const*>(exr_image->images);
+
+ data_list[i].resize(2*sizeof(int));
+ size_t data_header_size = data_list[i].size();
+
+ bool ret = EncodePixelData(data_list[i],
+ images,
+ exr_header->compression_type,
+ 0, // increasing y
+ exr_image->width,
+ exr_image->height,
+ exr_image->width,
+ start_y,
+ num_lines,
+ pixel_data_size,
+ channels,
+ channel_offset_list,
+ compression_param);
+ if (!ret) {
+ invalid_data = true;
+ continue; // "break" cannot be used with OpenMP
}
+ assert(data_list[i].size() > data_header_size);
+ int data_len = static_cast<int>(data_list[i].size() - data_header_size);
+ memcpy(&data_list[i][0], &start_y, sizeof(int));
+ memcpy(&data_list[i][4], &data_len, sizeof(int));
+
+ swap4(reinterpret_cast<int*>(&data_list[i][0]));
+ swap4(reinterpret_cast<int*>(&data_list[i][4]));
+#if TINYEXR_HAS_CXX11 && (TINYEXR_USE_THREAD > 0)
+ }
+ }));
}
- if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_NONE) {
- // 4 byte: scan line
- // 4 byte: data size
- // ~ : pixel data(uncompressed)
- std::vector<unsigned char> header(8);
- unsigned int data_len = static_cast<unsigned int>(buf.size());
- memcpy(&header.at(0), &start_y, sizeof(int));
- memcpy(&header.at(4), &data_len, sizeof(unsigned int));
+ for (auto &t : workers) {
+ t.join();
+ }
+#else
+ } // omp parallel
+#endif
+
+ if (invalid_data) {
+ if (err) {
+ (*err) += "Failed to encode scanline data.\n";
+ }
+ return TINYEXR_ERROR_INVALID_DATA;
+ }
- tinyexr::swap4(reinterpret_cast<unsigned int *>(&header.at(0)));
- tinyexr::swap4(reinterpret_cast<unsigned int *>(&header.at(4)));
+ for (size_t i = 0; i < static_cast<size_t>(num_blocks); i++) {
+ offsets[i] = offset;
+ tinyexr::swap8(reinterpret_cast<tinyexr::tinyexr_uint64 *>(&offsets[i]));
+ offset += data_list[i].size() + doffset;
+ }
- data_list[ii].insert(data_list[ii].end(), header.begin(), header.end());
- data_list[ii].insert(data_list[ii].end(), buf.begin(),
- buf.begin() + data_len);
+ total_size = static_cast<size_t>(offset);
+ }
+ return TINYEXR_SUCCESS;
+}
- } else if ((exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_ZIPS) ||
- (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_ZIP)) {
-#if TINYEXR_USE_MINIZ
- std::vector<unsigned char> block(tinyexr::miniz::mz_compressBound(
- static_cast<unsigned long>(buf.size())));
+// can save a single or multi-part image (no deep* formats)
+static size_t SaveEXRNPartImageToMemory(const EXRImage* exr_images,
+ const EXRHeader** exr_headers,
+ unsigned int num_parts,
+ unsigned char** memory_out, const char** err) {
+ if (exr_images == NULL || exr_headers == NULL || num_parts == 0 ||
+ memory_out == NULL) {
+ SetErrorMessage("Invalid argument for SaveEXRNPartImageToMemory",
+ err);
+ return 0;
+ }
+ {
+ for (unsigned int i = 0; i < num_parts; ++i) {
+ if (exr_headers[i]->compression_type < 0) {
+ SetErrorMessage("Invalid argument for SaveEXRNPartImageToMemory",
+ err);
+ return 0;
+ }
+#if !TINYEXR_USE_PIZ
+ if (exr_headers[i]->compression_type == TINYEXR_COMPRESSIONTYPE_PIZ) {
+ SetErrorMessage("PIZ compression is not supported in this build",
+ err);
+ return 0;
+ }
+#endif
+#if !TINYEXR_USE_ZFP
+ if (exr_headers[i]->compression_type == TINYEXR_COMPRESSIONTYPE_ZFP) {
+ SetErrorMessage("ZFP compression is not supported in this build",
+ err);
+ return 0;
+ }
#else
- std::vector<unsigned char> block(
- compressBound(static_cast<uLong>(buf.size())));
+ for (int c = 0; c < exr_header->num_channels; ++c) {
+ if (exr_headers[i]->requested_pixel_types[c] != TINYEXR_PIXELTYPE_FLOAT) {
+ SetErrorMessage("Pixel type must be FLOAT for ZFP compression",
+ err);
+ return 0;
+ }
+ }
#endif
- tinyexr::tinyexr_uint64 outSize = block.size();
-
- tinyexr::CompressZip(&block.at(0), outSize,
- reinterpret_cast<const unsigned char *>(&buf.at(0)),
- static_cast<unsigned long>(buf.size()));
+ }
+ }
- // 4 byte: scan line
- // 4 byte: data size
- // ~ : pixel data(compressed)
- std::vector<unsigned char> header(8);
- unsigned int data_len = static_cast<unsigned int>(outSize); // truncate
- memcpy(&header.at(0), &start_y, sizeof(int));
- memcpy(&header.at(4), &data_len, sizeof(unsigned int));
+ std::vector<unsigned char> memory;
- tinyexr::swap4(reinterpret_cast<unsigned int *>(&header.at(0)));
- tinyexr::swap4(reinterpret_cast<unsigned int *>(&header.at(4)));
+ // Header
+ {
+ const char header[] = { 0x76, 0x2f, 0x31, 0x01 };
+ memory.insert(memory.end(), header, header + 4);
+ }
- data_list[ii].insert(data_list[ii].end(), header.begin(), header.end());
- data_list[ii].insert(data_list[ii].end(), block.begin(),
- block.begin() + data_len);
+ // Version
+ // using value from the first header
+ int long_name = exr_headers[0]->long_name;
+ {
+ char marker[] = { 2, 0, 0, 0 };
+ /* @todo
+ if (exr_header->non_image) {
+ marker[1] |= 0x8;
+ }
+ */
+ // tiled
+ if (num_parts == 1 && exr_images[0].tiles) {
+ marker[1] |= 0x2;
+ }
+ // long_name
+ if (long_name) {
+ marker[1] |= 0x4;
+ }
+ // multipart
+ if (num_parts > 1) {
+ marker[1] |= 0x10;
+ }
+ memory.insert(memory.end(), marker, marker + 4);
+ }
- } else if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_RLE) {
- // (buf.size() * 3) / 2 would be enough.
- std::vector<unsigned char> block((buf.size() * 3) / 2);
+ int total_chunk_count = 0;
+ std::vector<int> chunk_count(num_parts);
+ std::vector<OffsetData> offset_data(num_parts);
+ for (unsigned int i = 0; i < num_parts; ++i) {
+ if (!exr_images[i].tiles) {
+ int num_scanlines = NumScanlines(exr_headers[i]->compression_type);
+ chunk_count[i] =
+ (exr_images[i].height + num_scanlines - 1) / num_scanlines;
+ InitSingleResolutionOffsets(offset_data[i], chunk_count[i]);
+ total_chunk_count += chunk_count[i];
+ } else {
+ {
+ std::vector<int> num_x_tiles, num_y_tiles;
+ PrecalculateTileInfo(num_x_tiles, num_y_tiles, exr_headers[i]);
+ chunk_count[i] =
+ InitTileOffsets(offset_data[i], exr_headers[i], num_x_tiles, num_y_tiles);
+ total_chunk_count += chunk_count[i];
+ }
+ }
+ }
+ // Write attributes to memory buffer.
+ std::vector< std::vector<tinyexr::ChannelInfo> > channels(num_parts);
+ {
+ std::set<std::string> partnames;
+ for (unsigned int i = 0; i < num_parts; ++i) {
+ //channels
+ {
+ std::vector<unsigned char> data;
+
+ for (int c = 0; c < exr_headers[i]->num_channels; c++) {
+ tinyexr::ChannelInfo info;
+ info.p_linear = 0;
+ info.pixel_type = exr_headers[i]->pixel_types[c];
+ info.requested_pixel_type = exr_headers[i]->requested_pixel_types[c];
+ info.x_sampling = 1;
+ info.y_sampling = 1;
+ info.name = std::string(exr_headers[i]->channels[c].name);
+ channels[i].push_back(info);
+ }
- tinyexr::tinyexr_uint64 outSize = block.size();
+ tinyexr::WriteChannelInfo(data, channels[i]);
- tinyexr::CompressRle(&block.at(0), outSize,
- reinterpret_cast<const unsigned char *>(&buf.at(0)),
- static_cast<unsigned long>(buf.size()));
+ tinyexr::WriteAttributeToMemory(&memory, "channels", "chlist", &data.at(0),
+ static_cast<int>(data.size()));
+ }
- // 4 byte: scan line
- // 4 byte: data size
- // ~ : pixel data(compressed)
- std::vector<unsigned char> header(8);
- unsigned int data_len = static_cast<unsigned int>(outSize); // truncate
- memcpy(&header.at(0), &start_y, sizeof(int));
- memcpy(&header.at(4), &data_len, sizeof(unsigned int));
+ {
+ int comp = exr_headers[i]->compression_type;
+ swap4(&comp);
+ WriteAttributeToMemory(
+ &memory, "compression", "compression",
+ reinterpret_cast<const unsigned char*>(&comp), 1);
+ }
- tinyexr::swap4(reinterpret_cast<unsigned int *>(&header.at(0)));
- tinyexr::swap4(reinterpret_cast<unsigned int *>(&header.at(4)));
+ {
+ int data[4] = { 0, 0, exr_images[i].width - 1, exr_images[i].height - 1 };
+ swap4(&data[0]);
+ swap4(&data[1]);
+ swap4(&data[2]);
+ swap4(&data[3]);
+ WriteAttributeToMemory(
+ &memory, "dataWindow", "box2i",
+ reinterpret_cast<const unsigned char*>(data), sizeof(int) * 4);
+
+ int data0[4] = { 0, 0, exr_images[0].width - 1, exr_images[0].height - 1 };
+ swap4(&data0[0]);
+ swap4(&data0[1]);
+ swap4(&data0[2]);
+ swap4(&data0[3]);
+ // Note: must be the same across parts (currently, using value from the first header)
+ WriteAttributeToMemory(
+ &memory, "displayWindow", "box2i",
+ reinterpret_cast<const unsigned char*>(data0), sizeof(int) * 4);
+ }
- data_list[ii].insert(data_list[ii].end(), header.begin(), header.end());
- data_list[ii].insert(data_list[ii].end(), block.begin(),
- block.begin() + data_len);
+ {
+ unsigned char line_order = 0; // @fixme { read line_order from EXRHeader }
+ WriteAttributeToMemory(&memory, "lineOrder", "lineOrder",
+ &line_order, 1);
+ }
- } else if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_PIZ) {
-#if TINYEXR_USE_PIZ
- unsigned int bufLen =
- 8192 + static_cast<unsigned int>(
- 2 * static_cast<unsigned int>(
- buf.size())); // @fixme { compute good bound. }
- std::vector<unsigned char> block(bufLen);
- unsigned int outSize = static_cast<unsigned int>(block.size());
-
- CompressPiz(&block.at(0), &outSize,
- reinterpret_cast<const unsigned char *>(&buf.at(0)),
- buf.size(), channels, exr_image->width, h);
-
- // 4 byte: scan line
- // 4 byte: data size
- // ~ : pixel data(compressed)
- std::vector<unsigned char> header(8);
- unsigned int data_len = outSize;
- memcpy(&header.at(0), &start_y, sizeof(int));
- memcpy(&header.at(4), &data_len, sizeof(unsigned int));
-
- tinyexr::swap4(reinterpret_cast<unsigned int *>(&header.at(0)));
- tinyexr::swap4(reinterpret_cast<unsigned int *>(&header.at(4)));
-
- data_list[ii].insert(data_list[ii].end(), header.begin(), header.end());
- data_list[ii].insert(data_list[ii].end(), block.begin(),
- block.begin() + data_len);
+ {
+ // Note: must be the same across parts
+ float aspectRatio = 1.0f;
+ swap4(&aspectRatio);
+ WriteAttributeToMemory(
+ &memory, "pixelAspectRatio", "float",
+ reinterpret_cast<const unsigned char*>(&aspectRatio), sizeof(float));
+ }
-#else
- assert(0);
-#endif
- } else if (exr_header->compression_type == TINYEXR_COMPRESSIONTYPE_ZFP) {
-#if TINYEXR_USE_ZFP
- std::vector<unsigned char> block;
- unsigned int outSize;
+ {
+ float center[2] = { 0.0f, 0.0f };
+ swap4(&center[0]);
+ swap4(&center[1]);
+ WriteAttributeToMemory(
+ &memory, "screenWindowCenter", "v2f",
+ reinterpret_cast<const unsigned char*>(center), 2 * sizeof(float));
+ }
- tinyexr::CompressZfp(
- &block, &outSize, reinterpret_cast<const float *>(&buf.at(0)),
- exr_image->width, h, exr_header->num_channels, zfp_compression_param);
+ {
+ float w = 1.0f;
+ swap4(&w);
+ WriteAttributeToMemory(&memory, "screenWindowWidth", "float",
+ reinterpret_cast<const unsigned char*>(&w),
+ sizeof(float));
+ }
- // 4 byte: scan line
- // 4 byte: data size
- // ~ : pixel data(compressed)
- std::vector<unsigned char> header(8);
- unsigned int data_len = outSize;
- memcpy(&header.at(0), &start_y, sizeof(int));
- memcpy(&header.at(4), &data_len, sizeof(unsigned int));
+ if (exr_images[i].tiles) {
+ unsigned char tile_mode = static_cast<unsigned char>(exr_headers[i]->tile_level_mode & 0x3);
+ if (exr_headers[i]->tile_rounding_mode) tile_mode |= (1u << 4u);
+ //unsigned char data[9] = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+ unsigned int datai[3] = { 0, 0, 0 };
+ unsigned char* data = reinterpret_cast<unsigned char*>(&datai[0]);
+ datai[0] = static_cast<unsigned int>(exr_headers[i]->tile_size_x);
+ datai[1] = static_cast<unsigned int>(exr_headers[i]->tile_size_y);
+ data[8] = tile_mode;
+ swap4(reinterpret_cast<unsigned int*>(&data[0]));
+ swap4(reinterpret_cast<unsigned int*>(&data[4]));
+ WriteAttributeToMemory(
+ &memory, "tiles", "tiledesc",
+ reinterpret_cast<const unsigned char*>(data), 9);
+ }
- tinyexr::swap4(reinterpret_cast<unsigned int *>(&header.at(0)));
- tinyexr::swap4(reinterpret_cast<unsigned int *>(&header.at(4)));
+ // must be present for multi-part files - according to spec.
+ if (num_parts > 1) {
+ // name
+ {
+ size_t len = 0;
+ if ((len = strlen(exr_headers[i]->name)) > 0) {
+ partnames.emplace(exr_headers[i]->name);
+ if (partnames.size() != i + 1) {
+ SetErrorMessage("'name' attributes must be unique for a multi-part file", err);
+ return 0;
+ }
+ WriteAttributeToMemory(
+ &memory, "name", "string",
+ reinterpret_cast<const unsigned char*>(exr_headers[i]->name),
+ static_cast<int>(len));
+ } else {
+ SetErrorMessage("Invalid 'name' attribute for a multi-part file", err);
+ return 0;
+ }
+ }
+ // type
+ {
+ const char* type = "scanlineimage";
+ if (exr_images[i].tiles) type = "tiledimage";
+ WriteAttributeToMemory(
+ &memory, "type", "string",
+ reinterpret_cast<const unsigned char*>(type),
+ static_cast<int>(strlen(type)));
+ }
+ // chunkCount
+ {
+ WriteAttributeToMemory(
+ &memory, "chunkCount", "int",
+ reinterpret_cast<const unsigned char*>(&chunk_count[i]),
+ 4);
+ }
+ }
- data_list[ii].insert(data_list[ii].end(), header.begin(), header.end());
- data_list[ii].insert(data_list[ii].end(), block.begin(),
- block.begin() + data_len);
+ // Custom attributes
+ if (exr_headers[i]->num_custom_attributes > 0) {
+ for (int j = 0; j < exr_headers[i]->num_custom_attributes; j++) {
+ tinyexr::WriteAttributeToMemory(
+ &memory, exr_headers[i]->custom_attributes[j].name,
+ exr_headers[i]->custom_attributes[j].type,
+ reinterpret_cast<const unsigned char*>(
+ exr_headers[i]->custom_attributes[j].value),
+ exr_headers[i]->custom_attributes[j].size);
+ }
+ }
-#else
- assert(0);
-#endif
- } else {
- assert(0);
+ { // end of header
+ memory.push_back(0);
+ }
}
- } // omp parallel
-
- for (size_t i = 0; i < static_cast<size_t>(num_blocks); i++) {
- offsets[i] = offset;
- tinyexr::swap8(reinterpret_cast<tinyexr::tinyexr_uint64 *>(&offsets[i]));
- offset += data_list[i].size();
+ }
+ if (num_parts > 1) {
+ // end of header list
+ memory.push_back(0);
}
- size_t totalSize = static_cast<size_t>(offset);
- {
- memory.insert(
- memory.end(), reinterpret_cast<unsigned char *>(&offsets.at(0)),
- reinterpret_cast<unsigned char *>(&offsets.at(0)) +
- sizeof(tinyexr::tinyexr_uint64) * static_cast<size_t>(num_blocks));
+ tinyexr_uint64 chunk_offset = memory.size() + size_t(total_chunk_count) * sizeof(tinyexr_uint64);
+
+ tinyexr_uint64 total_size = 0;
+ std::vector< std::vector< std::vector<unsigned char> > > data_lists(num_parts);
+ for (unsigned int i = 0; i < num_parts; ++i) {
+ std::string e;
+ int ret = EncodeChunk(&exr_images[i], exr_headers[i],
+ channels[i],
+ chunk_count[i],
+ // starting offset of current chunk after part-number
+ chunk_offset,
+ num_parts > 1,
+ offset_data[i], // output: block offsets, must be initialized
+ data_lists[i], // output
+ total_size, // output
+ &e);
+ if (ret != TINYEXR_SUCCESS) {
+ if (!e.empty()) {
+ tinyexr::SetErrorMessage(e, err);
+ }
+ return 0;
+ }
+ chunk_offset = total_size;
}
- if (memory.size() == 0) {
+ // Allocating required memory
+ if (total_size == 0) { // something went wrong
tinyexr::SetErrorMessage("Output memory size is zero", err);
return 0;
}
-
- (*memory_out) = static_cast<unsigned char *>(malloc(totalSize));
- memcpy((*memory_out), &memory.at(0), memory.size());
- unsigned char *memory_ptr = *memory_out + memory.size();
-
- for (size_t i = 0; i < static_cast<size_t>(num_blocks); i++) {
- memcpy(memory_ptr, &data_list[i].at(0), data_list[i].size());
- memory_ptr += data_list[i].size();
+ (*memory_out) = static_cast<unsigned char*>(malloc(total_size));
+
+ // Writing header
+ memcpy((*memory_out), &memory[0], memory.size());
+ unsigned char* memory_ptr = *memory_out + memory.size();
+ size_t sum = memory.size();
+
+ // Writing offset data for chunks
+ for (unsigned int i = 0; i < num_parts; ++i) {
+ if (exr_images[i].tiles) {
+ const EXRImage* level_image = &exr_images[i];
+ int num_levels = (exr_headers[i]->tile_level_mode != TINYEXR_TILE_RIPMAP_LEVELS) ?
+ offset_data[i].num_x_levels : (offset_data[i].num_x_levels * offset_data[i].num_y_levels);
+ for (int level_index = 0; level_index < num_levels; ++level_index) {
+ for (size_t j = 0; j < offset_data[i].offsets[level_index].size(); ++j) {
+ size_t num_bytes = sizeof(tinyexr_uint64) * offset_data[i].offsets[level_index][j].size();
+ sum += num_bytes;
+ assert(sum <= total_size);
+ memcpy(memory_ptr,
+ reinterpret_cast<unsigned char*>(&offset_data[i].offsets[level_index][j][0]),
+ num_bytes);
+ memory_ptr += num_bytes;
+ }
+ level_image = level_image->next_level;
+ }
+ } else {
+ size_t num_bytes = sizeof(tinyexr::tinyexr_uint64) * static_cast<size_t>(chunk_count[i]);
+ sum += num_bytes;
+ assert(sum <= total_size);
+ std::vector<tinyexr::tinyexr_uint64>& offsets = offset_data[i].offsets[0][0];
+ memcpy(memory_ptr, reinterpret_cast<unsigned char*>(&offsets[0]), num_bytes);
+ memory_ptr += num_bytes;
+ }
+ }
+
+ // Writing chunk data
+ for (unsigned int i = 0; i < num_parts; ++i) {
+ for (size_t j = 0; j < static_cast<size_t>(chunk_count[i]); ++j) {
+ if (num_parts > 1) {
+ sum += 4;
+ assert(sum <= total_size);
+ unsigned int part_number = i;
+ swap4(&part_number);
+ memcpy(memory_ptr, &part_number, 4);
+ memory_ptr += 4;
+ }
+ sum += data_lists[i][j].size();
+ assert(sum <= total_size);
+ memcpy(memory_ptr, &data_lists[i][j][0], data_lists[i][j].size());
+ memory_ptr += data_lists[i][j].size();
+ }
}
+ assert(sum == total_size);
+ return total_size; // OK
+}
+
+} // tinyexr
- return totalSize; // OK
+size_t SaveEXRImageToMemory(const EXRImage* exr_image,
+ const EXRHeader* exr_header,
+ unsigned char** memory_out, const char** err) {
+ return tinyexr::SaveEXRNPartImageToMemory(exr_image, &exr_header, 1, memory_out, err);
}
int SaveEXRImageToFile(const EXRImage *exr_image, const EXRHeader *exr_header,
@@ -12690,7 +7293,7 @@ int SaveEXRImageToFile(const EXRImage *exr_image, const EXRHeader *exr_header,
FILE *fp = NULL;
#ifdef _WIN32
-#if defined(_MSC_VER) || defined(__MINGW32__) // MSVC, MinGW gcc or clang
+#if defined(_MSC_VER) || (defined(MINGW_HAS_SECURE_API) && MINGW_HAS_SECURE_API) // MSVC, MinGW GCC, or Clang
errno_t errcode =
_wfopen_s(&fp, tinyexr::UTF8ToWchar(filename).c_str(), L"wb");
if (errcode != 0) {
@@ -12699,7 +7302,7 @@ int SaveEXRImageToFile(const EXRImage *exr_image, const EXRHeader *exr_header,
return TINYEXR_ERROR_CANT_WRITE_FILE;
}
#else
- // Unknown compiler
+ // Unknown compiler or MinGW without MINGW_HAS_SECURE_API.
fp = fopen(filename, "wb");
#endif
#else
@@ -12733,6 +7336,75 @@ int SaveEXRImageToFile(const EXRImage *exr_image, const EXRHeader *exr_header,
return TINYEXR_SUCCESS;
}
+size_t SaveEXRMultipartImageToMemory(const EXRImage* exr_images,
+ const EXRHeader** exr_headers,
+ unsigned int num_parts,
+ unsigned char** memory_out, const char** err) {
+ if (exr_images == NULL || exr_headers == NULL || num_parts < 2 ||
+ memory_out == NULL) {
+ tinyexr::SetErrorMessage("Invalid argument for SaveEXRNPartImageToMemory",
+ err);
+ return 0;
+ }
+ return tinyexr::SaveEXRNPartImageToMemory(exr_images, exr_headers, num_parts, memory_out, err);
+}
+
+int SaveEXRMultipartImageToFile(const EXRImage* exr_images,
+ const EXRHeader** exr_headers,
+ unsigned int num_parts,
+ const char* filename,
+ const char** err) {
+ if (exr_images == NULL || exr_headers == NULL || num_parts < 2) {
+ tinyexr::SetErrorMessage("Invalid argument for SaveEXRMultipartImageToFile",
+ err);
+ return TINYEXR_ERROR_INVALID_ARGUMENT;
+ }
+
+ FILE *fp = NULL;
+#ifdef _WIN32
+#if defined(_MSC_VER) || (defined(MINGW_HAS_SECURE_API) && MINGW_HAS_SECURE_API) // MSVC, MinGW GCC, or Clang.
+ errno_t errcode =
+ _wfopen_s(&fp, tinyexr::UTF8ToWchar(filename).c_str(), L"wb");
+ if (errcode != 0) {
+ tinyexr::SetErrorMessage("Cannot write a file: " + std::string(filename),
+ err);
+ return TINYEXR_ERROR_CANT_WRITE_FILE;
+ }
+#else
+ // Unknown compiler or MinGW without MINGW_HAS_SECURE_API.
+ fp = fopen(filename, "wb");
+#endif
+#else
+ fp = fopen(filename, "wb");
+#endif
+ if (!fp) {
+ tinyexr::SetErrorMessage("Cannot write a file: " + std::string(filename),
+ err);
+ return TINYEXR_ERROR_CANT_WRITE_FILE;
+ }
+
+ unsigned char *mem = NULL;
+ size_t mem_size = SaveEXRMultipartImageToMemory(exr_images, exr_headers, num_parts, &mem, err);
+ if (mem_size == 0) {
+ return TINYEXR_ERROR_SERIALZATION_FAILED;
+ }
+
+ size_t written_size = 0;
+ if ((mem_size > 0) && mem) {
+ written_size = fwrite(mem, 1, mem_size, fp);
+ }
+ free(mem);
+
+ fclose(fp);
+
+ if (written_size != mem_size) {
+ tinyexr::SetErrorMessage("Cannot write a file", err);
+ return TINYEXR_ERROR_CANT_WRITE_FILE;
+ }
+
+ return TINYEXR_SUCCESS;
+}
+
int LoadDeepEXR(DeepImage *deep_image, const char *filename, const char **err) {
if (deep_image == NULL) {
tinyexr::SetErrorMessage("Invalid argument for LoadDeepEXR", err);
@@ -12741,7 +7413,7 @@ int LoadDeepEXR(DeepImage *deep_image, const char *filename, const char **err) {
#ifdef _WIN32
FILE *fp = NULL;
-#if defined(_MSC_VER) || defined(__MINGW32__) // MSVC, MinGW gcc or clang
+#if defined(_MSC_VER) || (defined(MINGW_HAS_SECURE_API) && MINGW_HAS_SECURE_API) // MSVC, MinGW GCC, or Clang.
errno_t errcode =
_wfopen_s(&fp, tinyexr::UTF8ToWchar(filename).c_str(), L"rb");
if (errcode != 0) {
@@ -12750,7 +7422,7 @@ int LoadDeepEXR(DeepImage *deep_image, const char *filename, const char **err) {
return TINYEXR_ERROR_CANT_OPEN_FILE;
}
#else
- // Unknown compiler
+ // Unknown compiler or MinGW without MINGW_HAS_SECURE_API.
fp = fopen(filename, "rb");
#endif
if (!fp) {
@@ -12917,9 +7589,6 @@ int LoadDeepEXR(DeepImage *deep_image, const char *filename, const char **err) {
int data_width = dw - dx + 1;
int data_height = dh - dy + 1;
- std::vector<float> image(
- static_cast<size_t>(data_width * data_height * 4)); // 4 = RGBA
-
// Read offset tables.
int num_blocks = data_height / num_scanline_blocks;
if (num_blocks * num_scanline_blocks < data_height) {
@@ -13138,6 +7807,9 @@ void InitEXRImage(EXRImage *exr_image) {
exr_image->images = NULL;
exr_image->tiles = NULL;
+ exr_image->next_level = NULL;
+ exr_image->level_x = 0;
+ exr_image->level_y = 0;
exr_image->num_tiles = 0;
}
@@ -13184,14 +7856,43 @@ int FreeEXRHeader(EXRHeader *exr_header) {
free(exr_header->custom_attributes);
}
+ EXRSetNameAttr(exr_header, NULL);
+
return TINYEXR_SUCCESS;
}
+void EXRSetNameAttr(EXRHeader* exr_header, const char* name) {
+ if (exr_header == NULL) {
+ return;
+ }
+ memset(exr_header->name, 0, 256);
+ if (name != NULL) {
+ size_t len = std::min(strlen(name), (size_t)255);
+ if (len) {
+ memcpy(exr_header->name, name, len);
+ }
+ }
+}
+
+int EXRNumLevels(const EXRImage* exr_image) {
+ if (exr_image == NULL) return 0;
+ if(exr_image->images) return 1; // scanlines
+ int levels = 1;
+ const EXRImage* level_image = exr_image;
+ while((level_image = level_image->next_level)) ++levels;
+ return levels;
+}
+
int FreeEXRImage(EXRImage *exr_image) {
if (exr_image == NULL) {
return TINYEXR_ERROR_INVALID_ARGUMENT;
}
+ if (exr_image->next_level) {
+ FreeEXRImage(exr_image->next_level);
+ delete exr_image->next_level;
+ }
+
for (int i = 0; i < exr_image->num_channels; i++) {
if (exr_image->images && exr_image->images[i]) {
free(exr_image->images[i]);
@@ -13229,7 +7930,7 @@ int ParseEXRHeaderFromFile(EXRHeader *exr_header, const EXRVersion *exr_version,
FILE *fp = NULL;
#ifdef _WIN32
-#if defined(_MSC_VER) || defined(__MINGW32__) // MSVC, MinGW gcc or clang
+#if defined(_MSC_VER) || (defined(MINGW_HAS_SECURE_API) && MINGW_HAS_SECURE_API) // MSVC, MinGW GCC, or Clang.
errno_t errcode =
_wfopen_s(&fp, tinyexr::UTF8ToWchar(filename).c_str(), L"rb");
if (errcode != 0) {
@@ -13237,7 +7938,7 @@ int ParseEXRHeaderFromFile(EXRHeader *exr_header, const EXRVersion *exr_version,
return TINYEXR_ERROR_INVALID_FILE;
}
#else
- // Unknown compiler
+ // Unknown compiler or MinGW without MINGW_HAS_SECURE_API.
fp = fopen(filename, "rb");
#endif
#else
@@ -13333,11 +8034,11 @@ int ParseEXRMultipartHeaderFromMemory(EXRHeader ***exr_headers,
static_cast<EXRHeader **>(malloc(sizeof(EXRHeader *) * infos.size()));
for (size_t i = 0; i < infos.size(); i++) {
EXRHeader *exr_header = static_cast<EXRHeader *>(malloc(sizeof(EXRHeader)));
+ memset(exr_header, 0, sizeof(EXRHeader));
ConvertHeader(exr_header, infos[i]);
- // transfoer `tiled` from version.
- exr_header->tiled = exr_version->tiled;
+ exr_header->multipart = exr_version->multipart ? 1 : 0;
(*exr_headers)[i] = exr_header;
}
@@ -13359,7 +8060,7 @@ int ParseEXRMultipartHeaderFromFile(EXRHeader ***exr_headers, int *num_headers,
FILE *fp = NULL;
#ifdef _WIN32
-#if defined(_MSC_VER) || defined(__MINGW32__) // MSVC, MinGW gcc or clang
+#if defined(_MSC_VER) || (defined(MINGW_HAS_SECURE_API) && MINGW_HAS_SECURE_API) // MSVC, MinGW GCC, or Clang.
errno_t errcode =
_wfopen_s(&fp, tinyexr::UTF8ToWchar(filename).c_str(), L"rb");
if (errcode != 0) {
@@ -13367,7 +8068,7 @@ int ParseEXRMultipartHeaderFromFile(EXRHeader ***exr_headers, int *num_headers,
return TINYEXR_ERROR_INVALID_FILE;
}
#else
- // Unknown compiler
+ // Unknown compiler or MinGW without MINGW_HAS_SECURE_API.
fp = fopen(filename, "rb");
#endif
#else
@@ -13465,14 +8166,14 @@ int ParseEXRVersionFromFile(EXRVersion *version, const char *filename) {
FILE *fp = NULL;
#ifdef _WIN32
-#if defined(_MSC_VER) || defined(__MINGW32__) // MSVC, MinGW gcc or clang
+#if defined(_MSC_VER) || (defined(MINGW_HAS_SECURE_API) && MINGW_HAS_SECURE_API) // MSVC, MinGW GCC, or Clang.
errno_t err = _wfopen_s(&fp, tinyexr::UTF8ToWchar(filename).c_str(), L"rb");
if (err != 0) {
// TODO(syoyo): return wfopen_s erro code
return TINYEXR_ERROR_CANT_OPEN_FILE;
}
#else
- // Unknown compiler
+ // Unknown compiler or MinGW without MINGW_HAS_SECURE_API.
fp = fopen(filename, "rb");
#endif
#else
@@ -13543,51 +8244,82 @@ int LoadEXRMultipartImageFromMemory(EXRImage *exr_images,
// http://www.openexr.com/openexrfilelayout.pdf
// Load chunk offset table.
- std::vector<std::vector<tinyexr::tinyexr_uint64> > chunk_offset_table_list;
+ std::vector<tinyexr::OffsetData> chunk_offset_table_list;
+ chunk_offset_table_list.reserve(num_parts);
for (size_t i = 0; i < static_cast<size_t>(num_parts); i++) {
- std::vector<tinyexr::tinyexr_uint64> offset_table(
- static_cast<size_t>(exr_headers[i]->chunk_count));
-
- for (size_t c = 0; c < offset_table.size(); c++) {
- tinyexr::tinyexr_uint64 offset;
- memcpy(&offset, marker, 8);
- tinyexr::swap8(&offset);
+ chunk_offset_table_list.resize(chunk_offset_table_list.size() + 1);
+ tinyexr::OffsetData& offset_data = chunk_offset_table_list.back();
+ if (!exr_headers[i]->tiled || exr_headers[i]->tile_level_mode == TINYEXR_TILE_ONE_LEVEL) {
+ tinyexr::InitSingleResolutionOffsets(offset_data, exr_headers[i]->chunk_count);
+ std::vector<tinyexr::tinyexr_uint64>& offset_table = offset_data.offsets[0][0];
+
+ for (size_t c = 0; c < offset_table.size(); c++) {
+ tinyexr::tinyexr_uint64 offset;
+ memcpy(&offset, marker, 8);
+ tinyexr::swap8(&offset);
+
+ if (offset >= size) {
+ tinyexr::SetErrorMessage("Invalid offset size in EXR header chunks.",
+ err);
+ return TINYEXR_ERROR_INVALID_DATA;
+ }
- if (offset >= size) {
- tinyexr::SetErrorMessage("Invalid offset size in EXR header chunks.",
- err);
- return TINYEXR_ERROR_INVALID_DATA;
+ offset_table[c] = offset + 4; // +4 to skip 'part number'
+ marker += 8;
+ }
+ } else {
+ {
+ std::vector<int> num_x_tiles, num_y_tiles;
+ tinyexr::PrecalculateTileInfo(num_x_tiles, num_y_tiles, exr_headers[i]);
+ int num_blocks = InitTileOffsets(offset_data, exr_headers[i], num_x_tiles, num_y_tiles);
+ if (num_blocks != exr_headers[i]->chunk_count) {
+ tinyexr::SetErrorMessage("Invalid offset table size.", err);
+ return TINYEXR_ERROR_INVALID_DATA;
+ }
+ }
+ for (unsigned int l = 0; l < offset_data.offsets.size(); ++l) {
+ for (unsigned int dy = 0; dy < offset_data.offsets[l].size(); ++dy) {
+ for (unsigned int dx = 0; dx < offset_data.offsets[l][dy].size(); ++dx) {
+ tinyexr::tinyexr_uint64 offset;
+ memcpy(&offset, marker, sizeof(tinyexr::tinyexr_uint64));
+ tinyexr::swap8(&offset);
+ if (offset >= size) {
+ tinyexr::SetErrorMessage("Invalid offset size in EXR header chunks.",
+ err);
+ return TINYEXR_ERROR_INVALID_DATA;
+ }
+ offset_data.offsets[l][dy][dx] = offset + 4; // +4 to skip 'part number'
+ marker += sizeof(tinyexr::tinyexr_uint64); // = 8
+ }
+ }
}
-
- offset_table[c] = offset + 4; // +4 to skip 'part number'
- marker += 8;
}
-
- chunk_offset_table_list.push_back(offset_table);
}
// Decode image.
for (size_t i = 0; i < static_cast<size_t>(num_parts); i++) {
- std::vector<tinyexr::tinyexr_uint64> &offset_table =
- chunk_offset_table_list[i];
+ tinyexr::OffsetData &offset_data = chunk_offset_table_list[i];
// First check 'part number' is identitical to 'i'
- for (size_t c = 0; c < offset_table.size(); c++) {
- const unsigned char *part_number_addr =
- memory + offset_table[c] - 4; // -4 to move to 'part number' field.
- unsigned int part_no;
- memcpy(&part_no, part_number_addr, sizeof(unsigned int)); // 4
- tinyexr::swap4(&part_no);
-
- if (part_no != i) {
- tinyexr::SetErrorMessage("Invalid `part number' in EXR header chunks.",
- err);
- return TINYEXR_ERROR_INVALID_DATA;
- }
- }
+ for (unsigned int l = 0; l < offset_data.offsets.size(); ++l)
+ for (unsigned int dy = 0; dy < offset_data.offsets[l].size(); ++dy)
+ for (unsigned int dx = 0; dx < offset_data.offsets[l][dy].size(); ++dx) {
+
+ const unsigned char *part_number_addr =
+ memory + offset_data.offsets[l][dy][dx] - 4; // -4 to move to 'part number' field.
+ unsigned int part_no;
+ memcpy(&part_no, part_number_addr, sizeof(unsigned int)); // 4
+ tinyexr::swap4(&part_no);
+
+ if (part_no != i) {
+ tinyexr::SetErrorMessage("Invalid `part number' in EXR header chunks.",
+ err);
+ return TINYEXR_ERROR_INVALID_DATA;
+ }
+ }
std::string e;
- int ret = tinyexr::DecodeChunk(&exr_images[i], exr_headers[i], offset_table,
+ int ret = tinyexr::DecodeChunk(&exr_images[i], exr_headers[i], offset_data,
memory, size, &e);
if (ret != TINYEXR_SUCCESS) {
if (!e.empty()) {
@@ -13612,7 +8344,7 @@ int LoadEXRMultipartImageFromFile(EXRImage *exr_images,
FILE *fp = NULL;
#ifdef _WIN32
-#if defined(_MSC_VER) || defined(__MINGW32__) // MSVC, MinGW gcc or clang
+#if defined(_MSC_VER) || (defined(MINGW_HAS_SECURE_API) && MINGW_HAS_SECURE_API) // MSVC, MinGW GCC, or Clang.
errno_t errcode =
_wfopen_s(&fp, tinyexr::UTF8ToWchar(filename).c_str(), L"rb");
if (errcode != 0) {
@@ -13620,7 +8352,7 @@ int LoadEXRMultipartImageFromFile(EXRImage *exr_images,
return TINYEXR_ERROR_CANT_OPEN_FILE;
}
#else
- // Unknown compiler
+ // Unknown compiler or MinGW without MINGW_HAS_SECURE_API.
fp = fopen(filename, "rb");
#endif
#else
diff --git a/thirdparty/wslay/includes/config.h b/thirdparty/wslay/config.h
index 771ad12528..f291801ba1 100644
--- a/thirdparty/wslay/includes/config.h
+++ b/thirdparty/wslay/config.h
@@ -1,8 +1,10 @@
#ifndef CONFIG_H
#define CONFIG_H
+// -- GODOT start --
#ifdef BIG_ENDIAN_ENABLED
#define WORDS_BIGENDIAN
#endif
+// -- GODOT end --
#endif /* CONFIG_H */
diff --git a/thirdparty/wslay/msvcfix.diff b/thirdparty/wslay/patches/msvcfix.diff
index 28721844f4..f58b6d44f0 100644
--- a/thirdparty/wslay/msvcfix.diff
+++ b/thirdparty/wslay/patches/msvcfix.diff
@@ -1,8 +1,8 @@
diff --git a/thirdparty/wslay/includes/wslay/wslay.h b/thirdparty/wslay/includes/wslay/wslay.h
-index 2fde81a4e..9c751b05b 100644
+index 77a4e8253f..ac6873613f 100644
--- a/thirdparty/wslay/includes/wslay/wslay.h
+++ b/thirdparty/wslay/includes/wslay/wslay.h
-@@ -33,6 +33,12 @@ extern "C" {
+@@ -33,6 +33,13 @@ extern "C" {
#include <stdlib.h>
#include <sys/types.h>
@@ -12,6 +12,7 @@ index 2fde81a4e..9c751b05b 100644
+typedef SSIZE_T ssize_t;
+#endif
+/* GODOT END */
-
++
/*
* wslay/wslayver.h is generated from wslay/wslayver.h.in by
+ * configure. The projects which do not use autotools can set
diff --git a/thirdparty/wslay/includes/wslay/wslay.h b/thirdparty/wslay/wslay/wslay.h
index 9c751b05b7..ac6873613f 100644
--- a/thirdparty/wslay/includes/wslay/wslay.h
+++ b/thirdparty/wslay/wslay/wslay.h
@@ -25,7 +25,7 @@
#ifndef WSLAY_H
#define WSLAY_H
-#ifdef __cplusplus
+#ifdef __cplusplus
extern "C" {
#endif
@@ -155,10 +155,10 @@ enum wslay_opcode {
* These macros assume that rsv is constructed by ((RSV1 << 2) |
* (RSV2 << 1) | RSV3)
*/
-#define WSLAY_RSV_NONE ((uint8_t) 0)
-#define WSLAY_RSV1_BIT (((uint8_t) 1) << 2)
-#define WSLAY_RSV2_BIT (((uint8_t) 1) << 1)
-#define WSLAY_RSV3_BIT (((uint8_t) 1) << 0)
+#define WSLAY_RSV_NONE ((uint8_t)0)
+#define WSLAY_RSV1_BIT (((uint8_t)1) << 2)
+#define WSLAY_RSV2_BIT (((uint8_t)1) << 1)
+#define WSLAY_RSV3_BIT (((uint8_t)1) << 0)
#define wslay_get_rsv1(rsv) ((rsv >> 2) & 1)
#define wslay_get_rsv2(rsv) ((rsv >> 1) & 1)
@@ -172,7 +172,7 @@ struct wslay_frame_iocb {
* RFC6455 requires 0 unless extensions are negotiated.
*/
uint8_t rsv;
- /* 4 bit opcode */
+ /* 4 bit opcode */
uint8_t opcode;
/* payload length [0, 2**63-1] */
uint64_t payload_length;
@@ -229,6 +229,33 @@ ssize_t wslay_frame_send(wslay_frame_context_ptr ctx,
struct wslay_frame_iocb *iocb);
/*
+ * Write WebSocket frame specified in iocb to buf of length
+ * buflen. ctx must be initialized using wslay_frame_context_init()
+ * function. iocb->fin must be 1 if this is a fin frame, otherwise 0.
+ * iocb->rsv is reserved bits. iocb->opcode must be the opcode of
+ * this frame. iocb->mask must be 1 if this is masked frame,
+ * otherwise 0. iocb->payload_length is the payload_length of this
+ * frame. iocb->data must point to the payload data to be
+ * sent. iocb->data_length must be the length of the data. Unlike
+ * wslay_frame_send, this function does not call send_callback
+ * function. This function calls gen_mask_callback function if it
+ * needs new mask key. This function returns the number of bytes
+ * written to a buffer. Unlike wslay_frame_send, it includes the
+ * number of header bytes. Instead, the number of payload bytes
+ * written is assigned to *pwpayloadlen if this function succeeds. If
+ * there is not enough space left in a buffer, it returns 0. If the
+ * library detects error in iocb, this function returns
+ * WSLAY_ERR_INVALID_ARGUMENT. If callback functions report a
+ * failure, this function returns WSLAY_ERR_INVALID_CALLBACK. This
+ * function does not always send all given data in iocb. If there are
+ * remaining data to be sent, adjust data and data_length in iocb
+ * accordingly and call this function again.
+ */
+ssize_t wslay_frame_write(wslay_frame_context_ptr ctx,
+ struct wslay_frame_iocb *iocb, uint8_t *buf,
+ size_t buflen, size_t *pwpayloadlen);
+
+/*
* Receives WebSocket frame and stores it in iocb. This function
* returns the number of payload bytes received. This does not
* include header bytes. In this case, iocb will be populated as
@@ -276,9 +303,9 @@ struct wslay_event_on_msg_recv_arg {
* Callback function invoked by wslay_event_recv() when a message is
* completely received.
*/
-typedef void (*wslay_event_on_msg_recv_callback)
-(wslay_event_context_ptr ctx,
- const struct wslay_event_on_msg_recv_arg *arg, void *user_data);
+typedef void (*wslay_event_on_msg_recv_callback)(
+ wslay_event_context_ptr ctx, const struct wslay_event_on_msg_recv_arg *arg,
+ void *user_data);
struct wslay_event_on_frame_recv_start_arg {
/* fin bit; 1 for final frame, or 0. */
@@ -296,9 +323,9 @@ struct wslay_event_on_frame_recv_start_arg {
* starts to be received. This callback function is only invoked once
* for each frame.
*/
-typedef void (*wslay_event_on_frame_recv_start_callback)
-(wslay_event_context_ptr ctx,
- const struct wslay_event_on_frame_recv_start_arg *arg, void *user_data);
+typedef void (*wslay_event_on_frame_recv_start_callback)(
+ wslay_event_context_ptr ctx,
+ const struct wslay_event_on_frame_recv_start_arg *arg, void *user_data);
struct wslay_event_on_frame_recv_chunk_arg {
/* chunk of payload data */
@@ -311,16 +338,16 @@ struct wslay_event_on_frame_recv_chunk_arg {
* Callback function invoked by wslay_event_recv() when a chunk of
* frame payload is received.
*/
-typedef void (*wslay_event_on_frame_recv_chunk_callback)
-(wslay_event_context_ptr ctx,
- const struct wslay_event_on_frame_recv_chunk_arg *arg, void *user_data);
+typedef void (*wslay_event_on_frame_recv_chunk_callback)(
+ wslay_event_context_ptr ctx,
+ const struct wslay_event_on_frame_recv_chunk_arg *arg, void *user_data);
/*
* Callback function invoked by wslay_event_recv() when a frame is
* completely received.
*/
-typedef void (*wslay_event_on_frame_recv_end_callback)
-(wslay_event_context_ptr ctx, void *user_data);
+typedef void (*wslay_event_on_frame_recv_end_callback)(
+ wslay_event_context_ptr ctx, void *user_data);
/*
* Callback function invoked by wslay_event_recv() when it wants to
@@ -394,9 +421,9 @@ struct wslay_event_callbacks {
* WSLAY_ERR_NOMEM
* Out of memory.
*/
-int wslay_event_context_server_init
-(wslay_event_context_ptr *ctx,
- const struct wslay_event_callbacks *callbacks, void *user_data);
+int wslay_event_context_server_init(
+ wslay_event_context_ptr *ctx, const struct wslay_event_callbacks *callbacks,
+ void *user_data);
/*
* Initializes ctx as WebSocket client. user_data is an arbitrary
@@ -409,9 +436,9 @@ int wslay_event_context_server_init
* WSLAY_ERR_NOMEM
* Out of memory.
*/
-int wslay_event_context_client_init
-(wslay_event_context_ptr *ctx,
- const struct wslay_event_callbacks *callbacks, void *user_data);
+int wslay_event_context_client_init(
+ wslay_event_context_ptr *ctx, const struct wslay_event_callbacks *callbacks,
+ void *user_data);
/*
* Releases allocated resources for ctx.
@@ -462,8 +489,8 @@ void wslay_event_config_set_max_recv_msg_length(wslay_event_context_ptr ctx,
* or wslay_event_context_server_init() or
* wslay_event_context_client_init() are replaced with callbacks.
*/
-void wslay_event_config_set_callbacks
-(wslay_event_context_ptr ctx, const struct wslay_event_callbacks *callbacks);
+void wslay_event_config_set_callbacks(
+ wslay_event_context_ptr ctx, const struct wslay_event_callbacks *callbacks);
/*
* Receives messages from peer. When receiving
@@ -538,6 +565,50 @@ int wslay_event_recv(wslay_event_context_ptr ctx);
*/
int wslay_event_send(wslay_event_context_ptr ctx);
+/*
+ * Writes queued messages to a buffer. Unlike wslay_event_send(), this
+ * function writes messages into the given buffer. It does not use
+ * wslay_event_send_callback function. Single call of
+ * wslay_event_write() writes multiple messages until there is not
+ * enough space left in a buffer.
+ *
+ * If ctx is initialized for WebSocket client use, wslay_event_write()
+ * uses wslay_event_genmask_callback to get new mask key.
+ *
+ * buf is a pointer to buffer and its capacity is given in buflen. It
+ * should have at least 14 bytes.
+ *
+ * When a message queued using wslay_event_queue_fragmented_msg() is
+ * sent, wslay_event_write() invokes
+ * wslay_event_fragmented_msg_callback for that message.
+ *
+ * After close control frame is sent, this function calls
+ * wslay_event_set_write_enabled() with second argument 0 to disable
+ * further transmission to peer.
+ *
+ * If there are any pending messages, wslay_event_want_write() returns
+ * 1, otherwise returns 0.
+ *
+ * In case of a fatal errror which leads to negative return code, this
+ * function calls wslay_event_set_write_enabled() with second argument
+ * 0 to disable further transmission to peer.
+ *
+ * wslay_event_write() returns the number of bytes written to a buffer
+ * if it succeeds, or one of the following negative error codes:
+ *
+ * WSLAY_ERR_CALLBACK_FAILURE
+ * User defined callback function is failed.
+ *
+ * WSLAY_ERR_NOMEM
+ * Out of memory.
+ *
+ * When negative error code is returned, application must not make any
+ * further call of wslay_event_write() and must close WebSocket
+ * connection.
+ */
+ssize_t wslay_event_write(wslay_event_context_ptr ctx, uint8_t *buf,
+ size_t buflen);
+
struct wslay_event_msg {
uint8_t opcode;
const uint8_t *msg;
@@ -594,10 +665,9 @@ union wslay_event_msg_source {
* moment, return 0. If there is an error, return -1 and set error
* code WSLAY_ERR_CALLBACK_FAILURE using wslay_event_set_error().
*/
-typedef ssize_t (*wslay_event_fragmented_msg_callback)
-(wslay_event_context_ptr ctx,
- uint8_t *buf, size_t len, const union wslay_event_msg_source *source,
- int *eof, void *user_data);
+typedef ssize_t (*wslay_event_fragmented_msg_callback)(
+ wslay_event_context_ptr ctx, uint8_t *buf, size_t len,
+ const union wslay_event_msg_source *source, int *eof, void *user_data);
struct wslay_event_fragmented_msg {
/* opcode */
@@ -631,15 +701,16 @@ struct wslay_event_fragmented_msg {
* WSLAY_ERR_NOMEM
* Out of memory.
*/
-int wslay_event_queue_fragmented_msg
-(wslay_event_context_ptr ctx, const struct wslay_event_fragmented_msg *arg);
+int wslay_event_queue_fragmented_msg(
+ wslay_event_context_ptr ctx, const struct wslay_event_fragmented_msg *arg);
/*
* Extended version of wslay_event_queue_fragmented_msg which allows to set
* reserved bits.
*/
-int wslay_event_queue_fragmented_msg_ex(wslay_event_context_ptr ctx,
- const struct wslay_event_fragmented_msg *arg, uint8_t rsv);
+int wslay_event_queue_fragmented_msg_ex(
+ wslay_event_context_ptr ctx, const struct wslay_event_fragmented_msg *arg,
+ uint8_t rsv);
/*
* Queues close control frame. This function is provided just for
@@ -669,8 +740,7 @@ int wslay_event_queue_fragmented_msg_ex(wslay_event_context_ptr ctx,
* WSLAY_ERR_NOMEM
* Out of memory.
*/
-int wslay_event_queue_close(wslay_event_context_ptr ctx,
- uint16_t status_code,
+int wslay_event_queue_close(wslay_event_context_ptr ctx, uint16_t status_code,
const uint8_t *reason, size_t reason_length);
/*
diff --git a/thirdparty/wslay/includes/wslay/wslayver.h b/thirdparty/wslay/wslay/wslayver.h
index 28f2018039..28f2018039 100644
--- a/thirdparty/wslay/includes/wslay/wslayver.h
+++ b/thirdparty/wslay/wslay/wslayver.h
diff --git a/thirdparty/wslay/wslay_event.c b/thirdparty/wslay/wslay_event.c
index 140f7c01da..4c29fe4000 100644
--- a/thirdparty/wslay/wslay_event.c
+++ b/thirdparty/wslay/wslay_event.c
@@ -28,9 +28,9 @@
#include <assert.h>
#include <stdio.h>
-#include "wslay_queue.h"
#include "wslay_frame.h"
#include "wslay_net.h"
+#include "wslay_macro.h"
/* Start of utf8 dfa */
/* Copyright (c) 2008-2010 Bjoern Hoehrmann <bjoern@hoehrmann.de>
* See http://bjoern.hoehrmann.de/utf-8/decoder/dfa/ for details.
@@ -60,6 +60,7 @@
#define UTF8_ACCEPT 0
#define UTF8_REJECT 12
+/* clang-format off */
static const uint8_t utf8d[] = {
/*
* The first part of the table maps bytes to character classes that
@@ -84,14 +85,13 @@ static const uint8_t utf8d[] = {
12,12,12,12,12,12,12,36,12,36,12,12, 12,36,12,12,12,12,12,36,12,36,12,12,
12,36,12,12,12,12,12,12,12,12,12,12,
};
+/* clang-format on */
-static uint32_t
-decode(uint32_t* state, uint32_t* codep, uint32_t byte) {
+static uint32_t decode(uint32_t *state, uint32_t *codep, uint32_t byte) {
uint32_t type = utf8d[byte];
- *codep = (*state != UTF8_ACCEPT) ?
- (byte & 0x3fu) | (*codep << 6) :
- (0xff >> type) & (byte);
+ *codep = (*state != UTF8_ACCEPT) ? (byte & 0x3fu) | (*codep << 6)
+ : (0xff >> type) & (byte);
*state = utf8d[256 + *state + type];
return *state;
@@ -100,117 +100,96 @@ decode(uint32_t* state, uint32_t* codep, uint32_t byte) {
/* End of utf8 dfa */
static ssize_t wslay_event_frame_recv_callback(uint8_t *buf, size_t len,
- int flags, void *user_data)
-{
+ int flags, void *user_data) {
struct wslay_event_frame_user_data *e =
- (struct wslay_event_frame_user_data*)user_data;
+ (struct wslay_event_frame_user_data *)user_data;
return e->ctx->callbacks.recv_callback(e->ctx, buf, len, flags, e->user_data);
}
static ssize_t wslay_event_frame_send_callback(const uint8_t *data, size_t len,
- int flags, void *user_data)
-{
+ int flags, void *user_data) {
struct wslay_event_frame_user_data *e =
- (struct wslay_event_frame_user_data*)user_data;
+ (struct wslay_event_frame_user_data *)user_data;
return e->ctx->callbacks.send_callback(e->ctx, data, len, flags,
e->user_data);
}
static int wslay_event_frame_genmask_callback(uint8_t *buf, size_t len,
- void *user_data)
-{
+ void *user_data) {
struct wslay_event_frame_user_data *e =
- (struct wslay_event_frame_user_data*)user_data;
+ (struct wslay_event_frame_user_data *)user_data;
return e->ctx->callbacks.genmask_callback(e->ctx, buf, len, e->user_data);
}
-static int wslay_event_byte_chunk_init
-(struct wslay_event_byte_chunk **chunk, size_t len)
-{
- *chunk = (struct wslay_event_byte_chunk*)malloc
- (sizeof(struct wslay_event_byte_chunk));
- if(*chunk == NULL) {
+static int wslay_event_byte_chunk_init(struct wslay_event_byte_chunk **chunk,
+ size_t len) {
+ *chunk = malloc(sizeof(struct wslay_event_byte_chunk) + len);
+ if (*chunk == NULL) {
return WSLAY_ERR_NOMEM;
}
memset(*chunk, 0, sizeof(struct wslay_event_byte_chunk));
- if(len) {
- (*chunk)->data = (uint8_t*)malloc(len);
- if((*chunk)->data == NULL) {
- free(*chunk);
- return WSLAY_ERR_NOMEM;
- }
+ if (len) {
+ (*chunk)->data = (uint8_t *)(*chunk) + sizeof(**chunk);
(*chunk)->data_length = len;
}
return 0;
}
-static void wslay_event_byte_chunk_free(struct wslay_event_byte_chunk *c)
-{
- if(!c) {
- return;
- }
- free(c->data);
+static void wslay_event_byte_chunk_free(struct wslay_event_byte_chunk *c) {
free(c);
}
static void wslay_event_byte_chunk_copy(struct wslay_event_byte_chunk *c,
- size_t off,
- const uint8_t *data, size_t data_length)
-{
- memcpy(c->data+off, data, data_length);
+ size_t off, const uint8_t *data,
+ size_t data_length) {
+ memcpy(c->data + off, data, data_length);
}
-static void wslay_event_imsg_set(struct wslay_event_imsg *m,
- uint8_t fin, uint8_t rsv, uint8_t opcode)
-{
+static void wslay_event_imsg_set(struct wslay_event_imsg *m, uint8_t fin,
+ uint8_t rsv, uint8_t opcode) {
m->fin = fin;
m->rsv = rsv;
m->opcode = opcode;
m->msg_length = 0;
}
-static void wslay_event_imsg_chunks_free(struct wslay_event_imsg *m)
-{
- if(!m->chunks) {
- return;
- }
- while(!wslay_queue_empty(m->chunks)) {
- wslay_event_byte_chunk_free(wslay_queue_top(m->chunks));
- wslay_queue_pop(m->chunks);
+static void wslay_event_imsg_chunks_free(struct wslay_event_imsg *m) {
+ while (!wslay_queue_empty(&m->chunks)) {
+ struct wslay_event_byte_chunk *chunk = wslay_struct_of(
+ wslay_queue_top(&m->chunks), struct wslay_event_byte_chunk, qe);
+ wslay_queue_pop(&m->chunks);
+ wslay_event_byte_chunk_free(chunk);
}
}
-static void wslay_event_imsg_reset(struct wslay_event_imsg *m)
-{
+static void wslay_event_imsg_reset(struct wslay_event_imsg *m) {
m->opcode = 0xffu;
m->utf8state = UTF8_ACCEPT;
wslay_event_imsg_chunks_free(m);
}
-static int wslay_event_imsg_append_chunk(struct wslay_event_imsg *m, size_t len)
-{
- if(len == 0) {
+static int wslay_event_imsg_append_chunk(struct wslay_event_imsg *m,
+ size_t len) {
+ if (len == 0) {
return 0;
} else {
int r;
struct wslay_event_byte_chunk *chunk;
- if((r = wslay_event_byte_chunk_init(&chunk, len)) != 0) {
- return r;
- }
- if((r = wslay_queue_push(m->chunks, chunk)) != 0) {
+ if ((r = wslay_event_byte_chunk_init(&chunk, len)) != 0) {
return r;
}
+ wslay_queue_push(&m->chunks, &chunk->qe);
m->msg_length += len;
return 0;
}
}
-static int wslay_event_omsg_non_fragmented_init
-(struct wslay_event_omsg **m, uint8_t opcode, uint8_t rsv,
- const uint8_t *msg, size_t msg_length)
-{
- *m = (struct wslay_event_omsg*)malloc(sizeof(struct wslay_event_omsg));
- if(!*m) {
+static int wslay_event_omsg_non_fragmented_init(struct wslay_event_omsg **m,
+ uint8_t opcode, uint8_t rsv,
+ const uint8_t *msg,
+ size_t msg_length) {
+ *m = malloc(sizeof(struct wslay_event_omsg) + msg_length);
+ if (!*m) {
return WSLAY_ERR_NOMEM;
}
memset(*m, 0, sizeof(struct wslay_event_omsg));
@@ -218,28 +197,22 @@ static int wslay_event_omsg_non_fragmented_init
(*m)->opcode = opcode;
(*m)->rsv = rsv;
(*m)->type = WSLAY_NON_FRAGMENTED;
- if(msg_length) {
- (*m)->data = (uint8_t*)malloc(msg_length);
- if(!(*m)->data) {
- free(*m);
- return WSLAY_ERR_NOMEM;
- }
+ if (msg_length) {
+ (*m)->data = (uint8_t *)(*m) + sizeof(**m);
memcpy((*m)->data, msg, msg_length);
(*m)->data_length = msg_length;
}
return 0;
}
-static int wslay_event_omsg_fragmented_init
-(struct wslay_event_omsg **m, uint8_t opcode, uint8_t rsv,
- const union wslay_event_msg_source source,
- wslay_event_fragmented_msg_callback read_callback)
-{
- *m = (struct wslay_event_omsg*)malloc(sizeof(struct wslay_event_omsg));
- if(!*m) {
+static int wslay_event_omsg_fragmented_init(
+ struct wslay_event_omsg **m, uint8_t opcode, uint8_t rsv,
+ const union wslay_event_msg_source source,
+ wslay_event_fragmented_msg_callback read_callback) {
+ *m = calloc(1, sizeof(struct wslay_event_omsg));
+ if (!*m) {
return WSLAY_ERR_NOMEM;
}
- memset(*m, 0, sizeof(struct wslay_event_omsg));
(*m)->opcode = opcode;
(*m)->rsv = rsv;
(*m)->type = WSLAY_FRAGMENTED;
@@ -248,31 +221,25 @@ static int wslay_event_omsg_fragmented_init
return 0;
}
-static void wslay_event_omsg_free(struct wslay_event_omsg *m)
-{
- if(!m) {
- return;
- }
- free(m->data);
- free(m);
-}
+static void wslay_event_omsg_free(struct wslay_event_omsg *m) { free(m); }
-static uint8_t* wslay_event_flatten_queue(struct wslay_queue *queue, size_t len)
-{
- if(len == 0) {
+static uint8_t *wslay_event_flatten_queue(struct wslay_queue *queue,
+ size_t len) {
+ if (len == 0) {
return NULL;
} else {
size_t off = 0;
- uint8_t *buf = (uint8_t*)malloc(len);
- if(!buf) {
+ uint8_t *buf = malloc(len);
+ if (!buf) {
return NULL;
}
- while(!wslay_queue_empty(queue)) {
- struct wslay_event_byte_chunk *chunk = wslay_queue_top(queue);
- memcpy(buf+off, chunk->data, chunk->data_length);
+ while (!wslay_queue_empty(queue)) {
+ struct wslay_event_byte_chunk *chunk = wslay_struct_of(
+ wslay_queue_top(queue), struct wslay_event_byte_chunk, qe);
+ wslay_queue_pop(queue);
+ memcpy(buf + off, chunk->data, chunk->data_length);
off += chunk->data_length;
wslay_event_byte_chunk_free(chunk);
- wslay_queue_pop(queue);
assert(off <= len);
}
assert(len == off);
@@ -280,17 +247,15 @@ static uint8_t* wslay_event_flatten_queue(struct wslay_queue *queue, size_t len)
}
}
-static int wslay_event_is_msg_queueable(wslay_event_context_ptr ctx)
-{
+static int wslay_event_is_msg_queueable(wslay_event_context_ptr ctx) {
return ctx->write_enabled && (ctx->close_status & WSLAY_CLOSE_QUEUED) == 0;
}
int wslay_event_queue_close(wslay_event_context_ptr ctx, uint16_t status_code,
- const uint8_t *reason, size_t reason_length)
-{
- if(!wslay_event_is_msg_queueable(ctx)) {
+ const uint8_t *reason, size_t reason_length) {
+ if (!wslay_event_is_msg_queueable(ctx)) {
return WSLAY_ERR_NO_MORE_MSG;
- } else if(reason_length > 123) {
+ } else if (reason_length > 123) {
return WSLAY_ERR_INVALID_ARGUMENT;
} else {
uint8_t msg[128];
@@ -298,231 +263,203 @@ int wslay_event_queue_close(wslay_event_context_ptr ctx, uint16_t status_code,
struct wslay_event_msg arg;
uint16_t ncode;
int r;
- if(status_code == 0) {
+ if (status_code == 0) {
msg_length = 0;
} else {
ncode = htons(status_code);
memcpy(msg, &ncode, 2);
- if(reason_length) {
- memcpy(msg+2, reason, reason_length);
+ if (reason_length) {
+ memcpy(msg + 2, reason, reason_length);
}
- msg_length = reason_length+2;
+ msg_length = reason_length + 2;
}
arg.opcode = WSLAY_CONNECTION_CLOSE;
arg.msg = msg;
arg.msg_length = msg_length;
r = wslay_event_queue_msg(ctx, &arg);
- if(r == 0) {
+ if (r == 0) {
ctx->close_status |= WSLAY_CLOSE_QUEUED;
}
return r;
}
}
-static int wslay_event_queue_close_wrapper
-(wslay_event_context_ptr ctx, uint16_t status_code,
- const uint8_t *reason, size_t reason_length)
-{
+static int wslay_event_queue_close_wrapper(wslay_event_context_ptr ctx,
+ uint16_t status_code,
+ const uint8_t *reason,
+ size_t reason_length) {
int r;
ctx->read_enabled = 0;
- if((r = wslay_event_queue_close(ctx, status_code, reason, reason_length)) &&
- r != WSLAY_ERR_NO_MORE_MSG) {
+ if ((r = wslay_event_queue_close(ctx, status_code, reason, reason_length)) &&
+ r != WSLAY_ERR_NO_MORE_MSG) {
return r;
}
return 0;
}
-static int wslay_event_verify_rsv_bits(wslay_event_context_ptr ctx, uint8_t rsv)
-{
+static int wslay_event_verify_rsv_bits(wslay_event_context_ptr ctx,
+ uint8_t rsv) {
return ((rsv & ~ctx->allowed_rsv_bits) == 0);
}
int wslay_event_queue_msg(wslay_event_context_ptr ctx,
- const struct wslay_event_msg *arg)
-{
+ const struct wslay_event_msg *arg) {
return wslay_event_queue_msg_ex(ctx, arg, WSLAY_RSV_NONE);
}
int wslay_event_queue_msg_ex(wslay_event_context_ptr ctx,
- const struct wslay_event_msg *arg, uint8_t rsv)
-{
+ const struct wslay_event_msg *arg, uint8_t rsv) {
int r;
struct wslay_event_omsg *omsg;
- if(!wslay_event_is_msg_queueable(ctx)) {
+ if (!wslay_event_is_msg_queueable(ctx)) {
return WSLAY_ERR_NO_MORE_MSG;
}
/* RSV1 is not allowed for control frames */
- if((wslay_is_ctrl_frame(arg->opcode) &&
- (arg->msg_length > 125 || wslay_get_rsv1(rsv)))
- || !wslay_event_verify_rsv_bits(ctx, rsv)) {
+ if ((wslay_is_ctrl_frame(arg->opcode) &&
+ (arg->msg_length > 125 || wslay_get_rsv1(rsv))) ||
+ !wslay_event_verify_rsv_bits(ctx, rsv)) {
return WSLAY_ERR_INVALID_ARGUMENT;
}
- if((r = wslay_event_omsg_non_fragmented_init
- (&omsg, arg->opcode, rsv, arg->msg, arg->msg_length)) != 0) {
+ if ((r = wslay_event_omsg_non_fragmented_init(
+ &omsg, arg->opcode, rsv, arg->msg, arg->msg_length)) != 0) {
return r;
}
- if(wslay_is_ctrl_frame(arg->opcode)) {
- if((r = wslay_queue_push(ctx->send_ctrl_queue, omsg)) != 0) {
- return r;
- }
+ if (wslay_is_ctrl_frame(arg->opcode)) {
+ wslay_queue_push(&ctx->send_ctrl_queue, &omsg->qe);
} else {
- if((r = wslay_queue_push(ctx->send_queue, omsg)) != 0) {
- return r;
- }
+ wslay_queue_push(&ctx->send_queue, &omsg->qe);
}
++ctx->queued_msg_count;
ctx->queued_msg_length += arg->msg_length;
return 0;
}
-int wslay_event_queue_fragmented_msg
-(wslay_event_context_ptr ctx, const struct wslay_event_fragmented_msg *arg)
-{
+int wslay_event_queue_fragmented_msg(
+ wslay_event_context_ptr ctx, const struct wslay_event_fragmented_msg *arg) {
return wslay_event_queue_fragmented_msg_ex(ctx, arg, WSLAY_RSV_NONE);
}
-int wslay_event_queue_fragmented_msg_ex(wslay_event_context_ptr ctx,
- const struct wslay_event_fragmented_msg *arg, uint8_t rsv)
-{
+int wslay_event_queue_fragmented_msg_ex(
+ wslay_event_context_ptr ctx, const struct wslay_event_fragmented_msg *arg,
+ uint8_t rsv) {
int r;
struct wslay_event_omsg *omsg;
- if(!wslay_event_is_msg_queueable(ctx)) {
+ if (!wslay_event_is_msg_queueable(ctx)) {
return WSLAY_ERR_NO_MORE_MSG;
}
- if(wslay_is_ctrl_frame(arg->opcode) ||
- !wslay_event_verify_rsv_bits(ctx, rsv)) {
+ if (wslay_is_ctrl_frame(arg->opcode) ||
+ !wslay_event_verify_rsv_bits(ctx, rsv)) {
return WSLAY_ERR_INVALID_ARGUMENT;
}
- if((r = wslay_event_omsg_fragmented_init
- (&omsg, arg->opcode, rsv, arg->source, arg->read_callback)) != 0) {
- return r;
- }
- if((r = wslay_queue_push(ctx->send_queue, omsg)) != 0) {
+ if ((r = wslay_event_omsg_fragmented_init(
+ &omsg, arg->opcode, rsv, arg->source, arg->read_callback)) != 0) {
return r;
}
+ wslay_queue_push(&ctx->send_queue, &omsg->qe);
++ctx->queued_msg_count;
return 0;
}
-void wslay_event_config_set_callbacks
-(wslay_event_context_ptr ctx, const struct wslay_event_callbacks *callbacks)
-{
+void wslay_event_config_set_callbacks(
+ wslay_event_context_ptr ctx,
+ const struct wslay_event_callbacks *callbacks) {
ctx->callbacks = *callbacks;
}
-static int wslay_event_context_init
-(wslay_event_context_ptr *ctx,
- const struct wslay_event_callbacks *callbacks,
- void *user_data)
-{
+static int
+wslay_event_context_init(wslay_event_context_ptr *ctx,
+ const struct wslay_event_callbacks *callbacks,
+ void *user_data) {
int i, r;
struct wslay_frame_callbacks frame_callbacks = {
- wslay_event_frame_send_callback,
- wslay_event_frame_recv_callback,
- wslay_event_frame_genmask_callback
- };
- *ctx = (wslay_event_context_ptr)malloc(sizeof(struct wslay_event_context));
- if(!*ctx) {
+ wslay_event_frame_send_callback, wslay_event_frame_recv_callback,
+ wslay_event_frame_genmask_callback};
+ *ctx = calloc(1, sizeof(struct wslay_event_context));
+ if (!*ctx) {
return WSLAY_ERR_NOMEM;
}
- memset(*ctx, 0, sizeof(struct wslay_event_context));
wslay_event_config_set_callbacks(*ctx, callbacks);
(*ctx)->user_data = user_data;
(*ctx)->frame_user_data.ctx = *ctx;
(*ctx)->frame_user_data.user_data = user_data;
- if((r = wslay_frame_context_init(&(*ctx)->frame_ctx, &frame_callbacks,
- &(*ctx)->frame_user_data)) != 0) {
+ if ((r = wslay_frame_context_init(&(*ctx)->frame_ctx, &frame_callbacks,
+ &(*ctx)->frame_user_data)) != 0) {
wslay_event_context_free(*ctx);
return r;
}
(*ctx)->read_enabled = (*ctx)->write_enabled = 1;
- (*ctx)->send_queue = wslay_queue_new();
- if(!(*ctx)->send_queue) {
- wslay_event_context_free(*ctx);
- return WSLAY_ERR_NOMEM;
- }
- (*ctx)->send_ctrl_queue = wslay_queue_new();
- if(!(*ctx)->send_ctrl_queue) {
- wslay_event_context_free(*ctx);
- return WSLAY_ERR_NOMEM;
- }
+ wslay_queue_init(&(*ctx)->send_queue);
+ wslay_queue_init(&(*ctx)->send_ctrl_queue);
(*ctx)->queued_msg_count = 0;
(*ctx)->queued_msg_length = 0;
- for(i = 0; i < 2; ++i) {
+ for (i = 0; i < 2; ++i) {
+ wslay_queue_init(&(*ctx)->imsgs[i].chunks);
wslay_event_imsg_reset(&(*ctx)->imsgs[i]);
- (*ctx)->imsgs[i].chunks = wslay_queue_new();
- if(!(*ctx)->imsgs[i].chunks) {
- wslay_event_context_free(*ctx);
- return WSLAY_ERR_NOMEM;
- }
}
(*ctx)->imsg = &(*ctx)->imsgs[0];
(*ctx)->obufmark = (*ctx)->obuflimit = (*ctx)->obuf;
(*ctx)->status_code_sent = WSLAY_CODE_ABNORMAL_CLOSURE;
(*ctx)->status_code_recv = WSLAY_CODE_ABNORMAL_CLOSURE;
- (*ctx)->max_recv_msg_length = (1u << 31)-1;
+ (*ctx)->max_recv_msg_length = (1u << 31) - 1;
return 0;
}
-int wslay_event_context_server_init
-(wslay_event_context_ptr *ctx,
- const struct wslay_event_callbacks *callbacks,
- void *user_data)
-{
+int wslay_event_context_server_init(
+ wslay_event_context_ptr *ctx, const struct wslay_event_callbacks *callbacks,
+ void *user_data) {
int r;
- if((r = wslay_event_context_init(ctx, callbacks, user_data)) != 0) {
+ if ((r = wslay_event_context_init(ctx, callbacks, user_data)) != 0) {
return r;
}
(*ctx)->server = 1;
return 0;
}
-int wslay_event_context_client_init
-(wslay_event_context_ptr *ctx,
- const struct wslay_event_callbacks *callbacks,
- void *user_data)
-{
+int wslay_event_context_client_init(
+ wslay_event_context_ptr *ctx, const struct wslay_event_callbacks *callbacks,
+ void *user_data) {
int r;
- if((r = wslay_event_context_init(ctx, callbacks, user_data)) != 0) {
+ if ((r = wslay_event_context_init(ctx, callbacks, user_data)) != 0) {
return r;
}
(*ctx)->server = 0;
return 0;
}
-void wslay_event_context_free(wslay_event_context_ptr ctx)
-{
+void wslay_event_context_free(wslay_event_context_ptr ctx) {
int i;
- if(!ctx) {
+ if (!ctx) {
return;
}
- for(i = 0; i < 2; ++i) {
+ for (i = 0; i < 2; ++i) {
wslay_event_imsg_chunks_free(&ctx->imsgs[i]);
- wslay_queue_free(ctx->imsgs[i].chunks);
+ wslay_queue_deinit(&ctx->imsgs[i].chunks);
}
- if(ctx->send_queue) {
- while(!wslay_queue_empty(ctx->send_queue)) {
- wslay_event_omsg_free(wslay_queue_top(ctx->send_queue));
- wslay_queue_pop(ctx->send_queue);
- }
- wslay_queue_free(ctx->send_queue);
+
+ while (!wslay_queue_empty(&ctx->send_queue)) {
+ struct wslay_event_omsg *omsg = wslay_struct_of(
+ wslay_queue_top(&ctx->send_queue), struct wslay_event_omsg, qe);
+ wslay_queue_pop(&ctx->send_queue);
+ wslay_event_omsg_free(omsg);
}
- if(ctx->send_ctrl_queue) {
- while(!wslay_queue_empty(ctx->send_ctrl_queue)) {
- wslay_event_omsg_free(wslay_queue_top(ctx->send_ctrl_queue));
- wslay_queue_pop(ctx->send_ctrl_queue);
- }
- wslay_queue_free(ctx->send_ctrl_queue);
+ wslay_queue_deinit(&ctx->send_queue);
+
+ while (!wslay_queue_empty(&ctx->send_ctrl_queue)) {
+ struct wslay_event_omsg *omsg = wslay_struct_of(
+ wslay_queue_top(&ctx->send_ctrl_queue), struct wslay_event_omsg, qe);
+ wslay_queue_pop(&ctx->send_ctrl_queue);
+ wslay_event_omsg_free(omsg);
}
+ wslay_queue_deinit(&ctx->send_ctrl_queue);
+
wslay_frame_context_free(ctx->frame_ctx);
wslay_event_omsg_free(ctx->omsg);
free(ctx);
}
-static void wslay_event_call_on_frame_recv_start_callback
-(wslay_event_context_ptr ctx, const struct wslay_frame_iocb *iocb)
-{
- if(ctx->callbacks.on_frame_recv_start_callback) {
+static void wslay_event_call_on_frame_recv_start_callback(
+ wslay_event_context_ptr ctx, const struct wslay_frame_iocb *iocb) {
+ if (ctx->callbacks.on_frame_recv_start_callback) {
struct wslay_event_on_frame_recv_start_arg arg;
arg.fin = iocb->fin;
arg.rsv = iocb->rsv;
@@ -532,10 +469,9 @@ static void wslay_event_call_on_frame_recv_start_callback
}
}
-static void wslay_event_call_on_frame_recv_chunk_callback
-(wslay_event_context_ptr ctx, const struct wslay_frame_iocb *iocb)
-{
- if(ctx->callbacks.on_frame_recv_chunk_callback) {
+static void wslay_event_call_on_frame_recv_chunk_callback(
+ wslay_event_context_ptr ctx, const struct wslay_frame_iocb *iocb) {
+ if (ctx->callbacks.on_frame_recv_chunk_callback) {
struct wslay_event_on_frame_recv_chunk_arg arg;
arg.data = iocb->data;
arg.data_length = iocb->data_length;
@@ -543,205 +479,202 @@ static void wslay_event_call_on_frame_recv_chunk_callback
}
}
-static void wslay_event_call_on_frame_recv_end_callback
-(wslay_event_context_ptr ctx)
-{
- if(ctx->callbacks.on_frame_recv_end_callback) {
+static void
+wslay_event_call_on_frame_recv_end_callback(wslay_event_context_ptr ctx) {
+ if (ctx->callbacks.on_frame_recv_end_callback) {
ctx->callbacks.on_frame_recv_end_callback(ctx, ctx->user_data);
}
}
-static int wslay_event_is_valid_status_code(uint16_t status_code)
-{
- return (1000 <= status_code && status_code <= 1011 &&
- status_code != 1004 && status_code != 1005 && status_code != 1006) ||
- (3000 <= status_code && status_code <= 4999);
+static int wslay_event_is_valid_status_code(uint16_t status_code) {
+ return (1000 <= status_code && status_code <= 1011 && status_code != 1004 &&
+ status_code != 1005 && status_code != 1006) ||
+ (3000 <= status_code && status_code <= 4999);
}
-static int wslay_event_config_get_no_buffering(wslay_event_context_ptr ctx)
-{
+static int wslay_event_config_get_no_buffering(wslay_event_context_ptr ctx) {
return (ctx->config & WSLAY_CONFIG_NO_BUFFERING) > 0;
}
-int wslay_event_recv(wslay_event_context_ptr ctx)
-{
+int wslay_event_recv(wslay_event_context_ptr ctx) {
struct wslay_frame_iocb iocb;
ssize_t r;
- while(ctx->read_enabled) {
+ while (ctx->read_enabled) {
memset(&iocb, 0, sizeof(iocb));
r = wslay_frame_recv(ctx->frame_ctx, &iocb);
- if(r >= 0) {
+ if (r >= 0) {
int new_frame = 0;
/* RSV1 is not allowed on control and continuation frames */
- if((!wslay_event_verify_rsv_bits(ctx, iocb.rsv)) ||
- (wslay_get_rsv1(iocb.rsv) && (wslay_is_ctrl_frame(iocb.opcode) ||
- iocb.opcode == WSLAY_CONTINUATION_FRAME)) ||
- (ctx->server && !iocb.mask) || (!ctx->server && iocb.mask)) {
- if((r = wslay_event_queue_close_wrapper
- (ctx, WSLAY_CODE_PROTOCOL_ERROR, NULL, 0)) != 0) {
- return r;
+ if ((!wslay_event_verify_rsv_bits(ctx, iocb.rsv)) ||
+ (wslay_get_rsv1(iocb.rsv) &&
+ (wslay_is_ctrl_frame(iocb.opcode) ||
+ iocb.opcode == WSLAY_CONTINUATION_FRAME)) ||
+ (ctx->server && !iocb.mask) || (!ctx->server && iocb.mask)) {
+ if ((r = wslay_event_queue_close_wrapper(ctx, WSLAY_CODE_PROTOCOL_ERROR,
+ NULL, 0)) != 0) {
+ return (int)r;
}
break;
}
- if(ctx->imsg->opcode == 0xffu) {
- if(iocb.opcode == WSLAY_TEXT_FRAME ||
- iocb.opcode == WSLAY_BINARY_FRAME ||
- iocb.opcode == WSLAY_CONNECTION_CLOSE ||
- iocb.opcode == WSLAY_PING ||
- iocb.opcode == WSLAY_PONG) {
+ if (ctx->imsg->opcode == 0xffu) {
+ if (iocb.opcode == WSLAY_TEXT_FRAME ||
+ iocb.opcode == WSLAY_BINARY_FRAME ||
+ iocb.opcode == WSLAY_CONNECTION_CLOSE ||
+ iocb.opcode == WSLAY_PING || iocb.opcode == WSLAY_PONG) {
wslay_event_imsg_set(ctx->imsg, iocb.fin, iocb.rsv, iocb.opcode);
new_frame = 1;
} else {
- if((r = wslay_event_queue_close_wrapper
- (ctx, WSLAY_CODE_PROTOCOL_ERROR, NULL, 0)) != 0) {
- return r;
+ if ((r = wslay_event_queue_close_wrapper(
+ ctx, WSLAY_CODE_PROTOCOL_ERROR, NULL, 0)) != 0) {
+ return (int)r;
}
break;
}
- } else if(ctx->ipayloadlen == 0 && ctx->ipayloadoff == 0) {
- if(iocb.opcode == WSLAY_CONTINUATION_FRAME) {
+ } else if (ctx->ipayloadlen == 0 && ctx->ipayloadoff == 0) {
+ if (iocb.opcode == WSLAY_CONTINUATION_FRAME) {
ctx->imsg->fin = iocb.fin;
- } else if(iocb.opcode == WSLAY_CONNECTION_CLOSE ||
- iocb.opcode == WSLAY_PING ||
- iocb.opcode == WSLAY_PONG) {
+ } else if (iocb.opcode == WSLAY_CONNECTION_CLOSE ||
+ iocb.opcode == WSLAY_PING || iocb.opcode == WSLAY_PONG) {
ctx->imsg = &ctx->imsgs[1];
wslay_event_imsg_set(ctx->imsg, iocb.fin, iocb.rsv, iocb.opcode);
} else {
- if((r = wslay_event_queue_close_wrapper
- (ctx, WSLAY_CODE_PROTOCOL_ERROR, NULL, 0)) != 0) {
- return r;
+ if ((r = wslay_event_queue_close_wrapper(
+ ctx, WSLAY_CODE_PROTOCOL_ERROR, NULL, 0)) != 0) {
+ return (int)r;
}
break;
}
new_frame = 1;
}
- if(new_frame) {
- if(ctx->imsg->msg_length+iocb.payload_length >
- ctx->max_recv_msg_length) {
- if((r = wslay_event_queue_close_wrapper
- (ctx, WSLAY_CODE_MESSAGE_TOO_BIG, NULL, 0)) != 0) {
- return r;
+ if (new_frame) {
+ if (ctx->imsg->msg_length + iocb.payload_length >
+ ctx->max_recv_msg_length) {
+ if ((r = wslay_event_queue_close_wrapper(
+ ctx, WSLAY_CODE_MESSAGE_TOO_BIG, NULL, 0)) != 0) {
+ return (int)r;
}
break;
}
ctx->ipayloadlen = iocb.payload_length;
wslay_event_call_on_frame_recv_start_callback(ctx, &iocb);
- if(!wslay_event_config_get_no_buffering(ctx) ||
- wslay_is_ctrl_frame(iocb.opcode)) {
- if((r = wslay_event_imsg_append_chunk(ctx->imsg,
- iocb.payload_length)) != 0) {
+ if (!wslay_event_config_get_no_buffering(ctx) ||
+ wslay_is_ctrl_frame(iocb.opcode)) {
+ if ((r = wslay_event_imsg_append_chunk(ctx->imsg,
+ iocb.payload_length)) != 0) {
ctx->read_enabled = 0;
- return r;
+ return (int)r;
}
}
}
/* If RSV1 bit is set then it is too early for utf-8 validation */
- if((!wslay_get_rsv1(ctx->imsg->rsv) &&
- ctx->imsg->opcode == WSLAY_TEXT_FRAME) ||
- ctx->imsg->opcode == WSLAY_CONNECTION_CLOSE) {
+ if ((!wslay_get_rsv1(ctx->imsg->rsv) &&
+ ctx->imsg->opcode == WSLAY_TEXT_FRAME) ||
+ ctx->imsg->opcode == WSLAY_CONNECTION_CLOSE) {
size_t i;
- if(ctx->imsg->opcode == WSLAY_CONNECTION_CLOSE) {
+ if (ctx->imsg->opcode == WSLAY_CONNECTION_CLOSE) {
i = 2;
} else {
i = 0;
}
- for(; i < iocb.data_length; ++i) {
+ for (; i < iocb.data_length; ++i) {
uint32_t codep;
- if(decode(&ctx->imsg->utf8state, &codep,
- iocb.data[i]) == UTF8_REJECT) {
- if((r = wslay_event_queue_close_wrapper
- (ctx, WSLAY_CODE_INVALID_FRAME_PAYLOAD_DATA, NULL, 0)) != 0) {
- return r;
+ if (decode(&ctx->imsg->utf8state, &codep, iocb.data[i]) ==
+ UTF8_REJECT) {
+ if ((r = wslay_event_queue_close_wrapper(
+ ctx, WSLAY_CODE_INVALID_FRAME_PAYLOAD_DATA, NULL, 0)) !=
+ 0) {
+ return (int)r;
}
break;
}
}
}
- if(ctx->imsg->utf8state == UTF8_REJECT) {
+ if (ctx->imsg->utf8state == UTF8_REJECT) {
break;
}
wslay_event_call_on_frame_recv_chunk_callback(ctx, &iocb);
- if(iocb.data_length > 0) {
- if(!wslay_event_config_get_no_buffering(ctx) ||
- wslay_is_ctrl_frame(iocb.opcode)) {
+ if (iocb.data_length > 0) {
+ if (!wslay_event_config_get_no_buffering(ctx) ||
+ wslay_is_ctrl_frame(iocb.opcode)) {
struct wslay_event_byte_chunk *chunk;
- chunk = wslay_queue_tail(ctx->imsg->chunks);
- wslay_event_byte_chunk_copy(chunk, ctx->ipayloadoff,
- iocb.data, iocb.data_length);
+ chunk = wslay_struct_of(wslay_queue_tail(&ctx->imsg->chunks),
+ struct wslay_event_byte_chunk, qe);
+ wslay_event_byte_chunk_copy(chunk, ctx->ipayloadoff, iocb.data,
+ iocb.data_length);
}
ctx->ipayloadoff += iocb.data_length;
}
- if(ctx->ipayloadoff == ctx->ipayloadlen) {
- if(ctx->imsg->fin &&
- (ctx->imsg->opcode == WSLAY_TEXT_FRAME ||
- ctx->imsg->opcode == WSLAY_CONNECTION_CLOSE) &&
- ctx->imsg->utf8state != UTF8_ACCEPT) {
- if((r = wslay_event_queue_close_wrapper
- (ctx, WSLAY_CODE_INVALID_FRAME_PAYLOAD_DATA, NULL, 0)) != 0) {
- return r;
+ if (ctx->ipayloadoff == ctx->ipayloadlen) {
+ if (ctx->imsg->fin &&
+ (ctx->imsg->opcode == WSLAY_TEXT_FRAME ||
+ ctx->imsg->opcode == WSLAY_CONNECTION_CLOSE) &&
+ ctx->imsg->utf8state != UTF8_ACCEPT) {
+ if ((r = wslay_event_queue_close_wrapper(
+ ctx, WSLAY_CODE_INVALID_FRAME_PAYLOAD_DATA, NULL, 0)) != 0) {
+ return (int)r;
}
break;
}
wslay_event_call_on_frame_recv_end_callback(ctx);
- if(ctx->imsg->fin) {
- if(ctx->callbacks.on_msg_recv_callback ||
- ctx->imsg->opcode == WSLAY_CONNECTION_CLOSE ||
- ctx->imsg->opcode == WSLAY_PING) {
+ if (ctx->imsg->fin) {
+ if (ctx->callbacks.on_msg_recv_callback ||
+ ctx->imsg->opcode == WSLAY_CONNECTION_CLOSE ||
+ ctx->imsg->opcode == WSLAY_PING) {
struct wslay_event_on_msg_recv_arg arg;
uint16_t status_code = 0;
uint8_t *msg = NULL;
size_t msg_length = 0;
- if(!wslay_event_config_get_no_buffering(ctx) ||
- wslay_is_ctrl_frame(iocb.opcode)) {
- msg = wslay_event_flatten_queue(ctx->imsg->chunks,
+ if (!wslay_event_config_get_no_buffering(ctx) ||
+ wslay_is_ctrl_frame(iocb.opcode)) {
+ msg = wslay_event_flatten_queue(&ctx->imsg->chunks,
ctx->imsg->msg_length);
- if(ctx->imsg->msg_length && !msg) {
+ if (ctx->imsg->msg_length && !msg) {
ctx->read_enabled = 0;
return WSLAY_ERR_NOMEM;
}
msg_length = ctx->imsg->msg_length;
}
- if(ctx->imsg->opcode == WSLAY_CONNECTION_CLOSE) {
+ if (ctx->imsg->opcode == WSLAY_CONNECTION_CLOSE) {
const uint8_t *reason;
size_t reason_length;
- if(ctx->imsg->msg_length >= 2) {
+ if (ctx->imsg->msg_length >= 2) {
memcpy(&status_code, msg, 2);
status_code = ntohs(status_code);
- if(!wslay_event_is_valid_status_code(status_code)) {
+ if (!wslay_event_is_valid_status_code(status_code)) {
free(msg);
- if((r = wslay_event_queue_close_wrapper
- (ctx, WSLAY_CODE_PROTOCOL_ERROR, NULL, 0)) != 0) {
- return r;
+ if ((r = wslay_event_queue_close_wrapper(
+ ctx, WSLAY_CODE_PROTOCOL_ERROR, NULL, 0)) != 0) {
+ return (int)r;
}
break;
}
- reason = msg+2;
- reason_length = ctx->imsg->msg_length-2;
+ reason = msg + 2;
+ reason_length = ctx->imsg->msg_length - 2;
} else {
reason = NULL;
reason_length = 0;
}
ctx->close_status |= WSLAY_CLOSE_RECEIVED;
ctx->status_code_recv =
- status_code == 0 ? WSLAY_CODE_NO_STATUS_RCVD : status_code;
- if((r = wslay_event_queue_close_wrapper
- (ctx, status_code, reason, reason_length)) != 0) {
+ status_code == 0 ? WSLAY_CODE_NO_STATUS_RCVD : status_code;
+ if ((r = wslay_event_queue_close_wrapper(ctx, status_code, reason,
+ reason_length)) != 0) {
free(msg);
- return r;
+ return (int)r;
}
- } else if(ctx->imsg->opcode == WSLAY_PING) {
+ } else if (ctx->imsg->opcode == WSLAY_PING) {
struct wslay_event_msg pong_arg;
pong_arg.opcode = WSLAY_PONG;
pong_arg.msg = msg;
pong_arg.msg_length = ctx->imsg->msg_length;
- if((r = wslay_event_queue_msg(ctx, &pong_arg)) &&
- r != WSLAY_ERR_NO_MORE_MSG) {
+ if ((r = wslay_event_queue_msg(ctx, &pong_arg)) &&
+ r != WSLAY_ERR_NO_MORE_MSG) {
ctx->read_enabled = 0;
free(msg);
- return r;
+ return (int)r;
}
}
- if(ctx->callbacks.on_msg_recv_callback) {
+ if (ctx->callbacks.on_msg_recv_callback) {
arg.rsv = ctx->imsg->rsv;
arg.opcode = ctx->imsg->opcode;
arg.msg = msg;
@@ -753,17 +686,17 @@ int wslay_event_recv(wslay_event_context_ptr ctx)
free(msg);
}
wslay_event_imsg_reset(ctx->imsg);
- if(ctx->imsg == &ctx->imsgs[1]) {
+ if (ctx->imsg == &ctx->imsgs[1]) {
ctx->imsg = &ctx->imsgs[0];
}
}
ctx->ipayloadlen = ctx->ipayloadoff = 0;
}
} else {
- if(r != WSLAY_ERR_WANT_READ ||
- (ctx->error != WSLAY_ERR_WOULDBLOCK && ctx->error != 0)) {
- if((r = wslay_event_queue_close_wrapper(ctx, 0, NULL, 0)) != 0) {
- return r;
+ if (r != WSLAY_ERR_WANT_READ ||
+ (ctx->error != WSLAY_ERR_WOULDBLOCK && ctx->error != 0)) {
+ if ((r = wslay_event_queue_close_wrapper(ctx, 0, NULL, 0)) != 0) {
+ return (int)r;
}
return WSLAY_ERR_CALLBACK_FAILURE;
}
@@ -773,26 +706,25 @@ int wslay_event_recv(wslay_event_context_ptr ctx)
return 0;
}
-static void wslay_event_on_non_fragmented_msg_popped
-(wslay_event_context_ptr ctx)
-{
+static void
+wslay_event_on_non_fragmented_msg_popped(wslay_event_context_ptr ctx) {
ctx->omsg->fin = 1;
ctx->opayloadlen = ctx->omsg->data_length;
ctx->opayloadoff = 0;
}
-static struct wslay_event_omsg* wslay_event_send_ctrl_queue_pop
-(wslay_event_context_ptr ctx)
-{
+static struct wslay_event_omsg *
+wslay_event_send_ctrl_queue_pop(wslay_event_context_ptr ctx) {
/*
* If Close control frame is queued, we don't send any control frame
* other than Close.
*/
- if(ctx->close_status & WSLAY_CLOSE_QUEUED) {
- while(!wslay_queue_empty(ctx->send_ctrl_queue)) {
- struct wslay_event_omsg *msg = wslay_queue_top(ctx->send_ctrl_queue);
- wslay_queue_pop(ctx->send_ctrl_queue);
- if(msg->opcode == WSLAY_CONNECTION_CLOSE) {
+ if (ctx->close_status & WSLAY_CLOSE_QUEUED) {
+ while (!wslay_queue_empty(&ctx->send_ctrl_queue)) {
+ struct wslay_event_omsg *msg = wslay_struct_of(
+ wslay_queue_top(&ctx->send_ctrl_queue), struct wslay_event_omsg, qe);
+ wslay_queue_pop(&ctx->send_ctrl_queue);
+ if (msg->opcode == WSLAY_CONNECTION_CLOSE) {
return msg;
} else {
wslay_event_omsg_free(msg);
@@ -800,71 +732,73 @@ static struct wslay_event_omsg* wslay_event_send_ctrl_queue_pop
}
return NULL;
} else {
- struct wslay_event_omsg *msg = wslay_queue_top(ctx->send_ctrl_queue);
- wslay_queue_pop(ctx->send_ctrl_queue);
+ struct wslay_event_omsg *msg = wslay_struct_of(
+ wslay_queue_top(&ctx->send_ctrl_queue), struct wslay_event_omsg, qe);
+ wslay_queue_pop(&ctx->send_ctrl_queue);
return msg;
}
}
-int wslay_event_send(wslay_event_context_ptr ctx)
-{
+int wslay_event_send(wslay_event_context_ptr ctx) {
struct wslay_frame_iocb iocb;
ssize_t r;
- while(ctx->write_enabled &&
- (!wslay_queue_empty(ctx->send_queue) ||
- !wslay_queue_empty(ctx->send_ctrl_queue) || ctx->omsg)) {
- if(!ctx->omsg) {
- if(wslay_queue_empty(ctx->send_ctrl_queue)) {
- ctx->omsg = wslay_queue_top(ctx->send_queue);
- wslay_queue_pop(ctx->send_queue);
+ while (ctx->write_enabled &&
+ (!wslay_queue_empty(&ctx->send_queue) ||
+ !wslay_queue_empty(&ctx->send_ctrl_queue) || ctx->omsg)) {
+ if (!ctx->omsg) {
+ if (wslay_queue_empty(&ctx->send_ctrl_queue)) {
+ ctx->omsg = wslay_struct_of(wslay_queue_top(&ctx->send_queue),
+ struct wslay_event_omsg, qe);
+ wslay_queue_pop(&ctx->send_queue);
} else {
ctx->omsg = wslay_event_send_ctrl_queue_pop(ctx);
- if(ctx->omsg == NULL) {
+ if (ctx->omsg == NULL) {
break;
}
}
- if(ctx->omsg->type == WSLAY_NON_FRAGMENTED) {
+ if (ctx->omsg->type == WSLAY_NON_FRAGMENTED) {
wslay_event_on_non_fragmented_msg_popped(ctx);
}
- } else if(!wslay_is_ctrl_frame(ctx->omsg->opcode) &&
- ctx->frame_ctx->ostate == PREP_HEADER &&
- !wslay_queue_empty(ctx->send_ctrl_queue)) {
- if((r = wslay_queue_push_front(ctx->send_queue, ctx->omsg)) != 0) {
- ctx->write_enabled = 0;
- return r;
- }
+ } else if (!wslay_is_ctrl_frame(ctx->omsg->opcode) &&
+ ctx->frame_ctx->ostate == PREP_HEADER &&
+ !wslay_queue_empty(&ctx->send_ctrl_queue)) {
+ wslay_queue_push_front(&ctx->send_queue, &ctx->omsg->qe);
ctx->omsg = wslay_event_send_ctrl_queue_pop(ctx);
- if(ctx->omsg == NULL) {
+ if (ctx->omsg == NULL) {
break;
}
/* ctrl message has WSLAY_NON_FRAGMENTED */
wslay_event_on_non_fragmented_msg_popped(ctx);
}
- if(ctx->omsg->type == WSLAY_NON_FRAGMENTED) {
+ if (ctx->omsg->type == WSLAY_NON_FRAGMENTED) {
memset(&iocb, 0, sizeof(iocb));
iocb.fin = 1;
iocb.opcode = ctx->omsg->opcode;
iocb.rsv = ctx->omsg->rsv;
- iocb.mask = ctx->server^1;
- iocb.data = ctx->omsg->data+ctx->opayloadoff;
- iocb.data_length = ctx->opayloadlen-ctx->opayloadoff;
+ iocb.mask = ctx->server ^ 1;
+ iocb.data = ctx->omsg->data;
+ iocb.data_length = ctx->opayloadlen;
+ if (ctx->opayloadoff) {
+ iocb.data += ctx->opayloadoff;
+ iocb.data_length -= ctx->opayloadoff;
+ }
iocb.payload_length = ctx->opayloadlen;
r = wslay_frame_send(ctx->frame_ctx, &iocb);
- if(r >= 0) {
- ctx->opayloadoff += r;
- if(ctx->opayloadoff == ctx->opayloadlen) {
+ if (r >= 0) {
+ ctx->opayloadoff += (uint64_t)r;
+ if (ctx->opayloadoff == ctx->opayloadlen) {
--ctx->queued_msg_count;
ctx->queued_msg_length -= ctx->omsg->data_length;
- if(ctx->omsg->opcode == WSLAY_CONNECTION_CLOSE) {
+ if (ctx->omsg->opcode == WSLAY_CONNECTION_CLOSE) {
uint16_t status_code = 0;
ctx->write_enabled = 0;
ctx->close_status |= WSLAY_CLOSE_SENT;
- if(ctx->omsg->data_length >= 2) {
+ if (ctx->omsg->data_length >= 2) {
memcpy(&status_code, ctx->omsg->data, 2);
status_code = ntohs(status_code);
}
ctx->status_code_sent =
- status_code == 0 ? WSLAY_CODE_NO_STATUS_RCVD : status_code;
+ status_code == 0 ? WSLAY_CODE_NO_STATUS_RCVD : status_code;
}
wslay_event_omsg_free(ctx->omsg);
ctx->omsg = NULL;
@@ -872,30 +806,29 @@ int wslay_event_send(wslay_event_context_ptr ctx)
break;
}
} else {
- if(r != WSLAY_ERR_WANT_WRITE ||
- (ctx->error != WSLAY_ERR_WOULDBLOCK && ctx->error != 0)) {
+ if (r != WSLAY_ERR_WANT_WRITE ||
+ (ctx->error != WSLAY_ERR_WOULDBLOCK && ctx->error != 0)) {
ctx->write_enabled = 0;
return WSLAY_ERR_CALLBACK_FAILURE;
}
break;
}
} else {
- if(ctx->omsg->fin == 0 && ctx->obuflimit == ctx->obufmark) {
+ if (ctx->omsg->fin == 0 && ctx->obuflimit == ctx->obufmark) {
int eof = 0;
r = ctx->omsg->read_callback(ctx, ctx->obuf, sizeof(ctx->obuf),
- &ctx->omsg->source,
- &eof, ctx->user_data);
- if(r == 0 && eof == 0) {
+ &ctx->omsg->source, &eof, ctx->user_data);
+ if (r == 0 && eof == 0) {
break;
- } else if(r < 0) {
+ } else if (r < 0) {
ctx->write_enabled = 0;
return WSLAY_ERR_CALLBACK_FAILURE;
}
- ctx->obuflimit = ctx->obuf+r;
- if(eof) {
+ ctx->obuflimit = ctx->obuf + r;
+ if (eof) {
ctx->omsg->fin = 1;
}
- ctx->opayloadlen = r;
+ ctx->opayloadlen = (uint64_t)r;
ctx->opayloadoff = 0;
}
memset(&iocb, 0, sizeof(iocb));
@@ -904,29 +837,28 @@ int wslay_event_send(wslay_event_context_ptr ctx)
iocb.rsv = ctx->omsg->rsv;
iocb.mask = ctx->server ? 0 : 1;
iocb.data = ctx->obufmark;
- iocb.data_length = ctx->obuflimit-ctx->obufmark;
+ iocb.data_length = (size_t)(ctx->obuflimit - ctx->obufmark);
iocb.payload_length = ctx->opayloadlen;
r = wslay_frame_send(ctx->frame_ctx, &iocb);
- if(r >= 0) {
+ if (r >= 0) {
ctx->obufmark += r;
- if(ctx->obufmark == ctx->obuflimit) {
+ if (ctx->obufmark == ctx->obuflimit) {
ctx->obufmark = ctx->obuflimit = ctx->obuf;
- if(ctx->omsg->fin) {
+ if (ctx->omsg->fin) {
--ctx->queued_msg_count;
wslay_event_omsg_free(ctx->omsg);
ctx->omsg = NULL;
} else {
ctx->omsg->opcode = WSLAY_CONTINUATION_FRAME;
/* RSV1 is not set on continuation frames */
- ctx->omsg->rsv = ctx->omsg->rsv & ~WSLAY_RSV1_BIT;
+ ctx->omsg->rsv = (uint8_t)(ctx->omsg->rsv & ~WSLAY_RSV1_BIT);
}
} else {
break;
}
} else {
- if(r != WSLAY_ERR_WANT_WRITE ||
- (ctx->error != WSLAY_ERR_WOULDBLOCK &&
- ctx->error != 0)) {
+ if (r != WSLAY_ERR_WANT_WRITE ||
+ (ctx->error != WSLAY_ERR_WOULDBLOCK && ctx->error != 0)) {
ctx->write_enabled = 0;
return WSLAY_ERR_CALLBACK_FAILURE;
}
@@ -937,91 +869,214 @@ int wslay_event_send(wslay_event_context_ptr ctx)
return 0;
}
-void wslay_event_set_error(wslay_event_context_ptr ctx, int val)
-{
+ssize_t wslay_event_write(wslay_event_context_ptr ctx, uint8_t *buf,
+ size_t buflen) {
+ struct wslay_frame_iocb iocb;
+ ssize_t r;
+ uint8_t *buf_last = buf;
+ size_t wpayloadlen;
+ while (ctx->write_enabled &&
+ (!wslay_queue_empty(&ctx->send_queue) ||
+ !wslay_queue_empty(&ctx->send_ctrl_queue) || ctx->omsg)) {
+ if (!ctx->omsg) {
+ if (wslay_queue_empty(&ctx->send_ctrl_queue)) {
+ ctx->omsg = wslay_struct_of(wslay_queue_top(&ctx->send_queue),
+ struct wslay_event_omsg, qe);
+ wslay_queue_pop(&ctx->send_queue);
+ } else {
+ ctx->omsg = wslay_event_send_ctrl_queue_pop(ctx);
+ if (ctx->omsg == NULL) {
+ break;
+ }
+ }
+ if (ctx->omsg->type == WSLAY_NON_FRAGMENTED) {
+ wslay_event_on_non_fragmented_msg_popped(ctx);
+ }
+ } else if (!wslay_is_ctrl_frame(ctx->omsg->opcode) &&
+ ctx->frame_ctx->ostate == PREP_HEADER &&
+ !wslay_queue_empty(&ctx->send_ctrl_queue)) {
+ wslay_queue_push_front(&ctx->send_queue, &ctx->omsg->qe);
+ ctx->omsg = wslay_event_send_ctrl_queue_pop(ctx);
+ if (ctx->omsg == NULL) {
+ break;
+ }
+ /* ctrl message has WSLAY_NON_FRAGMENTED */
+ wslay_event_on_non_fragmented_msg_popped(ctx);
+ }
+ if (ctx->omsg->type == WSLAY_NON_FRAGMENTED) {
+ memset(&iocb, 0, sizeof(iocb));
+ iocb.fin = 1;
+ iocb.opcode = ctx->omsg->opcode;
+ iocb.rsv = ctx->omsg->rsv;
+ iocb.mask = ctx->server ^ 1;
+ iocb.data = ctx->omsg->data;
+ iocb.data_length = ctx->opayloadlen;
+ if (ctx->opayloadoff) {
+ iocb.data += ctx->opayloadoff;
+ iocb.data_length -= ctx->opayloadoff;
+ }
+ iocb.payload_length = ctx->opayloadlen;
+ r = wslay_frame_write(ctx->frame_ctx, &iocb, buf_last, buflen,
+ &wpayloadlen);
+ if (r > 0) {
+ assert((size_t)r <= buflen);
+
+ buf_last += r;
+ buflen -= (size_t)r;
+
+ ctx->opayloadoff += wpayloadlen;
+ if (ctx->opayloadoff == ctx->opayloadlen) {
+ --ctx->queued_msg_count;
+ ctx->queued_msg_length -= ctx->omsg->data_length;
+ if (ctx->omsg->opcode == WSLAY_CONNECTION_CLOSE) {
+ uint16_t status_code = 0;
+ ctx->write_enabled = 0;
+ ctx->close_status |= WSLAY_CLOSE_SENT;
+ if (ctx->omsg->data_length >= 2) {
+ memcpy(&status_code, ctx->omsg->data, 2);
+ status_code = ntohs(status_code);
+ }
+ ctx->status_code_sent =
+ status_code == 0 ? WSLAY_CODE_NO_STATUS_RCVD : status_code;
+ }
+ wslay_event_omsg_free(ctx->omsg);
+ ctx->omsg = NULL;
+ } else {
+ break;
+ }
+ } else if (r == 0) {
+ return buf_last - buf;
+ } else {
+ return WSLAY_ERR_CALLBACK_FAILURE;
+ }
+ } else {
+ if (ctx->omsg->fin == 0 && ctx->obuflimit == ctx->obufmark) {
+ int eof = 0;
+ r = ctx->omsg->read_callback(ctx, ctx->obuf, sizeof(ctx->obuf),
+ &ctx->omsg->source, &eof, ctx->user_data);
+ if (r == 0 && eof == 0) {
+ break;
+ } else if (r < 0) {
+ ctx->write_enabled = 0;
+ return WSLAY_ERR_CALLBACK_FAILURE;
+ }
+ ctx->obuflimit = ctx->obuf + r;
+ if (eof) {
+ ctx->omsg->fin = 1;
+ }
+ ctx->opayloadlen = (uint64_t)r;
+ ctx->opayloadoff = 0;
+ }
+ memset(&iocb, 0, sizeof(iocb));
+ iocb.fin = ctx->omsg->fin;
+ iocb.opcode = ctx->omsg->opcode;
+ iocb.rsv = ctx->omsg->rsv;
+ iocb.mask = ctx->server ? 0 : 1;
+ iocb.data = ctx->obufmark;
+ iocb.data_length = (size_t)(ctx->obuflimit - ctx->obufmark);
+ iocb.payload_length = ctx->opayloadlen;
+ r = wslay_frame_write(ctx->frame_ctx, &iocb, buf_last, buflen,
+ &wpayloadlen);
+ if (r > 0) {
+ assert((size_t)r <= buflen);
+
+ buf_last += r;
+ buflen -= (size_t)r;
+
+ ctx->obufmark += wpayloadlen;
+ if (ctx->obufmark == ctx->obuflimit) {
+ ctx->obufmark = ctx->obuflimit = ctx->obuf;
+ if (ctx->omsg->fin) {
+ --ctx->queued_msg_count;
+ wslay_event_omsg_free(ctx->omsg);
+ ctx->omsg = NULL;
+ } else {
+ ctx->omsg->opcode = WSLAY_CONTINUATION_FRAME;
+ /* RSV1 is not set on continuation frames */
+ ctx->omsg->rsv = (uint8_t)(ctx->omsg->rsv & ~WSLAY_RSV1_BIT);
+ }
+ } else {
+ break;
+ }
+ } else if (r == 0) {
+ return buf_last - buf;
+ } else {
+ return WSLAY_ERR_CALLBACK_FAILURE;
+ }
+ }
+ }
+ return buf_last - buf;
+}
+
+void wslay_event_set_error(wslay_event_context_ptr ctx, int val) {
ctx->error = val;
}
-int wslay_event_want_read(wslay_event_context_ptr ctx)
-{
+int wslay_event_want_read(wslay_event_context_ptr ctx) {
return ctx->read_enabled;
}
-int wslay_event_want_write(wslay_event_context_ptr ctx)
-{
+int wslay_event_want_write(wslay_event_context_ptr ctx) {
return ctx->write_enabled &&
- (!wslay_queue_empty(ctx->send_queue) ||
- !wslay_queue_empty(ctx->send_ctrl_queue) || ctx->omsg);
+ (!wslay_queue_empty(&ctx->send_queue) ||
+ !wslay_queue_empty(&ctx->send_ctrl_queue) || ctx->omsg);
}
-void wslay_event_shutdown_read(wslay_event_context_ptr ctx)
-{
+void wslay_event_shutdown_read(wslay_event_context_ptr ctx) {
ctx->read_enabled = 0;
}
-void wslay_event_shutdown_write(wslay_event_context_ptr ctx)
-{
+void wslay_event_shutdown_write(wslay_event_context_ptr ctx) {
ctx->write_enabled = 0;
}
-int wslay_event_get_read_enabled(wslay_event_context_ptr ctx)
-{
+int wslay_event_get_read_enabled(wslay_event_context_ptr ctx) {
return ctx->read_enabled;
}
-int wslay_event_get_write_enabled(wslay_event_context_ptr ctx)
-{
+int wslay_event_get_write_enabled(wslay_event_context_ptr ctx) {
return ctx->write_enabled;
}
-int wslay_event_get_close_received(wslay_event_context_ptr ctx)
-{
+int wslay_event_get_close_received(wslay_event_context_ptr ctx) {
return (ctx->close_status & WSLAY_CLOSE_RECEIVED) > 0;
}
-int wslay_event_get_close_sent(wslay_event_context_ptr ctx)
-{
+int wslay_event_get_close_sent(wslay_event_context_ptr ctx) {
return (ctx->close_status & WSLAY_CLOSE_SENT) > 0;
}
void wslay_event_config_set_allowed_rsv_bits(wslay_event_context_ptr ctx,
- uint8_t rsv)
-{
+ uint8_t rsv) {
/* We currently only allow WSLAY_RSV1_BIT or WSLAY_RSV_NONE */
ctx->allowed_rsv_bits = rsv & WSLAY_RSV1_BIT;
}
-void wslay_event_config_set_no_buffering(wslay_event_context_ptr ctx, int val)
-{
- if(val) {
+void wslay_event_config_set_no_buffering(wslay_event_context_ptr ctx, int val) {
+ if (val) {
ctx->config |= WSLAY_CONFIG_NO_BUFFERING;
} else {
- ctx->config &= ~WSLAY_CONFIG_NO_BUFFERING;
+ ctx->config &= (uint32_t)~WSLAY_CONFIG_NO_BUFFERING;
}
}
void wslay_event_config_set_max_recv_msg_length(wslay_event_context_ptr ctx,
- uint64_t val)
-{
+ uint64_t val) {
ctx->max_recv_msg_length = val;
}
-uint16_t wslay_event_get_status_code_received(wslay_event_context_ptr ctx)
-{
+uint16_t wslay_event_get_status_code_received(wslay_event_context_ptr ctx) {
return ctx->status_code_recv;
}
-uint16_t wslay_event_get_status_code_sent(wslay_event_context_ptr ctx)
-{
+uint16_t wslay_event_get_status_code_sent(wslay_event_context_ptr ctx) {
return ctx->status_code_sent;
}
-size_t wslay_event_get_queued_msg_count(wslay_event_context_ptr ctx)
-{
+size_t wslay_event_get_queued_msg_count(wslay_event_context_ptr ctx) {
return ctx->queued_msg_count;
}
-size_t wslay_event_get_queued_msg_length(wslay_event_context_ptr ctx)
-{
+size_t wslay_event_get_queued_msg_length(wslay_event_context_ptr ctx) {
return ctx->queued_msg_length;
}
diff --git a/thirdparty/wslay/wslay_event.h b/thirdparty/wslay/wslay_event.h
index 36feb9036d..e30c3d1940 100644
--- a/thirdparty/wslay/wslay_event.h
+++ b/thirdparty/wslay/wslay_event.h
@@ -31,10 +31,10 @@
#include <wslay/wslay.h>
-struct wslay_stack;
-struct wslay_queue;
+#include "wslay_queue.h"
struct wslay_event_byte_chunk {
+ struct wslay_queue_entry qe;
uint8_t *data;
size_t data_length;
};
@@ -44,16 +44,14 @@ struct wslay_event_imsg {
uint8_t rsv;
uint8_t opcode;
uint32_t utf8state;
- struct wslay_queue *chunks;
+ struct wslay_queue chunks;
size_t msg_length;
};
-enum wslay_event_msg_type {
- WSLAY_NON_FRAGMENTED,
- WSLAY_FRAGMENTED
-};
+enum wslay_event_msg_type { WSLAY_NON_FRAGMENTED, WSLAY_FRAGMENTED };
struct wslay_event_omsg {
+ struct wslay_queue_entry qe;
uint8_t fin;
uint8_t opcode;
uint8_t rsv;
@@ -77,9 +75,7 @@ enum wslay_event_close_status {
WSLAY_CLOSE_SENT = 1 << 2
};
-enum wslay_event_config {
- WSLAY_CONFIG_NO_BUFFERING = 1 << 0
-};
+enum wslay_event_config { WSLAY_CONFIG_NO_BUFFERING = 1 << 0 };
struct wslay_event_context {
/* config status, bitwise OR of enum wslay_event_config values*/
@@ -118,9 +114,9 @@ struct wslay_event_context {
is currently sent. */
struct wslay_event_omsg *omsg;
/* Queue for non-control frames */
- struct wslay_queue/*<wslay_omsg*>*/ *send_queue;
+ struct wslay_queue /*<wslay_omsg*>*/ send_queue;
/* Queue for control frames */
- struct wslay_queue/*<wslay_omsg*>*/ *send_ctrl_queue;
+ struct wslay_queue /*<wslay_omsg*>*/ send_ctrl_queue;
/* Size of send_queue + size of send_ctrl_queue */
size_t queued_msg_count;
/* The sum of message length in send_queue */
diff --git a/thirdparty/wslay/wslay_frame.c b/thirdparty/wslay/wslay_frame.c
index 445e750ca5..435044a3f4 100644
--- a/thirdparty/wslay/wslay_frame.c
+++ b/thirdparty/wslay/wslay_frame.c
@@ -34,10 +34,9 @@
int wslay_frame_context_init(wslay_frame_context_ptr *ctx,
const struct wslay_frame_callbacks *callbacks,
- void *user_data)
-{
- *ctx = (wslay_frame_context_ptr)malloc(sizeof(struct wslay_frame_context));
- if(*ctx == NULL) {
+ void *user_data) {
+ *ctx = malloc(sizeof(struct wslay_frame_context));
+ if (*ctx == NULL) {
return -1;
}
memset(*ctx, 0, sizeof(struct wslay_frame_context));
@@ -50,38 +49,35 @@ int wslay_frame_context_init(wslay_frame_context_ptr *ctx,
return 0;
}
-void wslay_frame_context_free(wslay_frame_context_ptr ctx)
-{
- free(ctx);
-}
+void wslay_frame_context_free(wslay_frame_context_ptr ctx) { free(ctx); }
ssize_t wslay_frame_send(wslay_frame_context_ptr ctx,
- struct wslay_frame_iocb *iocb)
-{
- if(iocb->data_length > iocb->payload_length) {
+ struct wslay_frame_iocb *iocb) {
+ if (iocb->data_length > iocb->payload_length) {
return WSLAY_ERR_INVALID_ARGUMENT;
}
- if(ctx->ostate == PREP_HEADER) {
+ if (ctx->ostate == PREP_HEADER) {
uint8_t *hdptr = ctx->oheader;
memset(ctx->oheader, 0, sizeof(ctx->oheader));
- *hdptr |= (iocb->fin << 7) & 0x80u;
- *hdptr |= (iocb->rsv << 4) & 0x70u;
- *hdptr |= iocb->opcode & 0xfu;
+ *hdptr |= (uint8_t)((uint8_t)(iocb->fin << 7) & 0x80u);
+ *hdptr |= (uint8_t)((uint8_t)(iocb->rsv << 4) & 0x70u);
+ /* Suppress stubborn gcc-10 warning */
+ *hdptr |= (uint8_t)((uint8_t)(iocb->opcode << 0) & 0xfu);
++hdptr;
- *hdptr |= (iocb->mask << 7) & 0x80u;
- if(wslay_is_ctrl_frame(iocb->opcode) && iocb->payload_length > 125) {
+ *hdptr |= (uint8_t)((uint8_t)(iocb->mask << 7) & 0x80u);
+ if (wslay_is_ctrl_frame(iocb->opcode) && iocb->payload_length > 125) {
return WSLAY_ERR_INVALID_ARGUMENT;
}
- if(iocb->payload_length < 126) {
- *hdptr |= iocb->payload_length;
+ if (iocb->payload_length < 126) {
+ *hdptr |= (uint8_t)iocb->payload_length;
++hdptr;
- } else if(iocb->payload_length < (1 << 16)) {
- uint16_t len = htons(iocb->payload_length);
+ } else if (iocb->payload_length < (1 << 16)) {
+ uint16_t len = htons((uint16_t)iocb->payload_length);
*hdptr |= 126;
++hdptr;
memcpy(hdptr, &len, 2);
hdptr += 2;
- } else if(iocb->payload_length < (1ull << 63)) {
+ } else if (iocb->payload_length < (1ull << 63)) {
uint64_t len = hton64(iocb->payload_length);
*hdptr |= 127;
++hdptr;
@@ -91,9 +87,9 @@ ssize_t wslay_frame_send(wslay_frame_context_ptr ctx,
/* Too large payload length */
return WSLAY_ERR_INVALID_ARGUMENT;
}
- if(iocb->mask) {
- if(ctx->callbacks.genmask_callback(ctx->omaskkey, 4,
- ctx->user_data) != 0) {
+ if (iocb->mask) {
+ if (ctx->callbacks.genmask_callback(ctx->omaskkey, 4, ctx->user_data) !=
+ 0) {
return WSLAY_ERR_INVALID_CALLBACK;
} else {
ctx->omask = 1;
@@ -107,21 +103,21 @@ ssize_t wslay_frame_send(wslay_frame_context_ptr ctx,
ctx->opayloadlen = iocb->payload_length;
ctx->opayloadoff = 0;
}
- if(ctx->ostate == SEND_HEADER) {
- ptrdiff_t len = ctx->oheaderlimit-ctx->oheadermark;
+ if (ctx->ostate == SEND_HEADER) {
+ ptrdiff_t len = ctx->oheaderlimit - ctx->oheadermark;
ssize_t r;
int flags = 0;
- if(iocb->data_length > 0) {
+ if (iocb->data_length > 0) {
flags |= WSLAY_MSG_MORE;
};
- r = ctx->callbacks.send_callback(ctx->oheadermark, len, flags,
+ r = ctx->callbacks.send_callback(ctx->oheadermark, (size_t)len, flags,
ctx->user_data);
- if(r > 0) {
- if(r > len) {
+ if (r > 0) {
+ if (r > len) {
return WSLAY_ERR_INVALID_CALLBACK;
} else {
ctx->oheadermark += r;
- if(ctx->oheadermark == ctx->oheaderlimit) {
+ if (ctx->oheadermark == ctx->oheaderlimit) {
ctx->ostate = SEND_PAYLOAD;
} else {
return WSLAY_ERR_WANT_WRITE;
@@ -131,34 +127,34 @@ ssize_t wslay_frame_send(wslay_frame_context_ptr ctx,
return WSLAY_ERR_WANT_WRITE;
}
}
- if(ctx->ostate == SEND_PAYLOAD) {
+ if (ctx->ostate == SEND_PAYLOAD) {
size_t totallen = 0;
- if(iocb->data_length > 0) {
- if(ctx->omask) {
+ if (iocb->data_length > 0) {
+ if (ctx->omask) {
uint8_t temp[4096];
const uint8_t *datamark = iocb->data,
- *datalimit = iocb->data+iocb->data_length;
- while(datamark < datalimit) {
- size_t datalen = datalimit - datamark;
- const uint8_t *writelimit = datamark+
- wslay_min(sizeof(temp), datalen);
- size_t writelen = writelimit-datamark;
+ *datalimit = iocb->data + iocb->data_length;
+ while (datamark < datalimit) {
+ size_t datalen = (size_t)(datalimit - datamark);
+ const uint8_t *writelimit =
+ datamark + wslay_min(sizeof(temp), datalen);
+ size_t writelen = (size_t)(writelimit - datamark);
ssize_t r;
size_t i;
- for(i = 0; i < writelen; ++i) {
- temp[i] = datamark[i]^ctx->omaskkey[(ctx->opayloadoff+i)%4];
+ for (i = 0; i < writelen; ++i) {
+ temp[i] = datamark[i] ^ ctx->omaskkey[(ctx->opayloadoff + i) % 4];
}
r = ctx->callbacks.send_callback(temp, writelen, 0, ctx->user_data);
- if(r > 0) {
- if((size_t)r > writelen) {
+ if (r > 0) {
+ if ((size_t)r > writelen) {
return WSLAY_ERR_INVALID_CALLBACK;
} else {
datamark += r;
- ctx->opayloadoff += r;
- totallen += r;
+ ctx->opayloadoff += (uint64_t)r;
+ totallen += (size_t)r;
}
} else {
- if(totallen > 0) {
+ if (totallen > 0) {
break;
} else {
return WSLAY_ERR_WANT_WRITE;
@@ -169,44 +165,148 @@ ssize_t wslay_frame_send(wslay_frame_context_ptr ctx,
ssize_t r;
r = ctx->callbacks.send_callback(iocb->data, iocb->data_length, 0,
ctx->user_data);
- if(r > 0) {
- if((size_t)r > iocb->data_length) {
+ if (r > 0) {
+ if ((size_t)r > iocb->data_length) {
return WSLAY_ERR_INVALID_CALLBACK;
} else {
- ctx->opayloadoff += r;
- totallen = r;
+ ctx->opayloadoff += (uint64_t)r;
+ totallen = (size_t)r;
}
} else {
return WSLAY_ERR_WANT_WRITE;
}
}
}
- if(ctx->opayloadoff == ctx->opayloadlen) {
+ if (ctx->opayloadoff == ctx->opayloadlen) {
ctx->ostate = PREP_HEADER;
}
- return totallen;
+ return (ssize_t)totallen;
}
return WSLAY_ERR_INVALID_ARGUMENT;
}
-static void wslay_shift_ibuf(wslay_frame_context_ptr ctx)
-{
- ptrdiff_t len = ctx->ibuflimit-ctx->ibufmark;
- memmove(ctx->ibuf, ctx->ibufmark, len);
- ctx->ibuflimit = ctx->ibuf+len;
+ssize_t wslay_frame_write(wslay_frame_context_ptr ctx,
+ struct wslay_frame_iocb *iocb, uint8_t *buf,
+ size_t buflen, size_t *pwpayloadlen) {
+ uint8_t *buf_last = buf;
+ size_t i;
+ size_t hdlen;
+
+ *pwpayloadlen = 0;
+
+ if (iocb->data_length > iocb->payload_length) {
+ return WSLAY_ERR_INVALID_ARGUMENT;
+ }
+
+ switch (ctx->ostate) {
+ case PREP_HEADER:
+ case PREP_HEADER_NOBUF:
+ hdlen = 2;
+ if (iocb->payload_length < 126) {
+ /* nothing to do */
+ } else if (iocb->payload_length < (1 << 16)) {
+ hdlen += 2;
+ } else if (iocb->payload_length < (1ull << 63)) {
+ hdlen += 8;
+ }
+ if (iocb->mask) {
+ hdlen += 4;
+ }
+
+ if (buflen < hdlen) {
+ ctx->ostate = PREP_HEADER_NOBUF;
+ return 0;
+ }
+
+ memset(buf_last, 0, hdlen);
+ *buf_last |= (uint8_t)((uint8_t)(iocb->fin << 7) & 0x80u);
+ *buf_last |= (uint8_t)((uint8_t)(iocb->rsv << 4) & 0x70u);
+ /* Suppress stubborn gcc-10 warning */
+ *buf_last |= (uint8_t)((uint8_t)(iocb->opcode << 0) & 0xfu);
+ ++buf_last;
+ *buf_last |= (uint8_t)((uint8_t)(iocb->mask << 7) & 0x80u);
+ if (wslay_is_ctrl_frame(iocb->opcode) && iocb->payload_length > 125) {
+ return WSLAY_ERR_INVALID_ARGUMENT;
+ }
+ if (iocb->payload_length < 126) {
+ *buf_last |= (uint8_t)iocb->payload_length;
+ ++buf_last;
+ } else if (iocb->payload_length < (1 << 16)) {
+ uint16_t len = htons((uint16_t)iocb->payload_length);
+ *buf_last |= 126;
+ ++buf_last;
+ memcpy(buf_last, &len, 2);
+ buf_last += 2;
+ } else if (iocb->payload_length < (1ull << 63)) {
+ uint64_t len = hton64(iocb->payload_length);
+ *buf_last |= 127;
+ ++buf_last;
+ memcpy(buf_last, &len, 8);
+ buf_last += 8;
+ } else {
+ /* Too large payload length */
+ return WSLAY_ERR_INVALID_ARGUMENT;
+ }
+ if (iocb->mask) {
+ if (ctx->callbacks.genmask_callback(ctx->omaskkey, 4, ctx->user_data) !=
+ 0) {
+ return WSLAY_ERR_INVALID_CALLBACK;
+ } else {
+ ctx->omask = 1;
+ memcpy(buf_last, ctx->omaskkey, 4);
+ buf_last += 4;
+ }
+ }
+ ctx->ostate = SEND_PAYLOAD;
+ ctx->opayloadlen = iocb->payload_length;
+ ctx->opayloadoff = 0;
+
+ buflen -= (size_t)(buf_last - buf);
+ /* fall through */
+ case SEND_PAYLOAD:
+ if (iocb->data_length > 0) {
+ size_t writelen = wslay_min(buflen, iocb->data_length);
+
+ if (ctx->omask) {
+ for (i = 0; i < writelen; ++i) {
+ *buf_last++ =
+ iocb->data[i] ^ ctx->omaskkey[(ctx->opayloadoff + i) % 4];
+ }
+ } else {
+ memcpy(buf_last, iocb->data, writelen);
+ buf_last += writelen;
+ }
+
+ ctx->opayloadoff += writelen;
+ *pwpayloadlen = writelen;
+ }
+
+ if (ctx->opayloadoff == ctx->opayloadlen) {
+ ctx->ostate = PREP_HEADER;
+ }
+
+ return buf_last - buf;
+ default:
+ return WSLAY_ERR_INVALID_ARGUMENT;
+ }
+}
+
+static void wslay_shift_ibuf(wslay_frame_context_ptr ctx) {
+ ptrdiff_t len = ctx->ibuflimit - ctx->ibufmark;
+ memmove(ctx->ibuf, ctx->ibufmark, (size_t)len);
+ ctx->ibuflimit = ctx->ibuf + len;
ctx->ibufmark = ctx->ibuf;
}
-static ssize_t wslay_recv(wslay_frame_context_ptr ctx)
-{
+static ssize_t wslay_recv(wslay_frame_context_ptr ctx) {
ssize_t r;
- if(ctx->ibufmark != ctx->ibuf) {
+ if (ctx->ibufmark != ctx->ibuf) {
wslay_shift_ibuf(ctx);
}
- r = ctx->callbacks.recv_callback
- (ctx->ibuflimit, ctx->ibuf+sizeof(ctx->ibuf)-ctx->ibuflimit,
- 0, ctx->user_data);
- if(r > 0) {
+ r = ctx->callbacks.recv_callback(
+ ctx->ibuflimit, (size_t)(ctx->ibuf + sizeof(ctx->ibuf) - ctx->ibuflimit),
+ 0, ctx->user_data);
+ if (r > 0) {
ctx->ibuflimit += r;
} else {
r = WSLAY_ERR_WANT_READ;
@@ -217,17 +317,16 @@ static ssize_t wslay_recv(wslay_frame_context_ptr ctx)
#define WSLAY_AVAIL_IBUF(ctx) ((size_t)(ctx->ibuflimit - ctx->ibufmark))
ssize_t wslay_frame_recv(wslay_frame_context_ptr ctx,
- struct wslay_frame_iocb *iocb)
-{
+ struct wslay_frame_iocb *iocb) {
ssize_t r;
- if(ctx->istate == RECV_HEADER1) {
+ if (ctx->istate == RECV_HEADER1) {
uint8_t fin, opcode, rsv, payloadlen;
- if(WSLAY_AVAIL_IBUF(ctx) < ctx->ireqread) {
- if((r = wslay_recv(ctx)) <= 0) {
+ if (WSLAY_AVAIL_IBUF(ctx) < ctx->ireqread) {
+ if ((r = wslay_recv(ctx)) <= 0) {
return r;
}
}
- if(WSLAY_AVAIL_IBUF(ctx) < ctx->ireqread) {
+ if (WSLAY_AVAIL_IBUF(ctx) < ctx->ireqread) {
return WSLAY_ERR_WANT_READ;
}
fin = (ctx->ibufmark[0] >> 7) & 1;
@@ -240,19 +339,19 @@ ssize_t wslay_frame_recv(wslay_frame_context_ptr ctx,
ctx->imask = (ctx->ibufmark[0] >> 7) & 1;
payloadlen = ctx->ibufmark[0] & 0x7fu;
++ctx->ibufmark;
- if(wslay_is_ctrl_frame(opcode) && (payloadlen > 125 || !fin)) {
+ if (wslay_is_ctrl_frame(opcode) && (payloadlen > 125 || !fin)) {
return WSLAY_ERR_PROTO;
}
- if(payloadlen == 126) {
+ if (payloadlen == 126) {
ctx->istate = RECV_EXT_PAYLOADLEN;
ctx->ireqread = 2;
- } else if(payloadlen == 127) {
+ } else if (payloadlen == 127) {
ctx->istate = RECV_EXT_PAYLOADLEN;
ctx->ireqread = 8;
} else {
ctx->ipayloadlen = payloadlen;
ctx->ipayloadoff = 0;
- if(ctx->imask) {
+ if (ctx->imask) {
ctx->istate = RECV_MASKKEY;
ctx->ireqread = 4;
} else {
@@ -260,42 +359,41 @@ ssize_t wslay_frame_recv(wslay_frame_context_ptr ctx,
}
}
}
- if(ctx->istate == RECV_EXT_PAYLOADLEN) {
- if(WSLAY_AVAIL_IBUF(ctx) < ctx->ireqread) {
- if((r = wslay_recv(ctx)) <= 0) {
+ if (ctx->istate == RECV_EXT_PAYLOADLEN) {
+ if (WSLAY_AVAIL_IBUF(ctx) < ctx->ireqread) {
+ if ((r = wslay_recv(ctx)) <= 0) {
return r;
}
- if(WSLAY_AVAIL_IBUF(ctx) < ctx->ireqread) {
+ if (WSLAY_AVAIL_IBUF(ctx) < ctx->ireqread) {
return WSLAY_ERR_WANT_READ;
}
}
ctx->ipayloadlen = 0;
ctx->ipayloadoff = 0;
- memcpy((uint8_t*)&ctx->ipayloadlen+(8-ctx->ireqread),
- ctx->ibufmark, ctx->ireqread);
+ memcpy((uint8_t *)&ctx->ipayloadlen + (8 - ctx->ireqread), ctx->ibufmark,
+ ctx->ireqread);
ctx->ipayloadlen = ntoh64(ctx->ipayloadlen);
ctx->ibufmark += ctx->ireqread;
- if(ctx->ireqread == 8) {
- if(ctx->ipayloadlen < (1 << 16) ||
- ctx->ipayloadlen & (1ull << 63)) {
+ if (ctx->ireqread == 8) {
+ if (ctx->ipayloadlen < (1 << 16) || ctx->ipayloadlen & (1ull << 63)) {
return WSLAY_ERR_PROTO;
}
- } else if(ctx->ipayloadlen < 126) {
+ } else if (ctx->ipayloadlen < 126) {
return WSLAY_ERR_PROTO;
}
- if(ctx->imask) {
+ if (ctx->imask) {
ctx->istate = RECV_MASKKEY;
ctx->ireqread = 4;
} else {
ctx->istate = RECV_PAYLOAD;
}
}
- if(ctx->istate == RECV_MASKKEY) {
- if(WSLAY_AVAIL_IBUF(ctx) < ctx->ireqread) {
- if((r = wslay_recv(ctx)) <= 0) {
+ if (ctx->istate == RECV_MASKKEY) {
+ if (WSLAY_AVAIL_IBUF(ctx) < ctx->ireqread) {
+ if ((r = wslay_recv(ctx)) <= 0) {
return r;
}
- if(WSLAY_AVAIL_IBUF(ctx) < ctx->ireqread) {
+ if (WSLAY_AVAIL_IBUF(ctx) < ctx->ireqread) {
return WSLAY_ERR_WANT_READ;
}
}
@@ -303,25 +401,25 @@ ssize_t wslay_frame_recv(wslay_frame_context_ptr ctx,
ctx->ibufmark += 4;
ctx->istate = RECV_PAYLOAD;
}
- if(ctx->istate == RECV_PAYLOAD) {
+ if (ctx->istate == RECV_PAYLOAD) {
uint8_t *readlimit, *readmark;
- uint64_t rempayloadlen = ctx->ipayloadlen-ctx->ipayloadoff;
- if(WSLAY_AVAIL_IBUF(ctx) == 0 && rempayloadlen > 0) {
- if((r = wslay_recv(ctx)) <= 0) {
+ uint64_t rempayloadlen = ctx->ipayloadlen - ctx->ipayloadoff;
+ if (WSLAY_AVAIL_IBUF(ctx) == 0 && rempayloadlen > 0) {
+ if ((r = wslay_recv(ctx)) <= 0) {
return r;
}
}
readmark = ctx->ibufmark;
- readlimit = WSLAY_AVAIL_IBUF(ctx) < rempayloadlen ?
- ctx->ibuflimit : ctx->ibufmark+rempayloadlen;
- if(ctx->imask) {
- for(; ctx->ibufmark != readlimit;
- ++ctx->ibufmark, ++ctx->ipayloadoff) {
+ readlimit = WSLAY_AVAIL_IBUF(ctx) < rempayloadlen
+ ? ctx->ibuflimit
+ : ctx->ibufmark + rempayloadlen;
+ if (ctx->imask) {
+ for (; ctx->ibufmark != readlimit; ++ctx->ibufmark, ++ctx->ipayloadoff) {
ctx->ibufmark[0] ^= ctx->imaskkey[ctx->ipayloadoff % 4];
}
} else {
ctx->ibufmark = readlimit;
- ctx->ipayloadoff += readlimit-readmark;
+ ctx->ipayloadoff += (uint64_t)(readlimit - readmark);
}
iocb->fin = ctx->iom.fin;
iocb->rsv = ctx->iom.rsv;
@@ -329,12 +427,12 @@ ssize_t wslay_frame_recv(wslay_frame_context_ptr ctx,
iocb->payload_length = ctx->ipayloadlen;
iocb->mask = ctx->imask;
iocb->data = readmark;
- iocb->data_length = ctx->ibufmark-readmark;
- if(ctx->ipayloadlen == ctx->ipayloadoff) {
+ iocb->data_length = (size_t)(ctx->ibufmark - readmark);
+ if (ctx->ipayloadlen == ctx->ipayloadoff) {
ctx->istate = RECV_HEADER1;
ctx->ireqread = 2;
}
- return iocb->data_length;
+ return (ssize_t)iocb->data_length;
}
return WSLAY_ERR_INVALID_ARGUMENT;
}
diff --git a/thirdparty/wslay/wslay_frame.h b/thirdparty/wslay/wslay_frame.h
index 6a75858cc7..3ac98112b5 100644
--- a/thirdparty/wslay/wslay_frame.h
+++ b/thirdparty/wslay/wslay_frame.h
@@ -33,6 +33,7 @@
enum wslay_frame_state {
PREP_HEADER,
+ PREP_HEADER_NOBUF,
SEND_HEADER,
SEND_PAYLOAD,
RECV_HEADER1,
diff --git a/thirdparty/wslay/wslay_stack.h b/thirdparty/wslay/wslay_macro.h
index 16e4e968eb..a06cff98e1 100644
--- a/thirdparty/wslay/wslay_stack.h
+++ b/thirdparty/wslay/wslay_macro.h
@@ -1,7 +1,7 @@
/*
* Wslay - The WebSocket Library
*
- * Copyright (c) 2011, 2012 Tatsuhiro Tsujikawa
+ * Copyright (c) 2020 Tatsuhiro Tsujikawa
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
@@ -22,8 +22,8 @@
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
-#ifndef WSLAY_STACK_H
-#define WSLAY_STACK_H
+#ifndef WSLAY_MACRO_H
+#define WSLAY_MACRO_H
#ifdef HAVE_CONFIG_H
# include "config.h"
@@ -31,20 +31,9 @@
#include <wslay/wslay.h>
-struct wslay_stack_cell {
- void *data;
- struct wslay_stack_cell *next;
-};
+#include <stddef.h>
-struct wslay_stack {
- struct wslay_stack_cell *top;
-};
+#define wslay_struct_of(ptr, type, member) \
+ ((type *)(void *)((char *)(ptr)-offsetof(type, member)))
-struct wslay_stack* wslay_stack_new();
-void wslay_stack_free(struct wslay_stack *stack);
-int wslay_stack_push(struct wslay_stack *stack, void *data);
-void wslay_stack_pop(struct wslay_stack *stack);
-void* wslay_stack_top(struct wslay_stack *stack);
-int wslay_stack_empty(struct wslay_stack *stack);
-
-#endif /* WSLAY_STACK_H */
+#endif /* WSLAY_MACRO_H */
diff --git a/thirdparty/wslay/wslay_net.c b/thirdparty/wslay/wslay_net.c
index d3867c21fb..e256158b4c 100644
--- a/thirdparty/wslay/wslay_net.c
+++ b/thirdparty/wslay/wslay_net.c
@@ -26,10 +26,9 @@
#ifndef WORDS_BIGENDIAN
-uint64_t wslay_byteswap64(uint64_t x)
-{
+uint64_t wslay_byteswap64(uint64_t x) {
uint64_t u = ntohl(x & 0xffffffffllu);
- uint64_t l = ntohl(x >> 32);
+ uint64_t l = ntohl((uint32_t)(x >> 32));
return (u << 32) | l;
}
diff --git a/thirdparty/wslay/wslay_queue.c b/thirdparty/wslay/wslay_queue.c
index 8d2669687d..ebde3ba83d 100644
--- a/thirdparty/wslay/wslay_queue.c
+++ b/thirdparty/wslay/wslay_queue.c
@@ -27,91 +27,51 @@
#include <string.h>
#include <assert.h>
-struct wslay_queue* wslay_queue_new(void)
-{
- struct wslay_queue *queue = (struct wslay_queue*)malloc
- (sizeof(struct wslay_queue));
- if(!queue) {
- return NULL;
- }
- queue->top = queue->tail = NULL;
- return queue;
-}
+#include "wslay_macro.h"
-void wslay_queue_free(struct wslay_queue *queue)
-{
- if(!queue) {
- return;
- } else {
- struct wslay_queue_cell *p = queue->top;
- while(p) {
- struct wslay_queue_cell *next = p->next;
- free(p);
- p = next;
- }
- free(queue);
- }
+void wslay_queue_init(struct wslay_queue *queue) {
+ queue->top = NULL;
+ queue->tail = &queue->top;
}
-int wslay_queue_push(struct wslay_queue *queue, void *data)
-{
- struct wslay_queue_cell *new_cell = (struct wslay_queue_cell*)malloc
- (sizeof(struct wslay_queue_cell));
- if(!new_cell) {
- return WSLAY_ERR_NOMEM;
- }
- new_cell->data = data;
- new_cell->next = NULL;
- if(queue->tail) {
- queue->tail->next = new_cell;
- queue->tail = new_cell;
+void wslay_queue_deinit(struct wslay_queue *queue) { (void)queue; }
- } else {
- queue->top = queue->tail = new_cell;
- }
- return 0;
+void wslay_queue_push(struct wslay_queue *queue,
+ struct wslay_queue_entry *ent) {
+ ent->next = NULL;
+ *queue->tail = ent;
+ queue->tail = &ent->next;
}
-int wslay_queue_push_front(struct wslay_queue *queue, void *data)
-{
- struct wslay_queue_cell *new_cell = (struct wslay_queue_cell*)malloc
- (sizeof(struct wslay_queue_cell));
- if(!new_cell) {
- return WSLAY_ERR_NOMEM;
- }
- new_cell->data = data;
- new_cell->next = queue->top;
- queue->top = new_cell;
- if(!queue->tail) {
- queue->tail = queue->top;
+void wslay_queue_push_front(struct wslay_queue *queue,
+ struct wslay_queue_entry *ent) {
+ ent->next = queue->top;
+ queue->top = ent;
+
+ if (ent->next == NULL) {
+ queue->tail = &ent->next;
}
- return 0;
}
-void wslay_queue_pop(struct wslay_queue *queue)
-{
- struct wslay_queue_cell *top = queue->top;
- assert(top);
- queue->top = top->next;
- if(top == queue->tail) {
- queue->tail = NULL;
+void wslay_queue_pop(struct wslay_queue *queue) {
+ assert(queue->top);
+ queue->top = queue->top->next;
+ if (queue->top == NULL) {
+ queue->tail = &queue->top;
}
- free(top);
}
-void* wslay_queue_top(struct wslay_queue *queue)
-{
+struct wslay_queue_entry *wslay_queue_top(struct wslay_queue *queue) {
assert(queue->top);
- return queue->top->data;
+ return queue->top;
}
-void* wslay_queue_tail(struct wslay_queue *queue)
-{
- assert(queue->tail);
- return queue->tail->data;
+struct wslay_queue_entry *wslay_queue_tail(struct wslay_queue *queue) {
+ assert(queue->top);
+ return wslay_struct_of(queue->tail, struct wslay_queue_entry, next);
}
-int wslay_queue_empty(struct wslay_queue *queue)
-{
+int wslay_queue_empty(struct wslay_queue *queue) {
+ assert(queue->top || queue->tail == &queue->top);
return queue->top == NULL;
}
diff --git a/thirdparty/wslay/wslay_queue.h b/thirdparty/wslay/wslay_queue.h
index 55e78a042e..fa16aea489 100644
--- a/thirdparty/wslay/wslay_queue.h
+++ b/thirdparty/wslay/wslay_queue.h
@@ -31,23 +31,23 @@
#include <wslay/wslay.h>
-struct wslay_queue_cell {
- void *data;
- struct wslay_queue_cell *next;
+struct wslay_queue_entry {
+ struct wslay_queue_entry *next;
};
struct wslay_queue {
- struct wslay_queue_cell *top;
- struct wslay_queue_cell *tail;
+ struct wslay_queue_entry *top;
+ struct wslay_queue_entry **tail;
};
-struct wslay_queue* wslay_queue_new(void);
-void wslay_queue_free(struct wslay_queue *queue);
-int wslay_queue_push(struct wslay_queue *queue, void *data);
-int wslay_queue_push_front(struct wslay_queue *queue, void *data);
+void wslay_queue_init(struct wslay_queue *queue);
+void wslay_queue_deinit(struct wslay_queue *queue);
+void wslay_queue_push(struct wslay_queue *queue, struct wslay_queue_entry *ent);
+void wslay_queue_push_front(struct wslay_queue *queue,
+ struct wslay_queue_entry *ent);
void wslay_queue_pop(struct wslay_queue *queue);
-void* wslay_queue_top(struct wslay_queue *queue);
-void* wslay_queue_tail(struct wslay_queue *queue);
+struct wslay_queue_entry *wslay_queue_top(struct wslay_queue *queue);
+struct wslay_queue_entry *wslay_queue_tail(struct wslay_queue *queue);
int wslay_queue_empty(struct wslay_queue *queue);
#endif /* WSLAY_QUEUE_H */
diff --git a/thirdparty/wslay/wslay_stack.c b/thirdparty/wslay/wslay_stack.c
deleted file mode 100644
index 0e05d74031..0000000000
--- a/thirdparty/wslay/wslay_stack.c
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Wslay - The WebSocket Library
- *
- * Copyright (c) 2011, 2012 Tatsuhiro Tsujikawa
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
-#include "wslay_stack.h"
-
-#include <string.h>
-#include <assert.h>
-
-struct wslay_stack* wslay_stack_new()
-{
- struct wslay_stack *stack = (struct wslay_stack*)malloc
- (sizeof(struct wslay_stack));
- if(!stack) {
- return NULL;
- }
- stack->top = NULL;
- return stack;
-}
-
-void wslay_stack_free(struct wslay_stack *stack)
-{
- struct wslay_stack_cell *p;
- if(!stack) {
- return;
- }
- p = stack->top;
- while(p) {
- struct wslay_stack_cell *next = p->next;
- free(p);
- p = next;
- }
- free(stack);
-}
-
-int wslay_stack_push(struct wslay_stack *stack, void *data)
-{
- struct wslay_stack_cell *new_cell = (struct wslay_stack_cell*)malloc
- (sizeof(struct wslay_stack_cell));
- if(!new_cell) {
- return WSLAY_ERR_NOMEM;
- }
- new_cell->data = data;
- new_cell->next = stack->top;
- stack->top = new_cell;
- return 0;
-}
-
-void wslay_stack_pop(struct wslay_stack *stack)
-{
- struct wslay_stack_cell *top = stack->top;
- assert(top);
- stack->top = top->next;
- free(top);
-}
-
-void* wslay_stack_top(struct wslay_stack *stack)
-{
- assert(stack->top);
- return stack->top->data;
-}
-
-int wslay_stack_empty(struct wslay_stack *stack)
-{
- return stack->top == NULL;
-}
diff --git a/thirdparty/xatlas/xatlas.cpp b/thirdparty/xatlas/xatlas.cpp
index 9f66ae0067..d92ef1a83a 100644
--- a/thirdparty/xatlas/xatlas.cpp
+++ b/thirdparty/xatlas/xatlas.cpp
@@ -40,14 +40,14 @@ Copyright (c) 2012 Brandon Pelfrey
#if XATLAS_C_API
#include "xatlas_c.h"
#endif
-#include <assert.h>
-#include <float.h> // FLT_MAX
-#include <limits.h>
-#include <math.h>
#include <atomic>
#include <condition_variable>
#include <mutex>
#include <thread>
+#include <assert.h>
+#include <float.h> // FLT_MAX
+#include <limits.h>
+#include <math.h>
#define __STDC_LIMIT_MACROS
#include <stdint.h>
#include <stdio.h>
@@ -76,10 +76,7 @@ Copyright (c) 2012 Brandon Pelfrey
#define XA_XSTR(x) XA_STR(x)
#ifndef XA_ASSERT
-#define XA_ASSERT(exp) \
- if (!(exp)) { \
- XA_PRINT_WARNING("\rASSERT: %s %s %d\n", XA_XSTR(exp), __FILE__, __LINE__); \
- }
+#define XA_ASSERT(exp) if (!(exp)) { XA_PRINT_WARNING("\rASSERT: %s %s %d\n", XA_XSTR(exp), __FILE__, __LINE__); }
#endif
#ifndef XA_DEBUG_ASSERT
@@ -87,13 +84,13 @@ Copyright (c) 2012 Brandon Pelfrey
#endif
#ifndef XA_PRINT
-#define XA_PRINT(...) \
+#define XA_PRINT(...) \
if (xatlas::internal::s_print && xatlas::internal::s_printVerbose) \
xatlas::internal::s_print(__VA_ARGS__);
#endif
#ifndef XA_PRINT_WARNING
-#define XA_PRINT_WARNING(...) \
+#define XA_PRINT_WARNING(...) \
if (xatlas::internal::s_print) \
xatlas::internal::s_print(__VA_ARGS__);
#endif
@@ -145,14 +142,18 @@ Copyright (c) 2012 Brandon Pelfrey
#define XA_DEBUG_EXPORT_OBJ_INVALID_PARAMETERIZATION 0
#define XA_DEBUG_EXPORT_OBJ_RECOMPUTED_CHARTS 0
-#define XA_DEBUG_EXPORT_OBJ (0 || XA_DEBUG_EXPORT_OBJ_FACE_GROUPS || XA_DEBUG_EXPORT_OBJ_CHART_GROUPS || XA_DEBUG_EXPORT_OBJ_PLANAR_REGIONS || XA_DEBUG_EXPORT_OBJ_CHARTS || XA_DEBUG_EXPORT_OBJ_TJUNCTION || XA_DEBUG_EXPORT_OBJ_CHARTS_AFTER_PARAMETERIZATION || XA_DEBUG_EXPORT_OBJ_INVALID_PARAMETERIZATION || XA_DEBUG_EXPORT_OBJ_RECOMPUTED_CHARTS)
+#define XA_DEBUG_EXPORT_OBJ (0 \
+ || XA_DEBUG_EXPORT_OBJ_FACE_GROUPS \
+ || XA_DEBUG_EXPORT_OBJ_CHART_GROUPS \
+ || XA_DEBUG_EXPORT_OBJ_PLANAR_REGIONS \
+ || XA_DEBUG_EXPORT_OBJ_CHARTS \
+ || XA_DEBUG_EXPORT_OBJ_TJUNCTION \
+ || XA_DEBUG_EXPORT_OBJ_CHARTS_AFTER_PARAMETERIZATION \
+ || XA_DEBUG_EXPORT_OBJ_INVALID_PARAMETERIZATION \
+ || XA_DEBUG_EXPORT_OBJ_RECOMPUTED_CHARTS)
#ifdef _MSC_VER
-#define XA_FOPEN(_file, _filename, _mode) \
- { \
- if (fopen_s(&_file, _filename, _mode) != 0) \
- _file = NULL; \
- }
+#define XA_FOPEN(_file, _filename, _mode) { if (fopen_s(&_file, _filename, _mode) != 0) _file = NULL; }
#define XA_SPRINTF(_buffer, _size, _format, ...) sprintf_s(_buffer, _size, _format, __VA_ARGS__)
#else
#define XA_FOPEN(_file, _filename, _mode) _file = fopen(_filename, _mode)
@@ -172,12 +173,11 @@ typedef uint64_t Duration;
#define XA_PROFILE_START(var) const std::chrono::time_point<std::chrono::high_resolution_clock> var##Start = std::chrono::high_resolution_clock::now();
#define XA_PROFILE_END(var) internal::s_profile.var += uint64_t(std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::high_resolution_clock::now() - var##Start).count());
-#define XA_PROFILE_PRINT_AND_RESET(label, var) \
- XA_PRINT("%s%.2f seconds (%g ms)\n", label, internal::durationToSeconds(internal::s_profile.var), internal::durationToMs(internal::s_profile.var)); \
- internal::s_profile.var = 0u;
+#define XA_PROFILE_PRINT_AND_RESET(label, var) XA_PRINT("%s%.2f seconds (%g ms)\n", label, internal::durationToSeconds(internal::s_profile.var), internal::durationToMs(internal::s_profile.var)); internal::s_profile.var = 0u;
#define XA_PROFILE_ALLOC 0
-struct ProfileData {
+struct ProfileData
+{
#if XA_PROFILE_ALLOC
std::atomic<Duration> alloc;
#endif
@@ -232,11 +232,13 @@ struct ProfileData {
static ProfileData s_profile;
-static double durationToMs(Duration c) {
+static double durationToMs(Duration c)
+{
return (double)c * 0.001;
}
-static double durationToSeconds(Duration c) {
+static double durationToSeconds(Duration c)
+{
return (double)c * 0.000001;
}
#else
@@ -246,8 +248,10 @@ static double durationToSeconds(Duration c) {
#define XA_PROFILE_ALLOC 0
#endif
-struct MemTag {
- enum {
+struct MemTag
+{
+ enum
+ {
Default,
BitImage,
BVH,
@@ -270,7 +274,8 @@ struct MemTag {
};
#if XA_DEBUG_HEAP
-struct AllocHeader {
+struct AllocHeader
+{
size_t size;
const char *file;
int line;
@@ -283,10 +288,11 @@ struct AllocHeader {
static std::mutex s_allocMutex;
static AllocHeader *s_allocRoot = nullptr;
static size_t s_allocTotalCount = 0, s_allocTotalSize = 0, s_allocPeakSize = 0, s_allocCount[MemTag::Count] = { 0 }, s_allocTotalTagSize[MemTag::Count] = { 0 }, s_allocPeakTagSize[MemTag::Count] = { 0 };
-static uint32_t s_allocId = 0;
+static uint32_t s_allocId =0 ;
static constexpr uint32_t kAllocRedzone = 0x12345678;
-static void *Realloc(void *ptr, size_t size, int tag, const char *file, int line) {
+static void *Realloc(void *ptr, size_t size, int tag, const char *file, int line)
+{
std::unique_lock<std::mutex> lock(s_allocMutex);
if (!size && !ptr)
return nullptr;
@@ -347,7 +353,8 @@ static void *Realloc(void *ptr, size_t size, int tag, const char *file, int line
return newPtr + sizeof(AllocHeader);
}
-static void ReportLeaks() {
+static void ReportLeaks()
+{
printf("Checking for memory leaks...\n");
bool anyLeaks = false;
AllocHeader *header = s_allocRoot;
@@ -375,7 +382,8 @@ static void ReportLeaks() {
s_allocTotalTagSize[i] = s_allocPeakTagSize[i] = 0;
}
-static void PrintMemoryUsage() {
+static void PrintMemoryUsage()
+{
XA_PRINT("Total allocations: %zu\n", s_allocTotalCount);
XA_PRINT("Memory usage: %0.2fMB current, %0.2fMB peak\n", internal::s_allocTotalSize / 1024.0f / 1024.0f, internal::s_allocPeakSize / 1024.0f / 1024.0f);
static const char *labels[] = { // Sync with MemTag
@@ -404,7 +412,8 @@ static void PrintMemoryUsage() {
#define XA_PRINT_MEM_USAGE internal::PrintMemoryUsage();
#else
-static void *Realloc(void *ptr, size_t size, int /*tag*/, const char * /*file*/, int /*line*/) {
+static void *Realloc(void *ptr, size_t size, int /*tag*/, const char * /*file*/, int /*line*/)
+{
if (size == 0 && !ptr)
return nullptr;
if (size == 0 && s_free) {
@@ -430,75 +439,89 @@ static constexpr float kEpsilon = 0.0001f;
static constexpr float kAreaEpsilon = FLT_EPSILON;
static constexpr float kNormalEpsilon = 0.001f;
-static int align(int x, int a) {
+static int align(int x, int a)
+{
return (x + a - 1) & ~(a - 1);
}
template <typename T>
-static T max(const T &a, const T &b) {
+static T max(const T &a, const T &b)
+{
return a > b ? a : b;
}
template <typename T>
-static T min(const T &a, const T &b) {
+static T min(const T &a, const T &b)
+{
return a < b ? a : b;
}
template <typename T>
-static T max3(const T &a, const T &b, const T &c) {
+static T max3(const T &a, const T &b, const T &c)
+{
return max(a, max(b, c));
}
/// Return the maximum of the three arguments.
template <typename T>
-static T min3(const T &a, const T &b, const T &c) {
+static T min3(const T &a, const T &b, const T &c)
+{
return min(a, min(b, c));
}
/// Clamp between two values.
template <typename T>
-static T clamp(const T &x, const T &a, const T &b) {
+static T clamp(const T &x, const T &a, const T &b)
+{
return min(max(x, a), b);
}
template <typename T>
-static void swap(T &a, T &b) {
+static void swap(T &a, T &b)
+{
T temp = a;
a = b;
b = temp;
}
-union FloatUint32 {
+union FloatUint32
+{
float f;
uint32_t u;
};
-static bool isFinite(float f) {
+static bool isFinite(float f)
+{
FloatUint32 fu;
fu.f = f;
return fu.u != 0x7F800000u && fu.u != 0x7F800001u;
}
-static bool isNan(float f) {
+static bool isNan(float f)
+{
return f != f;
}
// Robust floating point comparisons:
// http://realtimecollisiondetection.net/blog/?p=89
-static bool equal(const float f0, const float f1, const float epsilon) {
+static bool equal(const float f0, const float f1, const float epsilon)
+{
//return fabs(f0-f1) <= epsilon;
return fabs(f0 - f1) <= epsilon * max3(1.0f, fabsf(f0), fabsf(f1));
}
-static int ftoi_ceil(float val) {
+static int ftoi_ceil(float val)
+{
return (int)ceilf(val);
}
-static bool isZero(const float f, const float epsilon) {
+static bool isZero(const float f, const float epsilon)
+{
return fabs(f) <= epsilon;
}
-static float square(float f) {
+static float square(float f)
+{
return f * f;
}
@@ -508,8 +531,9 @@ static float square(float f) {
* @note isPowerOfTwo(x) == true -> nextPowerOfTwo(x) == x
* @note nextPowerOfTwo(x) = 2 << log2(x-1)
*/
-static uint32_t nextPowerOfTwo(uint32_t x) {
- XA_DEBUG_ASSERT(x != 0);
+static uint32_t nextPowerOfTwo(uint32_t x)
+{
+ XA_DEBUG_ASSERT( x != 0 );
// On modern CPUs this is supposed to be as fast as using the bsr instruction.
x--;
x |= x >> 1;
@@ -520,34 +544,38 @@ static uint32_t nextPowerOfTwo(uint32_t x) {
return x + 1;
}
-class Vector2 {
+class Vector2
+{
public:
Vector2() {}
- explicit Vector2(float f) :
- x(f), y(f) {}
- Vector2(float _x, float _y) :
- x(_x), y(_y) {}
+ explicit Vector2(float f) : x(f), y(f) {}
+ Vector2(float _x, float _y): x(_x), y(_y) {}
- Vector2 operator-() const {
+ Vector2 operator-() const
+ {
return Vector2(-x, -y);
}
- void operator+=(const Vector2 &v) {
+ void operator+=(const Vector2 &v)
+ {
x += v.x;
y += v.y;
}
- void operator-=(const Vector2 &v) {
+ void operator-=(const Vector2 &v)
+ {
x -= v.x;
y -= v.y;
}
- void operator*=(float s) {
+ void operator*=(float s)
+ {
x *= s;
y *= s;
}
- void operator*=(const Vector2 &v) {
+ void operator*=(const Vector2 &v)
+ {
x *= v.x;
y *= v.y;
}
@@ -555,11 +583,13 @@ public:
float x, y;
};
-static bool operator==(const Vector2 &a, const Vector2 &b) {
+static bool operator==(const Vector2 &a, const Vector2 &b)
+{
return a.x == b.x && a.y == b.y;
}
-static bool operator!=(const Vector2 &a, const Vector2 &b) {
+static bool operator!=(const Vector2 &a, const Vector2 &b)
+{
return a.x != b.x || a.y != b.y;
}
@@ -568,33 +598,40 @@ static bool operator!=(const Vector2 &a, const Vector2 &b) {
return Vector2(a.x + b.x, a.y + b.y);
}*/
-static Vector2 operator-(const Vector2 &a, const Vector2 &b) {
+static Vector2 operator-(const Vector2 &a, const Vector2 &b)
+{
return Vector2(a.x - b.x, a.y - b.y);
}
-static Vector2 operator*(const Vector2 &v, float s) {
+static Vector2 operator*(const Vector2 &v, float s)
+{
return Vector2(v.x * s, v.y * s);
}
-static float dot(const Vector2 &a, const Vector2 &b) {
+static float dot(const Vector2 &a, const Vector2 &b)
+{
return a.x * b.x + a.y * b.y;
}
-static float lengthSquared(const Vector2 &v) {
+static float lengthSquared(const Vector2 &v)
+{
return v.x * v.x + v.y * v.y;
}
-static float length(const Vector2 &v) {
+static float length(const Vector2 &v)
+{
return sqrtf(lengthSquared(v));
}
#if XA_DEBUG
-static bool isNormalized(const Vector2 &v, float epsilon = kNormalEpsilon) {
+static bool isNormalized(const Vector2 &v, float epsilon = kNormalEpsilon)
+{
return equal(length(v), 1, epsilon);
}
#endif
-static Vector2 normalize(const Vector2 &v) {
+static Vector2 normalize(const Vector2 &v)
+{
const float l = length(v);
XA_DEBUG_ASSERT(l > 0.0f); // Never negative.
const Vector2 n = v * (1.0f / l);
@@ -602,30 +639,36 @@ static Vector2 normalize(const Vector2 &v) {
return n;
}
-static Vector2 normalizeSafe(const Vector2 &v, const Vector2 &fallback) {
+static Vector2 normalizeSafe(const Vector2 &v, const Vector2 &fallback)
+{
const float l = length(v);
if (l > 0.0f) // Never negative.
return v * (1.0f / l);
return fallback;
}
-static bool equal(const Vector2 &v1, const Vector2 &v2, float epsilon) {
+static bool equal(const Vector2 &v1, const Vector2 &v2, float epsilon)
+{
return equal(v1.x, v2.x, epsilon) && equal(v1.y, v2.y, epsilon);
}
-static Vector2 min(const Vector2 &a, const Vector2 &b) {
+static Vector2 min(const Vector2 &a, const Vector2 &b)
+{
return Vector2(min(a.x, b.x), min(a.y, b.y));
}
-static Vector2 max(const Vector2 &a, const Vector2 &b) {
+static Vector2 max(const Vector2 &a, const Vector2 &b)
+{
return Vector2(max(a.x, b.x), max(a.y, b.y));
}
-static bool isFinite(const Vector2 &v) {
+static bool isFinite(const Vector2 &v)
+{
return isFinite(v.x) && isFinite(v.y);
}
-static float triangleArea(const Vector2 &a, const Vector2 &b, const Vector2 &c) {
+static float triangleArea(const Vector2 &a, const Vector2 &b, const Vector2 &c)
+{
// IC: While it may be appealing to use the following expression:
//return (c.x * a.y + a.x * b.y + b.x * c.y - b.x * a.y - c.x * b.y - a.x * c.y) * 0.5f;
// That's actually a terrible idea. Small triangles far from the origin can end up producing fairly large floating point
@@ -639,7 +682,8 @@ static float triangleArea(const Vector2 &a, const Vector2 &b, const Vector2 &c)
return (v0.x * v1.y - v0.y * v1.x) * 0.5f;
}
-static bool linesIntersect(const Vector2 &a1, const Vector2 &a2, const Vector2 &b1, const Vector2 &b2, float epsilon) {
+static bool linesIntersect(const Vector2 &a1, const Vector2 &a2, const Vector2 &b1, const Vector2 &b2, float epsilon)
+{
const Vector2 v0 = a2 - a1;
const Vector2 v1 = b2 - b1;
const float denom = -v1.x * v0.y + v0.x * v1.y;
@@ -647,70 +691,76 @@ static bool linesIntersect(const Vector2 &a1, const Vector2 &a2, const Vector2 &
return false;
const float s = (-v0.y * (a1.x - b1.x) + v0.x * (a1.y - b1.y)) / denom;
if (s > epsilon && s < 1.0f - epsilon) {
- const float t = (v1.x * (a1.y - b1.y) - v1.y * (a1.x - b1.x)) / denom;
+ const float t = ( v1.x * (a1.y - b1.y) - v1.y * (a1.x - b1.x)) / denom;
return t > epsilon && t < 1.0f - epsilon;
}
return false;
}
-struct Vector2i {
+struct Vector2i
+{
Vector2i() {}
- Vector2i(int32_t _x, int32_t _y) :
- x(_x), y(_y) {}
+ Vector2i(int32_t _x, int32_t _y) : x(_x), y(_y) {}
int32_t x, y;
};
-class Vector3 {
+class Vector3
+{
public:
Vector3() {}
- explicit Vector3(float f) :
- x(f), y(f), z(f) {}
- Vector3(float _x, float _y, float _z) :
- x(_x), y(_y), z(_z) {}
- Vector3(const Vector2 &v, float _z) :
- x(v.x), y(v.y), z(_z) {}
-
- Vector2 xy() const {
+ explicit Vector3(float f) : x(f), y(f), z(f) {}
+ Vector3(float _x, float _y, float _z) : x(_x), y(_y), z(_z) {}
+ Vector3(const Vector2 &v, float _z) : x(v.x), y(v.y), z(_z) {}
+
+ Vector2 xy() const
+ {
return Vector2(x, y);
}
- Vector3 operator-() const {
+ Vector3 operator-() const
+ {
return Vector3(-x, -y, -z);
}
- void operator+=(const Vector3 &v) {
+ void operator+=(const Vector3 &v)
+ {
x += v.x;
y += v.y;
z += v.z;
}
- void operator-=(const Vector3 &v) {
+ void operator-=(const Vector3 &v)
+ {
x -= v.x;
y -= v.y;
z -= v.z;
}
- void operator*=(float s) {
+ void operator*=(float s)
+ {
x *= s;
y *= s;
z *= s;
}
- void operator/=(float s) {
+ void operator/=(float s)
+ {
float is = 1.0f / s;
x *= is;
y *= is;
z *= is;
}
- void operator*=(const Vector3 &v) {
+ void operator*=(const Vector3 &v)
+ {
x *= v.x;
y *= v.y;
z *= v.z;
}
- void operator/=(const Vector3 &v) {
+ void operator/=(const Vector3 &v)
+ {
x /= v.x;
y /= v.y;
z /= v.z;
@@ -719,47 +769,58 @@ public:
float x, y, z;
};
-static Vector3 operator+(const Vector3 &a, const Vector3 &b) {
+static Vector3 operator+(const Vector3 &a, const Vector3 &b)
+{
return Vector3(a.x + b.x, a.y + b.y, a.z + b.z);
}
-static Vector3 operator-(const Vector3 &a, const Vector3 &b) {
+static Vector3 operator-(const Vector3 &a, const Vector3 &b)
+{
return Vector3(a.x - b.x, a.y - b.y, a.z - b.z);
}
-static bool operator==(const Vector3 &a, const Vector3 &b) {
+static bool operator==(const Vector3 &a, const Vector3 &b)
+{
return a.x == b.x && a.y == b.y && a.z == b.z;
}
-static Vector3 cross(const Vector3 &a, const Vector3 &b) {
+static Vector3 cross(const Vector3 &a, const Vector3 &b)
+{
return Vector3(a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x);
}
-static Vector3 operator*(const Vector3 &v, float s) {
+static Vector3 operator*(const Vector3 &v, float s)
+{
return Vector3(v.x * s, v.y * s, v.z * s);
}
-static Vector3 operator/(const Vector3 &v, float s) {
+static Vector3 operator/(const Vector3 &v, float s)
+{
return v * (1.0f / s);
}
-static float dot(const Vector3 &a, const Vector3 &b) {
+static float dot(const Vector3 &a, const Vector3 &b)
+{
return a.x * b.x + a.y * b.y + a.z * b.z;
}
-static float lengthSquared(const Vector3 &v) {
+static float lengthSquared(const Vector3 &v)
+{
return v.x * v.x + v.y * v.y + v.z * v.z;
}
-static float length(const Vector3 &v) {
+static float length(const Vector3 &v)
+{
return sqrtf(lengthSquared(v));
}
-static bool isNormalized(const Vector3 &v, float epsilon = kNormalEpsilon) {
+static bool isNormalized(const Vector3 &v, float epsilon = kNormalEpsilon)
+{
return equal(length(v), 1.0f, epsilon);
}
-static Vector3 normalize(const Vector3 &v) {
+static Vector3 normalize(const Vector3 &v)
+{
const float l = length(v);
XA_DEBUG_ASSERT(l > 0.0f); // Never negative.
const Vector3 n = v * (1.0f / l);
@@ -767,103 +828,116 @@ static Vector3 normalize(const Vector3 &v) {
return n;
}
-static Vector3 normalizeSafe(const Vector3 &v, const Vector3 &fallback) {
+static Vector3 normalizeSafe(const Vector3 &v, const Vector3 &fallback)
+{
const float l = length(v);
if (l > 0.0f) // Never negative.
return v * (1.0f / l);
return fallback;
}
-static bool equal(const Vector3 &v0, const Vector3 &v1, float epsilon) {
+static bool equal(const Vector3 &v0, const Vector3 &v1, float epsilon)
+{
return fabs(v0.x - v1.x) <= epsilon && fabs(v0.y - v1.y) <= epsilon && fabs(v0.z - v1.z) <= epsilon;
}
-static Vector3 min(const Vector3 &a, const Vector3 &b) {
+static Vector3 min(const Vector3 &a, const Vector3 &b)
+{
return Vector3(min(a.x, b.x), min(a.y, b.y), min(a.z, b.z));
}
-static Vector3 max(const Vector3 &a, const Vector3 &b) {
+static Vector3 max(const Vector3 &a, const Vector3 &b)
+{
return Vector3(max(a.x, b.x), max(a.y, b.y), max(a.z, b.z));
}
#if XA_DEBUG
-bool isFinite(const Vector3 &v) {
+bool isFinite(const Vector3 &v)
+{
return isFinite(v.x) && isFinite(v.y) && isFinite(v.z);
}
#endif
-struct Extents2 {
+struct Extents2
+{
Vector2 min, max;
Extents2() {}
- Extents2(Vector2 p1, Vector2 p2) {
+ Extents2(Vector2 p1, Vector2 p2)
+ {
min = xatlas::internal::min(p1, p2);
max = xatlas::internal::max(p1, p2);
}
- void reset() {
+ void reset()
+ {
min.x = min.y = FLT_MAX;
max.x = max.y = -FLT_MAX;
}
- void add(Vector2 p) {
+ void add(Vector2 p)
+ {
min = xatlas::internal::min(min, p);
max = xatlas::internal::max(max, p);
}
- Vector2 midpoint() const {
+ Vector2 midpoint() const
+ {
return Vector2(min.x + (max.x - min.x) * 0.5f, min.y + (max.y - min.y) * 0.5f);
}
- static bool intersect(const Extents2 &e1, const Extents2 &e2) {
+ static bool intersect(const Extents2 &e1, const Extents2 &e2)
+ {
return e1.min.x <= e2.max.x && e1.max.x >= e2.min.x && e1.min.y <= e2.max.y && e1.max.y >= e2.min.y;
}
};
// From Fast-BVH
-struct AABB {
- AABB() :
- min(FLT_MAX, FLT_MAX, FLT_MAX), max(-FLT_MAX, -FLT_MAX, -FLT_MAX) {}
- AABB(const Vector3 &_min, const Vector3 &_max) :
- min(_min), max(_max) {}
- AABB(const Vector3 &p, float radius = 0.0f) :
- min(p), max(p) {
- if (radius > 0.0f)
- expand(radius);
- }
-
- bool intersect(const AABB &other) const {
+struct AABB
+{
+ AABB() : min(FLT_MAX, FLT_MAX, FLT_MAX), max(-FLT_MAX, -FLT_MAX, -FLT_MAX) {}
+ AABB(const Vector3 &_min, const Vector3 &_max) : min(_min), max(_max) { }
+ AABB(const Vector3 &p, float radius = 0.0f) : min(p), max(p) { if (radius > 0.0f) expand(radius); }
+
+ bool intersect(const AABB &other) const
+ {
return min.x <= other.max.x && max.x >= other.min.x && min.y <= other.max.y && max.y >= other.min.y && min.z <= other.max.z && max.z >= other.min.z;
}
- void expandToInclude(const Vector3 &p) {
+ void expandToInclude(const Vector3 &p)
+ {
min = internal::min(min, p);
max = internal::max(max, p);
}
- void expandToInclude(const AABB &aabb) {
+ void expandToInclude(const AABB &aabb)
+ {
min = internal::min(min, aabb.min);
max = internal::max(max, aabb.max);
}
- void expand(float amount) {
+ void expand(float amount)
+ {
min -= Vector3(amount);
max += Vector3(amount);
}
- Vector3 centroid() const {
+ Vector3 centroid() const
+ {
return min + (max - min) * 0.5f;
}
- uint32_t maxDimension() const {
+ uint32_t maxDimension() const
+ {
const Vector3 extent = max - min;
uint32_t result = 0;
if (extent.y > extent.x) {
result = 1;
if (extent.z > extent.y)
result = 2;
- } else if (extent.z > extent.x)
+ }
+ else if(extent.z > extent.x)
result = 2;
return result;
}
@@ -871,9 +945,10 @@ struct AABB {
Vector3 min, max;
};
-struct ArrayBase {
- ArrayBase(uint32_t _elementSize, int memTag = MemTag::Default) :
- buffer(nullptr), elementSize(_elementSize), size(0), capacity(0) {
+struct ArrayBase
+{
+ ArrayBase(uint32_t _elementSize, int memTag = MemTag::Default) : buffer(nullptr), elementSize(_elementSize), size(0), capacity(0)
+ {
#if XA_DEBUG_HEAP
this->memTag = memTag;
#else
@@ -881,15 +956,18 @@ struct ArrayBase {
#endif
}
- ~ArrayBase() {
+ ~ArrayBase()
+ {
XA_FREE(buffer);
}
- XA_INLINE void clear() {
+ XA_INLINE void clear()
+ {
size = 0;
}
- void copyFrom(const uint8_t *data, uint32_t length) {
+ void copyFrom(const uint8_t *data, uint32_t length)
+ {
XA_DEBUG_ASSERT(data);
XA_DEBUG_ASSERT(length > 0);
resize(length, true);
@@ -897,7 +975,8 @@ struct ArrayBase {
memcpy(buffer, data, length * elementSize);
}
- void copyTo(ArrayBase &other) const {
+ void copyTo(ArrayBase &other) const
+ {
XA_DEBUG_ASSERT(elementSize == other.elementSize);
XA_DEBUG_ASSERT(size > 0);
other.resize(size, true);
@@ -905,7 +984,8 @@ struct ArrayBase {
memcpy(other.buffer, buffer, size * elementSize);
}
- void destroy() {
+ void destroy()
+ {
size = 0;
XA_FREE(buffer);
buffer = nullptr;
@@ -914,7 +994,8 @@ struct ArrayBase {
}
// Insert the given element at the given index shifting all the elements up.
- void insertAt(uint32_t index, const uint8_t *value) {
+ void insertAt(uint32_t index, const uint8_t *value)
+ {
XA_DEBUG_ASSERT(index >= 0 && index <= size);
XA_DEBUG_ASSERT(value);
resize(size + 1, false);
@@ -925,7 +1006,8 @@ struct ArrayBase {
memcpy(&buffer[index * elementSize], value, elementSize);
}
- void moveTo(ArrayBase &other) {
+ void moveTo(ArrayBase &other)
+ {
XA_DEBUG_ASSERT(elementSize == other.elementSize);
other.destroy();
other.buffer = buffer;
@@ -939,12 +1021,14 @@ struct ArrayBase {
elementSize = size = capacity = 0;
}
- void pop_back() {
+ void pop_back()
+ {
XA_DEBUG_ASSERT(size > 0);
resize(size - 1, false);
}
- void push_back(const uint8_t *value) {
+ void push_back(const uint8_t *value)
+ {
XA_DEBUG_ASSERT(value < buffer || value >= buffer + size);
XA_DEBUG_ASSERT(value);
resize(size + 1, false);
@@ -953,7 +1037,8 @@ struct ArrayBase {
memcpy(&buffer[(size - 1) * elementSize], value, elementSize);
}
- void push_back(const ArrayBase &other) {
+ void push_back(const ArrayBase &other)
+ {
XA_DEBUG_ASSERT(elementSize == other.elementSize);
if (other.size > 0) {
const uint32_t oldSize = size;
@@ -965,7 +1050,8 @@ struct ArrayBase {
}
// Remove the element at the given index. This is an expensive operation!
- void removeAt(uint32_t index) {
+ void removeAt(uint32_t index)
+ {
XA_DEBUG_ASSERT(index >= 0 && index < size);
XA_DEBUG_ASSERT(buffer);
if (buffer) {
@@ -977,7 +1063,8 @@ struct ArrayBase {
}
// Element at index is swapped with the last element, then the array length is decremented.
- void removeAtFast(uint32_t index) {
+ void removeAtFast(uint32_t index)
+ {
XA_DEBUG_ASSERT(index >= 0 && index < size);
XA_DEBUG_ASSERT(buffer);
if (buffer) {
@@ -988,12 +1075,14 @@ struct ArrayBase {
}
}
- void reserve(uint32_t desiredSize) {
+ void reserve(uint32_t desiredSize)
+ {
if (desiredSize > capacity)
setArrayCapacity(desiredSize);
}
- void resize(uint32_t newSize, bool exact) {
+ void resize(uint32_t newSize, bool exact)
+ {
size = newSize;
if (size > capacity) {
// First allocation is always exact. Otherwise, following allocations grow array to 150% of desired size.
@@ -1006,7 +1095,8 @@ struct ArrayBase {
}
}
- void setArrayCapacity(uint32_t newCapacity) {
+ void setArrayCapacity(uint32_t newCapacity)
+ {
XA_DEBUG_ASSERT(newCapacity >= size);
if (newCapacity == 0) {
// free the buffer.
@@ -1026,7 +1116,8 @@ struct ArrayBase {
}
#if XA_DEBUG_HEAP
- void setMemTag(int _memTag) {
+ void setMemTag(int _memTag)
+ {
this->memTag = _memTag;
}
#endif
@@ -1040,27 +1131,30 @@ struct ArrayBase {
#endif
};
-template <typename T>
-class Array {
+template<typename T>
+class Array
+{
public:
- Array(int memTag = MemTag::Default) :
- m_base(sizeof(T), memTag) {}
- Array(const Array &) = delete;
+ Array(int memTag = MemTag::Default) : m_base(sizeof(T), memTag) {}
+ Array(const Array&) = delete;
Array &operator=(const Array &) = delete;
- XA_INLINE const T &operator[](uint32_t index) const {
+ XA_INLINE const T &operator[](uint32_t index) const
+ {
XA_DEBUG_ASSERT(index < m_base.size);
XA_DEBUG_ASSERT(m_base.buffer);
return ((const T *)m_base.buffer)[index];
}
- XA_INLINE T &operator[](uint32_t index) {
+ XA_INLINE T &operator[](uint32_t index)
+ {
XA_DEBUG_ASSERT(index < m_base.size);
XA_DEBUG_ASSERT(m_base.buffer);
return ((T *)m_base.buffer)[index];
}
- XA_INLINE const T &back() const {
+ XA_INLINE const T &back() const
+ {
XA_DEBUG_ASSERT(!isEmpty());
return ((const T *)m_base.buffer)[m_base.size - 1];
}
@@ -1068,7 +1162,8 @@ public:
XA_INLINE T *begin() { return (T *)m_base.buffer; }
XA_INLINE void clear() { m_base.clear(); }
- bool contains(const T &value) const {
+ bool contains(const T &value) const
+ {
for (uint32_t i = 0; i < m_base.size; i++) {
if (((const T *)m_base.buffer)[i] == value)
return true;
@@ -1093,23 +1188,27 @@ public:
void reserve(uint32_t desiredSize) { m_base.reserve(desiredSize); }
void resize(uint32_t newSize) { m_base.resize(newSize, true); }
- void runCtors() {
+ void runCtors()
+ {
for (uint32_t i = 0; i < m_base.size; i++)
new (&((T *)m_base.buffer)[i]) T;
}
- void runDtors() {
+ void runDtors()
+ {
for (uint32_t i = 0; i < m_base.size; i++)
((T *)m_base.buffer)[i].~T();
}
- void fill(const T &value) {
+ void fill(const T &value)
+ {
auto buffer = (T *)m_base.buffer;
for (uint32_t i = 0; i < m_base.size; i++)
buffer[i] = value;
}
- void fillBytes(uint8_t value) {
+ void fillBytes(uint8_t value)
+ {
if (m_base.buffer && m_base.size > 0)
memset(m_base.buffer, (int)value, m_base.size * m_base.elementSize);
}
@@ -1120,7 +1219,8 @@ public:
XA_INLINE uint32_t size() const { return m_base.size; }
- XA_INLINE void zeroOutMemory() {
+ XA_INLINE void zeroOutMemory()
+ {
if (m_base.buffer && m_base.size > 0)
memset(m_base.buffer, 0, m_base.elementSize * m_base.size);
}
@@ -1129,57 +1229,37 @@ private:
ArrayBase m_base;
};
-template <typename T>
-struct ArrayView {
- ArrayView() :
- data(nullptr), length(0) {}
- ArrayView(Array<T> &a) :
- data(a.data()), length(a.size()) {}
- ArrayView(T *_data, uint32_t _length) :
- data(_data), length(_length) {}
- ArrayView &operator=(Array<T> &a) {
- data = a.data();
- length = a.size();
- return *this;
- }
- XA_INLINE const T &operator[](uint32_t index) const {
- XA_DEBUG_ASSERT(index < length);
- return data[index];
- }
- XA_INLINE T &operator[](uint32_t index) {
- XA_DEBUG_ASSERT(index < length);
- return data[index];
- }
+template<typename T>
+struct ArrayView
+{
+ ArrayView() : data(nullptr), length(0) {}
+ ArrayView(Array<T> &a) : data(a.data()), length(a.size()) {}
+ ArrayView(T *_data, uint32_t _length) : data(_data), length(_length) {}
+ ArrayView &operator=(Array<T> &a) { data = a.data(); length = a.size(); return *this; }
+ XA_INLINE const T &operator[](uint32_t index) const { XA_DEBUG_ASSERT(index < length); return data[index]; }
+ XA_INLINE T &operator[](uint32_t index) { XA_DEBUG_ASSERT(index < length); return data[index]; }
T *data;
uint32_t length;
};
-template <typename T>
-struct ConstArrayView {
- ConstArrayView() :
- data(nullptr), length(0) {}
- ConstArrayView(const Array<T> &a) :
- data(a.data()), length(a.size()) {}
- ConstArrayView(ArrayView<T> av) :
- data(av.data), length(av.length) {}
- ConstArrayView(const T *_data, uint32_t _length) :
- data(_data), length(_length) {}
- ConstArrayView &operator=(const Array<T> &a) {
- data = a.data();
- length = a.size();
- return *this;
- }
- XA_INLINE const T &operator[](uint32_t index) const {
- XA_DEBUG_ASSERT(index < length);
- return data[index];
- }
+template<typename T>
+struct ConstArrayView
+{
+ ConstArrayView() : data(nullptr), length(0) {}
+ ConstArrayView(const Array<T> &a) : data(a.data()), length(a.size()) {}
+ ConstArrayView(ArrayView<T> av) : data(av.data), length(av.length) {}
+ ConstArrayView(const T *_data, uint32_t _length) : data(_data), length(_length) {}
+ ConstArrayView &operator=(const Array<T> &a) { data = a.data(); length = a.size(); return *this; }
+ XA_INLINE const T &operator[](uint32_t index) const { XA_DEBUG_ASSERT(index < length); return data[index]; }
const T *data;
uint32_t length;
};
/// Basis class to compute tangent space basis, ortogonalizations and to transform vectors from one space to another.
-struct Basis {
- XA_NODISCARD static Vector3 computeTangent(const Vector3 &normal) {
+struct Basis
+{
+ XA_NODISCARD static Vector3 computeTangent(const Vector3 &normal)
+ {
XA_ASSERT(isNormalized(normal));
// Choose minimum axis.
Vector3 tangent;
@@ -1195,7 +1275,8 @@ struct Basis {
return tangent;
}
- XA_NODISCARD static Vector3 computeBitangent(const Vector3 &normal, const Vector3 &tangent) {
+ XA_NODISCARD static Vector3 computeBitangent(const Vector3 &normal, const Vector3 &tangent)
+ {
return cross(normal, tangent);
}
@@ -1205,36 +1286,42 @@ struct Basis {
};
// Simple bit array.
-class BitArray {
+class BitArray
+{
public:
- BitArray() :
- m_size(0) {}
+ BitArray() : m_size(0) {}
- BitArray(uint32_t sz) {
+ BitArray(uint32_t sz)
+ {
resize(sz);
}
- void resize(uint32_t new_size) {
+ void resize(uint32_t new_size)
+ {
m_size = new_size;
m_wordArray.resize((m_size + 31) >> 5);
}
- bool get(uint32_t index) const {
+ bool get(uint32_t index) const
+ {
XA_DEBUG_ASSERT(index < m_size);
return (m_wordArray[index >> 5] & (1 << (index & 31))) != 0;
}
- void set(uint32_t index) {
+ void set(uint32_t index)
+ {
XA_DEBUG_ASSERT(index < m_size);
m_wordArray[index >> 5] |= (1 << (index & 31));
}
- void unset(uint32_t index) {
+ void unset(uint32_t index)
+ {
XA_DEBUG_ASSERT(index < m_size);
m_wordArray[index >> 5] &= ~(1 << (index & 31));
}
- void zeroOutMemory() {
+ void zeroOutMemory()
+ {
m_wordArray.zeroOutMemory();
}
@@ -1243,13 +1330,13 @@ private:
Array<uint32_t> m_wordArray;
};
-class BitImage {
+class BitImage
+{
public:
- BitImage() :
- m_width(0), m_height(0), m_rowStride(0), m_data(MemTag::BitImage) {}
+ BitImage() : m_width(0), m_height(0), m_rowStride(0), m_data(MemTag::BitImage) {}
- BitImage(uint32_t w, uint32_t h) :
- m_width(w), m_height(h), m_data(MemTag::BitImage) {
+ BitImage(uint32_t w, uint32_t h) : m_width(w), m_height(h), m_data(MemTag::BitImage)
+ {
m_rowStride = (m_width + 63) >> 6;
m_data.resize(m_rowStride * m_height);
m_data.zeroOutMemory();
@@ -1260,14 +1347,16 @@ public:
uint32_t width() const { return m_width; }
uint32_t height() const { return m_height; }
- void copyTo(BitImage &other) {
+ void copyTo(BitImage &other)
+ {
other.m_width = m_width;
other.m_height = m_height;
other.m_rowStride = m_rowStride;
m_data.copyTo(other.m_data);
}
- void resize(uint32_t w, uint32_t h, bool discard) {
+ void resize(uint32_t w, uint32_t h, bool discard)
+ {
const uint32_t rowStride = (w + 63) >> 6;
if (discard) {
m_data.resize(rowStride * h);
@@ -1291,24 +1380,28 @@ public:
m_rowStride = rowStride;
}
- bool get(uint32_t x, uint32_t y) const {
+ bool get(uint32_t x, uint32_t y) const
+ {
XA_DEBUG_ASSERT(x < m_width && y < m_height);
const uint32_t index = (x >> 6) + y * m_rowStride;
return (m_data[index] & (UINT64_C(1) << (uint64_t(x) & UINT64_C(63)))) != 0;
}
- void set(uint32_t x, uint32_t y) {
+ void set(uint32_t x, uint32_t y)
+ {
XA_DEBUG_ASSERT(x < m_width && y < m_height);
const uint32_t index = (x >> 6) + y * m_rowStride;
m_data[index] |= UINT64_C(1) << (uint64_t(x) & UINT64_C(63));
XA_DEBUG_ASSERT(get(x, y));
}
- void zeroOutMemory() {
+ void zeroOutMemory()
+ {
m_data.zeroOutMemory();
}
- bool canBlit(const BitImage &image, uint32_t offsetX, uint32_t offsetY) const {
+ bool canBlit(const BitImage &image, uint32_t offsetX, uint32_t offsetY) const
+ {
for (uint32_t y = 0; y < image.m_height; y++) {
const uint32_t thisY = y + offsetY;
if (thisY >= m_height)
@@ -1332,7 +1425,8 @@ public:
return true;
}
- void dilate(uint32_t padding) {
+ void dilate(uint32_t padding)
+ {
BitImage tmp(m_width, m_height);
for (uint32_t p = 0; p < padding; p++) {
tmp.zeroOutMemory();
@@ -1342,21 +1436,15 @@ public:
if (!b) {
if (x > 0) {
b |= get(x - 1, y);
- if (y > 0)
- b |= get(x - 1, y - 1);
- if (y < m_height - 1)
- b |= get(x - 1, y + 1);
+ if (y > 0) b |= get(x - 1, y - 1);
+ if (y < m_height - 1) b |= get(x - 1, y + 1);
}
- if (y > 0)
- b |= get(x, y - 1);
- if (y < m_height - 1)
- b |= get(x, y + 1);
+ if (y > 0) b |= get(x, y - 1);
+ if (y < m_height - 1) b |= get(x, y + 1);
if (x < m_width - 1) {
b |= get(x + 1, y);
- if (y > 0)
- b |= get(x + 1, y - 1);
- if (y < m_height - 1)
- b |= get(x + 1, y + 1);
+ if (y > 0) b |= get(x + 1, y - 1);
+ if (y < m_height - 1) b |= get(x + 1, y + 1);
}
}
if (b)
@@ -1375,10 +1463,11 @@ private:
};
// From Fast-BVH
-class BVH {
+class BVH
+{
public:
- BVH(const Array<AABB> &objectAabbs, uint32_t leafSize = 4) :
- m_objectIds(MemTag::BVH), m_nodes(MemTag::BVH) {
+ BVH(const Array<AABB> &objectAabbs, uint32_t leafSize = 4) : m_objectIds(MemTag::BVH), m_nodes(MemTag::BVH)
+ {
m_objectAabbs = &objectAabbs;
if (m_objectAabbs->isEmpty())
return;
@@ -1398,7 +1487,7 @@ public:
Node node;
m_nodes.reserve(objectAabbs.size() * 2);
uint32_t nNodes = 0;
- while (stackptr > 0) {
+ while(stackptr > 0) {
// Pop the next item off of the stack
const BuildEntry &bnode = todo[--stackptr];
const uint32_t start = bnode.start;
@@ -1411,7 +1500,7 @@ public:
// Calculate the bounding box for this node
AABB bb(objectAabbs[m_objectIds[start]]);
AABB bc(objectAabbs[m_objectIds[start]].centroid());
- for (uint32_t p = start + 1; p < end; ++p) {
+ for(uint32_t p = start + 1; p < end; ++p) {
bb.expandToInclude(objectAabbs[m_objectIds[p]]);
bc.expandToInclude(objectAabbs[m_objectIds[p]].centroid());
}
@@ -1427,7 +1516,7 @@ public:
m_nodes[bnode.parent].rightOffset--;
// When this is the second touch, this is the right child.
// The right child sets up the offset for the flat tree.
- if (m_nodes[bnode.parent].rightOffset == kTouchedTwice)
+ if (m_nodes[bnode.parent].rightOffset == kTouchedTwice )
m_nodes[bnode.parent].rightOffset = nNodes - 1 - bnode.parent;
}
// If this is a leaf, no need to subdivide.
@@ -1462,20 +1551,21 @@ public:
}
}
- void query(const AABB &queryAabb, Array<uint32_t> &result) const {
+ void query(const AABB &queryAabb, Array<uint32_t> &result) const
+ {
result.clear();
// Working set
uint32_t todo[64];
int32_t stackptr = 0;
// "Push" on the root node to the working set
todo[stackptr] = 0;
- while (stackptr >= 0) {
+ while(stackptr >= 0) {
// Pop off the next node to work on.
const int ni = todo[stackptr--];
const Node &node = m_nodes[ni];
// Is leaf -> Intersect
if (node.rightOffset == 0) {
- for (uint32_t o = 0; o < node.nPrims; ++o) {
+ for(uint32_t o = 0; o < node.nPrims; ++o) {
const uint32_t obj = node.start + o;
if (queryAabb.intersect((*m_objectAabbs)[m_objectIds[obj]]))
result.push_back(m_objectIds[obj]);
@@ -1492,12 +1582,14 @@ public:
}
private:
- struct BuildEntry {
+ struct BuildEntry
+ {
uint32_t parent; // If non-zero then this is the index of the parent. (used in offsets)
uint32_t start, end; // The range of objects in the object list covered by this node.
};
- struct Node {
+ struct Node
+ {
AABB aabb;
uint32_t start, nPrims, rightOffset;
};
@@ -1507,8 +1599,10 @@ private:
Array<Node> m_nodes;
};
-struct Fit {
- static bool computeBasis(ConstArrayView<Vector3> points, Basis *basis) {
+struct Fit
+{
+ static bool computeBasis(ConstArrayView<Vector3> points, Basis *basis)
+ {
if (computeLeastSquaresNormal(points, &basis->normal)) {
basis->tangent = Basis::computeTangent(basis->normal);
basis->bitangent = Basis::computeBitangent(basis->normal, basis->tangent);
@@ -1522,7 +1616,8 @@ private:
// Fast, and accurate to within a few degrees.
// Returns None if the points do not span a plane.
// https://www.ilikebigbits.com/2015_03_04_plane_from_points.html
- static bool computeLeastSquaresNormal(ConstArrayView<Vector3> points, Vector3 *normal) {
+ static bool computeLeastSquaresNormal(ConstArrayView<Vector3> points, Vector3 *normal)
+ {
XA_DEBUG_ASSERT(points.length >= 3);
if (points.length == 3) {
*normal = normalize(cross(points[2] - points[0], points[1] - points[0]));
@@ -1587,7 +1682,7 @@ private:
// Pick path with best conditioning:
Vector3 dir(0.0f);
if (det_max == det_x)
- dir = Vector3(det_x, xz * yz - xy * zz, xy * yz - xz * yy);
+ dir = Vector3(det_x,xz * yz - xy * zz,xy * yz - xz * yy);
else if (det_max == det_y)
dir = Vector3(xz * yz - xy * zz, det_y, xy * xz - yz * xx);
else if (det_max == det_z)
@@ -1600,7 +1695,8 @@ private:
return isNormalized(*normal);
}
- static bool computeEigen(ConstArrayView<Vector3> points, Basis *basis) {
+ static bool computeEigen(ConstArrayView<Vector3> points, Basis *basis)
+ {
float matrix[6];
computeCovariance(points, matrix);
if (matrix[0] == 0 && matrix[3] == 0 && matrix[5] == 0)
@@ -1615,7 +1711,8 @@ private:
return true;
}
- static Vector3 computeCentroid(ConstArrayView<Vector3> points) {
+ static Vector3 computeCentroid(ConstArrayView<Vector3> points)
+ {
Vector3 centroid(0.0f);
for (uint32_t i = 0; i < points.length; i++)
centroid += points[i];
@@ -1623,7 +1720,8 @@ private:
return centroid;
}
- static Vector3 computeCovariance(ConstArrayView<Vector3> points, float *covariance) {
+ static Vector3 computeCovariance(ConstArrayView<Vector3> points, float * covariance)
+ {
// compute the centroid
Vector3 centroid = computeCentroid(points);
// compute covariance matrix
@@ -1645,7 +1743,8 @@ private:
// Tridiagonal solver from Charles Bloom.
// Householder transforms followed by QL decomposition.
// Seems to be based on the code from Numerical Recipes in C.
- static bool eigenSolveSymmetric3(const float matrix[6], float eigenValues[3], Vector3 eigenVectors[3]) {
+ static bool eigenSolveSymmetric3(const float matrix[6], float eigenValues[3], Vector3 eigenVectors[3])
+ {
XA_DEBUG_ASSERT(matrix != nullptr && eigenValues != nullptr && eigenVectors != nullptr);
float subd[3];
float diag[3];
@@ -1670,7 +1769,7 @@ private:
// eigenvectors are the columns; make them the rows :
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
- (&eigenVectors[j].x)[i] = (float)work[i][j];
+ (&eigenVectors[j].x)[i] = (float) work[i][j];
}
}
// shuffle to sort by singular value :
@@ -1692,7 +1791,8 @@ private:
}
private:
- static void EigenSolver3_Tridiagonal(float mat[3][3], float *diag, float *subd) {
+ static void EigenSolver3_Tridiagonal(float mat[3][3], float *diag, float *subd)
+ {
// Householder reduction T = Q^t M Q
// Input:
// mat, symmetric 3x3 matrix M
@@ -1744,7 +1844,8 @@ private:
}
}
- static bool EigenSolver3_QLAlgorithm(float mat[3][3], float *diag, float *subd) {
+ static bool EigenSolver3_QLAlgorithm(float mat[3][3], float *diag, float *subd)
+ {
// QL iteration with implicit shifting to reduce matrix from tridiagonal
// to diagonal
const int maxiter = 32;
@@ -1754,21 +1855,21 @@ private:
int m;
for (m = ell; m <= 1; m++) {
float dd = fabsf(diag[m]) + fabsf(diag[m + 1]);
- if (fabsf(subd[m]) + dd == dd)
+ if ( fabsf(subd[m]) + dd == dd )
break;
}
- if (m == ell)
+ if ( m == ell )
break;
float g = (diag[ell + 1] - diag[ell]) / (2 * subd[ell]);
float r = sqrtf(g * g + 1);
- if (g < 0)
+ if ( g < 0 )
g = diag[m] - diag[ell] + subd[ell] / (g - r);
else
g = diag[m] - diag[ell] + subd[ell] / (g + r);
float s = 1, c = 1, p = 0;
for (int i = m - 1; i >= ell; i--) {
float f = s * subd[i], b = c * subd[i];
- if (fabsf(f) >= fabsf(g)) {
+ if ( fabsf(f) >= fabsf(g) ) {
c = g / f;
r = sqrtf(c * c + 1);
subd[i + 1] = f * r;
@@ -1794,7 +1895,7 @@ private:
subd[ell] = g;
subd[m] = 0;
}
- if (iter == maxiter)
+ if ( iter == maxiter )
// should not get here under normal circumstances
return false;
}
@@ -1802,48 +1903,56 @@ private:
}
};
-static uint32_t sdbmHash(const void *data_in, uint32_t size, uint32_t h = 5381) {
- const uint8_t *data = (const uint8_t *)data_in;
+static uint32_t sdbmHash(const void *data_in, uint32_t size, uint32_t h = 5381)
+{
+ const uint8_t *data = (const uint8_t *) data_in;
uint32_t i = 0;
while (i < size) {
- h = (h << 16) + (h << 6) - h + (uint32_t)data[i++];
+ h = (h << 16) + (h << 6) - h + (uint32_t ) data[i++];
}
return h;
}
template <typename T>
-static uint32_t hash(const T &t, uint32_t h = 5381) {
+static uint32_t hash(const T &t, uint32_t h = 5381)
+{
return sdbmHash(&t, sizeof(T), h);
}
template <typename Key>
-struct Hash {
+struct Hash
+{
uint32_t operator()(const Key &k) const { return hash(k); }
};
template <typename Key>
-struct PassthroughHash {
+struct PassthroughHash
+{
uint32_t operator()(const Key &k) const { return (uint32_t)k; }
};
template <typename Key>
-struct Equal {
+struct Equal
+{
bool operator()(const Key &k0, const Key &k1) const { return k0 == k1; }
};
-template <typename Key, typename H = Hash<Key>, typename E = Equal<Key>>
-class HashMap {
+template<typename Key, typename H = Hash<Key>, typename E = Equal<Key> >
+class HashMap
+{
public:
- HashMap(int memTag, uint32_t size) :
- m_memTag(memTag), m_size(size), m_numSlots(0), m_slots(nullptr), m_keys(memTag), m_next(memTag) {
+ HashMap(int memTag, uint32_t size) : m_memTag(memTag), m_size(size), m_numSlots(0), m_slots(nullptr), m_keys(memTag), m_next(memTag)
+ {
}
- ~HashMap() {
+ ~HashMap()
+ {
if (m_slots)
XA_FREE(m_slots);
}
- void destroy() {
+ void destroy()
+ {
if (m_slots) {
XA_FREE(m_slots);
m_slots = nullptr;
@@ -1852,7 +1961,8 @@ public:
m_next.destroy();
}
- uint32_t add(const Key &key) {
+ uint32_t add(const Key &key)
+ {
if (!m_slots)
alloc();
const uint32_t hash = computeHash(key);
@@ -1862,18 +1972,21 @@ public:
return m_keys.size() - 1;
}
- uint32_t get(const Key &key) const {
+ uint32_t get(const Key &key) const
+ {
if (!m_slots)
return UINT32_MAX;
return find(key, m_slots[computeHash(key)]);
}
- uint32_t getNext(const Key &key, uint32_t current) const {
+ uint32_t getNext(const Key &key, uint32_t current) const
+ {
return find(key, m_next[current]);
}
private:
- void alloc() {
+ void alloc()
+ {
XA_DEBUG_ASSERT(m_size > 0);
m_numSlots = nextPowerOfTwo(m_size);
auto minNumSlots = uint32_t(m_size * 1.3);
@@ -1886,12 +1999,14 @@ private:
m_next.reserve(m_size);
}
- uint32_t computeHash(const Key &key) const {
+ uint32_t computeHash(const Key &key) const
+ {
H hash;
return hash(key) & (m_numSlots - 1);
}
- uint32_t find(const Key &key, uint32_t current) const {
+ uint32_t find(const Key &key, uint32_t current) const
+ {
E equal;
while (current != UINT32_MAX) {
if (equal(m_keys[current], key))
@@ -1909,8 +2024,9 @@ private:
Array<uint32_t> m_next;
};
-template <typename T>
-static void insertionSort(T *data, uint32_t length) {
+template<typename T>
+static void insertionSort(T *data, uint32_t length)
+{
for (int32_t i = 1; i < (int32_t)length; i++) {
T x = data[i];
int32_t j = i - 1;
@@ -1922,18 +2038,21 @@ static void insertionSort(T *data, uint32_t length) {
}
}
-class KISSRng {
+class KISSRng
+{
public:
KISSRng() { reset(); }
- void reset() {
+ void reset()
+ {
x = 123456789;
y = 362436000;
z = 521288629;
c = 7654321;
}
- uint32_t getRange(uint32_t range) {
+ uint32_t getRange(uint32_t range)
+ {
if (range == 0)
return 0;
x = 69069 * x + 12345;
@@ -1952,9 +2071,11 @@ private:
// Based on Pierre Terdiman's and Michael Herf's source code.
// http://www.codercorner.com/RadixSortRevisited.htm
// http://www.stereopsis.com/radix.html
-class RadixSort {
+class RadixSort
+{
public:
- void sort(ConstArrayView<float> input) {
+ void sort(ConstArrayView<float> input)
+ {
if (input.length == 0) {
m_buffer1.clear();
m_buffer2.clear();
@@ -1983,7 +2104,8 @@ public:
}
// Access to results. m_ranks is a list of indices in sorted order, i.e. in the order you may further process your data
- const uint32_t *ranks() const {
+ const uint32_t *ranks() const
+ {
XA_DEBUG_ASSERT(m_validRanks);
return m_ranks;
}
@@ -1993,17 +2115,20 @@ private:
Array<uint32_t> m_buffer1, m_buffer2;
bool m_validRanks = false;
- void floatFlip(uint32_t &f) {
+ void floatFlip(uint32_t &f)
+ {
int32_t mask = (int32_t(f) >> 31) | 0x80000000; // Warren Hunt, Manchor Ko.
f ^= mask;
}
- void ifloatFlip(uint32_t &f) {
+ void ifloatFlip(uint32_t &f)
+ {
uint32_t mask = ((f >> 31) - 1) | 0x80000000; // Michael Herf.
f ^= mask;
}
- void createHistograms(ConstArrayView<uint32_t> input, uint32_t *histogram) {
+ void createHistograms(ConstArrayView<uint32_t> input, uint32_t *histogram)
+ {
const uint32_t bucketCount = sizeof(uint32_t);
// Init bucket pointers.
uint32_t *h[bucketCount];
@@ -2014,14 +2139,15 @@ private:
memset(histogram, 0, 256 * bucketCount * sizeof(uint32_t));
// @@ Add support for signed integers.
// Build histograms.
- const uint8_t *p = (const uint8_t *)input.data; // @@ Does this break aliasing rules?
+ const uint8_t *p = (const uint8_t *)input.data; // @@ Does this break aliasing rules?
const uint8_t *pe = p + input.length * sizeof(uint32_t);
while (p != pe) {
h[0][*p++]++, h[1][*p++]++, h[2][*p++]++, h[3][*p++]++;
}
}
- void insertionSort(ConstArrayView<float> input) {
+ void insertionSort(ConstArrayView<float> input)
+ {
if (!m_validRanks) {
m_ranks[0] = 0;
for (uint32_t i = 1; i != input.length; ++i) {
@@ -2051,7 +2177,8 @@ private:
}
}
- void radixSort(ConstArrayView<uint32_t> input) {
+ void radixSort(ConstArrayView<uint32_t> input)
+ {
const uint32_t P = sizeof(uint32_t); // pass count
// Allocate histograms & offsets on the stack
uint32_t histogram[256 * P];
@@ -2069,8 +2196,7 @@ private:
}
// Create offsets
link[0] = m_ranks2;
- for (uint32_t i = 1; i < 256; i++)
- link[i] = link[i - 1] + h[i - 1];
+ for (uint32_t i = 1; i < 256; i++) link[i] = link[i - 1] + h[i - 1];
// Perform Radix Sort
if (!m_validRanks) {
for (uint32_t i = 0; i < input.length; i++) {
@@ -2096,21 +2222,25 @@ private:
};
// Wrapping this in a class allows temporary arrays to be re-used.
-class BoundingBox2D {
+class BoundingBox2D
+{
public:
Vector2 majorAxis, minorAxis, minCorner, maxCorner;
- void clear() {
+ void clear()
+ {
m_boundaryVertices.clear();
}
- void appendBoundaryVertex(Vector2 v) {
+ void appendBoundaryVertex(Vector2 v)
+ {
m_boundaryVertices.push_back(v);
}
// This should compute convex hull and use rotating calipers to find the best box. Currently it uses a brute force method.
// If vertices are empty, the boundary vertices are used.
- void compute(ConstArrayView<Vector2> vertices = ConstArrayView<Vector2>()) {
+ void compute(ConstArrayView<Vector2> vertices = ConstArrayView<Vector2>())
+ {
XA_DEBUG_ASSERT(!m_boundaryVertices.isEmpty());
if (vertices.length == 0)
vertices = m_boundaryVertices;
@@ -2157,7 +2287,8 @@ public:
private:
// Compute the convex hull using Graham Scan.
- void convexHull(ConstArrayView<Vector2> input, Array<Vector2> &output, float epsilon) {
+ void convexHull(ConstArrayView<Vector2> input, Array<Vector2> &output, float epsilon)
+ {
m_coords.resize(input.length);
for (uint32_t i = 0; i < input.length; i++)
m_coords[i] = input[i].x;
@@ -2186,7 +2317,7 @@ private:
XA_DEBUG_ASSERT(m_top.size() >= 2);
output.push_back(m_top[0]);
output.push_back(m_top[1]);
- for (uint32_t i = 2; i < m_top.size();) {
+ for (uint32_t i = 2; i < m_top.size(); ) {
Vector2 a = output[output.size() - 2];
Vector2 b = output[output.size() - 1];
Vector2 c = m_top[i];
@@ -2202,7 +2333,7 @@ private:
XA_DEBUG_ASSERT(m_bottom.size() >= 2);
output.push_back(m_bottom[1]);
// Filter bottom list.
- for (uint32_t i = 2; i < m_bottom.size();) {
+ for (uint32_t i = 2; i < m_bottom.size(); ) {
Vector2 a = output[output.size() - 2];
Vector2 b = output[output.size() - 1];
Vector2 c = m_bottom[i];
@@ -2225,45 +2356,45 @@ private:
RadixSort m_radix;
};
-struct EdgeKey {
- EdgeKey(const EdgeKey &k) :
- v0(k.v0), v1(k.v1) {}
- EdgeKey(uint32_t _v0, uint32_t _v1) :
- v0(_v0), v1(_v1) {}
+struct EdgeKey
+{
+ EdgeKey(const EdgeKey &k) : v0(k.v0), v1(k.v1) {}
+ EdgeKey(uint32_t _v0, uint32_t _v1) : v0(_v0), v1(_v1) {}
bool operator==(const EdgeKey &k) const { return v0 == k.v0 && v1 == k.v1; }
uint32_t v0;
uint32_t v1;
};
-struct EdgeHash {
+struct EdgeHash
+{
uint32_t operator()(const EdgeKey &k) const { return k.v0 * 32768u + k.v1; }
};
-static uint32_t meshEdgeFace(uint32_t edge) {
- return edge / 3;
-}
-static uint32_t meshEdgeIndex0(uint32_t edge) {
- return edge;
-}
+static uint32_t meshEdgeFace(uint32_t edge) { return edge / 3; }
+static uint32_t meshEdgeIndex0(uint32_t edge) { return edge; }
-static uint32_t meshEdgeIndex1(uint32_t edge) {
+static uint32_t meshEdgeIndex1(uint32_t edge)
+{
const uint32_t faceFirstEdge = edge / 3 * 3;
return faceFirstEdge + (edge - faceFirstEdge + 1) % 3;
}
-struct MeshFlags {
- enum {
- HasIgnoredFaces = 1 << 0,
- HasNormals = 1 << 1,
- HasMaterials = 1 << 2
+struct MeshFlags
+{
+ enum
+ {
+ HasIgnoredFaces = 1<<0,
+ HasNormals = 1<<1,
+ HasMaterials = 1<<2
};
};
-class Mesh {
+class Mesh
+{
public:
- Mesh(float epsilon, uint32_t approxVertexCount, uint32_t approxFaceCount, uint32_t flags = 0, uint32_t id = UINT32_MAX) :
- m_epsilon(epsilon), m_flags(flags), m_id(id), m_faceIgnore(MemTag::Mesh), m_faceMaterials(MemTag::Mesh), m_indices(MemTag::MeshIndices), m_positions(MemTag::MeshPositions), m_normals(MemTag::MeshNormals), m_texcoords(MemTag::MeshTexcoords), m_nextColocalVertex(MemTag::MeshColocals), m_firstColocalVertex(MemTag::MeshColocals), m_boundaryEdges(MemTag::MeshBoundaries), m_oppositeEdges(MemTag::MeshBoundaries), m_edgeMap(MemTag::MeshEdgeMap, approxFaceCount * 3) {
+ Mesh(float epsilon, uint32_t approxVertexCount, uint32_t approxFaceCount, uint32_t flags = 0, uint32_t id = UINT32_MAX) : m_epsilon(epsilon), m_flags(flags), m_id(id), m_faceIgnore(MemTag::Mesh), m_faceMaterials(MemTag::Mesh), m_indices(MemTag::MeshIndices), m_positions(MemTag::MeshPositions), m_normals(MemTag::MeshNormals), m_texcoords(MemTag::MeshTexcoords), m_nextColocalVertex(MemTag::MeshColocals), m_firstColocalVertex(MemTag::MeshColocals), m_boundaryEdges(MemTag::MeshBoundaries), m_oppositeEdges(MemTag::MeshBoundaries), m_edgeMap(MemTag::MeshEdgeMap, approxFaceCount * 3)
+ {
m_indices.reserve(approxFaceCount * 3);
m_positions.reserve(approxVertexCount);
m_texcoords.reserve(approxVertexCount);
@@ -2278,7 +2409,8 @@ public:
uint32_t flags() const { return m_flags; }
uint32_t id() const { return m_id; }
- void addVertex(const Vector3 &pos, const Vector3 &normal = Vector3(0.0f), const Vector2 &texcoord = Vector2(0.0f)) {
+ void addVertex(const Vector3 &pos, const Vector3 &normal = Vector3(0.0f), const Vector2 &texcoord = Vector2(0.0f))
+ {
XA_DEBUG_ASSERT(isFinite(pos));
m_positions.push_back(pos);
if (m_flags & MeshFlags::HasNormals)
@@ -2286,7 +2418,8 @@ public:
m_texcoords.push_back(texcoord);
}
- void addFace(const uint32_t *indices, bool ignore = false, uint32_t material = UINT32_MAX) {
+ void addFace(const uint32_t *indices, bool ignore = false, uint32_t material = UINT32_MAX)
+ {
if (m_flags & MeshFlags::HasIgnoredFaces)
m_faceIgnore.push_back(ignore);
if (m_flags & MeshFlags::HasMaterials)
@@ -2301,7 +2434,8 @@ public:
}
}
- void createColocalsBVH() {
+ void createColocalsBVH()
+ {
const uint32_t vertexCount = m_positions.size();
Array<AABB> aabbs(MemTag::BVH);
aabbs.resize(vertexCount);
@@ -2342,7 +2476,8 @@ public:
}
}
- void createColocalsHash() {
+ void createColocalsHash()
+ {
const uint32_t vertexCount = m_positions.size();
HashMap<Vector3> positionToVertexMap(MemTag::Default, vertexCount);
for (uint32_t i = 0; i < vertexCount; i++)
@@ -2380,14 +2515,16 @@ public:
}
}
- void createColocals() {
+ void createColocals()
+ {
if (m_epsilon <= FLT_EPSILON)
createColocalsHash();
else
createColocalsBVH();
}
- void createBoundaries() {
+ void createBoundaries()
+ {
const uint32_t edgeCount = m_indices.size();
const uint32_t vertexCount = m_positions.size();
m_oppositeEdges.resize(edgeCount);
@@ -2418,7 +2555,8 @@ public:
}
/// Find edge, test all colocals.
- uint32_t findEdge(uint32_t vertex0, uint32_t vertex1) const {
+ uint32_t findEdge(uint32_t vertex0, uint32_t vertex1) const
+ {
// Try to find exact vertex match first.
{
EdgeKey key(vertex0, vertex1);
@@ -2459,12 +2597,14 @@ public:
// Edge map can be destroyed when no longer used to reduce memory usage. It's used by:
// * Mesh::createBoundaries()
// * Mesh::edgeMap() (used by MeshFaceGroups)
- void destroyEdgeMap() {
+ void destroyEdgeMap()
+ {
m_edgeMap.destroy();
}
#if XA_DEBUG_EXPORT_OBJ
- void writeObjVertices(FILE *file) const {
+ void writeObjVertices(FILE *file) const
+ {
for (uint32_t i = 0; i < m_positions.size(); i++)
fprintf(file, "v %g %g %g\n", m_positions[i].x, m_positions[i].y, m_positions[i].z);
if (m_flags & MeshFlags::HasNormals) {
@@ -2475,7 +2615,8 @@ public:
fprintf(file, "vt %g %g\n", m_texcoords[i].x, m_texcoords[i].y);
}
- void writeObjFace(FILE *file, uint32_t face, uint32_t offset = 0) const {
+ void writeObjFace(FILE *file, uint32_t face, uint32_t offset = 0) const
+ {
fprintf(file, "f ");
for (uint32_t j = 0; j < 3; j++) {
const uint32_t index = m_indices[face * 3 + j] + 1 + offset; // 1-indexed
@@ -2483,7 +2624,8 @@ public:
}
}
- void writeObjBoundaryEges(FILE *file) const {
+ void writeObjBoundaryEges(FILE *file) const
+ {
if (m_oppositeEdges.isEmpty())
return; // Boundaries haven't been created.
fprintf(file, "o boundary_edges\n");
@@ -2494,7 +2636,8 @@ public:
}
}
- void writeObjFile(const char *filename) const {
+ void writeObjFile(const char *filename) const
+ {
FILE *file;
XA_FOPEN(file, filename, "w");
if (!file)
@@ -2509,7 +2652,8 @@ public:
}
#endif
- float computeSurfaceArea() const {
+ float computeSurfaceArea() const
+ {
float area = 0;
for (uint32_t f = 0; f < faceCount(); f++)
area += computeFaceArea(f);
@@ -2518,21 +2662,24 @@ public:
}
// Returned value is always positive, even if some triangles are flipped.
- float computeParametricArea() const {
+ float computeParametricArea() const
+ {
float area = 0;
for (uint32_t f = 0; f < faceCount(); f++)
area += fabsf(computeFaceParametricArea(f)); // May be negative, depends on texcoord winding.
return area;
}
- float computeFaceArea(uint32_t face) const {
+ float computeFaceArea(uint32_t face) const
+ {
const Vector3 &p0 = m_positions[m_indices[face * 3 + 0]];
const Vector3 &p1 = m_positions[m_indices[face * 3 + 1]];
const Vector3 &p2 = m_positions[m_indices[face * 3 + 2]];
return length(cross(p1 - p0, p2 - p0)) * 0.5f;
}
- Vector3 computeFaceCentroid(uint32_t face) const {
+ Vector3 computeFaceCentroid(uint32_t face) const
+ {
Vector3 sum(0.0f);
for (uint32_t i = 0; i < 3; i++)
sum += m_positions[m_indices[face * 3 + i]];
@@ -2541,7 +2688,8 @@ public:
// Average of the edge midpoints weighted by the edge length.
// I want a point inside the triangle, but closer to the cirumcenter.
- Vector3 computeFaceCenter(uint32_t face) const {
+ Vector3 computeFaceCenter(uint32_t face) const
+ {
const Vector3 &p0 = m_positions[m_indices[face * 3 + 0]];
const Vector3 &p1 = m_positions[m_indices[face * 3 + 1]];
const Vector3 &p2 = m_positions[m_indices[face * 3 + 2]];
@@ -2554,7 +2702,8 @@ public:
return m0 + m1 + m2;
}
- Vector3 computeFaceNormal(uint32_t face) const {
+ Vector3 computeFaceNormal(uint32_t face) const
+ {
const Vector3 &p0 = m_positions[m_indices[face * 3 + 0]];
const Vector3 &p1 = m_positions[m_indices[face * 3 + 1]];
const Vector3 &p2 = m_positions[m_indices[face * 3 + 2]];
@@ -2564,7 +2713,8 @@ public:
return normalizeSafe(normalAreaScaled, Vector3(0, 0, 1));
}
- float computeFaceParametricArea(uint32_t face) const {
+ float computeFaceParametricArea(uint32_t face) const
+ {
const Vector2 &t0 = m_texcoords[m_indices[face * 3 + 0]];
const Vector2 &t1 = m_texcoords[m_indices[face * 3 + 1]];
const Vector2 &t2 = m_texcoords[m_indices[face * 3 + 2]];
@@ -2572,7 +2722,8 @@ public:
}
// @@ This is not exactly accurate, we should compare the texture coordinates...
- bool isSeam(uint32_t edge) const {
+ bool isSeam(uint32_t edge) const
+ {
const uint32_t oppositeEdge = m_oppositeEdges[edge];
if (oppositeEdge == UINT32_MAX)
return false; // boundary edge
@@ -2583,7 +2734,8 @@ public:
return m_indices[e0] != m_indices[oe1] || m_indices[e1] != m_indices[oe0];
}
- bool isTextureSeam(uint32_t edge) const {
+ bool isTextureSeam(uint32_t edge) const
+ {
const uint32_t oppositeEdge = m_oppositeEdges[edge];
if (oppositeEdge == UINT32_MAX)
return false; // boundary edge
@@ -2594,7 +2746,8 @@ public:
return m_texcoords[m_indices[e0]] != m_texcoords[m_indices[oe1]] || m_texcoords[m_indices[e1]] != m_texcoords[m_indices[oe0]];
}
- uint32_t firstColocalVertex(uint32_t vertex) const {
+ uint32_t firstColocalVertex(uint32_t vertex) const
+ {
XA_DEBUG_ASSERT(m_firstColocalVertex.size() == m_positions.size());
return m_firstColocalVertex[vertex];
}
@@ -2609,10 +2762,7 @@ public:
XA_INLINE uint32_t vertexAt(uint32_t i) const { return m_indices[i]; }
XA_INLINE const Vector3 &position(uint32_t vertex) const { return m_positions[vertex]; }
XA_INLINE ConstArrayView<Vector3> positions() const { return m_positions; }
- XA_INLINE const Vector3 &normal(uint32_t vertex) const {
- XA_DEBUG_ASSERT(m_flags & MeshFlags::HasNormals);
- return m_normals[vertex];
- }
+ XA_INLINE const Vector3 &normal(uint32_t vertex) const { XA_DEBUG_ASSERT(m_flags & MeshFlags::HasNormals); return m_normals[vertex]; }
XA_INLINE const Vector2 &texcoord(uint32_t vertex) const { return m_texcoords[vertex]; }
XA_INLINE Vector2 &texcoord(uint32_t vertex) { return m_texcoords[vertex]; }
XA_INLINE const ConstArrayView<Vector2> texcoords() const { return m_texcoords; }
@@ -2625,6 +2775,7 @@ public:
XA_INLINE const HashMap<EdgeKey, EdgeHash> &edgeMap() const { return m_edgeMap; }
private:
+
float m_epsilon;
uint32_t m_flags;
uint32_t m_id;
@@ -2647,21 +2798,24 @@ private:
HashMap<EdgeKey, EdgeHash> m_edgeMap;
public:
- class FaceEdgeIterator {
+ class FaceEdgeIterator
+ {
public:
- FaceEdgeIterator(const Mesh *mesh, uint32_t face) :
- m_mesh(mesh), m_face(face), m_relativeEdge(0) {
+ FaceEdgeIterator (const Mesh *mesh, uint32_t face) : m_mesh(mesh), m_face(face), m_relativeEdge(0)
+ {
m_edge = m_face * 3;
}
- void advance() {
+ void advance()
+ {
if (m_relativeEdge < 3) {
m_edge++;
m_relativeEdge++;
}
}
- bool isDone() const {
+ bool isDone() const
+ {
return m_relativeEdge == 3;
}
@@ -2673,7 +2827,8 @@ public:
uint32_t face() const { return m_face; }
uint32_t oppositeEdge() const { return m_mesh->m_oppositeEdges[m_edge]; }
- uint32_t oppositeFace() const {
+ uint32_t oppositeFace() const
+ {
const uint32_t oedge = m_mesh->m_oppositeEdges[m_edge];
if (oedge == UINT32_MAX)
return UINT32_MAX;
@@ -2697,18 +2852,19 @@ public:
};
};
-struct MeshFaceGroups {
+struct MeshFaceGroups
+{
typedef uint32_t Handle;
static constexpr Handle kInvalid = UINT32_MAX;
- MeshFaceGroups(const Mesh *mesh) :
- m_mesh(mesh), m_groups(MemTag::Mesh), m_firstFace(MemTag::Mesh), m_nextFace(MemTag::Mesh), m_faceCount(MemTag::Mesh) {}
+ MeshFaceGroups(const Mesh *mesh) : m_mesh(mesh), m_groups(MemTag::Mesh), m_firstFace(MemTag::Mesh), m_nextFace(MemTag::Mesh), m_faceCount(MemTag::Mesh) {}
XA_INLINE Handle groupAt(uint32_t face) const { return m_groups[face]; }
XA_INLINE uint32_t groupCount() const { return m_faceCount.size(); }
XA_INLINE uint32_t nextFace(uint32_t face) const { return m_nextFace[face]; }
XA_INLINE uint32_t faceCount(uint32_t group) const { return m_faceCount[group]; }
- void compute() {
+ void compute()
+ {
m_groups.resize(m_mesh->faceCount());
m_groups.fillBytes(0xff); // Set all faces to kInvalid
uint32_t firstUnassignedFace = 0;
@@ -2767,23 +2923,27 @@ struct MeshFaceGroups {
}
}
- class Iterator {
+ class Iterator
+ {
public:
- Iterator(const MeshFaceGroups *meshFaceGroups, Handle group) :
- m_meshFaceGroups(meshFaceGroups) {
+ Iterator(const MeshFaceGroups *meshFaceGroups, Handle group) : m_meshFaceGroups(meshFaceGroups)
+ {
XA_DEBUG_ASSERT(group != kInvalid);
m_current = m_meshFaceGroups->m_firstFace[group];
}
- void advance() {
+ void advance()
+ {
m_current = m_meshFaceGroups->m_nextFace[m_current];
}
- bool isDone() const {
+ bool isDone() const
+ {
return m_current == UINT32_MAX;
}
- uint32_t face() const {
+ uint32_t face() const
+ {
return m_current;
}
@@ -2803,7 +2963,8 @@ private:
constexpr MeshFaceGroups::Handle MeshFaceGroups::kInvalid;
#if XA_CHECK_T_JUNCTIONS
-static bool lineIntersectsPoint(const Vector3 &point, const Vector3 &lineStart, const Vector3 &lineEnd, float *t, float epsilon) {
+static bool lineIntersectsPoint(const Vector3 &point, const Vector3 &lineStart, const Vector3 &lineEnd, float *t, float epsilon)
+{
float tt;
if (!t)
t = &tt;
@@ -2821,7 +2982,8 @@ static bool lineIntersectsPoint(const Vector3 &point, const Vector3 &lineStart,
}
// Returns the number of T-junctions found.
-static int meshCheckTJunctions(const Mesh &inputMesh) {
+static int meshCheckTJunctions(const Mesh &inputMesh)
+{
int count = 0;
const uint32_t vertexCount = inputMesh.vertexCount();
const uint32_t edgeCount = inputMesh.edgeCount();
@@ -2845,10 +3007,12 @@ static int meshCheckTJunctions(const Mesh &inputMesh) {
#endif
// References invalid faces and vertices in a mesh.
-struct InvalidMeshGeometry {
+struct InvalidMeshGeometry
+{
// If meshFaceGroups is not null, invalid faces have the face group MeshFaceGroups::kInvalid.
// If meshFaceGroups is null, invalid faces are Mesh::isFaceIgnored.
- void extract(const Mesh *mesh, const MeshFaceGroups *meshFaceGroups) {
+ void extract(const Mesh *mesh, const MeshFaceGroups *meshFaceGroups)
+ {
// Copy invalid faces.
m_faces.clear();
const uint32_t meshFaceCount = mesh->faceCount();
@@ -2886,28 +3050,32 @@ private:
Array<uint32_t> m_vertexToSourceVertexMap; // Map face vertices to vertices of the source mesh.
};
-struct Progress {
- Progress(ProgressCategory category, ProgressFunc func, void *userData, uint32_t maxValue) :
- cancel(false), m_category(category), m_func(func), m_userData(userData), m_value(0), m_maxValue(maxValue), m_percent(0) {
+struct Progress
+{
+ Progress(ProgressCategory category, ProgressFunc func, void *userData, uint32_t maxValue) : cancel(false), m_category(category), m_func(func), m_userData(userData), m_value(0), m_maxValue(maxValue), m_percent(0)
+ {
if (m_func) {
if (!m_func(category, 0, userData))
cancel = true;
}
}
- ~Progress() {
+ ~Progress()
+ {
if (m_func) {
if (!m_func(m_category, 100, m_userData))
cancel = true;
}
}
- void increment(uint32_t value) {
+ void increment(uint32_t value)
+ {
m_value += value;
update();
}
- void setMaxValue(uint32_t maxValue) {
+ void setMaxValue(uint32_t maxValue)
+ {
m_maxValue = maxValue;
update();
}
@@ -2915,15 +3083,15 @@ struct Progress {
std::atomic<bool> cancel;
private:
- void update() {
+ void update()
+ {
if (!m_func)
return;
const uint32_t newPercent = uint32_t(ceilf(m_value.load() / (float)m_maxValue.load() * 100.0f));
if (newPercent != m_percent) {
// Atomic max.
uint32_t oldPercent = m_percent;
- while (oldPercent < newPercent && !m_percent.compare_exchange_weak(oldPercent, newPercent)) {
- }
+ while (oldPercent < newPercent && !m_percent.compare_exchange_weak(oldPercent, newPercent)) {}
if (!m_func(m_category, m_percent, m_userData))
cancel = true;
}
@@ -2935,31 +3103,32 @@ private:
std::atomic<uint32_t> m_value, m_maxValue, m_percent;
};
-struct Spinlock {
- void lock() {
- while (m_lock.test_and_set(std::memory_order_acquire)) {
- }
- }
+struct Spinlock
+{
+ void lock() { while(m_lock.test_and_set(std::memory_order_acquire)) {} }
void unlock() { m_lock.clear(std::memory_order_release); }
private:
std::atomic_flag m_lock = ATOMIC_FLAG_INIT;
};
-struct TaskGroupHandle {
+struct TaskGroupHandle
+{
uint32_t value = UINT32_MAX;
};
-struct Task {
+struct Task
+{
void (*func)(void *groupUserData, void *taskUserData);
void *userData; // Passed to func as taskUserData.
};
#if XA_MULTITHREADED
-class TaskScheduler {
+class TaskScheduler
+{
public:
- TaskScheduler() :
- m_shutdown(false) {
+ TaskScheduler() : m_shutdown(false)
+ {
m_threadIndex = 0;
// Max with current task scheduler usage is 1 per thread + 1 deep nesting, but allow for some slop.
m_maxGroups = std::thread::hardware_concurrency() * 4;
@@ -2978,7 +3147,8 @@ public:
}
}
- ~TaskScheduler() {
+ ~TaskScheduler()
+ {
m_shutdown = true;
for (uint32_t i = 0; i < m_workers.size(); i++) {
Worker &worker = m_workers[i];
@@ -2996,12 +3166,14 @@ public:
XA_FREE(m_groups);
}
- uint32_t threadCount() const {
+ uint32_t threadCount() const
+ {
return max(1u, std::thread::hardware_concurrency()); // Including the main thread.
}
// userData is passed to Task::func as groupUserData.
- TaskGroupHandle createTaskGroup(void *userData = nullptr, uint32_t reserveSize = 0) {
+ TaskGroupHandle createTaskGroup(void *userData = nullptr, uint32_t reserveSize = 0)
+ {
// Claim the first free group.
for (uint32_t i = 0; i < m_maxGroups; i++) {
TaskGroup &group = m_groups[i];
@@ -3025,7 +3197,8 @@ public:
return handle;
}
- void run(TaskGroupHandle handle, const Task &task) {
+ void run(TaskGroupHandle handle, const Task &task)
+ {
XA_DEBUG_ASSERT(handle.value != UINT32_MAX);
TaskGroup &group = m_groups[handle.value];
group.queueLock.lock();
@@ -3039,7 +3212,8 @@ public:
}
}
- void wait(TaskGroupHandle *handle) {
+ void wait(TaskGroupHandle *handle)
+ {
if (handle->value == UINT32_MAX) {
XA_DEBUG_ASSERT(false);
return;
@@ -3067,7 +3241,8 @@ public:
static uint32_t currentThreadIndex() { return m_threadIndex; }
private:
- struct TaskGroup {
+ struct TaskGroup
+ {
std::atomic<bool> free;
Array<Task> queue; // Items are never removed. queueHead is incremented to pop items.
uint32_t queueHead = 0;
@@ -3076,7 +3251,8 @@ private:
void *userData;
};
- struct Worker {
+ struct Worker
+ {
std::thread *thread = nullptr;
std::mutex mutex;
std::condition_variable cv;
@@ -3089,11 +3265,12 @@ private:
uint32_t m_maxGroups;
static thread_local uint32_t m_threadIndex;
- static void workerThread(TaskScheduler *scheduler, Worker *worker, uint32_t threadIndex) {
+ static void workerThread(TaskScheduler *scheduler, Worker *worker, uint32_t threadIndex)
+ {
m_threadIndex = threadIndex;
std::unique_lock<std::mutex> lock(worker->mutex);
for (;;) {
- worker->cv.wait(lock, [=] { return worker->wakeup.load(); });
+ worker->cv.wait(lock, [=]{ return worker->wakeup.load(); });
worker->wakeup = false;
for (;;) {
if (scheduler->m_shutdown)
@@ -3124,18 +3301,22 @@ private:
thread_local uint32_t TaskScheduler::m_threadIndex;
#else
-class TaskScheduler {
+class TaskScheduler
+{
public:
- ~TaskScheduler() {
+ ~TaskScheduler()
+ {
for (uint32_t i = 0; i < m_groups.size(); i++)
destroyGroup({ i });
}
- uint32_t threadCount() const {
+ uint32_t threadCount() const
+ {
return 1;
}
- TaskGroupHandle createTaskGroup(void *userData = nullptr, uint32_t reserveSize = 0) {
+ TaskGroupHandle createTaskGroup(void *userData = nullptr, uint32_t reserveSize = 0)
+ {
TaskGroup *group = XA_NEW(MemTag::Default, TaskGroup);
group->queue.reserve(reserveSize);
group->userData = userData;
@@ -3145,11 +3326,13 @@ public:
return handle;
}
- void run(TaskGroupHandle handle, Task task) {
+ void run(TaskGroupHandle handle, Task task)
+ {
m_groups[handle.value]->queue.push_back(task);
}
- void wait(TaskGroupHandle *handle) {
+ void wait(TaskGroupHandle *handle)
+ {
if (handle->value == UINT32_MAX) {
XA_DEBUG_ASSERT(false);
return;
@@ -3165,7 +3348,8 @@ public:
static uint32_t currentThreadIndex() { return 0; }
private:
- void destroyGroup(TaskGroupHandle handle) {
+ void destroyGroup(TaskGroupHandle handle)
+ {
TaskGroup *group = m_groups[handle.value];
if (group) {
group->~TaskGroup();
@@ -3174,7 +3358,8 @@ private:
}
}
- struct TaskGroup {
+ struct TaskGroup
+ {
Array<Task> queue;
void *userData;
};
@@ -3188,7 +3373,8 @@ const uint8_t TGA_TYPE_RGB = 2;
const uint8_t TGA_ORIGIN_UPPER = 0x20;
#pragma pack(push, 1)
-struct TgaHeader {
+struct TgaHeader
+{
uint8_t id_length;
uint8_t colormap_type;
uint8_t image_type;
@@ -3205,7 +3391,8 @@ struct TgaHeader {
};
#pragma pack(pop)
-static void WriteTga(const char *filename, const uint8_t *data, uint32_t width, uint32_t height) {
+static void WriteTga(const char *filename, const uint8_t *data, uint32_t width, uint32_t height)
+{
XA_DEBUG_ASSERT(sizeof(TgaHeader) == TgaHeader::Size);
FILE *f;
XA_FOPEN(f, filename, "wb");
@@ -3230,10 +3417,12 @@ static void WriteTga(const char *filename, const uint8_t *data, uint32_t width,
}
#endif
-template <typename T>
-class ThreadLocal {
+template<typename T>
+class ThreadLocal
+{
public:
- ThreadLocal() {
+ ThreadLocal()
+ {
#if XA_MULTITHREADED
const uint32_t n = std::thread::hardware_concurrency();
#else
@@ -3244,7 +3433,8 @@ public:
new (&m_array[i]) T;
}
- ~ThreadLocal() {
+ ~ThreadLocal()
+ {
#if XA_MULTITHREADED
const uint32_t n = std::thread::hardware_concurrency();
#else
@@ -3255,7 +3445,8 @@ public:
XA_FREE(m_array);
}
- T &get() const {
+ T &get() const
+ {
return m_array[TaskScheduler::currentThreadIndex()];
}
@@ -3264,10 +3455,12 @@ private:
};
// Implemented as a struct so the temporary arrays can be reused.
-struct Triangulator {
+struct Triangulator
+{
// This is doing a simple ear-clipping algorithm that skips invalid triangles. Ideally, we should
// also sort the ears by angle, start with the ones that have the smallest angle and proceed in order.
- void triangulatePolygon(ConstArrayView<Vector3> vertices, ConstArrayView<uint32_t> inputIndices, Array<uint32_t> &outputIndices) {
+ void triangulatePolygon(ConstArrayView<Vector3> vertices, ConstArrayView<uint32_t> inputIndices, Array<uint32_t> &outputIndices)
+ {
m_polygonVertices.clear();
m_polygonVertices.reserve(inputIndices.length);
outputIndices.clear();
@@ -3276,7 +3469,8 @@ struct Triangulator {
outputIndices.push_back(inputIndices[0]);
outputIndices.push_back(inputIndices[1]);
outputIndices.push_back(inputIndices[2]);
- } else {
+ }
+ else {
// Build 2D polygon projecting vertices onto normal plane.
// Faces are not necesarily planar, this is for example the case, when the face comes from filling a hole. In such cases
// it's much better to use the best fit plane.
@@ -3348,7 +3542,8 @@ struct Triangulator {
}
private:
- static bool pointInTriangle(const Vector2 &p, const Vector2 &a, const Vector2 &b, const Vector2 &c) {
+ static bool pointInTriangle(const Vector2 &p, const Vector2 &a, const Vector2 &b, const Vector2 &c)
+ {
return triangleArea(a, b, p) >= kAreaEpsilon && triangleArea(b, c, p) >= kAreaEpsilon && triangleArea(c, a, p) >= kAreaEpsilon;
}
@@ -3357,10 +3552,12 @@ private:
Array<Vector2> m_polygonPoints;
};
-class UniformGrid2 {
+class UniformGrid2
+{
public:
// indices are optional.
- void reset(ConstArrayView<Vector2> positions, ConstArrayView<uint32_t> indices = ConstArrayView<uint32_t>(), uint32_t reserveEdgeCount = 0) {
+ void reset(ConstArrayView<Vector2> positions, ConstArrayView<uint32_t> indices = ConstArrayView<uint32_t>(), uint32_t reserveEdgeCount = 0)
+ {
m_edges.clear();
if (reserveEdgeCount > 0)
m_edges.reserve(reserveEdgeCount);
@@ -3369,12 +3566,14 @@ public:
m_cellDataOffsets.clear();
}
- void append(uint32_t edge) {
+ void append(uint32_t edge)
+ {
XA_DEBUG_ASSERT(m_cellDataOffsets.isEmpty());
m_edges.push_back(edge);
}
- bool intersect(Vector2 v1, Vector2 v2, float epsilon) {
+ bool intersect(Vector2 v1, Vector2 v2, float epsilon)
+ {
const uint32_t edgeCount = m_edges.size();
bool bruteForce = edgeCount <= 20;
if (!bruteForce && m_cellDataOffsets.isEmpty())
@@ -3401,7 +3600,8 @@ public:
}
// If edges is empty, checks for intersection with all edges in the grid.
- bool intersect(float epsilon, ConstArrayView<uint32_t> edges = ConstArrayView<uint32_t>(), ConstArrayView<uint32_t> ignoreEdges = ConstArrayView<uint32_t>()) {
+ bool intersect(float epsilon, ConstArrayView<uint32_t> edges = ConstArrayView<uint32_t>(), ConstArrayView<uint32_t> ignoreEdges = ConstArrayView<uint32_t>())
+ {
bool bruteForce = m_edges.size() <= 20;
if (!bruteForce && m_cellDataOffsets.isEmpty())
bruteForce = !createGrid();
@@ -3471,7 +3671,8 @@ public:
}
#if XA_DEBUG_EXPORT_BOUNDARY_GRID
- void debugExport(const char *filename) {
+ void debugExport(const char *filename)
+ {
Array<uint8_t> image;
image.resize(m_gridWidth * m_gridHeight * 3);
for (uint32_t y = 0; y < m_gridHeight; y++) {
@@ -3493,7 +3694,8 @@ public:
#endif
private:
- bool createGrid() {
+ bool createGrid()
+ {
// Compute edge extents. Min will be the grid origin.
const uint32_t edgeCount = m_edges.size();
Extents2 edgeExtents;
@@ -3545,7 +3747,8 @@ private:
return true;
}
- void computePotentialEdges(Vector2 p1, Vector2 p2) {
+ void computePotentialEdges(Vector2 p1, Vector2 p2)
+ {
m_potentialEdges.clear();
traverse(p1, p2);
for (uint32_t j = 0; j < m_traversedCellOffsets.size(); j++) {
@@ -3563,7 +3766,8 @@ private:
}
// "A Fast Voxel Traversal Algorithm for Ray Tracing"
- void traverse(Vector2 p1, Vector2 p2) {
+ void traverse(Vector2 p1, Vector2 p2)
+ {
const Vector2 dir = p2 - p1;
const Vector2 normal = normalizeSafe(dir, Vector2(0.0f));
const int stepX = dir.x >= 0 ? 1 : -1;
@@ -3584,12 +3788,14 @@ private:
if (normal.x > kEpsilon || normal.x < -kEpsilon) {
tMaxX = (distToNextCellX * stepX) / normal.x;
tDeltaX = (m_cellSize * stepX) / normal.x;
- } else
+ }
+ else
tMaxX = tDeltaX = FLT_MAX;
if (normal.y > kEpsilon || normal.y < -kEpsilon) {
tMaxY = (distToNextCellY * stepY) / normal.y;
tDeltaY = (m_cellSize * stepY) / normal.y;
- } else
+ }
+ else
tMaxY = tDeltaY = FLT_MAX;
m_traversedCellOffsets.clear();
m_traversedCellOffsets.push_back(firstCell[0] + firstCell[1] * m_gridWidth);
@@ -3616,23 +3822,28 @@ private:
}
}
- uint32_t cellX(float x) const {
+ uint32_t cellX(float x) const
+ {
return min((uint32_t)max(0.0f, (x - m_gridOrigin.x) / m_cellSize), m_gridWidth - 1u);
}
- uint32_t cellY(float y) const {
+ uint32_t cellY(float y) const
+ {
return min((uint32_t)max(0.0f, (y - m_gridOrigin.y) / m_cellSize), m_gridHeight - 1u);
}
- Vector2 edgePosition0(uint32_t edge) const {
+ Vector2 edgePosition0(uint32_t edge) const
+ {
return m_positions[vertexAt(meshEdgeIndex0(edge))];
}
- Vector2 edgePosition1(uint32_t edge) const {
+ Vector2 edgePosition1(uint32_t edge) const
+ {
return m_positions[vertexAt(meshEdgeIndex1(edge))];
}
- uint32_t vertexAt(uint32_t index) const {
+ uint32_t vertexAt(uint32_t index) const
+ {
return m_indices.length > 0 ? m_indices[index] : index;
}
@@ -3648,13 +3859,15 @@ private:
Array<uint32_t> m_traversedCellOffsets;
};
-struct UvMeshChart {
+struct UvMeshChart
+{
Array<uint32_t> faces;
Array<uint32_t> indices;
uint32_t material;
};
-struct UvMesh {
+struct UvMesh
+{
UvMeshDecl decl;
BitArray faceIgnore;
Array<uint32_t> faceMaterials;
@@ -3664,7 +3877,8 @@ struct UvMesh {
Array<uint32_t> vertexToChartMap;
};
-struct UvMeshInstance {
+struct UvMeshInstance
+{
UvMesh *mesh;
Array<Vector2> texcoords;
};
@@ -3712,30 +3926,27 @@ struct UvMeshInstance {
* FRANCE
*/
namespace opennl {
-#define NL_NEW(T) XA_ALLOC(MemTag::OpenNL, T)
-#define NL_NEW_ARRAY(T, NB) XA_ALLOC_ARRAY(MemTag::OpenNL, T, NB)
-#define NL_RENEW_ARRAY(T, x, NB) XA_REALLOC(MemTag::OpenNL, x, T, NB)
-#define NL_DELETE(x) \
- XA_FREE(x); \
- x = nullptr
-#define NL_DELETE_ARRAY(x) \
- XA_FREE(x); \
- x = nullptr
-#define NL_CLEAR(x, T) memset(x, 0, sizeof(T));
-#define NL_CLEAR_ARRAY(T, x, NB) memset(x, 0, (size_t)(NB) * sizeof(T))
-#define NL_NEW_VECTOR(dim) XA_ALLOC_ARRAY(MemTag::OpenNL, double, dim)
-#define NL_DELETE_VECTOR(ptr) XA_FREE(ptr)
+#define NL_NEW(T) XA_ALLOC(MemTag::OpenNL, T)
+#define NL_NEW_ARRAY(T,NB) XA_ALLOC_ARRAY(MemTag::OpenNL, T, NB)
+#define NL_RENEW_ARRAY(T,x,NB) XA_REALLOC(MemTag::OpenNL, x, T, NB)
+#define NL_DELETE(x) XA_FREE(x); x = nullptr
+#define NL_DELETE_ARRAY(x) XA_FREE(x); x = nullptr
+#define NL_CLEAR(x, T) memset(x, 0, sizeof(T));
+#define NL_CLEAR_ARRAY(T,x,NB) memset(x, 0, (size_t)(NB)*sizeof(T))
+#define NL_NEW_VECTOR(dim) XA_ALLOC_ARRAY(MemTag::OpenNL, double, dim)
+#define NL_DELETE_VECTOR(ptr) XA_FREE(ptr)
struct NLMatrixStruct;
-typedef NLMatrixStruct *NLMatrix;
+typedef NLMatrixStruct * NLMatrix;
typedef void (*NLDestroyMatrixFunc)(NLMatrix M);
-typedef void (*NLMultMatrixVectorFunc)(NLMatrix M, const double *x, double *y);
+typedef void (*NLMultMatrixVectorFunc)(NLMatrix M, const double* x, double* y);
#define NL_MATRIX_SPARSE_DYNAMIC 0x1001
-#define NL_MATRIX_CRS 0x1002
-#define NL_MATRIX_OTHER 0x1006
+#define NL_MATRIX_CRS 0x1002
+#define NL_MATRIX_OTHER 0x1006
-struct NLMatrixStruct {
+struct NLMatrixStruct
+{
uint32_t m;
uint32_t n;
uint32_t type;
@@ -3745,35 +3956,39 @@ struct NLMatrixStruct {
/* Dynamic arrays for sparse row/columns */
-struct NLCoeff {
+struct NLCoeff
+{
uint32_t index;
double value;
};
-struct NLRowColumn {
+struct NLRowColumn
+{
uint32_t size;
uint32_t capacity;
- NLCoeff *coeff;
+ NLCoeff* coeff;
};
/* Compressed Row Storage */
-struct NLCRSMatrix {
+struct NLCRSMatrix
+{
uint32_t m;
uint32_t n;
uint32_t type;
NLDestroyMatrixFunc destroy_func;
NLMultMatrixVectorFunc mult_func;
- double *val;
- uint32_t *rowptr;
- uint32_t *colind;
+ double* val;
+ uint32_t* rowptr;
+ uint32_t* colind;
uint32_t nslices;
- uint32_t *sliceptr;
+ uint32_t* sliceptr;
};
/* SparseMatrix data structure */
-struct NLSparseMatrix {
+struct NLSparseMatrix
+{
uint32_t m;
uint32_t n;
uint32_t type;
@@ -3781,23 +3996,25 @@ struct NLSparseMatrix {
NLMultMatrixVectorFunc mult_func;
uint32_t diag_size;
uint32_t diag_capacity;
- NLRowColumn *row;
- NLRowColumn *column;
- double *diag;
+ NLRowColumn* row;
+ NLRowColumn* column;
+ double* diag;
uint32_t row_capacity;
uint32_t column_capacity;
};
/* NLContext data structure */
-struct NLBufferBinding {
- void *base_address;
+struct NLBufferBinding
+{
+ void* base_address;
uint32_t stride;
};
-#define NL_BUFFER_ITEM(B, i) *(double *)((void *)((char *)((B).base_address) + ((i) * (B).stride)))
+#define NL_BUFFER_ITEM(B,i) *(double*)((void*)((char*)((B).base_address)+((i)*(B).stride)))
-struct NLContext {
+struct NLContext
+{
NLBufferBinding *variable_buffer;
double *variable_value;
bool *variable_is_locked;
@@ -3821,30 +4038,35 @@ struct NLContext {
double error;
};
-static void nlDeleteMatrix(NLMatrix M) {
+static void nlDeleteMatrix(NLMatrix M)
+{
if (!M)
return;
M->destroy_func(M);
NL_DELETE(M);
}
-static void nlMultMatrixVector(NLMatrix M, const double *x, double *y) {
+static void nlMultMatrixVector(NLMatrix M, const double* x, double* y)
+{
M->mult_func(M, x, y);
}
-static void nlRowColumnConstruct(NLRowColumn *c) {
+static void nlRowColumnConstruct(NLRowColumn* c)
+{
c->size = 0;
c->capacity = 0;
c->coeff = nullptr;
}
-static void nlRowColumnDestroy(NLRowColumn *c) {
+static void nlRowColumnDestroy(NLRowColumn* c)
+{
NL_DELETE_ARRAY(c->coeff);
c->size = 0;
c->capacity = 0;
}
-static void nlRowColumnGrow(NLRowColumn *c) {
+static void nlRowColumnGrow(NLRowColumn* c)
+{
if (c->capacity != 0) {
c->capacity = 2 * c->capacity;
c->coeff = NL_RENEW_ARRAY(NLCoeff, c->coeff, c->capacity);
@@ -3855,7 +4077,8 @@ static void nlRowColumnGrow(NLRowColumn *c) {
}
}
-static void nlRowColumnAdd(NLRowColumn *c, uint32_t index, double value) {
+static void nlRowColumnAdd(NLRowColumn* c, uint32_t index, double value)
+{
for (uint32_t i = 0; i < c->size; i++) {
if (c->coeff[i].index == index) {
c->coeff[i].value += value;
@@ -3870,7 +4093,8 @@ static void nlRowColumnAdd(NLRowColumn *c, uint32_t index, double value) {
}
/* Does not check whether the index already exists */
-static void nlRowColumnAppend(NLRowColumn *c, uint32_t index, double value) {
+static void nlRowColumnAppend(NLRowColumn* c, uint32_t index, double value)
+{
if (c->size == c->capacity)
nlRowColumnGrow(c);
c->coeff[c->size].index = index;
@@ -3878,27 +4102,32 @@ static void nlRowColumnAppend(NLRowColumn *c, uint32_t index, double value) {
c->size++;
}
-static void nlRowColumnZero(NLRowColumn *c) {
+static void nlRowColumnZero(NLRowColumn* c)
+{
c->size = 0;
}
-static void nlRowColumnClear(NLRowColumn *c) {
+static void nlRowColumnClear(NLRowColumn* c)
+{
c->size = 0;
c->capacity = 0;
NL_DELETE_ARRAY(c->coeff);
}
-static int nlCoeffCompare(const void *p1, const void *p2) {
- return (((NLCoeff *)(p2))->index < ((NLCoeff *)(p1))->index);
+static int nlCoeffCompare(const void* p1, const void* p2)
+{
+ return (((NLCoeff*)(p2))->index < ((NLCoeff*)(p1))->index);
}
-static void nlRowColumnSort(NLRowColumn *c) {
+static void nlRowColumnSort(NLRowColumn* c)
+{
qsort(c->coeff, c->size, sizeof(NLCoeff), nlCoeffCompare);
}
/* CRSMatrix data structure */
-static void nlCRSMatrixDestroy(NLCRSMatrix *M) {
+static void nlCRSMatrixDestroy(NLCRSMatrix* M)
+{
NL_DELETE_ARRAY(M->val);
NL_DELETE_ARRAY(M->rowptr);
NL_DELETE_ARRAY(M->colind);
@@ -3908,7 +4137,8 @@ static void nlCRSMatrixDestroy(NLCRSMatrix *M) {
M->nslices = 0;
}
-static void nlCRSMatrixMultSlice(NLCRSMatrix *M, const double *x, double *y, uint32_t Ibegin, uint32_t Iend) {
+static void nlCRSMatrixMultSlice(NLCRSMatrix* M, const double* x, double* y, uint32_t Ibegin, uint32_t Iend)
+{
for (uint32_t i = Ibegin; i < Iend; ++i) {
double sum = 0.0;
for (uint32_t j = M->rowptr[i]; j < M->rowptr[i + 1]; ++j)
@@ -3917,13 +4147,15 @@ static void nlCRSMatrixMultSlice(NLCRSMatrix *M, const double *x, double *y, uin
}
}
-static void nlCRSMatrixMult(NLCRSMatrix *M, const double *x, double *y) {
+static void nlCRSMatrixMult(NLCRSMatrix* M, const double* x, double* y)
+{
int nslices = (int)(M->nslices);
for (int slice = 0; slice < nslices; ++slice)
nlCRSMatrixMultSlice(M, x, y, M->sliceptr[slice], M->sliceptr[slice + 1]);
}
-static void nlCRSMatrixConstruct(NLCRSMatrix *M, uint32_t m, uint32_t n, uint32_t nnz, uint32_t nslices) {
+static void nlCRSMatrixConstruct(NLCRSMatrix* M, uint32_t m, uint32_t n, uint32_t nnz, uint32_t nslices)
+{
M->m = m;
M->n = n;
M->type = NL_MATRIX_CRS;
@@ -3942,19 +4174,22 @@ static void nlCRSMatrixConstruct(NLCRSMatrix *M, uint32_t m, uint32_t n, uint32_
/* SparseMatrix data structure */
-static void nlSparseMatrixDestroyRowColumns(NLSparseMatrix *M) {
+static void nlSparseMatrixDestroyRowColumns(NLSparseMatrix* M)
+{
for (uint32_t i = 0; i < M->m; i++)
nlRowColumnDestroy(&(M->row[i]));
NL_DELETE_ARRAY(M->row);
}
-static void nlSparseMatrixDestroy(NLSparseMatrix *M) {
+static void nlSparseMatrixDestroy(NLSparseMatrix* M)
+{
XA_DEBUG_ASSERT(M->type == NL_MATRIX_SPARSE_DYNAMIC);
nlSparseMatrixDestroyRowColumns(M);
NL_DELETE_ARRAY(M->diag);
}
-static void nlSparseMatrixAdd(NLSparseMatrix *M, uint32_t i, uint32_t j, double value) {
+static void nlSparseMatrixAdd(NLSparseMatrix* M, uint32_t i, uint32_t j, double value)
+{
XA_DEBUG_ASSERT(i >= 0 && i <= M->m - 1);
XA_DEBUG_ASSERT(j >= 0 && j <= M->n - 1);
if (i == j)
@@ -3963,21 +4198,24 @@ static void nlSparseMatrixAdd(NLSparseMatrix *M, uint32_t i, uint32_t j, double
}
/* Returns the number of non-zero coefficients */
-static uint32_t nlSparseMatrixNNZ(NLSparseMatrix *M) {
+static uint32_t nlSparseMatrixNNZ(NLSparseMatrix* M)
+{
uint32_t nnz = 0;
for (uint32_t i = 0; i < M->m; i++)
nnz += M->row[i].size;
return nnz;
}
-static void nlSparseMatrixSort(NLSparseMatrix *M) {
+static void nlSparseMatrixSort(NLSparseMatrix* M)
+{
for (uint32_t i = 0; i < M->m; i++)
nlRowColumnSort(&(M->row[i]));
}
/* SparseMatrix x Vector routines, internal helper routines */
-static void nlSparseMatrix_mult_rows(NLSparseMatrix *A, const double *x, double *y) {
+static void nlSparseMatrix_mult_rows(NLSparseMatrix* A, const double* x, double* y)
+{
/*
* Note: OpenMP does not like unsigned ints
* (causes some floating point exceptions),
@@ -3985,8 +4223,8 @@ static void nlSparseMatrix_mult_rows(NLSparseMatrix *A, const double *x, double
* indices.
*/
int m = (int)(A->m);
- NLCoeff *c = nullptr;
- NLRowColumn *Ri = nullptr;
+ NLCoeff* c = nullptr;
+ NLRowColumn* Ri = nullptr;
for (int i = 0; i < m; i++) {
Ri = &(A->row[i]);
y[i] = 0;
@@ -3997,12 +4235,14 @@ static void nlSparseMatrix_mult_rows(NLSparseMatrix *A, const double *x, double
}
}
-static void nlSparseMatrixMult(NLSparseMatrix *A, const double *x, double *y) {
+static void nlSparseMatrixMult(NLSparseMatrix* A, const double* x, double* y)
+{
XA_DEBUG_ASSERT(A->type == NL_MATRIX_SPARSE_DYNAMIC);
nlSparseMatrix_mult_rows(A, x, y);
}
-static void nlSparseMatrixConstruct(NLSparseMatrix *M, uint32_t m, uint32_t n) {
+static void nlSparseMatrixConstruct(NLSparseMatrix* M, uint32_t m, uint32_t n)
+{
M->m = m;
M->n = n;
M->type = NL_MATRIX_SPARSE_DYNAMIC;
@@ -4022,23 +4262,24 @@ static void nlSparseMatrixConstruct(NLSparseMatrix *M, uint32_t m, uint32_t n) {
NL_CLEAR_ARRAY(double, M->diag, M->diag_size);
}
-static NLMatrix nlCRSMatrixNewFromSparseMatrix(NLSparseMatrix *M) {
+static NLMatrix nlCRSMatrixNewFromSparseMatrix(NLSparseMatrix* M)
+{
uint32_t nnz = nlSparseMatrixNNZ(M);
uint32_t nslices = 8; /* TODO: get number of cores */
uint32_t slice, cur_bound, cur_NNZ, cur_row;
uint32_t k;
uint32_t slice_size = nnz / nslices;
- NLCRSMatrix *CRS = NL_NEW(NLCRSMatrix);
+ NLCRSMatrix* CRS = NL_NEW(NLCRSMatrix);
NL_CLEAR(CRS, NLCRSMatrix);
nlCRSMatrixConstruct(CRS, M->m, M->n, nnz, nslices);
nlSparseMatrixSort(M);
/* Convert matrix to CRS format */
k = 0;
for (uint32_t i = 0; i < M->m; ++i) {
- NLRowColumn *Ri = &(M->row[i]);
+ NLRowColumn* Ri = &(M->row[i]);
CRS->rowptr[i] = k;
for (uint32_t ij = 0; ij < Ri->size; ij++) {
- NLCoeff *c = &(Ri->coeff[ij]);
+ NLCoeff* c = &(Ri->coeff[ij]);
CRS->val[k] = c->value;
CRS->colind[k] = c->index;
++k;
@@ -4053,8 +4294,8 @@ static NLMatrix nlCRSMatrixNewFromSparseMatrix(NLSparseMatrix *M) {
CRS->sliceptr[0] = 0;
for (slice = 1; slice < nslices; ++slice) {
while (cur_NNZ < cur_bound && cur_row < M->m) {
- ++cur_row;
cur_NNZ += CRS->rowptr[cur_row + 1] - CRS->rowptr[cur_row];
+ ++cur_row;
}
CRS->sliceptr[slice] = cur_row;
cur_bound += slice_size;
@@ -4064,17 +4305,19 @@ static NLMatrix nlCRSMatrixNewFromSparseMatrix(NLSparseMatrix *M) {
return (NLMatrix)CRS;
}
-static void nlMatrixCompress(NLMatrix *M) {
+static void nlMatrixCompress(NLMatrix* M)
+{
NLMatrix CRS = nullptr;
if ((*M)->type != NL_MATRIX_SPARSE_DYNAMIC)
return;
- CRS = nlCRSMatrixNewFromSparseMatrix((NLSparseMatrix *)*M);
+ CRS = nlCRSMatrixNewFromSparseMatrix((NLSparseMatrix*)*M);
nlDeleteMatrix(*M);
*M = CRS;
}
-static NLContext *nlNewContext() {
- NLContext *result = NL_NEW(NLContext);
+static NLContext *nlNewContext()
+{
+ NLContext* result = NL_NEW(NLContext);
NL_CLEAR(result, NLContext);
result->max_iterations = 100;
result->threshold = 1e-6;
@@ -4083,7 +4326,8 @@ static NLContext *nlNewContext() {
return result;
}
-static void nlDeleteContext(NLContext *context) {
+static void nlDeleteContext(NLContext *context)
+{
nlDeleteMatrix(context->M);
context->M = nullptr;
nlDeleteMatrix(context->P);
@@ -4101,19 +4345,22 @@ static void nlDeleteContext(NLContext *context) {
NL_DELETE(context);
}
-static double ddot(int n, const double *x, const double *y) {
+static double ddot(int n, const double *x, const double *y)
+{
double sum = 0.0;
for (int i = 0; i < n; i++)
sum += x[i] * y[i];
return sum;
}
-static void daxpy(int n, double a, const double *x, double *y) {
+static void daxpy(int n, double a, const double *x, double *y)
+{
for (int i = 0; i < n; i++)
y[i] = a * x[i] + y[i];
}
-static void dscal(int n, double a, double *x) {
+static void dscal(int n, double a, double *x)
+{
for (int i = 0; i < n; i++)
x[i] *= a;
}
@@ -4136,16 +4383,17 @@ static void dscal(int n, double a, double *x) {
* versions of matrix x vector product (CPU/GPU, sparse/dense ...)
*/
-static uint32_t nlSolveSystem_PRE_CG(NLMatrix M, NLMatrix P, double *b, double *x, double eps, uint32_t max_iter, double *sq_bnorm, double *sq_rnorm) {
- int N = (int)M->n;
- double *r = NL_NEW_VECTOR(N);
- double *d = NL_NEW_VECTOR(N);
- double *h = NL_NEW_VECTOR(N);
+static uint32_t nlSolveSystem_PRE_CG(NLMatrix M, NLMatrix P, double* b, double* x, double eps, uint32_t max_iter, double *sq_bnorm, double *sq_rnorm)
+{
+ int N = (int)M->n;
+ double* r = NL_NEW_VECTOR(N);
+ double* d = NL_NEW_VECTOR(N);
+ double* h = NL_NEW_VECTOR(N);
double *Ad = h;
uint32_t its = 0;
double rh, alpha, beta;
double b_square = ddot(N, b, b);
- double err = eps * eps * b_square;
+ double err = eps * eps*b_square;
double curr_err;
nlMultMatrixVector(M, x, r);
daxpy(N, -1., b, r);
@@ -4175,12 +4423,13 @@ static uint32_t nlSolveSystem_PRE_CG(NLMatrix M, NLMatrix P, double *b, double *
return its;
}
-static uint32_t nlSolveSystemIterative(NLContext *context, NLMatrix M, NLMatrix P, double *b_in, double *x_in, double eps, uint32_t max_iter) {
+static uint32_t nlSolveSystemIterative(NLContext *context, NLMatrix M, NLMatrix P, double* b_in, double* x_in, double eps, uint32_t max_iter)
+{
uint32_t result = 0;
double rnorm = 0.0;
double bnorm = 0.0;
- double *b = b_in;
- double *x = x_in;
+ double* b = b_in;
+ double* x = x_in;
XA_DEBUG_ASSERT(M->m == M->n);
double sq_bnorm, sq_rnorm;
result = nlSolveSystem_PRE_CG(M, P, b, x, eps, max_iter, &sq_bnorm, &sq_rnorm);
@@ -4195,9 +4444,10 @@ static uint32_t nlSolveSystemIterative(NLContext *context, NLMatrix M, NLMatrix
return result;
}
-static bool nlSolveIterative(NLContext *context) {
- double *b = context->b;
- double *x = context->x;
+static bool nlSolveIterative(NLContext *context)
+{
+ double* b = context->b;
+ double* x = context->x;
uint32_t n = context->n;
NLMatrix M = context->M;
NLMatrix P = context->P;
@@ -4209,30 +4459,34 @@ static bool nlSolveIterative(NLContext *context) {
return true;
}
-struct NLJacobiPreconditioner {
+struct NLJacobiPreconditioner
+{
uint32_t m;
uint32_t n;
uint32_t type;
NLDestroyMatrixFunc destroy_func;
NLMultMatrixVectorFunc mult_func;
- double *diag_inv;
+ double* diag_inv;
};
-static void nlJacobiPreconditionerDestroy(NLJacobiPreconditioner *M) {
+static void nlJacobiPreconditionerDestroy(NLJacobiPreconditioner* M)
+{
NL_DELETE_ARRAY(M->diag_inv);
}
-static void nlJacobiPreconditionerMult(NLJacobiPreconditioner *M, const double *x, double *y) {
+static void nlJacobiPreconditionerMult(NLJacobiPreconditioner* M, const double* x, double* y)
+{
for (uint32_t i = 0; i < M->n; ++i)
y[i] = x[i] * M->diag_inv[i];
}
-static NLMatrix nlNewJacobiPreconditioner(NLMatrix M_in) {
- NLSparseMatrix *M = nullptr;
- NLJacobiPreconditioner *result = nullptr;
+static NLMatrix nlNewJacobiPreconditioner(NLMatrix M_in)
+{
+ NLSparseMatrix* M = nullptr;
+ NLJacobiPreconditioner* result = nullptr;
XA_DEBUG_ASSERT(M_in->type == NL_MATRIX_SPARSE_DYNAMIC);
XA_DEBUG_ASSERT(M_in->m == M_in->n);
- M = (NLSparseMatrix *)M_in;
+ M = (NLSparseMatrix*)M_in;
result = NL_NEW(NLJacobiPreconditioner);
NL_CLEAR(result, NLJacobiPreconditioner);
result->m = M->m;
@@ -4250,7 +4504,8 @@ static NLMatrix nlNewJacobiPreconditioner(NLMatrix M_in) {
#define NL_NB_VARIABLES 0x101
#define NL_MAX_ITERATIONS 0x103
-static void nlSolverParameteri(NLContext *context, uint32_t pname, int param) {
+static void nlSolverParameteri(NLContext *context, uint32_t pname, int param)
+{
if (pname == NL_NB_VARIABLES) {
XA_DEBUG_ASSERT(param > 0);
context->nb_variables = (uint32_t)param;
@@ -4261,22 +4516,26 @@ static void nlSolverParameteri(NLContext *context, uint32_t pname, int param) {
}
}
-static void nlSetVariable(NLContext *context, uint32_t index, double value) {
+static void nlSetVariable(NLContext *context, uint32_t index, double value)
+{
XA_DEBUG_ASSERT(index >= 0 && index <= context->nb_variables - 1);
NL_BUFFER_ITEM(context->variable_buffer[0], index) = value;
}
-static double nlGetVariable(NLContext *context, uint32_t index) {
+static double nlGetVariable(NLContext *context, uint32_t index)
+{
XA_DEBUG_ASSERT(index >= 0 && index <= context->nb_variables - 1);
return NL_BUFFER_ITEM(context->variable_buffer[0], index);
}
-static void nlLockVariable(NLContext *context, uint32_t index) {
+static void nlLockVariable(NLContext *context, uint32_t index)
+{
XA_DEBUG_ASSERT(index >= 0 && index <= context->nb_variables - 1);
context->variable_is_locked[index] = true;
}
-static void nlVariablesToVector(NLContext *context) {
+static void nlVariablesToVector(NLContext *context)
+{
uint32_t n = context->n;
XA_DEBUG_ASSERT(context->x);
for (uint32_t k = 0; k < context->nb_systems; ++k) {
@@ -4291,7 +4550,8 @@ static void nlVariablesToVector(NLContext *context) {
}
}
-static void nlVectorToVariables(NLContext *context) {
+static void nlVectorToVariables(NLContext *context)
+{
uint32_t n = context->n;
XA_DEBUG_ASSERT(context->x);
for (uint32_t k = 0; k < context->nb_systems; ++k) {
@@ -4306,7 +4566,8 @@ static void nlVectorToVariables(NLContext *context) {
}
}
-static void nlCoefficient(NLContext *context, uint32_t index, double value) {
+static void nlCoefficient(NLContext *context, uint32_t index, double value)
+{
XA_DEBUG_ASSERT(index >= 0 && index <= context->nb_variables - 1);
if (context->variable_is_locked[index]) {
/*
@@ -4323,11 +4584,12 @@ static void nlCoefficient(NLContext *context, uint32_t index, double value) {
}
}
-#define NL_SYSTEM 0x0
-#define NL_MATRIX 0x1
-#define NL_ROW 0x2
+#define NL_SYSTEM 0x0
+#define NL_MATRIX 0x1
+#define NL_ROW 0x2
-static void nlBegin(NLContext *context, uint32_t prim) {
+static void nlBegin(NLContext *context, uint32_t prim)
+{
if (prim == NL_SYSTEM) {
XA_DEBUG_ASSERT(context->nb_variables > 0);
context->variable_buffer = NL_NEW_ARRAY(NLBufferBinding, context->nb_systems);
@@ -4336,8 +4598,8 @@ static void nlBegin(NLContext *context, uint32_t prim) {
NL_CLEAR_ARRAY(double, context->variable_value, context->nb_variables * context->nb_systems);
for (uint32_t k = 0; k < context->nb_systems; ++k) {
context->variable_buffer[k].base_address =
- context->variable_value +
- k * context->nb_variables;
+ context->variable_value +
+ k * context->nb_variables;
context->variable_buffer[k].stride = sizeof(double);
}
context->variable_is_locked = NL_NEW_ARRAY(bool, context->nb_variables);
@@ -4360,11 +4622,11 @@ static void nlBegin(NLContext *context, uint32_t prim) {
context->max_iterations = n * 5;
context->M = (NLMatrix)(NL_NEW(NLSparseMatrix));
NL_CLEAR(context->M, NLSparseMatrix);
- nlSparseMatrixConstruct((NLSparseMatrix *)(context->M), n, n);
- context->x = NL_NEW_ARRAY(double, n * context->nb_systems);
- NL_CLEAR_ARRAY(double, context->x, n * context->nb_systems);
- context->b = NL_NEW_ARRAY(double, n * context->nb_systems);
- NL_CLEAR_ARRAY(double, context->b, n * context->nb_systems);
+ nlSparseMatrixConstruct((NLSparseMatrix*)(context->M), n, n);
+ context->x = NL_NEW_ARRAY(double, n*context->nb_systems);
+ NL_CLEAR_ARRAY(double, context->x, n*context->nb_systems);
+ context->b = NL_NEW_ARRAY(double, n*context->nb_systems);
+ NL_CLEAR_ARRAY(double, context->b, n*context->nb_systems);
nlVariablesToVector(context);
nlRowColumnConstruct(&context->af);
nlRowColumnConstruct(&context->al);
@@ -4375,15 +4637,16 @@ static void nlBegin(NLContext *context, uint32_t prim) {
}
}
-static void nlEnd(NLContext *context, uint32_t prim) {
+static void nlEnd(NLContext *context, uint32_t prim)
+{
if (prim == NL_MATRIX) {
nlRowColumnClear(&context->af);
nlRowColumnClear(&context->al);
} else if (prim == NL_ROW) {
- NLRowColumn *af = &context->af;
- NLRowColumn *al = &context->al;
- NLSparseMatrix *M = (NLSparseMatrix *)context->M;
- double *b = context->b;
+ NLRowColumn* af = &context->af;
+ NLRowColumn* al = &context->al;
+ NLSparseMatrix* M = (NLSparseMatrix*)context->M;
+ double* b = context->b;
uint32_t nf = af->size;
uint32_t nl = al->size;
uint32_t n = context->n;
@@ -4404,13 +4667,14 @@ static void nlEnd(NLContext *context, uint32_t prim) {
S += al->coeff[jj].value * NL_BUFFER_ITEM(context->variable_buffer[k], j);
}
for (uint32_t jj = 0; jj < nf; jj++)
- b[k * n + af->coeff[jj].index] -= af->coeff[jj].value * S;
+ b[k*n + af->coeff[jj].index] -= af->coeff[jj].value * S;
}
context->current_row++;
}
}
-static bool nlSolve(NLContext *context) {
+static bool nlSolve(NLContext *context)
+{
nlDeleteMatrix(context->P);
context->P = nlNewJacobiPreconditioner(context->M);
nlMatrixCompress(&context->M);
@@ -4421,9 +4685,11 @@ static bool nlSolve(NLContext *context) {
} // namespace opennl
namespace raster {
-class ClippedTriangle {
+class ClippedTriangle
+{
public:
- ClippedTriangle(const Vector2 &a, const Vector2 &b, const Vector2 &c) {
+ ClippedTriangle(const Vector2 &a, const Vector2 &b, const Vector2 &c)
+ {
m_numVertices = 3;
m_activeVertexBuffer = 0;
m_verticesA[0] = a;
@@ -4434,20 +4700,20 @@ public:
m_area = 0;
}
- void clipHorizontalPlane(float offset, float clipdirection) {
- Vector2 *v = m_vertexBuffers[m_activeVertexBuffer];
+ void clipHorizontalPlane(float offset, float clipdirection)
+ {
+ Vector2 *v = m_vertexBuffers[m_activeVertexBuffer];
m_activeVertexBuffer ^= 1;
Vector2 *v2 = m_vertexBuffers[m_activeVertexBuffer];
v[m_numVertices] = v[0];
- float dy2, dy1 = offset - v[0].y;
- int dy2in, dy1in = clipdirection * dy1 >= 0;
- uint32_t p = 0;
+ float dy2, dy1 = offset - v[0].y;
+ int dy2in, dy1in = clipdirection * dy1 >= 0;
+ uint32_t p = 0;
for (uint32_t k = 0; k < m_numVertices; k++) {
- dy2 = offset - v[k + 1].y;
+ dy2 = offset - v[k + 1].y;
dy2in = clipdirection * dy2 >= 0;
- if (dy1in)
- v2[p++] = v[k];
- if (dy1in + dy2in == 1) { // not both in/out
+ if (dy1in) v2[p++] = v[k];
+ if ( dy1in + dy2in == 1 ) { // not both in/out
float dx = v[k + 1].x - v[k].x;
float dy = v[k + 1].y - v[k].y;
v2[p++] = Vector2(v[k].x + dy1 * (dx / dy), offset);
@@ -4458,20 +4724,20 @@ public:
m_numVertices = p;
}
- void clipVerticalPlane(float offset, float clipdirection) {
- Vector2 *v = m_vertexBuffers[m_activeVertexBuffer];
+ void clipVerticalPlane(float offset, float clipdirection)
+ {
+ Vector2 *v = m_vertexBuffers[m_activeVertexBuffer];
m_activeVertexBuffer ^= 1;
Vector2 *v2 = m_vertexBuffers[m_activeVertexBuffer];
v[m_numVertices] = v[0];
- float dx2, dx1 = offset - v[0].x;
- int dx2in, dx1in = clipdirection * dx1 >= 0;
- uint32_t p = 0;
+ float dx2, dx1 = offset - v[0].x;
+ int dx2in, dx1in = clipdirection * dx1 >= 0;
+ uint32_t p = 0;
for (uint32_t k = 0; k < m_numVertices; k++) {
dx2 = offset - v[k + 1].x;
dx2in = clipdirection * dx2 >= 0;
- if (dx1in)
- v2[p++] = v[k];
- if (dx1in + dx2in == 1) { // not both in/out
+ if (dx1in) v2[p++] = v[k];
+ if ( dx1in + dx2in == 1 ) { // not both in/out
float dx = v[k + 1].x - v[k].x;
float dy = v[k + 1].y - v[k].y;
v2[p++] = Vector2(offset, v[k].y + dx1 * (dy / dx));
@@ -4482,8 +4748,9 @@ public:
m_numVertices = p;
}
- void computeArea() {
- Vector2 *v = m_vertexBuffers[m_activeVertexBuffer];
+ void computeArea()
+ {
+ Vector2 *v = m_vertexBuffers[m_activeVertexBuffer];
v[m_numVertices] = v[0];
m_area = 0;
float centroidx = 0, centroidy = 0;
@@ -4497,7 +4764,8 @@ public:
m_area = 0.5f * fabsf(m_area);
}
- void clipAABox(float x0, float y0, float x1, float y1) {
+ void clipAABox(float x0, float y0, float x1, float y1)
+ {
clipVerticalPlane(x0, -1);
clipHorizontalPlane(y0, -1);
clipVerticalPlane(x1, 1);
@@ -4505,7 +4773,8 @@ public:
computeArea();
}
- float area() const {
+ float area() const
+ {
return m_area;
}
@@ -4522,9 +4791,10 @@ private:
typedef bool (*SamplingCallback)(void *param, int x, int y);
/// A triangle for rasterization.
-struct Triangle {
- Triangle(const Vector2 &_v0, const Vector2 &_v1, const Vector2 &_v2) :
- v1(_v0), v2(_v2), v3(_v1), n1(0.0f), n2(0.0f), n3(0.0f) {
+struct Triangle
+{
+ Triangle(const Vector2 &_v0, const Vector2 &_v1, const Vector2 &_v2) : v1(_v0), v2(_v2), v3(_v1), n1(0.0f), n2(0.0f), n3(0.0f)
+ {
// make sure every triangle is front facing.
flipBackface();
// Compute deltas.
@@ -4532,7 +4802,8 @@ struct Triangle {
computeUnitInwardNormals();
}
- bool isValid() {
+ bool isValid()
+ {
const Vector2 e0 = v3 - v1;
const Vector2 e1 = v2 - v1;
const float area = e0.y * e1.x - e1.y * e0.x;
@@ -4540,17 +4811,18 @@ struct Triangle {
}
// extents has to be multiple of BK_SIZE!!
- bool drawAA(const Vector2 &extents, SamplingCallback cb, void *param) {
- const float PX_INSIDE = 1.0f / sqrtf(2.0f);
- const float PX_OUTSIDE = -1.0f / sqrtf(2.0f);
+ bool drawAA(const Vector2 &extents, SamplingCallback cb, void *param)
+ {
+ const float PX_INSIDE = 1.0f/sqrtf(2.0f);
+ const float PX_OUTSIDE = -1.0f/sqrtf(2.0f);
const float BK_SIZE = 8;
- const float BK_INSIDE = sqrtf(BK_SIZE * BK_SIZE / 2.0f);
- const float BK_OUTSIDE = -sqrtf(BK_SIZE * BK_SIZE / 2.0f);
+ const float BK_INSIDE = sqrtf(BK_SIZE*BK_SIZE/2.0f);
+ const float BK_OUTSIDE = -sqrtf(BK_SIZE*BK_SIZE/2.0f);
// Bounding rectangle
float minx = floorf(max(min3(v1.x, v2.x, v3.x), 0.0f));
float miny = floorf(max(min3(v1.y, v2.y, v3.y), 0.0f));
- float maxx = ceilf(min(max3(v1.x, v2.x, v3.x), extents.x - 1.0f));
- float maxy = ceilf(min(max3(v1.y, v2.y, v3.y), extents.y - 1.0f));
+ float maxx = ceilf( min(max3(v1.x, v2.x, v3.x), extents.x - 1.0f));
+ float maxy = ceilf( min(max3(v1.y, v2.y, v3.y), extents.y - 1.0f));
// There's no reason to align the blocks to the viewport, instead we align them to the origin of the triangle bounds.
minx = floorf(minx);
miny = floorf(miny);
@@ -4575,10 +4847,9 @@ struct Triangle {
float bC = C2 + n2.x * xc + n2.y * yc;
float cC = C3 + n3.x * xc + n3.y * yc;
// Skip block when outside an edge
- if ((aC <= BK_OUTSIDE) || (bC <= BK_OUTSIDE) || (cC <= BK_OUTSIDE))
- continue;
+ if ( (aC <= BK_OUTSIDE) || (bC <= BK_OUTSIDE) || (cC <= BK_OUTSIDE) ) continue;
// Accept whole block when totally covered
- if ((aC >= BK_INSIDE) && (bC >= BK_INSIDE) && (cC >= BK_INSIDE)) {
+ if ( (aC >= BK_INSIDE) && (bC >= BK_INSIDE) && (cC >= BK_INSIDE) ) {
for (float y = y0; y < y0 + BK_SIZE; y++) {
for (float x = x0; x < x0 + BK_SIZE; x++) {
if (!cb(param, (int)x, (int)y))
@@ -4621,9 +4892,10 @@ struct Triangle {
}
private:
- void flipBackface() {
+ void flipBackface()
+ {
// check if triangle is backfacing, if so, swap two vertices
- if (((v3.x - v1.x) * (v2.y - v1.y) - (v3.y - v1.y) * (v2.x - v1.x)) < 0) {
+ if ( ((v3.x - v1.x) * (v2.y - v1.y) - (v3.y - v1.y) * (v2.x - v1.x)) < 0 ) {
Vector2 hv = v1;
v1 = v2;
v2 = hv; // swap pos
@@ -4631,7 +4903,8 @@ private:
}
// compute unit inward normals for each edge.
- void computeUnitInwardNormals() {
+ void computeUnitInwardNormals()
+ {
n1 = v1 - v2;
n1 = Vector2(-n1.y, n1.x);
n1 = n1 * (1.0f / sqrtf(dot(n1, n1)));
@@ -4649,7 +4922,8 @@ private:
};
// Process the given triangle. Returns false if rasterization was interrupted by the callback.
-static bool drawTriangle(const Vector2 &extents, const Vector2 v[3], SamplingCallback cb, void *param) {
+static bool drawTriangle(const Vector2 &extents, const Vector2 v[3], SamplingCallback cb, void *param)
+{
Triangle tri(v[0], v[1], v[2]);
// @@ It would be nice to have a conservative drawing mode that enlarges the triangle extents by one texel and is able to handle degenerate triangles.
// @@ Maybe the simplest thing to do would be raster triangle edges.
@@ -4664,19 +4938,22 @@ namespace segment {
// - Insertion is o(n)
// - Smallest element goes at the end, so that popping it is o(1).
-struct CostQueue {
- CostQueue(uint32_t size = UINT32_MAX) :
- m_maxSize(size), m_pairs(MemTag::SegmentAtlasChartCandidates) {}
+struct CostQueue
+{
+ CostQueue(uint32_t size = UINT32_MAX) : m_maxSize(size), m_pairs(MemTag::SegmentAtlasChartCandidates) {}
- float peekCost() const {
+ float peekCost() const
+ {
return m_pairs.back().cost;
}
- uint32_t peekFace() const {
+ uint32_t peekFace() const
+ {
return m_pairs.back().face;
}
- void push(float cost, uint32_t face) {
+ void push(float cost, uint32_t face)
+ {
const Pair p = { cost, face };
if (m_pairs.isEmpty() || cost < peekCost())
m_pairs.push_back(p);
@@ -4693,25 +4970,29 @@ struct CostQueue {
}
}
- uint32_t pop() {
+ uint32_t pop()
+ {
XA_DEBUG_ASSERT(!m_pairs.isEmpty());
uint32_t f = m_pairs.back().face;
m_pairs.pop_back();
return f;
}
- XA_INLINE void clear() {
+ XA_INLINE void clear()
+ {
m_pairs.clear();
}
- XA_INLINE uint32_t count() const {
+ XA_INLINE uint32_t count() const
+ {
return m_pairs.size();
}
private:
const uint32_t m_maxSize;
- struct Pair {
+ struct Pair
+ {
float cost;
uint32_t face;
};
@@ -4719,7 +5000,8 @@ private:
Array<Pair> m_pairs;
};
-struct AtlasData {
+struct AtlasData
+{
ChartOptions options;
const Mesh *mesh = nullptr;
Array<float> edgeDihedralAngles;
@@ -4729,10 +5011,10 @@ struct AtlasData {
Array<Vector3> faceNormals;
BitArray isFaceInChart;
- AtlasData() :
- edgeDihedralAngles(MemTag::SegmentAtlasMeshData), edgeLengths(MemTag::SegmentAtlasMeshData), faceAreas(MemTag::SegmentAtlasMeshData), faceNormals(MemTag::SegmentAtlasMeshData) {}
+ AtlasData() : edgeDihedralAngles(MemTag::SegmentAtlasMeshData), edgeLengths(MemTag::SegmentAtlasMeshData), faceAreas(MemTag::SegmentAtlasMeshData), faceNormals(MemTag::SegmentAtlasMeshData) {}
- void compute() {
+ void compute()
+ {
const uint32_t faceCount = mesh->faceCount();
const uint32_t edgeCount = mesh->edgeCount();
edgeDihedralAngles.resize(edgeCount);
@@ -4773,18 +5055,20 @@ struct AtlasData {
};
// If MeshDecl::vertexUvData is set on input meshes, find charts by floodfilling faces in world/model space without crossing UV seams.
-struct OriginalUvCharts {
- OriginalUvCharts(AtlasData &data) :
- m_data(data) {}
+struct OriginalUvCharts
+{
+ OriginalUvCharts(AtlasData &data) : m_data(data) {}
uint32_t chartCount() const { return m_charts.size(); }
const Basis &chartBasis(uint32_t chartIndex) const { return m_chartBasis[chartIndex]; }
- ConstArrayView<uint32_t> chartFaces(uint32_t chartIndex) const {
+ ConstArrayView<uint32_t> chartFaces(uint32_t chartIndex) const
+ {
const Chart &chart = m_charts[chartIndex];
return ConstArrayView<uint32_t>(&m_chartFaces[chart.firstFace], chart.faceCount);
}
- void compute() {
+ void compute()
+ {
m_charts.clear();
m_chartFaces.clear();
const Mesh *mesh = m_data.mesh;
@@ -4805,7 +5089,8 @@ struct OriginalUvCharts {
}
// Compute basis for each chart.
m_chartBasis.resize(m_charts.size());
- for (uint32_t c = 0; c < m_charts.size(); c++) {
+ for (uint32_t c = 0; c < m_charts.size(); c++)
+ {
const Chart &chart = m_charts[c];
m_tempPoints.resize(chart.faceCount * 3);
for (uint32_t f = 0; f < chart.faceCount; f++) {
@@ -4818,11 +5103,13 @@ struct OriginalUvCharts {
}
private:
- struct Chart {
+ struct Chart
+ {
uint32_t firstFace, faceCount;
};
- void floodfillFaces(Chart &chart) {
+ void floodfillFaces(Chart &chart)
+ {
const bool isFaceAreaNegative = m_data.faceUvAreas[m_chartFaces[chart.firstFace]] < 0.0f;
for (;;) {
bool newFaceAdded = false;
@@ -4868,13 +5155,14 @@ static uint32_t s_planarRegionsCurrentRegion;
static uint32_t s_planarRegionsCurrentVertex;
#endif
-struct PlanarCharts {
- PlanarCharts(AtlasData &data) :
- m_data(data), m_nextRegionFace(MemTag::SegmentAtlasPlanarRegions), m_faceToRegionId(MemTag::SegmentAtlasPlanarRegions) {}
+struct PlanarCharts
+{
+ PlanarCharts(AtlasData &data) : m_data(data), m_nextRegionFace(MemTag::SegmentAtlasPlanarRegions), m_faceToRegionId(MemTag::SegmentAtlasPlanarRegions) {}
const Basis &chartBasis(uint32_t chartIndex) const { return m_chartBasis[chartIndex]; }
uint32_t chartCount() const { return m_charts.size(); }
- ConstArrayView<uint32_t> chartFaces(uint32_t chartIndex) const {
+ ConstArrayView<uint32_t> chartFaces(uint32_t chartIndex) const
+ {
const Chart &chart = m_charts[chartIndex];
return ConstArrayView<uint32_t>(&m_chartFaces[chart.firstFace], chart.faceCount);
}
@@ -4883,7 +5171,8 @@ struct PlanarCharts {
uint32_t nextRegionFace(uint32_t face) const { return m_nextRegionFace[face]; }
float regionArea(uint32_t region) const { return m_regionAreas[region]; }
- void compute() {
+ void compute()
+ {
const uint32_t faceCount = m_data.mesh->faceCount();
// Precompute regions of coplanar incident faces.
m_regionFirstFace.clear();
@@ -4983,7 +5272,8 @@ struct PlanarCharts {
if (!createChart)
break;
face = m_nextRegionFace[face];
- } while (face != firstRegionFace);
+ }
+ while (face != firstRegionFace);
// Create a chart.
if (createChart) {
Chart chart;
@@ -4995,13 +5285,15 @@ struct PlanarCharts {
m_chartFaces.push_back(face);
chart.faceCount++;
face = m_nextRegionFace[face];
- } while (face != firstRegionFace);
+ }
+ while (face != firstRegionFace);
m_charts.push_back(chart);
}
}
// Compute basis for each chart using the first face normal (all faces have the same normal).
m_chartBasis.resize(m_charts.size());
- for (uint32_t c = 0; c < m_charts.size(); c++) {
+ for (uint32_t c = 0; c < m_charts.size(); c++)
+ {
const uint32_t face = m_chartFaces[m_charts[c].firstFace];
Basis &basis = m_chartBasis[c];
basis.normal = m_data.faceNormals[face];
@@ -5011,7 +5303,8 @@ struct PlanarCharts {
}
private:
- struct Chart {
+ struct Chart
+ {
uint32_t firstFace, faceCount;
};
@@ -5025,11 +5318,12 @@ private:
Array<Basis> m_chartBasis;
};
-struct ClusteredCharts {
- ClusteredCharts(AtlasData &data, const PlanarCharts &planarCharts) :
- m_data(data), m_planarCharts(planarCharts), m_texcoords(MemTag::SegmentAtlasMeshData), m_bestTriangles(10), m_placingSeeds(false) {}
+struct ClusteredCharts
+{
+ ClusteredCharts(AtlasData &data, const PlanarCharts &planarCharts) : m_data(data), m_planarCharts(planarCharts), m_texcoords(MemTag::SegmentAtlasMeshData), m_bestTriangles(10), m_placingSeeds(false) {}
- ~ClusteredCharts() {
+ ~ClusteredCharts()
+ {
const uint32_t chartCount = m_charts.size();
for (uint32_t i = 0; i < chartCount; i++) {
m_charts[i]->~Chart();
@@ -5041,7 +5335,8 @@ struct ClusteredCharts {
ConstArrayView<uint32_t> chartFaces(uint32_t chartIndex) const { return m_charts[chartIndex]->faces; }
const Basis &chartBasis(uint32_t chartIndex) const { return m_charts[chartIndex]->basis; }
- void compute() {
+ void compute()
+ {
const uint32_t faceCount = m_data.mesh->faceCount();
m_facesLeft = 0;
for (uint32_t i = 0; i < faceCount; i++) {
@@ -5087,9 +5382,9 @@ struct ClusteredCharts {
}
private:
- struct Chart {
- Chart() :
- faces(MemTag::SegmentAtlasChartFaces) {}
+ struct Chart
+ {
+ Chart() : faces(MemTag::SegmentAtlasChartFaces) {}
int id = -1;
Basis basis; // Best fit normal.
@@ -5103,7 +5398,8 @@ private:
uint32_t seed;
};
- void placeSeeds(float threshold) {
+ void placeSeeds(float threshold)
+ {
XA_PROFILE_START(clusteredChartsPlaceSeeds)
m_placingSeeds = true;
// Instead of using a predefiened number of seeds:
@@ -5119,7 +5415,8 @@ private:
}
// Returns true if any of the charts can grow more.
- void growCharts(float threshold) {
+ void growCharts(float threshold)
+ {
XA_PROFILE_START(clusteredChartsGrow)
for (;;) {
if (m_facesLeft == 0)
@@ -5165,7 +5462,8 @@ private:
XA_PROFILE_END(clusteredChartsGrow)
}
- void resetCharts() {
+ void resetCharts()
+ {
XA_PROFILE_START(clusteredChartsReset)
const uint32_t faceCount = m_data.mesh->faceCount();
for (uint32_t i = 0; i < faceCount; i++) {
@@ -5196,7 +5494,8 @@ private:
XA_PROFILE_END(clusteredChartsReset)
}
- bool relocateSeeds() {
+ bool relocateSeeds()
+ {
XA_PROFILE_START(clusteredChartsRelocateSeeds)
bool anySeedChanged = false;
const uint32_t chartCount = m_charts.size();
@@ -5209,7 +5508,8 @@ private:
return anySeedChanged;
}
- void fillHoles(float threshold) {
+ void fillHoles(float threshold)
+ {
XA_PROFILE_START(clusteredChartsFillHoles)
while (m_facesLeft > 0)
createChart(threshold);
@@ -5217,7 +5517,8 @@ private:
}
#if XA_MERGE_CHARTS
- void mergeCharts() {
+ void mergeCharts()
+ {
XA_PROFILE_START(clusteredChartsMerge)
const uint32_t chartCount = m_charts.size();
// Merge charts progressively until there's none left to merge.
@@ -5286,7 +5587,7 @@ private:
if (m_sharedBoundaryLengthsNoSeams[cc] > 0.0f && equal(m_sharedBoundaryLengthsNoSeams[cc], chart2->boundaryLength, kEpsilon))
goto merge;
if (m_sharedBoundaryLengths[cc] > 0.2f * max(0.0f, chart->boundaryLength - externalBoundaryLength) ||
- m_sharedBoundaryLengths[cc] > 0.75f * chart2->boundaryLength)
+ m_sharedBoundaryLengths[cc] > 0.75f * chart2->boundaryLength)
goto merge;
continue;
merge:
@@ -5324,7 +5625,8 @@ private:
#endif
private:
- void createChart(float threshold) {
+ void createChart(float threshold)
+ {
Chart *chart = XA_NEW(MemTag::Default, Chart);
chart->id = (int)m_charts.size();
m_charts.push_back(chart);
@@ -5355,13 +5657,15 @@ private:
}
}
- bool isChartBoundaryEdge(const Chart *chart, uint32_t edge) const {
+ bool isChartBoundaryEdge(const Chart *chart, uint32_t edge) const
+ {
const uint32_t oppositeEdge = m_data.mesh->oppositeEdge(edge);
const uint32_t oppositeFace = meshEdgeFace(oppositeEdge);
return oppositeEdge == UINT32_MAX || m_faceCharts[oppositeFace] != chart->id;
}
- bool computeChartBasis(Chart *chart, Basis *basis) {
+ bool computeChartBasis(Chart *chart, Basis *basis)
+ {
const uint32_t faceCount = chart->faces.size();
m_tempPoints.resize(chart->faces.size() * 3);
for (uint32_t i = 0; i < faceCount; i++) {
@@ -5372,7 +5676,8 @@ private:
return Fit::computeBasis(m_tempPoints, basis);
}
- bool isFaceFlipped(uint32_t face) const {
+ bool isFaceFlipped(uint32_t face) const
+ {
const Vector2 &v1 = m_texcoords[face * 3 + 0];
const Vector2 &v2 = m_texcoords[face * 3 + 1];
const Vector2 &v3 = m_texcoords[face * 3 + 2];
@@ -5380,7 +5685,8 @@ private:
return parametricArea < 0.0f;
}
- void parameterizeChart(const Chart *chart) {
+ void parameterizeChart(const Chart *chart)
+ {
const uint32_t faceCount = chart->faces.size();
for (uint32_t i = 0; i < faceCount; i++) {
const uint32_t face = chart->faces[i];
@@ -5393,7 +5699,8 @@ private:
}
// m_faceCharts for the chart faces must be set to the chart ID. Needed to compute boundary edges.
- bool isChartParameterizationValid(const Chart *chart) {
+ bool isChartParameterizationValid(const Chart *chart)
+ {
const uint32_t faceCount = chart->faces.size();
// Check for flipped faces in the parameterization. OK if all are flipped.
uint32_t flippedFaceCount = 0;
@@ -5427,7 +5734,8 @@ private:
return true;
}
- bool addFaceToChart(Chart *chart, uint32_t face) {
+ bool addFaceToChart(Chart *chart, uint32_t face)
+ {
XA_DEBUG_ASSERT(!m_data.isFaceInChart.get(face));
const uint32_t oldFaceCount = chart->faces.size();
const bool firstFace = oldFaceCount == 0;
@@ -5505,7 +5813,8 @@ private:
}
// Returns true if the seed has changed.
- bool relocateSeed(Chart *chart) {
+ bool relocateSeed(Chart *chart)
+ {
// Find the first N triangles that fit the proxy best.
const uint32_t faceCount = chart->faces.size();
m_bestTriangles.clear();
@@ -5535,7 +5844,8 @@ private:
}
// Cost is combined metrics * weights.
- float computeCost(Chart *chart, uint32_t face) const {
+ float computeCost(Chart *chart, uint32_t face) const
+ {
// Estimate boundary length and area:
const float newChartArea = computeArea(chart, face);
const float newBoundaryLength = computeBoundaryLength(chart, face);
@@ -5571,20 +5881,23 @@ private:
// Returns a value in [0-1].
// 0 if face normal is coplanar to the chart's best fit normal.
// 1 if face normal is perpendicular.
- float computeNormalDeviationMetric(Chart *chart, uint32_t face) const {
+ float computeNormalDeviationMetric(Chart *chart, uint32_t face) const
+ {
// All faces in coplanar regions have the same normal, can use any face.
const Vector3 faceNormal = m_data.faceNormals[face];
// Use plane fitting metric for now:
return min(1.0f - dot(faceNormal, chart->basis.normal), 1.0f); // @@ normal deviations should be weighted by face area
}
- float computeRoundnessMetric(Chart *chart, float newBoundaryLength, float newChartArea) const {
+ float computeRoundnessMetric(Chart *chart, float newBoundaryLength, float newChartArea) const
+ {
const float oldRoundness = square(chart->boundaryLength) / chart->area;
const float newRoundness = square(newBoundaryLength) / newChartArea;
return 1.0f - oldRoundness / newRoundness;
}
- float computeStraightnessMetric(Chart *chart, uint32_t firstFace) const {
+ float computeStraightnessMetric(Chart *chart, uint32_t firstFace) const
+ {
float l_out = 0.0f; // Length of firstFace planar region boundary that doesn't border the chart.
float l_in = 0.0f; // Length that does border the chart.
const uint32_t planarRegionId = m_planarCharts.regionIdFromFace(firstFace);
@@ -5613,7 +5926,8 @@ private:
#endif
}
- bool isNormalSeam(uint32_t edge) const {
+ bool isNormalSeam(uint32_t edge) const
+ {
const uint32_t oppositeEdge = m_data.mesh->oppositeEdge(edge);
if (oppositeEdge == UINT32_MAX)
return false; // boundary edge
@@ -5633,7 +5947,8 @@ private:
return !equal(m_data.faceNormals[f0], m_data.faceNormals[f1], kNormalEpsilon);
}
- float computeNormalSeamMetric(Chart *chart, uint32_t firstFace) const {
+ float computeNormalSeamMetric(Chart *chart, uint32_t firstFace) const
+ {
float seamFactor = 0.0f, totalLength = 0.0f;
uint32_t face = firstFace;
for (;;) {
@@ -5673,7 +5988,8 @@ private:
return seamFactor / totalLength;
}
- float computeTextureSeamMetric(Chart *chart, uint32_t firstFace) const {
+ float computeTextureSeamMetric(Chart *chart, uint32_t firstFace) const
+ {
float seamLength = 0.0f, totalLength = 0.0f;
uint32_t face = firstFace;
for (;;) {
@@ -5699,7 +6015,8 @@ private:
return seamLength / totalLength;
}
- float computeArea(Chart *chart, uint32_t firstFace) const {
+ float computeArea(Chart *chart, uint32_t firstFace) const
+ {
float area = chart->area;
uint32_t face = firstFace;
for (;;) {
@@ -5711,7 +6028,8 @@ private:
return area;
}
- float computeBoundaryLength(Chart *chart, uint32_t firstFace) const {
+ float computeBoundaryLength(Chart *chart, uint32_t firstFace) const
+ {
float boundaryLength = chart->boundaryLength;
// Add new edges, subtract edges shared with the chart.
const uint32_t planarRegionId = m_planarCharts.regionIdFromFace(firstFace);
@@ -5732,10 +6050,11 @@ private:
if (face == firstFace)
break;
}
- return max(0.0f, boundaryLength); // @@ Hack!
+ return max(0.0f, boundaryLength); // @@ Hack!
}
- bool mergeChart(Chart *owner, Chart *chart, float sharedBoundaryLength) {
+ bool mergeChart(Chart *owner, Chart *chart, float sharedBoundaryLength)
+ {
const uint32_t oldOwnerFaceCount = owner->faces.size();
const uint32_t chartFaceCount = chart->faces.size();
owner->faces.push_back(chart->faces);
@@ -5793,8 +6112,10 @@ private:
bool m_placingSeeds;
};
-struct ChartGeneratorType {
- enum Enum {
+struct ChartGeneratorType
+{
+ enum Enum
+ {
OriginalUv,
Planar,
Clustered,
@@ -5802,15 +6123,17 @@ struct ChartGeneratorType {
};
};
-struct Atlas {
- Atlas() :
- m_originalUvCharts(m_data), m_planarCharts(m_data), m_clusteredCharts(m_data, m_planarCharts) {}
+struct Atlas
+{
+ Atlas() : m_originalUvCharts(m_data), m_planarCharts(m_data), m_clusteredCharts(m_data, m_planarCharts) {}
- uint32_t chartCount() const {
+ uint32_t chartCount() const
+ {
return m_originalUvCharts.chartCount() + m_planarCharts.chartCount() + m_clusteredCharts.chartCount();
}
- ConstArrayView<uint32_t> chartFaces(uint32_t chartIndex) const {
+ ConstArrayView<uint32_t> chartFaces(uint32_t chartIndex) const
+ {
if (chartIndex < m_originalUvCharts.chartCount())
return m_originalUvCharts.chartFaces(chartIndex);
chartIndex -= m_originalUvCharts.chartCount();
@@ -5820,7 +6143,8 @@ struct Atlas {
return m_clusteredCharts.chartFaces(chartIndex);
}
- const Basis &chartBasis(uint32_t chartIndex) const {
+ const Basis &chartBasis(uint32_t chartIndex) const
+ {
if (chartIndex < m_originalUvCharts.chartCount())
return m_originalUvCharts.chartBasis(chartIndex);
chartIndex -= m_originalUvCharts.chartCount();
@@ -5830,7 +6154,8 @@ struct Atlas {
return m_clusteredCharts.chartBasis(chartIndex);
}
- ChartGeneratorType::Enum chartGeneratorType(uint32_t chartIndex) const {
+ ChartGeneratorType::Enum chartGeneratorType(uint32_t chartIndex) const
+ {
if (chartIndex < m_originalUvCharts.chartCount())
return ChartGeneratorType::OriginalUv;
chartIndex -= m_originalUvCharts.chartCount();
@@ -5839,7 +6164,8 @@ struct Atlas {
return ChartGeneratorType::Clustered;
}
- void reset(const Mesh *mesh, const ChartOptions &options) {
+ void reset(const Mesh *mesh, const ChartOptions &options)
+ {
XA_PROFILE_START(buildAtlasInit)
m_data.options = options;
m_data.mesh = mesh;
@@ -5847,7 +6173,8 @@ struct Atlas {
XA_PROFILE_END(buildAtlasInit)
}
- void compute() {
+ void compute()
+ {
if (m_data.options.useInputMeshUvs) {
XA_PROFILE_START(originalUvCharts)
m_originalUvCharts.compute();
@@ -5868,17 +6195,19 @@ private:
ClusteredCharts m_clusteredCharts;
};
-struct ComputeUvMeshChartsTaskArgs {
+struct ComputeUvMeshChartsTaskArgs
+{
UvMesh *mesh;
Progress *progress;
};
// Charts are found by floodfilling faces without crossing UV seams.
-struct ComputeUvMeshChartsTask {
- ComputeUvMeshChartsTask(ComputeUvMeshChartsTaskArgs *args) :
- m_mesh(args->mesh), m_progress(args->progress), m_uvToEdgeMap(MemTag::Default, m_mesh->indices.size()), m_faceAssigned(m_mesh->indices.size() / 3) {}
+struct ComputeUvMeshChartsTask
+{
+ ComputeUvMeshChartsTask(ComputeUvMeshChartsTaskArgs *args) : m_mesh(args->mesh), m_progress(args->progress), m_uvToEdgeMap(MemTag::Default, m_mesh->indices.size()), m_faceAssigned(m_mesh->indices.size() / 3) {}
- void run() {
+ void run()
+ {
const uint32_t vertexCount = m_mesh->texcoords.size();
const uint32_t indexCount = m_mesh->indices.size();
const uint32_t faceCount = indexCount / 3;
@@ -5932,7 +6261,8 @@ struct ComputeUvMeshChartsTask {
private:
// The chart at chartIndex doesn't have to exist yet.
- bool canAddFaceToChart(uint32_t chartIndex, uint32_t face) const {
+ bool canAddFaceToChart(uint32_t chartIndex, uint32_t face) const
+ {
if (m_faceAssigned.get(face))
return false; // Already assigned to a chart.
if (m_mesh->faceIgnore.get(face))
@@ -5949,7 +6279,8 @@ private:
return true;
}
- void addFaceToChart(uint32_t chartIndex, uint32_t face) {
+ void addFaceToChart(uint32_t chartIndex, uint32_t face)
+ {
UvMeshChart *chart = m_mesh->charts[chartIndex];
m_faceAssigned.set(face);
chart->faces.push_back(face);
@@ -5960,20 +6291,22 @@ private:
}
}
- UvMesh *const m_mesh;
- Progress *const m_progress;
+ UvMesh * const m_mesh;
+ Progress * const m_progress;
HashMap<Vector2> m_uvToEdgeMap; // Face is edge / 3.
BitArray m_faceAssigned;
};
-static void runComputeUvMeshChartsTask(void * /*groupUserData*/, void *taskUserData) {
+static void runComputeUvMeshChartsTask(void * /*groupUserData*/, void *taskUserData)
+{
XA_PROFILE_START(computeChartsThread)
ComputeUvMeshChartsTask task((ComputeUvMeshChartsTaskArgs *)taskUserData);
task.run();
XA_PROFILE_END(computeChartsThread)
}
-static bool computeUvMeshCharts(TaskScheduler *taskScheduler, ArrayView<UvMesh *> meshes, ProgressFunc progressFunc, void *progressUserData) {
+static bool computeUvMeshCharts(TaskScheduler *taskScheduler, ArrayView<UvMesh *> meshes, ProgressFunc progressFunc, void *progressUserData)
+{
uint32_t totalFaceCount = 0;
for (uint32_t i = 0; i < meshes.length; i++)
totalFaceCount += meshes[i]->indices.size() / 3;
@@ -5981,7 +6314,8 @@ static bool computeUvMeshCharts(TaskScheduler *taskScheduler, ArrayView<UvMesh *
TaskGroupHandle taskGroup = taskScheduler->createTaskGroup(nullptr, meshes.length);
Array<ComputeUvMeshChartsTaskArgs> taskArgs;
taskArgs.resize(meshes.length);
- for (uint32_t i = 0; i < meshes.length; i++) {
+ for (uint32_t i = 0; i < meshes.length; i++)
+ {
ComputeUvMeshChartsTaskArgs &args = taskArgs[i];
args.mesh = meshes[i];
args.progress = &progress;
@@ -5999,7 +6333,8 @@ static bool computeUvMeshCharts(TaskScheduler *taskScheduler, ArrayView<UvMesh *
namespace param {
// Fast sweep in 3 directions
-static bool findApproximateDiameterVertices(Mesh *mesh, uint32_t *a, uint32_t *b) {
+static bool findApproximateDiameterVertices(Mesh *mesh, uint32_t *a, uint32_t *b)
+{
XA_DEBUG_ASSERT(a != nullptr);
XA_DEBUG_ASSERT(b != nullptr);
const uint32_t vertexCount = mesh->vertexCount();
@@ -6056,7 +6391,8 @@ static bool findApproximateDiameterVertices(Mesh *mesh, uint32_t *a, uint32_t *b
// From OpenNL LSCM example.
// Computes the coordinates of the vertices of a triangle in a local 2D orthonormal basis of the triangle's plane.
-static void projectTriangle(Vector3 p0, Vector3 p1, Vector3 p2, Vector2 *z0, Vector2 *z1, Vector2 *z2) {
+static void projectTriangle(Vector3 p0, Vector3 p1, Vector3 p2, Vector2 *z0, Vector2 *z1, Vector2 *z2)
+{
Vector3 X = normalize(p1 - p0);
Vector3 Z = normalize(cross(X, p2 - p0));
Vector3 Y = cross(Z, X);
@@ -6068,24 +6404,28 @@ static void projectTriangle(Vector3 p0, Vector3 p1, Vector3 p2, Vector2 *z0, Vec
// Conformal relations from Brecht Van Lommel (based on ABF):
-static float vec_angle_cos(const Vector3 &v1, const Vector3 &v2, const Vector3 &v3) {
+static float vec_angle_cos(const Vector3 &v1, const Vector3 &v2, const Vector3 &v3)
+{
Vector3 d1 = v1 - v2;
Vector3 d2 = v3 - v2;
return clamp(dot(d1, d2) / (length(d1) * length(d2)), -1.0f, 1.0f);
}
-static float vec_angle(const Vector3 &v1, const Vector3 &v2, const Vector3 &v3) {
+static float vec_angle(const Vector3 &v1, const Vector3 &v2, const Vector3 &v3)
+{
float dot = vec_angle_cos(v1, v2, v3);
return acosf(dot);
}
-static void triangle_angles(const Vector3 &v1, const Vector3 &v2, const Vector3 &v3, float *a1, float *a2, float *a3) {
+static void triangle_angles(const Vector3 &v1, const Vector3 &v2, const Vector3 &v3, float *a1, float *a2, float *a3)
+{
*a1 = vec_angle(v3, v1, v2);
*a2 = vec_angle(v1, v2, v3);
*a3 = kPi - *a2 - *a1;
}
-static bool setup_abf_relations(opennl::NLContext *context, int id0, int id1, int id2, const Vector3 &p0, const Vector3 &p1, const Vector3 &p2) {
+static bool setup_abf_relations(opennl::NLContext *context, int id0, int id1, int id2, const Vector3 &p0, const Vector3 &p1, const Vector3 &p2)
+{
// @@ IC: Wouldn't it be more accurate to return cos and compute 1-cos^2?
// It does indeed seem to be a little bit more robust.
// @@ Need to revisit this more carefully!
@@ -6142,7 +6482,8 @@ static bool setup_abf_relations(opennl::NLContext *context, int id0, int id1, in
return true;
}
-static bool computeLeastSquaresConformalMap(Mesh *mesh) {
+static bool computeLeastSquaresConformalMap(Mesh *mesh)
+{
uint32_t lockedVertex0, lockedVertex1;
if (!findApproximateDiameterVertices(mesh, &lockedVertex0, &lockedVertex1)) {
// Mesh has no boundaries.
@@ -6189,16 +6530,16 @@ static bool computeLeastSquaresConformalMap(Mesh *mesh) {
// Note : b = 0
// Real part
opennl::nlBegin(context, NL_ROW);
- opennl::nlCoefficient(context, u0_id, -a + c);
- opennl::nlCoefficient(context, v0_id, b - d);
- opennl::nlCoefficient(context, u1_id, -c);
- opennl::nlCoefficient(context, v1_id, d);
+ opennl::nlCoefficient(context, u0_id, -a+c) ;
+ opennl::nlCoefficient(context, v0_id, b-d) ;
+ opennl::nlCoefficient(context, u1_id, -c) ;
+ opennl::nlCoefficient(context, v1_id, d) ;
opennl::nlCoefficient(context, u2_id, a);
opennl::nlEnd(context, NL_ROW);
// Imaginary part
opennl::nlBegin(context, NL_ROW);
- opennl::nlCoefficient(context, u0_id, -b + d);
- opennl::nlCoefficient(context, v0_id, -a + c);
+ opennl::nlCoefficient(context, u0_id, -b+d);
+ opennl::nlCoefficient(context, v0_id, -a+c);
opennl::nlCoefficient(context, u1_id, -d);
opennl::nlCoefficient(context, v1_id, -c);
opennl::nlCoefficient(context, v2_id, a);
@@ -6222,8 +6563,10 @@ static bool computeLeastSquaresConformalMap(Mesh *mesh) {
return true;
}
-struct PiecewiseParam {
- void reset(const Mesh *mesh) {
+struct PiecewiseParam
+{
+ void reset(const Mesh *mesh)
+ {
m_mesh = mesh;
const uint32_t faceCount = m_mesh->faceCount();
const uint32_t vertexCount = m_mesh->vertexCount();
@@ -6241,7 +6584,8 @@ struct PiecewiseParam {
ConstArrayView<uint32_t> chartFaces() const { return m_patch; }
ConstArrayView<Vector2> texcoords() const { return m_texcoords; }
- bool computeChart() {
+ bool computeChart()
+ {
// Clear per-patch state.
m_patch.clear();
m_candidates.clear();
@@ -6370,7 +6714,8 @@ struct PiecewiseParam {
}
private:
- struct Candidate {
+ struct Candidate
+ {
uint32_t face, vertex;
Candidate *prev, *next; // The previous/next candidate with the same vertex.
Vector2 position;
@@ -6380,14 +6725,10 @@ private:
float patchVertexOrient;
};
- struct CandidateIterator {
- CandidateIterator(Candidate *head) :
- m_current(head) { XA_DEBUG_ASSERT(!head->prev); }
- void advance() {
- if (m_current != nullptr) {
- m_current = m_current->next;
- }
- }
+ struct CandidateIterator
+ {
+ CandidateIterator(Candidate *head) : m_current(head) { XA_DEBUG_ASSERT(!head->prev); }
+ void advance() { if (m_current != nullptr) { m_current = m_current->next; } }
bool isDone() const { return !m_current; }
Candidate *current() { return m_current; }
@@ -6406,7 +6747,8 @@ private:
UniformGrid2 m_boundaryGrid;
Array<uint32_t> m_newBoundaryEdges, m_ignoreBoundaryEdges; // Temp arrays used when testing for boundary intersection.
- void addFaceToPatch(uint32_t face) {
+ void addFaceToPatch(uint32_t face)
+ {
XA_DEBUG_ASSERT(!m_faceInPatch.get(face));
XA_DEBUG_ASSERT(!m_faceInAnyPatch.get(face));
m_patch.push_back(face);
@@ -6446,7 +6788,8 @@ private:
}
}
- void addCandidateFace(uint32_t patchEdge, float patchVertexOrient, uint32_t face, uint32_t edge, uint32_t freeVertex) {
+ void addCandidateFace(uint32_t patchEdge, float patchVertexOrient, uint32_t face, uint32_t edge, uint32_t freeVertex)
+ {
XA_DEBUG_ASSERT(!m_faceToCandidate[face]);
Vector2 texcoords[3];
orthoProjectFace(face, texcoords);
@@ -6549,7 +6892,8 @@ private:
it.current()->maxCost = maxCost;
}
- Candidate *linkedCandidateHead(Candidate *candidate) {
+ Candidate *linkedCandidateHead(Candidate *candidate)
+ {
Candidate *current = candidate;
for (;;) {
if (!current->prev)
@@ -6559,7 +6903,8 @@ private:
return current;
}
- void removeLinkedCandidates(Candidate *head) {
+ void removeLinkedCandidates(Candidate *head)
+ {
XA_DEBUG_ASSERT(!head->prev);
Candidate *current = head;
while (current) {
@@ -6576,7 +6921,8 @@ private:
}
}
- void orthoProjectFace(uint32_t face, Vector2 *texcoords) const {
+ void orthoProjectFace(uint32_t face, Vector2 *texcoords) const
+ {
const Vector3 normal = -m_mesh->computeFaceNormal(face);
const Vector3 tangent = normalize(m_mesh->position(m_mesh->vertexAt(face * 3 + 1)) - m_mesh->position(m_mesh->vertexAt(face * 3 + 0)));
const Vector3 bitangent = cross(normal, tangent);
@@ -6586,14 +6932,16 @@ private:
}
}
- float parametricArea(const Vector2 *texcoords) const {
+ float parametricArea(const Vector2 *texcoords) const
+ {
const Vector2 &v1 = texcoords[0];
const Vector2 &v2 = texcoords[1];
const Vector2 &v3 = texcoords[2];
return ((v2.x - v1.x) * (v3.y - v1.y) - (v3.x - v1.x) * (v2.y - v1.y)) * 0.5f;
}
- float computeStretch(Vector3 p1, Vector3 p2, Vector3 p3, Vector2 t1, Vector2 t2, Vector2 t3) const {
+ float computeStretch(Vector3 p1, Vector3 p2, Vector3 p3, Vector2 t1, Vector2 t2, Vector2 t3) const
+ {
float parametricArea = ((t2.y - t1.y) * (t3.x - t1.x) - (t3.y - t1.y) * (t2.x - t1.x)) * 0.5f;
if (isZero(parametricArea, kAreaEpsilon))
return FLT_MAX;
@@ -6607,13 +6955,15 @@ private:
}
// Return value is positive if the point is one side of the edge, negative if on the other side.
- float orientToEdge(Vector2 edgeVertex0, Vector2 edgeVertex1, Vector2 point) const {
+ float orientToEdge(Vector2 edgeVertex0, Vector2 edgeVertex1, Vector2 point) const
+ {
return (edgeVertex0.x - point.x) * (edgeVertex1.y - point.y) - (edgeVertex0.y - point.y) * (edgeVertex1.x - point.x);
}
};
// Estimate quality of existing parameterization.
-struct Quality {
+struct Quality
+{
// computeBoundaryIntersection
bool boundaryIntersection = false;
@@ -6630,7 +6980,8 @@ struct Quality {
float conformalMetric = 0.0f;
float authalicMetric = 0.0f;
- void computeBoundaryIntersection(const Mesh *mesh, UniformGrid2 &boundaryGrid) {
+ void computeBoundaryIntersection(const Mesh *mesh, UniformGrid2 &boundaryGrid)
+ {
const Array<uint32_t> &boundaryEdges = mesh->boundaryEdges();
const uint32_t boundaryEdgeCount = boundaryEdges.size();
boundaryGrid.reset(mesh->texcoords(), mesh->indices(), boundaryEdgeCount);
@@ -6646,7 +6997,8 @@ struct Quality {
#endif
}
- void computeFlippedFaces(const Mesh *mesh, Array<uint32_t> *flippedFaces) {
+ void computeFlippedFaces(const Mesh *mesh, Array<uint32_t> *flippedFaces)
+ {
totalTriangleCount = flippedTriangleCount = zeroAreaTriangleCount = 0;
if (flippedFaces)
flippedFaces->clear();
@@ -6682,7 +7034,8 @@ struct Quality {
flippedFaces->clear();
flippedTriangleCount = 0;
}
- if (flippedTriangleCount > totalTriangleCount / 2) {
+ if (flippedTriangleCount > totalTriangleCount / 2)
+ {
// If more than half the triangles are flipped, reverse the flipped / not flipped classification.
flippedTriangleCount = totalTriangleCount - flippedTriangleCount;
if (flippedFaces) {
@@ -6704,7 +7057,8 @@ struct Quality {
}
}
- void computeMetrics(const Mesh *mesh) {
+ void computeMetrics(const Mesh *mesh)
+ {
totalGeometricArea = totalParametricArea = 0.0f;
stretchMetric = maxStretchMetric = conformalMetric = authalicMetric = 0.0f;
const uint32_t faceCount = mesh->faceCount();
@@ -6736,7 +7090,7 @@ struct Quality {
const float a = dot(Ss, Ss); // E
const float b = dot(Ss, St); // F
const float c = dot(St, St); // G
- // Compute eigen-values of the first fundamental form:
+ // Compute eigen-values of the first fundamental form:
const float sigma1 = sqrtf(0.5f * max(0.0f, a + c - sqrtf(square(a - c) + 4 * square(b)))); // gamma uppercase, min eigenvalue.
const float sigma2 = sqrtf(0.5f * max(0.0f, a + c + sqrtf(square(a - c) + 4 * square(b)))); // gamma lowercase, max eigenvalue.
XA_ASSERT(sigma2 > sigma1 || equal(sigma1, sigma2, kEpsilon));
@@ -6767,22 +7121,24 @@ struct Quality {
if (totalGeometricArea > 0.0f) {
const float normFactor = sqrtf(totalParametricArea / totalGeometricArea);
stretchMetric = sqrtf(stretchMetric / totalGeometricArea) * normFactor;
- maxStretchMetric *= normFactor;
+ maxStretchMetric *= normFactor;
conformalMetric = sqrtf(conformalMetric / totalGeometricArea);
authalicMetric = sqrtf(authalicMetric / totalGeometricArea);
}
}
};
-struct ChartCtorBuffers {
+struct ChartCtorBuffers
+{
Array<uint32_t> chartMeshIndices;
Array<uint32_t> unifiedMeshIndices;
};
-class Chart {
+class Chart
+{
public:
- Chart(const Basis &basis, segment::ChartGeneratorType::Enum generatorType, ConstArrayView<uint32_t> faces, const Mesh *sourceMesh, uint32_t chartGroupId, uint32_t chartId) :
- m_basis(basis), m_unifiedMesh(nullptr), m_type(ChartType::LSCM), m_generatorType(generatorType), m_tjunctionCount(0), m_originalVertexCount(0), m_isInvalid(false) {
+ Chart(const Basis &basis, segment::ChartGeneratorType::Enum generatorType, ConstArrayView<uint32_t> faces, const Mesh *sourceMesh, uint32_t chartGroupId, uint32_t chartId) : m_basis(basis), m_unifiedMesh(nullptr), m_type(ChartType::LSCM), m_generatorType(generatorType), m_tjunctionCount(0), m_originalVertexCount(0), m_isInvalid(false)
+ {
XA_UNUSED(chartGroupId);
XA_UNUSED(chartId);
m_faceToSourceFaceMap.copyFrom(faces.data, faces.length);
@@ -6813,8 +7169,7 @@ public:
m_chartVertexToUnifiedVertexMap.push_back(unifiedVertex);
m_originalVertexCount++;
}
- m_originalIndices[f * 3 + i] = sourceVertexToChartVertexMap.get(sourceVertex);
- ;
+ m_originalIndices[f * 3 + i] = sourceVertexToChartVertexMap.get(sourceVertex);;
XA_DEBUG_ASSERT(m_originalIndices[f * 3 + i] != UINT32_MAX);
unifiedIndices[i] = sourceVertexToUnifiedVertexMap.get(sourceUnifiedVertex);
XA_DEBUG_ASSERT(unifiedIndices[i] != UINT32_MAX);
@@ -6838,8 +7193,8 @@ public:
#endif
}
- Chart(ChartCtorBuffers &buffers, const Chart *parent, const Mesh *parentMesh, ConstArrayView<uint32_t> faces, ConstArrayView<Vector2> texcoords, const Mesh *sourceMesh) :
- m_unifiedMesh(nullptr), m_type(ChartType::Piecewise), m_generatorType(segment::ChartGeneratorType::Piecewise), m_tjunctionCount(0), m_originalVertexCount(0), m_isInvalid(false) {
+ Chart(ChartCtorBuffers &buffers, const Chart *parent, const Mesh *parentMesh, ConstArrayView<uint32_t> faces, ConstArrayView<Vector2> texcoords, const Mesh *sourceMesh) : m_unifiedMesh(nullptr), m_type(ChartType::Piecewise), m_generatorType(segment::ChartGeneratorType::Piecewise), m_tjunctionCount(0), m_originalVertexCount(0), m_isInvalid(false)
+ {
const uint32_t faceCount = faces.length;
m_faceToSourceFaceMap.resize(faceCount);
for (uint32_t i = 0; i < faceCount; i++)
@@ -6886,7 +7241,8 @@ public:
backupTexcoords();
}
- ~Chart() {
+ ~Chart()
+ {
if (m_unifiedMesh) {
m_unifiedMesh->~Mesh();
XA_FREE(m_unifiedMesh);
@@ -6914,7 +7270,8 @@ public:
ConstArrayView<uint32_t> originalVertices() const { return m_originalIndices; }
- void parameterize(const ChartOptions &options, UniformGrid2 &boundaryGrid) {
+ void parameterize(const ChartOptions &options, UniformGrid2 &boundaryGrid)
+ {
const uint32_t unifiedVertexCount = m_unifiedMesh->vertexCount();
if (m_generatorType == segment::ChartGeneratorType::OriginalUv) {
} else {
@@ -6938,7 +7295,8 @@ public:
XA_PROFILE_START(parameterizeChartsLSCM)
if (options.paramFunc) {
options.paramFunc(&m_unifiedMesh->position(0).x, &m_unifiedMesh->texcoord(0).x, m_unifiedMesh->vertexCount(), m_unifiedMesh->indices().data, m_unifiedMesh->indexCount());
- } else
+ }
+ else
computeLeastSquaresConformalMap(m_unifiedMesh);
XA_PROFILE_END(parameterizeChartsLSCM)
XA_PROFILE_START(parameterizeChartsEvaluateQuality)
@@ -6980,7 +7338,8 @@ public:
backupTexcoords();
}
- Vector2 computeParametricBounds() const {
+ Vector2 computeParametricBounds() const
+ {
Vector2 minCorner(FLT_MAX, FLT_MAX);
Vector2 maxCorner(-FLT_MAX, -FLT_MAX);
const uint32_t vertexCount = m_unifiedMesh->vertexCount();
@@ -6992,7 +7351,8 @@ public:
}
#if XA_CHECK_PIECEWISE_CHART_QUALITY
- void evaluateQuality(UniformGrid2 &boundaryGrid) {
+ void evaluateQuality(UniformGrid2 &boundaryGrid)
+ {
m_quality.computeBoundaryIntersection(m_unifiedMesh, boundaryGrid);
#if XA_DEBUG_EXPORT_OBJ_INVALID_PARAMETERIZATION
m_quality.computeFlippedFaces(m_unifiedMesh, &m_paramFlippedFaces);
@@ -7004,12 +7364,14 @@ public:
}
#endif
- void restoreTexcoords() {
+ void restoreTexcoords()
+ {
memcpy(m_unifiedMesh->texcoords().data, m_backupTexcoords.data(), m_unifiedMesh->vertexCount() * sizeof(Vector2));
}
private:
- void backupTexcoords() {
+ void backupTexcoords()
+ {
m_backupTexcoords.resize(m_unifiedMesh->vertexCount());
memcpy(m_backupTexcoords.data(), m_unifiedMesh->texcoords().data, m_unifiedMesh->vertexCount() * sizeof(Vector2));
}
@@ -7040,7 +7402,8 @@ private:
bool m_isInvalid;
};
-struct CreateAndParameterizeChartTaskGroupArgs {
+struct CreateAndParameterizeChartTaskGroupArgs
+{
Progress *progress;
ThreadLocal<UniformGrid2> *boundaryGrid;
ThreadLocal<ChartCtorBuffers> *chartBuffers;
@@ -7048,7 +7411,8 @@ struct CreateAndParameterizeChartTaskGroupArgs {
ThreadLocal<PiecewiseParam> *pp;
};
-struct CreateAndParameterizeChartTaskArgs {
+struct CreateAndParameterizeChartTaskArgs
+{
const Basis *basis;
Chart *chart; // output
Array<Chart *> charts; // output (if more than one chart)
@@ -7059,7 +7423,8 @@ struct CreateAndParameterizeChartTaskArgs {
uint32_t chartId;
};
-static void runCreateAndParameterizeChartTask(void *groupUserData, void *taskUserData) {
+static void runCreateAndParameterizeChartTask(void *groupUserData, void *taskUserData)
+{
XA_PROFILE_START(createChartMeshAndParameterizeThread)
auto groupArgs = (CreateAndParameterizeChartTaskGroupArgs *)groupUserData;
auto args = (CreateAndParameterizeChartTaskArgs *)taskUserData;
@@ -7130,13 +7495,15 @@ static void runCreateAndParameterizeChartTask(void *groupUserData, void *taskUse
}
// Set of charts corresponding to mesh faces in the same face group.
-class ChartGroup {
+class ChartGroup
+{
public:
- ChartGroup(uint32_t id, const Mesh *sourceMesh, const MeshFaceGroups *sourceMeshFaceGroups, MeshFaceGroups::Handle faceGroup) :
- m_id(id), m_sourceMesh(sourceMesh), m_sourceMeshFaceGroups(sourceMeshFaceGroups), m_faceGroup(faceGroup) {
+ ChartGroup(uint32_t id, const Mesh *sourceMesh, const MeshFaceGroups *sourceMeshFaceGroups, MeshFaceGroups::Handle faceGroup) : m_id(id), m_sourceMesh(sourceMesh), m_sourceMeshFaceGroups(sourceMeshFaceGroups), m_faceGroup(faceGroup)
+ {
}
- ~ChartGroup() {
+ ~ChartGroup()
+ {
for (uint32_t i = 0; i < m_charts.size(); i++) {
m_charts[i]->~Chart();
XA_FREE(m_charts[i]);
@@ -7147,7 +7514,8 @@ public:
Chart *chartAt(uint32_t i) const { return m_charts[i]; }
uint32_t faceCount() const { return m_sourceMeshFaceGroups->faceCount(m_faceGroup); }
- void computeCharts(TaskScheduler *taskScheduler, const ChartOptions &options, Progress *progress, segment::Atlas &atlas, ThreadLocal<UniformGrid2> *boundaryGrid, ThreadLocal<ChartCtorBuffers> *chartBuffers, ThreadLocal<PiecewiseParam> *piecewiseParam) {
+ void computeCharts(TaskScheduler *taskScheduler, const ChartOptions &options, Progress *progress, segment::Atlas &atlas, ThreadLocal<UniformGrid2> *boundaryGrid, ThreadLocal<ChartCtorBuffers> *chartBuffers, ThreadLocal<PiecewiseParam> *piecewiseParam)
+ {
// This function may be called multiple times, so destroy existing charts.
for (uint32_t i = 0; i < m_charts.size(); i++) {
m_charts[i]->~Chart();
@@ -7291,7 +7659,8 @@ public:
}
private:
- Mesh *createMesh() {
+ Mesh *createMesh()
+ {
XA_DEBUG_ASSERT(m_faceGroup != MeshFaceGroups::kInvalid);
// Create new mesh from the source mesh, using faces that belong to this group.
m_faceToSourceFaceMap.reserve(m_sourceMeshFaceGroups->faceCount(m_faceGroup));
@@ -7345,14 +7714,15 @@ private:
}
const uint32_t m_id;
- const Mesh *const m_sourceMesh;
- const MeshFaceGroups *const m_sourceMeshFaceGroups;
+ const Mesh * const m_sourceMesh;
+ const MeshFaceGroups * const m_sourceMeshFaceGroups;
const MeshFaceGroups::Handle m_faceGroup;
Array<uint32_t> m_faceToSourceFaceMap; // List of faces of the source mesh that belong to this chart group.
Array<Chart *> m_charts;
};
-struct ChartGroupComputeChartsTaskGroupArgs {
+struct ChartGroupComputeChartsTaskGroupArgs
+{
ThreadLocal<segment::Atlas> *atlas;
const ChartOptions *options;
Progress *progress;
@@ -7362,7 +7732,8 @@ struct ChartGroupComputeChartsTaskGroupArgs {
ThreadLocal<PiecewiseParam> *piecewiseParam;
};
-static void runChartGroupComputeChartsTask(void *groupUserData, void *taskUserData) {
+static void runChartGroupComputeChartsTask(void *groupUserData, void *taskUserData)
+{
auto args = (ChartGroupComputeChartsTaskGroupArgs *)groupUserData;
auto chartGroup = (ChartGroup *)taskUserData;
if (args->progress->cancel)
@@ -7372,7 +7743,8 @@ static void runChartGroupComputeChartsTask(void *groupUserData, void *taskUserDa
XA_PROFILE_END(chartGroupComputeChartsThread)
}
-struct MeshComputeChartsTaskGroupArgs {
+struct MeshComputeChartsTaskGroupArgs
+{
ThreadLocal<segment::Atlas> *atlas;
const ChartOptions *options;
Progress *progress;
@@ -7382,7 +7754,8 @@ struct MeshComputeChartsTaskGroupArgs {
ThreadLocal<PiecewiseParam> *piecewiseParam;
};
-struct MeshComputeChartsTaskArgs {
+struct MeshComputeChartsTaskArgs
+{
const Mesh *sourceMesh;
Array<ChartGroup *> *chartGroups; // output
InvalidMeshGeometry *invalidMeshGeometry; // output
@@ -7392,7 +7765,8 @@ struct MeshComputeChartsTaskArgs {
static uint32_t s_faceGroupsCurrentVertex = 0;
#endif
-static void runMeshComputeChartsTask(void *groupUserData, void *taskUserData) {
+static void runMeshComputeChartsTask(void *groupUserData, void *taskUserData)
+{
auto groupArgs = (MeshComputeChartsTaskGroupArgs *)groupUserData;
auto args = (MeshComputeChartsTaskArgs *)taskUserData;
if (groupArgs->progress->cancel)
@@ -7491,12 +7865,13 @@ cleanup:
}
/// An atlas is a set of chart groups.
-class Atlas {
+class Atlas
+{
public:
- Atlas() :
- m_chartsComputed(false) {}
+ Atlas() : m_chartsComputed(false) {}
- ~Atlas() {
+ ~Atlas()
+ {
for (uint32_t i = 0; i < m_meshChartGroups.size(); i++) {
for (uint32_t j = 0; j < m_meshChartGroups[i].size(); j++) {
m_meshChartGroups[i][j]->~ChartGroup();
@@ -7513,11 +7888,13 @@ public:
uint32_t chartGroupCount(uint32_t mesh) const { return m_meshChartGroups[mesh].size(); }
const ChartGroup *chartGroupAt(uint32_t mesh, uint32_t group) const { return m_meshChartGroups[mesh][group]; }
- void addMesh(const Mesh *mesh) {
+ void addMesh(const Mesh *mesh)
+ {
m_meshes.push_back(mesh);
}
- bool computeCharts(TaskScheduler *taskScheduler, const ChartOptions &options, ProgressFunc progressFunc, void *progressUserData) {
+ bool computeCharts(TaskScheduler *taskScheduler, const ChartOptions &options, ProgressFunc progressFunc, void *progressUserData)
+ {
XA_PROFILE_START(computeChartsReal)
#if XA_DEBUG_EXPORT_OBJ_PLANAR_REGIONS
segment::s_planarRegionsCurrentRegion = segment::s_planarRegionsCurrentVertex = 0;
@@ -7591,7 +7968,7 @@ public:
private:
Array<const Mesh *> m_meshes;
Array<InvalidMeshGeometry> m_invalidMeshGeometry; // 1 per mesh.
- Array<Array<ChartGroup *>> m_meshChartGroups;
+ Array<Array<ChartGroup *> > m_meshChartGroups;
bool m_chartsComputed;
};
@@ -7599,15 +7976,17 @@ private:
namespace pack {
-class AtlasImage {
+class AtlasImage
+{
public:
- AtlasImage(uint32_t width, uint32_t height) :
- m_width(width), m_height(height) {
+ AtlasImage(uint32_t width, uint32_t height) : m_width(width), m_height(height)
+ {
m_data.resize(m_width * m_height);
memset(m_data.data(), 0, sizeof(uint32_t) * m_data.size());
}
- void resize(uint32_t width, uint32_t height) {
+ void resize(uint32_t width, uint32_t height)
+ {
Array<uint32_t> data;
data.resize(width * height);
memset(data.data(), 0, sizeof(uint32_t) * data.size());
@@ -7618,7 +7997,8 @@ public:
data.moveTo(m_data);
}
- void addChart(uint32_t chartIndex, const BitImage *image, const BitImage *imageBilinear, const BitImage *imagePadding, int atlas_w, int atlas_h, int offset_x, int offset_y) {
+ void addChart(uint32_t chartIndex, const BitImage *image, const BitImage *imageBilinear, const BitImage *imagePadding, int atlas_w, int atlas_h, int offset_x, int offset_y)
+ {
const int w = image->width();
const int h = image->height();
for (int y = 0; y < h; y++) {
@@ -7644,13 +8024,15 @@ public:
}
}
- void copyTo(uint32_t *dest, uint32_t destWidth, uint32_t destHeight, int padding) const {
+ void copyTo(uint32_t *dest, uint32_t destWidth, uint32_t destHeight, int padding) const
+ {
for (uint32_t y = 0; y < destHeight; y++)
memcpy(&dest[y * destWidth], &m_data[padding + (y + padding) * m_width], destWidth * sizeof(uint32_t));
}
#if XA_DEBUG_EXPORT_ATLAS_IMAGES
- void writeTga(const char *filename, uint32_t width, uint32_t height) const {
+ void writeTga(const char *filename, uint32_t width, uint32_t height) const
+ {
Array<uint8_t> image;
image.resize(width * height * 3);
for (uint32_t y = 0; y < height; y++) {
@@ -7692,7 +8074,8 @@ private:
Array<uint32_t> m_data;
};
-struct Chart {
+struct Chart
+{
int32_t atlasIndex;
uint32_t material;
ConstArrayView<uint32_t> indices;
@@ -7711,12 +8094,14 @@ struct Chart {
uint32_t uniqueVertexCount() const { return uniqueVertices.isEmpty() ? vertices.length : uniqueVertices.size(); }
};
-struct AddChartTaskArgs {
+struct AddChartTaskArgs
+{
param::Chart *paramChart;
Chart *chart; // out
};
-static void runAddChartTask(void *groupUserData, void *taskUserData) {
+static void runAddChartTask(void *groupUserData, void *taskUserData)
+{
XA_PROFILE_START(packChartsAddChartsThread)
auto boundingBox = (ThreadLocal<BoundingBox2D> *)groupUserData;
auto args = (AddChartTaskArgs *)taskUserData;
@@ -7753,8 +8138,10 @@ static void runAddChartTask(void *groupUserData, void *taskUserData) {
XA_PROFILE_END(packChartsAddChartsThread)
}
-struct Atlas {
- ~Atlas() {
+struct Atlas
+{
+ ~Atlas()
+ {
for (uint32_t i = 0; i < m_atlasImages.size(); i++) {
m_atlasImages[i]->~AtlasImage();
XA_FREE(m_atlasImages[i]);
@@ -7778,7 +8165,8 @@ struct Atlas {
const Array<AtlasImage *> &getImages() const { return m_atlasImages; }
float getUtilization(uint32_t atlas) const { return m_utilization[atlas]; }
- void addCharts(TaskScheduler *taskScheduler, param::Atlas *paramAtlas) {
+ void addCharts(TaskScheduler *taskScheduler, param::Atlas *paramAtlas)
+ {
// Count charts.
uint32_t chartCount = 0;
for (uint32_t i = 0; i < paramAtlas->meshCount(); i++) {
@@ -7819,7 +8207,8 @@ struct Atlas {
m_charts[i] = taskArgs[i].chart;
}
- void addUvMeshCharts(UvMeshInstance *mesh) {
+ void addUvMeshCharts(UvMeshInstance *mesh)
+ {
// Copy texcoords from mesh.
mesh->texcoords.resize(mesh->mesh->texcoords.size());
memcpy(mesh->texcoords.data(), mesh->mesh->texcoords.data(), mesh->texcoords.size() * sizeof(Vector2));
@@ -7882,7 +8271,8 @@ struct Atlas {
}
// Pack charts in the smallest possible rectangle.
- bool packCharts(const PackOptions &options, ProgressFunc progressFunc, void *progressUserData) {
+ bool packCharts(const PackOptions &options, ProgressFunc progressFunc, void *progressUserData)
+ {
if (progressFunc) {
if (!progressFunc(ProgressCategory::PackCharts, 0, progressUserData))
return false;
@@ -8116,7 +8506,8 @@ struct Atlas {
int best_x = 0, best_y = 0;
int best_cw = 0, best_ch = 0;
int best_r = 0;
- for (;;) {
+ for (;;)
+ {
#if XA_DEBUG
bool firstChartInBitImage = false;
#endif
@@ -8152,7 +8543,8 @@ struct Atlas {
if (best_x + best_cw > atlasSizes[currentAtlas].x || best_y + best_ch > atlasSizes[currentAtlas].y) {
for (uint32_t j = 0; j < chartStartPositions.size(); j++)
chartStartPositions[j] = Vector2i(0, 0);
- } else {
+ }
+ else {
chartStartPositions[currentAtlas] = Vector2i(best_x, best_y);
}
}
@@ -8240,7 +8632,8 @@ struct Atlas {
}
if (m_utilization.size() > 1) {
XA_PRINT(" %u: %f%% utilization\n", i, m_utilization[i] * 100.0f);
- } else {
+ }
+ else {
XA_PRINT(" %f%% utilization\n", m_utilization[i] * 100.0f);
}
}
@@ -8259,14 +8652,16 @@ struct Atlas {
}
private:
- bool findChartLocation(const PackOptions &options, const Vector2i &startPosition, const BitImage *atlasBitImage, const BitImage *chartBitImage, const BitImage *chartBitImageRotated, int w, int h, int *best_x, int *best_y, int *best_w, int *best_h, int *best_r, uint32_t maxResolution) {
+ bool findChartLocation(const PackOptions &options, const Vector2i &startPosition, const BitImage *atlasBitImage, const BitImage *chartBitImage, const BitImage *chartBitImageRotated, int w, int h, int *best_x, int *best_y, int *best_w, int *best_h, int *best_r, uint32_t maxResolution)
+ {
const int attempts = 4096;
if (options.bruteForce || attempts >= w * h)
return findChartLocation_bruteForce(options, startPosition, atlasBitImage, chartBitImage, chartBitImageRotated, w, h, best_x, best_y, best_w, best_h, best_r, maxResolution);
return findChartLocation_random(options, atlasBitImage, chartBitImage, chartBitImageRotated, w, h, best_x, best_y, best_w, best_h, best_r, attempts, maxResolution);
}
- bool findChartLocation_bruteForce(const PackOptions &options, const Vector2i &startPosition, const BitImage *atlasBitImage, const BitImage *chartBitImage, const BitImage *chartBitImageRotated, int w, int h, int *best_x, int *best_y, int *best_w, int *best_h, int *best_r, uint32_t maxResolution) {
+ bool findChartLocation_bruteForce(const PackOptions &options, const Vector2i &startPosition, const BitImage *atlasBitImage, const BitImage *chartBitImage, const BitImage *chartBitImageRotated, int w, int h, int *best_x, int *best_y, int *best_w, int *best_h, int *best_r, uint32_t maxResolution)
+ {
const int stepSize = options.blockAlign ? 4 : 1;
int best_metric = INT_MAX;
// Try two different orientations.
@@ -8311,7 +8706,8 @@ private:
return best_metric != INT_MAX;
}
- bool findChartLocation_random(const PackOptions &options, const BitImage *atlasBitImage, const BitImage *chartBitImage, const BitImage *chartBitImageRotated, int w, int h, int *best_x, int *best_y, int *best_w, int *best_h, int *best_r, int attempts, uint32_t maxResolution) {
+ bool findChartLocation_random(const PackOptions &options, const BitImage *atlasBitImage, const BitImage *chartBitImage, const BitImage *chartBitImageRotated, int w, int h, int *best_x, int *best_y, int *best_w, int *best_h, int *best_r, int attempts, uint32_t maxResolution)
+ {
bool result = false;
const int BLOCK_SIZE = 4;
int best_metric = INT_MAX;
@@ -8366,7 +8762,8 @@ private:
return result;
}
- void addChart(BitImage *atlasBitImage, const BitImage *chartBitImage, const BitImage *chartBitImageRotated, int atlas_w, int atlas_h, int offset_x, int offset_y, int r) {
+ void addChart(BitImage *atlasBitImage, const BitImage *chartBitImage, const BitImage *chartBitImageRotated, int atlas_w, int atlas_h, int offset_x, int offset_y, int r)
+ {
XA_DEBUG_ASSERT(r == 0 || r == 1);
const BitImage *image = r == 0 ? chartBitImage : chartBitImageRotated;
const int w = image->width();
@@ -8389,7 +8786,8 @@ private:
}
}
- void bilinearExpand(const Chart *chart, BitImage *source, BitImage *dest, BitImage *destRotated, UniformGrid2 &boundaryEdgeGrid) const {
+ void bilinearExpand(const Chart *chart, BitImage *source, BitImage *dest, BitImage *destRotated, UniformGrid2 &boundaryEdgeGrid) const
+ {
boundaryEdgeGrid.reset(chart->vertices, chart->indices);
if (chart->boundaryEdges) {
const uint32_t edgeCount = chart->boundaryEdges->size();
@@ -8444,11 +8842,13 @@ private:
}
}
- struct DrawTriangleCallbackArgs {
+ struct DrawTriangleCallbackArgs
+ {
BitImage *chartBitImage, *chartBitImageRotated;
};
- static bool drawTriangleCallback(void *param, int x, int y) {
+ static bool drawTriangleCallback(void *param, int x, int y)
+ {
auto args = (DrawTriangleCallbackArgs *)param;
args->chartBitImage->set(x, y);
if (args->chartBitImageRotated)
@@ -8471,13 +8871,15 @@ private:
} // namespace internal
// Used to map triangulated polygons back to polygons.
-struct MeshPolygonMapping {
+struct MeshPolygonMapping
+{
internal::Array<uint8_t> faceVertexCount; // Copied from MeshDecl::faceVertexCount.
internal::Array<uint32_t> triangleToPolygonMap; // Triangle index (mesh face index) to polygon index.
internal::Array<uint32_t> triangleToPolygonIndicesMap; // Triangle indices to polygon indices.
};
-struct Context {
+struct Context
+{
Atlas atlas;
internal::Progress *addMeshProgress = nullptr;
internal::TaskGroupHandle addMeshTaskGroup;
@@ -8492,14 +8894,16 @@ struct Context {
bool uvMeshChartsComputed = false;
};
-Atlas *Create() {
+Atlas *Create()
+{
Context *ctx = XA_NEW(internal::MemTag::Default, Context);
memset(&ctx->atlas, 0, sizeof(Atlas));
ctx->taskScheduler = XA_NEW(internal::MemTag::Default, internal::TaskScheduler);
return &ctx->atlas;
}
-static void DestroyOutputMeshes(Context *ctx) {
+static void DestroyOutputMeshes(Context *ctx)
+{
if (!ctx->atlas.meshes)
return;
for (int i = 0; i < (int)ctx->atlas.meshCount; i++) {
@@ -8520,7 +8924,8 @@ static void DestroyOutputMeshes(Context *ctx) {
ctx->atlas.meshes = nullptr;
}
-void Destroy(Atlas *atlas) {
+void Destroy(Atlas *atlas)
+{
XA_DEBUG_ASSERT(atlas);
Context *ctx = (Context *)atlas;
if (atlas->utilization)
@@ -8567,14 +8972,15 @@ void Destroy(Atlas *atlas) {
#endif
}
-static void runAddMeshTask(void *groupUserData, void *taskUserData) {
+static void runAddMeshTask(void *groupUserData, void *taskUserData)
+{
XA_PROFILE_START(addMeshThread)
auto ctx = (Context *)groupUserData;
auto mesh = (internal::Mesh *)taskUserData;
internal::Progress *progress = ctx->addMeshProgress;
if (progress->cancel) {
XA_PROFILE_END(addMeshThread)
- return;
+ return;
}
XA_PROFILE_START(addMeshCreateColocals)
mesh->createColocals();
@@ -8587,32 +8993,37 @@ static void runAddMeshTask(void *groupUserData, void *taskUserData) {
XA_PROFILE_END(addMeshThread)
}
-static internal::Vector3 DecodePosition(const MeshDecl &meshDecl, uint32_t index) {
+static internal::Vector3 DecodePosition(const MeshDecl &meshDecl, uint32_t index)
+{
XA_DEBUG_ASSERT(meshDecl.vertexPositionData);
XA_DEBUG_ASSERT(meshDecl.vertexPositionStride > 0);
return *((const internal::Vector3 *)&((const uint8_t *)meshDecl.vertexPositionData)[meshDecl.vertexPositionStride * index]);
}
-static internal::Vector3 DecodeNormal(const MeshDecl &meshDecl, uint32_t index) {
+static internal::Vector3 DecodeNormal(const MeshDecl &meshDecl, uint32_t index)
+{
XA_DEBUG_ASSERT(meshDecl.vertexNormalData);
XA_DEBUG_ASSERT(meshDecl.vertexNormalStride > 0);
return *((const internal::Vector3 *)&((const uint8_t *)meshDecl.vertexNormalData)[meshDecl.vertexNormalStride * index]);
}
-static internal::Vector2 DecodeUv(const MeshDecl &meshDecl, uint32_t index) {
+static internal::Vector2 DecodeUv(const MeshDecl &meshDecl, uint32_t index)
+{
XA_DEBUG_ASSERT(meshDecl.vertexUvData);
XA_DEBUG_ASSERT(meshDecl.vertexUvStride > 0);
return *((const internal::Vector2 *)&((const uint8_t *)meshDecl.vertexUvData)[meshDecl.vertexUvStride * index]);
}
-static uint32_t DecodeIndex(IndexFormat format, const void *indexData, int32_t offset, uint32_t i) {
+static uint32_t DecodeIndex(IndexFormat format, const void *indexData, int32_t offset, uint32_t i)
+{
XA_DEBUG_ASSERT(indexData);
if (format == IndexFormat::UInt16)
return uint16_t((int32_t)((const uint16_t *)indexData)[i] + offset);
return uint32_t((int32_t)((const uint32_t *)indexData)[i] + offset);
}
-AddMeshError AddMesh(Atlas *atlas, const MeshDecl &meshDecl, uint32_t meshCountHint) {
+AddMeshError AddMesh(Atlas *atlas, const MeshDecl &meshDecl, uint32_t meshCountHint)
+{
XA_DEBUG_ASSERT(atlas);
if (!atlas) {
XA_PRINT_WARNING("AddMesh: atlas is null.\n");
@@ -8630,7 +9041,8 @@ AddMeshError AddMesh(Atlas *atlas, const MeshDecl &meshDecl, uint32_t meshCountH
// Don't know how many times AddMesh will be called, so progress needs to adjusted each time.
if (!ctx->addMeshProgress) {
ctx->addMeshProgress = XA_NEW_ARGS(internal::MemTag::Default, internal::Progress, ProgressCategory::AddMesh, ctx->progressFunc, ctx->progressUserData, 1);
- } else {
+ }
+ else {
ctx->addMeshProgress->setMaxValue(internal::max(ctx->meshes.size() + 1, meshCountHint));
}
XA_PROFILE_START(addMeshCopyData)
@@ -8804,7 +9216,8 @@ AddMeshError AddMesh(Atlas *atlas, const MeshDecl &meshDecl, uint32_t meshCountH
return AddMeshError::Success;
}
-void AddMeshJoin(Atlas *atlas) {
+void AddMeshJoin(Atlas *atlas)
+{
XA_DEBUG_ASSERT(atlas);
if (!atlas) {
XA_PRINT_WARNING("AddMeshJoin: atlas is null.\n");
@@ -8847,7 +9260,8 @@ void AddMeshJoin(Atlas *atlas) {
}
}
-AddMeshError AddUvMesh(Atlas *atlas, const UvMeshDecl &decl) {
+AddMeshError AddUvMesh(Atlas *atlas, const UvMeshDecl &decl)
+{
XA_DEBUG_ASSERT(atlas);
if (!atlas) {
XA_PRINT_WARNING("AddUvMesh: atlas is null.\n");
@@ -8948,7 +9362,8 @@ AddMeshError AddUvMesh(Atlas *atlas, const UvMeshDecl &decl) {
return AddMeshError::Success;
}
-void ComputeCharts(Atlas *atlas, ChartOptions options) {
+void ComputeCharts(Atlas *atlas, ChartOptions options)
+{
if (!atlas) {
XA_PRINT_WARNING("ComputeCharts: atlas is null.\n");
return;
@@ -9136,7 +9551,8 @@ void ComputeCharts(Atlas *atlas, ChartOptions options) {
XA_PRINT_MEM_USAGE
}
-void PackCharts(Atlas *atlas, PackOptions packOptions) {
+void PackCharts(Atlas *atlas, PackOptions packOptions)
+{
// Validate arguments and context state.
if (!atlas) {
XA_PRINT_WARNING("PackCharts: atlas is null.\n");
@@ -9177,7 +9593,8 @@ void PackCharts(Atlas *atlas, PackOptions packOptions) {
if (!ctx->uvMeshInstances.isEmpty()) {
for (uint32_t i = 0; i < ctx->uvMeshInstances.size(); i++)
packAtlas.addUvMeshCharts(ctx->uvMeshInstances[i]);
- } else
+ }
+ else
packAtlas.addCharts(ctx->taskScheduler, &ctx->paramAtlas);
XA_PROFILE_END(packChartsAddCharts)
XA_PROFILE_START(packCharts)
@@ -9455,7 +9872,8 @@ void PackCharts(Atlas *atlas, PackOptions packOptions) {
XA_PRINT_MEM_USAGE
}
-void Generate(Atlas *atlas, ChartOptions chartOptions, PackOptions packOptions) {
+void Generate(Atlas *atlas, ChartOptions chartOptions, PackOptions packOptions)
+{
if (!atlas) {
XA_PRINT_WARNING("Generate: atlas is null.\n");
return;
@@ -9469,7 +9887,8 @@ void Generate(Atlas *atlas, ChartOptions chartOptions, PackOptions packOptions)
PackCharts(atlas, packOptions);
}
-void SetProgressCallback(Atlas *atlas, ProgressFunc progressFunc, void *progressUserData) {
+void SetProgressCallback(Atlas *atlas, ProgressFunc progressFunc, void *progressUserData)
+{
if (!atlas) {
XA_PRINT_WARNING("SetProgressCallback: atlas is null.\n");
return;
@@ -9479,17 +9898,20 @@ void SetProgressCallback(Atlas *atlas, ProgressFunc progressFunc, void *progress
ctx->progressUserData = progressUserData;
}
-void SetAlloc(ReallocFunc reallocFunc, FreeFunc freeFunc) {
+void SetAlloc(ReallocFunc reallocFunc, FreeFunc freeFunc)
+{
internal::s_realloc = reallocFunc;
internal::s_free = freeFunc;
}
-void SetPrint(PrintFunc print, bool verbose) {
+void SetPrint(PrintFunc print, bool verbose)
+{
internal::s_print = print;
internal::s_printVerbose = verbose;
}
-const char *StringForEnum(AddMeshError error) {
+const char *StringForEnum(AddMeshError error)
+{
if (error == AddMeshError::Error)
return "Unspecified error";
if (error == AddMeshError::IndexOutOfRange)
@@ -9501,7 +9923,8 @@ const char *StringForEnum(AddMeshError error) {
return "Success";
}
-const char *StringForEnum(ProgressCategory category) {
+const char *StringForEnum(ProgressCategory category)
+{
if (category == ProgressCategory::AddMesh)
return "Adding mesh(es)";
if (category == ProgressCategory::ComputeCharts)
@@ -9529,76 +9952,93 @@ static_assert(sizeof(xatlas::PackOptions) == sizeof(xatlasPackOptions), "xatlasP
extern "C" {
#endif
-xatlasAtlas *xatlasCreate() {
+xatlasAtlas *xatlasCreate()
+{
return (xatlasAtlas *)xatlas::Create();
}
-void xatlasDestroy(xatlasAtlas *atlas) {
+void xatlasDestroy(xatlasAtlas *atlas)
+{
xatlas::Destroy((xatlas::Atlas *)atlas);
}
-xatlasAddMeshError xatlasAddMesh(xatlasAtlas *atlas, const xatlasMeshDecl *meshDecl, uint32_t meshCountHint) {
+xatlasAddMeshError xatlasAddMesh(xatlasAtlas *atlas, const xatlasMeshDecl *meshDecl, uint32_t meshCountHint)
+{
return (xatlasAddMeshError)xatlas::AddMesh((xatlas::Atlas *)atlas, *(const xatlas::MeshDecl *)meshDecl, meshCountHint);
}
-void xatlasAddMeshJoin(xatlasAtlas *atlas) {
+void xatlasAddMeshJoin(xatlasAtlas *atlas)
+{
xatlas::AddMeshJoin((xatlas::Atlas *)atlas);
}
-xatlasAddMeshError xatlasAddUvMesh(xatlasAtlas *atlas, const xatlasUvMeshDecl *decl) {
+xatlasAddMeshError xatlasAddUvMesh(xatlasAtlas *atlas, const xatlasUvMeshDecl *decl)
+{
return (xatlasAddMeshError)xatlas::AddUvMesh((xatlas::Atlas *)atlas, *(const xatlas::UvMeshDecl *)decl);
}
-void xatlasComputeCharts(xatlasAtlas *atlas, const xatlasChartOptions *chartOptions) {
+void xatlasComputeCharts(xatlasAtlas *atlas, const xatlasChartOptions *chartOptions)
+{
xatlas::ComputeCharts((xatlas::Atlas *)atlas, chartOptions ? *(xatlas::ChartOptions *)chartOptions : xatlas::ChartOptions());
}
-void xatlasPackCharts(xatlasAtlas *atlas, const xatlasPackOptions *packOptions) {
+void xatlasPackCharts(xatlasAtlas *atlas, const xatlasPackOptions *packOptions)
+{
xatlas::PackCharts((xatlas::Atlas *)atlas, packOptions ? *(xatlas::PackOptions *)packOptions : xatlas::PackOptions());
}
-void xatlasGenerate(xatlasAtlas *atlas, const xatlasChartOptions *chartOptions, const xatlasPackOptions *packOptions) {
+void xatlasGenerate(xatlasAtlas *atlas, const xatlasChartOptions *chartOptions, const xatlasPackOptions *packOptions)
+{
xatlas::Generate((xatlas::Atlas *)atlas, chartOptions ? *(xatlas::ChartOptions *)chartOptions : xatlas::ChartOptions(), packOptions ? *(xatlas::PackOptions *)packOptions : xatlas::PackOptions());
}
-void xatlasSetProgressCallback(xatlasAtlas *atlas, xatlasProgressFunc progressFunc, void *progressUserData) {
+void xatlasSetProgressCallback(xatlasAtlas *atlas, xatlasProgressFunc progressFunc, void *progressUserData)
+{
xatlas::ProgressFunc pf;
*(void **)&pf = (void *)progressFunc;
xatlas::SetProgressCallback((xatlas::Atlas *)atlas, pf, progressUserData);
}
-void xatlasSetAlloc(xatlasReallocFunc reallocFunc, xatlasFreeFunc freeFunc) {
+void xatlasSetAlloc(xatlasReallocFunc reallocFunc, xatlasFreeFunc freeFunc)
+{
xatlas::SetAlloc((xatlas::ReallocFunc)reallocFunc, (xatlas::FreeFunc)freeFunc);
}
-void xatlasSetPrint(xatlasPrintFunc print, bool verbose) {
+void xatlasSetPrint(xatlasPrintFunc print, bool verbose)
+{
xatlas::SetPrint((xatlas::PrintFunc)print, verbose);
}
-const char *xatlasAddMeshErrorString(xatlasAddMeshError error) {
+const char *xatlasAddMeshErrorString(xatlasAddMeshError error)
+{
return xatlas::StringForEnum((xatlas::AddMeshError)error);
}
-const char *xatlasProgressCategoryString(xatlasProgressCategory category) {
+const char *xatlasProgressCategoryString(xatlasProgressCategory category)
+{
return xatlas::StringForEnum((xatlas::ProgressCategory)category);
}
-void xatlasMeshDeclInit(xatlasMeshDecl *meshDecl) {
+void xatlasMeshDeclInit(xatlasMeshDecl *meshDecl)
+{
xatlas::MeshDecl init;
memcpy(meshDecl, &init, sizeof(init));
}
-void xatlasUvMeshDeclInit(xatlasUvMeshDecl *uvMeshDecl) {
+void xatlasUvMeshDeclInit(xatlasUvMeshDecl *uvMeshDecl)
+{
xatlas::UvMeshDecl init;
memcpy(uvMeshDecl, &init, sizeof(init));
}
-void xatlasChartOptionsInit(xatlasChartOptions *chartOptions) {
+void xatlasChartOptionsInit(xatlasChartOptions *chartOptions)
+{
xatlas::ChartOptions init;
memcpy(chartOptions, &init, sizeof(init));
}
-void xatlasPackOptionsInit(xatlasPackOptions *packOptions) {
+void xatlasPackOptionsInit(xatlasPackOptions *packOptions)
+{
xatlas::PackOptions init;
memcpy(packOptions, &init, sizeof(init));
}
diff --git a/thirdparty/xatlas/xatlas.h b/thirdparty/xatlas/xatlas.h
index fc40d9d49c..d66a96db21 100644
--- a/thirdparty/xatlas/xatlas.h
+++ b/thirdparty/xatlas/xatlas.h
@@ -36,7 +36,8 @@ Copyright NVIDIA Corporation 2006 -- Ignacio Castano <icastano@nvidia.com>
namespace xatlas {
-enum class ChartType {
+enum class ChartType
+{
Planar,
Ortho,
LSCM,
@@ -45,7 +46,8 @@ enum class ChartType {
};
// A group of connected faces, belonging to a single atlas.
-struct Chart {
+struct Chart
+{
uint32_t *faceArray;
uint32_t atlasIndex; // Sub-atlas index.
uint32_t faceCount;
@@ -54,7 +56,8 @@ struct Chart {
};
// Output vertex.
-struct Vertex {
+struct Vertex
+{
int32_t atlasIndex; // Sub-atlas index. -1 if the vertex doesn't exist in any atlas.
int32_t chartIndex; // -1 if the vertex doesn't exist in any chart.
float uv[2]; // Not normalized - values are in Atlas width and height range.
@@ -62,7 +65,8 @@ struct Vertex {
};
// Output mesh.
-struct Mesh {
+struct Mesh
+{
Chart *chartArray;
uint32_t *indexArray;
Vertex *vertexArray;
@@ -77,7 +81,8 @@ static const uint32_t kImageIsBilinearBit = 0x40000000;
static const uint32_t kImageIsPaddingBit = 0x20000000;
// Empty on creation. Populated after charts are packed.
-struct Atlas {
+struct Atlas
+{
uint32_t *image;
Mesh *meshes; // The output meshes, corresponding to each AddMesh call.
float *utilization; // Normalized atlas texel utilization array. E.g. a value of 0.8 means 20% empty space. atlasCount in length.
@@ -94,13 +99,15 @@ Atlas *Create();
void Destroy(Atlas *atlas);
-enum class IndexFormat {
+enum class IndexFormat
+{
UInt16,
UInt32
};
// Input mesh declaration.
-struct MeshDecl {
+struct MeshDecl
+{
const void *vertexPositionData = nullptr;
const void *vertexNormalData = nullptr; // optional
const void *vertexUvData = nullptr; // optional. The input UVs are provided as a hint to the chart generator.
@@ -131,7 +138,8 @@ struct MeshDecl {
float epsilon = 1.192092896e-07F;
};
-enum class AddMeshError {
+enum class AddMeshError
+{
Success, // No error.
Error, // Unspecified error.
IndexOutOfRange, // An index is >= MeshDecl vertexCount.
@@ -145,7 +153,8 @@ AddMeshError AddMesh(Atlas *atlas, const MeshDecl &meshDecl, uint32_t meshCountH
// Wait for AddMesh async processing to finish. ComputeCharts / Generate call this internally.
void AddMeshJoin(Atlas *atlas);
-struct UvMeshDecl {
+struct UvMeshDecl
+{
const void *vertexUvData = nullptr;
const void *indexData = nullptr; // optional
const uint32_t *faceMaterialData = nullptr; // Optional. Overlapping UVs should be assigned a different material. Must be indexCount / 3 in length.
@@ -161,7 +170,8 @@ AddMeshError AddUvMesh(Atlas *atlas, const UvMeshDecl &decl);
// Custom parameterization function. texcoords initial values are an orthogonal parameterization.
typedef void (*ParameterizeFunc)(const float *positions, float *texcoords, uint32_t vertexCount, const uint32_t *indices, uint32_t indexCount);
-struct ChartOptions {
+struct ChartOptions
+{
ParameterizeFunc paramFunc = nullptr;
float maxChartArea = 0.0f; // Don't grow charts to be larger than this. 0 means no limit.
@@ -184,7 +194,8 @@ struct ChartOptions {
// Call after all AddMesh calls. Can be called multiple times to recompute charts with different options.
void ComputeCharts(Atlas *atlas, ChartOptions options = ChartOptions());
-struct PackOptions {
+struct PackOptions
+{
// Charts larger than this will be scaled down. 0 means no limit.
uint32_t maxChartSize = 0;
@@ -227,7 +238,8 @@ void PackCharts(Atlas *atlas, PackOptions packOptions = PackOptions());
void Generate(Atlas *atlas, ChartOptions chartOptions = ChartOptions(), PackOptions packOptions = PackOptions());
// Progress tracking.
-enum class ProgressCategory {
+enum class ProgressCategory
+{
AddMesh,
ComputeCharts,
PackCharts,
diff --git a/thirdparty/zstd/common/bitstream.h b/thirdparty/zstd/common/bitstream.h
index d9a2730104..2e5a933ad3 100644
--- a/thirdparty/zstd/common/bitstream.h
+++ b/thirdparty/zstd/common/bitstream.h
@@ -1,7 +1,7 @@
/* ******************************************************************
* bitstream
* Part of FSE library
- * Copyright (c) 2013-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
*
* You can contact the author at :
* - Source repository : https://github.com/Cyan4973/FiniteStateEntropy
diff --git a/thirdparty/zstd/common/compiler.h b/thirdparty/zstd/common/compiler.h
index 3e454f38c1..a951d0adea 100644
--- a/thirdparty/zstd/common/compiler.h
+++ b/thirdparty/zstd/common/compiler.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -90,6 +90,7 @@
# endif
#endif
+
/* target attribute */
#ifndef __has_attribute
#define __has_attribute(x) 0 /* Compatibility with non-clang compilers. */
diff --git a/thirdparty/zstd/common/cpu.h b/thirdparty/zstd/common/cpu.h
index cb210593ea..8acd33be3c 100644
--- a/thirdparty/zstd/common/cpu.h
+++ b/thirdparty/zstd/common/cpu.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018-2020, Facebook, Inc.
+ * Copyright (c) Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
diff --git a/thirdparty/zstd/common/debug.c b/thirdparty/zstd/common/debug.c
index f303f4a2e5..bb863c9ea6 100644
--- a/thirdparty/zstd/common/debug.c
+++ b/thirdparty/zstd/common/debug.c
@@ -1,7 +1,7 @@
/* ******************************************************************
* debug
* Part of FSE library
- * Copyright (c) 2013-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
*
* You can contact the author at :
* - Source repository : https://github.com/Cyan4973/FiniteStateEntropy
diff --git a/thirdparty/zstd/common/debug.h b/thirdparty/zstd/common/debug.h
index 8b5734366c..3b2a320a18 100644
--- a/thirdparty/zstd/common/debug.h
+++ b/thirdparty/zstd/common/debug.h
@@ -1,7 +1,7 @@
/* ******************************************************************
* debug
* Part of FSE library
- * Copyright (c) 2013-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
*
* You can contact the author at :
* - Source repository : https://github.com/Cyan4973/FiniteStateEntropy
diff --git a/thirdparty/zstd/common/entropy_common.c b/thirdparty/zstd/common/entropy_common.c
index f9fcb1acfc..41cd69566b 100644
--- a/thirdparty/zstd/common/entropy_common.c
+++ b/thirdparty/zstd/common/entropy_common.c
@@ -1,6 +1,6 @@
/* ******************************************************************
* Common functions of New Generation Entropy library
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
*
* You can contact the author at :
* - FSE+HUF source repository : https://github.com/Cyan4973/FiniteStateEntropy
diff --git a/thirdparty/zstd/common/error_private.c b/thirdparty/zstd/common/error_private.c
index 45bba5305b..6d1135f8c3 100644
--- a/thirdparty/zstd/common/error_private.c
+++ b/thirdparty/zstd/common/error_private.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
diff --git a/thirdparty/zstd/common/error_private.h b/thirdparty/zstd/common/error_private.h
index 71b37b8dfa..6d8b9f7763 100644
--- a/thirdparty/zstd/common/error_private.h
+++ b/thirdparty/zstd/common/error_private.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -21,8 +21,8 @@ extern "C" {
/* ****************************************
* Dependencies
******************************************/
-#include "zstd_deps.h" /* size_t */
-#include "zstd_errors.h" /* enum list */
+#include "../zstd_errors.h" /* enum list */
+#include "zstd_deps.h" /* size_t */
/* ****************************************
diff --git a/thirdparty/zstd/common/fse.h b/thirdparty/zstd/common/fse.h
index dd5fc44e80..19dd4febcd 100644
--- a/thirdparty/zstd/common/fse.h
+++ b/thirdparty/zstd/common/fse.h
@@ -1,7 +1,7 @@
/* ******************************************************************
* FSE : Finite State Entropy codec
* Public Prototypes declaration
- * Copyright (c) 2013-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
*
* You can contact the author at :
* - Source repository : https://github.com/Cyan4973/FiniteStateEntropy
@@ -352,7 +352,7 @@ size_t FSE_buildDTable_raw (FSE_DTable* dt, unsigned nbBits);
size_t FSE_buildDTable_rle (FSE_DTable* dt, unsigned char symbolValue);
/**< build a fake FSE_DTable, designed to always generate the same symbolValue */
-#define FSE_DECOMPRESS_WKSP_SIZE_U32(maxTableLog, maxSymbolValue) (FSE_DTABLE_SIZE_U32(maxTableLog) + FSE_BUILD_DTABLE_WKSP_SIZE_U32(maxTableLog, maxSymbolValue))
+#define FSE_DECOMPRESS_WKSP_SIZE_U32(maxTableLog, maxSymbolValue) (FSE_DTABLE_SIZE_U32(maxTableLog) + FSE_BUILD_DTABLE_WKSP_SIZE_U32(maxTableLog, maxSymbolValue) + (FSE_MAX_SYMBOL_VALUE + 1) / 2 + 1)
#define FSE_DECOMPRESS_WKSP_SIZE(maxTableLog, maxSymbolValue) (FSE_DECOMPRESS_WKSP_SIZE_U32(maxTableLog, maxSymbolValue) * sizeof(unsigned))
size_t FSE_decompress_wksp(void* dst, size_t dstCapacity, const void* cSrc, size_t cSrcSize, unsigned maxLog, void* workSpace, size_t wkspSize);
/**< same as FSE_decompress(), using an externally allocated `workSpace` produced with `FSE_DECOMPRESS_WKSP_SIZE_U32(maxLog, maxSymbolValue)` */
diff --git a/thirdparty/zstd/common/fse_decompress.c b/thirdparty/zstd/common/fse_decompress.c
index c164430f99..f4ff58fa0a 100644
--- a/thirdparty/zstd/common/fse_decompress.c
+++ b/thirdparty/zstd/common/fse_decompress.c
@@ -1,6 +1,6 @@
/* ******************************************************************
* FSE : Finite State Entropy decoder
- * Copyright (c) 2013-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
*
* You can contact the author at :
* - FSE source repository : https://github.com/Cyan4973/FiniteStateEntropy
@@ -310,6 +310,12 @@ size_t FSE_decompress_wksp(void* dst, size_t dstCapacity, const void* cSrc, size
return FSE_decompress_wksp_bmi2(dst, dstCapacity, cSrc, cSrcSize, maxLog, workSpace, wkspSize, /* bmi2 */ 0);
}
+typedef struct {
+ short ncount[FSE_MAX_SYMBOL_VALUE + 1];
+ FSE_DTable dtable[1]; /* Dynamically sized */
+} FSE_DecompressWksp;
+
+
FORCE_INLINE_TEMPLATE size_t FSE_decompress_wksp_body(
void* dst, size_t dstCapacity,
const void* cSrc, size_t cSrcSize,
@@ -318,33 +324,37 @@ FORCE_INLINE_TEMPLATE size_t FSE_decompress_wksp_body(
{
const BYTE* const istart = (const BYTE*)cSrc;
const BYTE* ip = istart;
- short counting[FSE_MAX_SYMBOL_VALUE+1];
unsigned tableLog;
unsigned maxSymbolValue = FSE_MAX_SYMBOL_VALUE;
- FSE_DTable* const dtable = (FSE_DTable*)workSpace;
+ FSE_DecompressWksp* const wksp = (FSE_DecompressWksp*)workSpace;
+
+ DEBUG_STATIC_ASSERT((FSE_MAX_SYMBOL_VALUE + 1) % 2 == 0);
+ if (wkspSize < sizeof(*wksp)) return ERROR(GENERIC);
/* normal FSE decoding mode */
- size_t const NCountLength = FSE_readNCount_bmi2(counting, &maxSymbolValue, &tableLog, istart, cSrcSize, bmi2);
- if (FSE_isError(NCountLength)) return NCountLength;
- if (tableLog > maxLog) return ERROR(tableLog_tooLarge);
- assert(NCountLength <= cSrcSize);
- ip += NCountLength;
- cSrcSize -= NCountLength;
+ {
+ size_t const NCountLength = FSE_readNCount_bmi2(wksp->ncount, &maxSymbolValue, &tableLog, istart, cSrcSize, bmi2);
+ if (FSE_isError(NCountLength)) return NCountLength;
+ if (tableLog > maxLog) return ERROR(tableLog_tooLarge);
+ assert(NCountLength <= cSrcSize);
+ ip += NCountLength;
+ cSrcSize -= NCountLength;
+ }
if (FSE_DECOMPRESS_WKSP_SIZE(tableLog, maxSymbolValue) > wkspSize) return ERROR(tableLog_tooLarge);
- workSpace = dtable + FSE_DTABLE_SIZE_U32(tableLog);
- wkspSize -= FSE_DTABLE_SIZE(tableLog);
+ workSpace = wksp->dtable + FSE_DTABLE_SIZE_U32(tableLog);
+ wkspSize -= sizeof(*wksp) + FSE_DTABLE_SIZE(tableLog);
- CHECK_F( FSE_buildDTable_internal(dtable, counting, maxSymbolValue, tableLog, workSpace, wkspSize) );
+ CHECK_F( FSE_buildDTable_internal(wksp->dtable, wksp->ncount, maxSymbolValue, tableLog, workSpace, wkspSize) );
{
- const void* ptr = dtable;
+ const void* ptr = wksp->dtable;
const FSE_DTableHeader* DTableH = (const FSE_DTableHeader*)ptr;
const U32 fastMode = DTableH->fastMode;
/* select fast mode (static) */
- if (fastMode) return FSE_decompress_usingDTable_generic(dst, dstCapacity, ip, cSrcSize, dtable, 1);
- return FSE_decompress_usingDTable_generic(dst, dstCapacity, ip, cSrcSize, dtable, 0);
+ if (fastMode) return FSE_decompress_usingDTable_generic(dst, dstCapacity, ip, cSrcSize, wksp->dtable, 1);
+ return FSE_decompress_usingDTable_generic(dst, dstCapacity, ip, cSrcSize, wksp->dtable, 0);
}
}
diff --git a/thirdparty/zstd/common/huf.h b/thirdparty/zstd/common/huf.h
index 1afef90c7c..3d47ced030 100644
--- a/thirdparty/zstd/common/huf.h
+++ b/thirdparty/zstd/common/huf.h
@@ -1,7 +1,7 @@
/* ******************************************************************
* huff0 huffman codec,
* part of Finite State Entropy library
- * Copyright (c) 2013-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
*
* You can contact the author at :
* - Source repository : https://github.com/Cyan4973/FiniteStateEntropy
@@ -192,6 +192,7 @@ size_t HUF_decompress4X2_DCtx_wksp(HUF_DTable* dctx, void* dst, size_t dstSize,
unsigned HUF_optimalTableLog(unsigned maxTableLog, size_t srcSize, unsigned maxSymbolValue);
size_t HUF_buildCTable (HUF_CElt* CTable, const unsigned* count, unsigned maxSymbolValue, unsigned maxNbBits); /* @return : maxNbBits; CTable and count can overlap. In which case, CTable will overwrite count content */
size_t HUF_writeCTable (void* dst, size_t maxDstSize, const HUF_CElt* CTable, unsigned maxSymbolValue, unsigned huffLog);
+size_t HUF_writeCTable_wksp(void* dst, size_t maxDstSize, const HUF_CElt* CTable, unsigned maxSymbolValue, unsigned huffLog, void* workspace, size_t workspaceSize);
size_t HUF_compress4X_usingCTable(void* dst, size_t dstSize, const void* src, size_t srcSize, const HUF_CElt* CTable);
size_t HUF_estimateCompressedSize(const HUF_CElt* CTable, const unsigned* count, unsigned maxSymbolValue);
int HUF_validateCTable(const HUF_CElt* CTable, const unsigned* count, unsigned maxSymbolValue);
@@ -278,7 +279,7 @@ U32 HUF_selectDecoder (size_t dstSize, size_t cSrcSize);
* a required workspace size greater than that specified in the following
* macro.
*/
-#define HUF_DECOMPRESS_WORKSPACE_SIZE (2 << 10)
+#define HUF_DECOMPRESS_WORKSPACE_SIZE ((2 << 10) + (1 << 9))
#define HUF_DECOMPRESS_WORKSPACE_SIZE_U32 (HUF_DECOMPRESS_WORKSPACE_SIZE / sizeof(U32))
#ifndef HUF_FORCE_DECOMPRESS_X2
diff --git a/thirdparty/zstd/common/mem.h b/thirdparty/zstd/common/mem.h
index 4728ef767b..9f3b81ab9d 100644
--- a/thirdparty/zstd/common/mem.h
+++ b/thirdparty/zstd/common/mem.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -143,9 +143,7 @@ MEM_STATIC size_t MEM_swapST(size_t in);
* Prefer these methods in priority order (0 > 1 > 2)
*/
#ifndef MEM_FORCE_MEMORY_ACCESS /* can be defined externally, on command line for example */
-# if defined(__GNUC__) && ( defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) )
-# define MEM_FORCE_MEMORY_ACCESS 2
-# elif defined(__INTEL_COMPILER) || defined(__GNUC__) || defined(__ICCARM__)
+# if defined(__INTEL_COMPILER) || defined(__GNUC__) || defined(__ICCARM__)
# define MEM_FORCE_MEMORY_ACCESS 1
# endif
#endif
@@ -308,7 +306,7 @@ MEM_STATIC void MEM_writeLE16(void* memPtr, U16 val)
MEM_STATIC U32 MEM_readLE24(const void* memPtr)
{
- return MEM_readLE16(memPtr) + (((const BYTE*)memPtr)[2] << 16);
+ return (U32)MEM_readLE16(memPtr) + ((U32)(((const BYTE*)memPtr)[2]) << 16);
}
MEM_STATIC void MEM_writeLE24(void* memPtr, U32 val)
diff --git a/thirdparty/zstd/common/pool.c b/thirdparty/zstd/common/pool.c
index 4c1b83376f..ea70b8b65a 100644
--- a/thirdparty/zstd/common/pool.c
+++ b/thirdparty/zstd/common/pool.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
diff --git a/thirdparty/zstd/common/pool.h b/thirdparty/zstd/common/pool.h
index 63954ca6ca..e18aa0708f 100644
--- a/thirdparty/zstd/common/pool.h
+++ b/thirdparty/zstd/common/pool.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
diff --git a/thirdparty/zstd/common/xxhash.c b/thirdparty/zstd/common/xxhash.c
index e708df3c33..926b33604e 100644
--- a/thirdparty/zstd/common/xxhash.c
+++ b/thirdparty/zstd/common/xxhash.c
@@ -1,6 +1,6 @@
/*
* xxHash - Fast Hash algorithm
- * Copyright (c) 2012-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
*
* You can contact the author at :
* - xxHash homepage: http://www.xxhash.com
@@ -30,9 +30,7 @@
* Prefer these methods in priority order (0 > 1 > 2)
*/
#ifndef XXH_FORCE_MEMORY_ACCESS /* can be defined externally, on command line for example */
-# if defined(__GNUC__) && ( defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) )
-# define XXH_FORCE_MEMORY_ACCESS 2
-# elif (defined(__INTEL_COMPILER) && !defined(WIN32)) || \
+# if (defined(__INTEL_COMPILER) && !defined(WIN32)) || \
(defined(__GNUC__) && ( defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) )) || \
defined(__ICCARM__)
# define XXH_FORCE_MEMORY_ACCESS 1
diff --git a/thirdparty/zstd/common/xxhash.h b/thirdparty/zstd/common/xxhash.h
index eceb55d5e0..16c1f1617b 100644
--- a/thirdparty/zstd/common/xxhash.h
+++ b/thirdparty/zstd/common/xxhash.h
@@ -1,7 +1,7 @@
/*
* xxHash - Extremely Fast Hash algorithm
* Header File
- * Copyright (c) 2012-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
*
* You can contact the author at :
* - xxHash source repository : https://github.com/Cyan4973/xxHash
diff --git a/thirdparty/zstd/common/zstd_common.c b/thirdparty/zstd/common/zstd_common.c
index 939e9f08fa..3d7e35b309 100644
--- a/thirdparty/zstd/common/zstd_common.c
+++ b/thirdparty/zstd/common/zstd_common.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
diff --git a/thirdparty/zstd/common/zstd_deps.h b/thirdparty/zstd/common/zstd_deps.h
index 0fb8b7818b..14211344a0 100644
--- a/thirdparty/zstd/common/zstd_deps.h
+++ b/thirdparty/zstd/common/zstd_deps.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Facebook, Inc.
+ * Copyright (c) Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
diff --git a/thirdparty/zstd/common/zstd_internal.h b/thirdparty/zstd/common/zstd_internal.h
index 0991f20a08..68252e987e 100644
--- a/thirdparty/zstd/common/zstd_internal.h
+++ b/thirdparty/zstd/common/zstd_internal.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -36,6 +36,11 @@
# define XXH_STATIC_LINKING_ONLY /* XXH64_state_t */
#endif
#include "xxhash.h" /* XXH_reset, update, digest */
+#ifndef ZSTD_NO_TRACE
+# include "zstd_trace.h"
+#else
+# define ZSTD_TRACE 0
+#endif
#if defined (__cplusplus)
extern "C" {
@@ -347,11 +352,18 @@ typedef enum {
* Private declarations
*********************************************/
typedef struct seqDef_s {
- U32 offset; /* Offset code of the sequence */
+ U32 offset; /* offset == rawOffset + ZSTD_REP_NUM, or equivalently, offCode + 1 */
U16 litLength;
U16 matchLength;
} seqDef;
+/* Controls whether seqStore has a single "long" litLength or matchLength. See seqStore_t. */
+typedef enum {
+ ZSTD_llt_none = 0, /* no longLengthType */
+ ZSTD_llt_literalLength = 1, /* represents a long literal */
+ ZSTD_llt_matchLength = 2 /* represents a long match */
+} ZSTD_longLengthType_e;
+
typedef struct {
seqDef* sequencesStart;
seqDef* sequences; /* ptr to end of sequences */
@@ -363,12 +375,12 @@ typedef struct {
size_t maxNbSeq;
size_t maxNbLit;
- /* longLengthPos and longLengthID to allow us to represent either a single litLength or matchLength
+ /* longLengthPos and longLengthType to allow us to represent either a single litLength or matchLength
* in the seqStore that has a value larger than U16 (if it exists). To do so, we increment
- * the existing value of the litLength or matchLength by 0x10000.
+ * the existing value of the litLength or matchLength by 0x10000.
*/
- U32 longLengthID; /* 0 == no longLength; 1 == Represent the long literal; 2 == Represent the long match; */
- U32 longLengthPos; /* Index of the sequence to apply long length modification to */
+ ZSTD_longLengthType_e longLengthType;
+ U32 longLengthPos; /* Index of the sequence to apply long length modification to */
} seqStore_t;
typedef struct {
@@ -378,7 +390,7 @@ typedef struct {
/**
* Returns the ZSTD_sequenceLength for the given sequences. It handles the decoding of long sequences
- * indicated by longLengthPos and longLengthID, and adds MINMATCH back to matchLength.
+ * indicated by longLengthPos and longLengthType, and adds MINMATCH back to matchLength.
*/
MEM_STATIC ZSTD_sequenceLength ZSTD_getSequenceLength(seqStore_t const* seqStore, seqDef const* seq)
{
@@ -386,10 +398,10 @@ MEM_STATIC ZSTD_sequenceLength ZSTD_getSequenceLength(seqStore_t const* seqStore
seqLen.litLength = seq->litLength;
seqLen.matchLength = seq->matchLength + MINMATCH;
if (seqStore->longLengthPos == (U32)(seq - seqStore->sequencesStart)) {
- if (seqStore->longLengthID == 1) {
+ if (seqStore->longLengthType == ZSTD_llt_literalLength) {
seqLen.litLength += 0xFFFF;
}
- if (seqStore->longLengthID == 2) {
+ if (seqStore->longLengthType == ZSTD_llt_matchLength) {
seqLen.matchLength += 0xFFFF;
}
}
diff --git a/thirdparty/zstd/common/zstd_trace.h b/thirdparty/zstd/common/zstd_trace.h
new file mode 100644
index 0000000000..2da5640771
--- /dev/null
+++ b/thirdparty/zstd/common/zstd_trace.h
@@ -0,0 +1,154 @@
+/*
+ * Copyright (c) Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under both the BSD-style license (found in the
+ * LICENSE file in the root directory of this source tree) and the GPLv2 (found
+ * in the COPYING file in the root directory of this source tree).
+ * You may select, at your option, one of the above-listed licenses.
+ */
+
+#ifndef ZSTD_TRACE_H
+#define ZSTD_TRACE_H
+
+#if defined (__cplusplus)
+extern "C" {
+#endif
+
+#include <stddef.h>
+
+/* weak symbol support */
+#if !defined(ZSTD_HAVE_WEAK_SYMBOLS) && defined(__GNUC__) && \
+ !defined(__APPLE__) && !defined(_WIN32) && !defined(__MINGW32__) && \
+ !defined(__CYGWIN__)
+# define ZSTD_HAVE_WEAK_SYMBOLS 1
+#else
+# define ZSTD_HAVE_WEAK_SYMBOLS 0
+#endif
+#if ZSTD_HAVE_WEAK_SYMBOLS
+# define ZSTD_WEAK_ATTR __attribute__((__weak__))
+#else
+# define ZSTD_WEAK_ATTR
+#endif
+
+/* Only enable tracing when weak symbols are available. */
+#ifndef ZSTD_TRACE
+# define ZSTD_TRACE ZSTD_HAVE_WEAK_SYMBOLS
+#endif
+
+#if ZSTD_TRACE
+
+struct ZSTD_CCtx_s;
+struct ZSTD_DCtx_s;
+struct ZSTD_CCtx_params_s;
+
+typedef struct {
+ /**
+ * ZSTD_VERSION_NUMBER
+ *
+ * This is guaranteed to be the first member of ZSTD_trace.
+ * Otherwise, this struct is not stable between versions. If
+ * the version number does not match your expectation, you
+ * should not interpret the rest of the struct.
+ */
+ unsigned version;
+ /**
+ * Non-zero if streaming (de)compression is used.
+ */
+ unsigned streaming;
+ /**
+ * The dictionary ID.
+ */
+ unsigned dictionaryID;
+ /**
+ * Is the dictionary cold?
+ * Only set on decompression.
+ */
+ unsigned dictionaryIsCold;
+ /**
+ * The dictionary size or zero if no dictionary.
+ */
+ size_t dictionarySize;
+ /**
+ * The uncompressed size of the data.
+ */
+ size_t uncompressedSize;
+ /**
+ * The compressed size of the data.
+ */
+ size_t compressedSize;
+ /**
+ * The fully resolved CCtx parameters (NULL on decompression).
+ */
+ struct ZSTD_CCtx_params_s const* params;
+ /**
+ * The ZSTD_CCtx pointer (NULL on decompression).
+ */
+ struct ZSTD_CCtx_s const* cctx;
+ /**
+ * The ZSTD_DCtx pointer (NULL on compression).
+ */
+ struct ZSTD_DCtx_s const* dctx;
+} ZSTD_Trace;
+
+/**
+ * A tracing context. It must be 0 when tracing is disabled.
+ * Otherwise, any non-zero value returned by a tracing begin()
+ * function is presented to any subsequent calls to end().
+ *
+ * Any non-zero value is treated as tracing is enabled and not
+ * interpreted by the library.
+ *
+ * Two possible uses are:
+ * * A timestamp for when the begin() function was called.
+ * * A unique key identifying the (de)compression, like the
+ * address of the [dc]ctx pointer if you need to track
+ * more information than just a timestamp.
+ */
+typedef unsigned long long ZSTD_TraceCtx;
+
+/**
+ * Trace the beginning of a compression call.
+ * @param cctx The dctx pointer for the compression.
+ * It can be used as a key to map begin() to end().
+ * @returns Non-zero if tracing is enabled. The return value is
+ * passed to ZSTD_trace_compress_end().
+ */
+ZSTD_WEAK_ATTR ZSTD_TraceCtx ZSTD_trace_compress_begin(
+ struct ZSTD_CCtx_s const* cctx);
+
+/**
+ * Trace the end of a compression call.
+ * @param ctx The return value of ZSTD_trace_compress_begin().
+ * @param trace The zstd tracing info.
+ */
+ZSTD_WEAK_ATTR void ZSTD_trace_compress_end(
+ ZSTD_TraceCtx ctx,
+ ZSTD_Trace const* trace);
+
+/**
+ * Trace the beginning of a decompression call.
+ * @param dctx The dctx pointer for the decompression.
+ * It can be used as a key to map begin() to end().
+ * @returns Non-zero if tracing is enabled. The return value is
+ * passed to ZSTD_trace_compress_end().
+ */
+ZSTD_WEAK_ATTR ZSTD_TraceCtx ZSTD_trace_decompress_begin(
+ struct ZSTD_DCtx_s const* dctx);
+
+/**
+ * Trace the end of a decompression call.
+ * @param ctx The return value of ZSTD_trace_decompress_begin().
+ * @param trace The zstd tracing info.
+ */
+ZSTD_WEAK_ATTR void ZSTD_trace_decompress_end(
+ ZSTD_TraceCtx ctx,
+ ZSTD_Trace const* trace);
+
+#endif /* ZSTD_TRACE */
+
+#if defined (__cplusplus)
+}
+#endif
+
+#endif /* ZSTD_TRACE_H */
diff --git a/thirdparty/zstd/compress/fse_compress.c b/thirdparty/zstd/compress/fse_compress.c
index 304a82b3cc..b4297ec88a 100644
--- a/thirdparty/zstd/compress/fse_compress.c
+++ b/thirdparty/zstd/compress/fse_compress.c
@@ -1,6 +1,6 @@
/* ******************************************************************
* FSE : Finite State Entropy encoder
- * Copyright (c) 2013-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
*
* You can contact the author at :
* - FSE source repository : https://github.com/Cyan4973/FiniteStateEntropy
diff --git a/thirdparty/zstd/compress/hist.c b/thirdparty/zstd/compress/hist.c
index a9659d11ad..073c57e752 100644
--- a/thirdparty/zstd/compress/hist.c
+++ b/thirdparty/zstd/compress/hist.c
@@ -1,7 +1,7 @@
/* ******************************************************************
* hist : Histogram functions
* part of Finite State Entropy project
- * Copyright (c) 2013-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
*
* You can contact the author at :
* - FSE source repository : https://github.com/Cyan4973/FiniteStateEntropy
diff --git a/thirdparty/zstd/compress/hist.h b/thirdparty/zstd/compress/hist.h
index fb9ead6834..228ed48a71 100644
--- a/thirdparty/zstd/compress/hist.h
+++ b/thirdparty/zstd/compress/hist.h
@@ -1,7 +1,7 @@
/* ******************************************************************
* hist : Histogram functions
* part of Finite State Entropy project
- * Copyright (c) 2013-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
*
* You can contact the author at :
* - FSE source repository : https://github.com/Cyan4973/FiniteStateEntropy
diff --git a/thirdparty/zstd/compress/huf_compress.c b/thirdparty/zstd/compress/huf_compress.c
index 302e08864d..485906e678 100644
--- a/thirdparty/zstd/compress/huf_compress.c
+++ b/thirdparty/zstd/compress/huf_compress.c
@@ -1,6 +1,6 @@
/* ******************************************************************
* Huffman encoder, part of New Generation Entropy library
- * Copyright (c) 2013-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
*
* You can contact the author at :
* - FSE+HUF source repository : https://github.com/Cyan4973/FiniteStateEntropy
@@ -59,7 +59,15 @@ unsigned HUF_optimalTableLog(unsigned maxTableLog, size_t srcSize, unsigned maxS
* Note : all elements within weightTable are supposed to be <= HUF_TABLELOG_MAX.
*/
#define MAX_FSE_TABLELOG_FOR_HUFF_HEADER 6
-static size_t HUF_compressWeights (void* dst, size_t dstSize, const void* weightTable, size_t wtSize)
+
+typedef struct {
+ FSE_CTable CTable[FSE_CTABLE_SIZE_U32(MAX_FSE_TABLELOG_FOR_HUFF_HEADER, HUF_TABLELOG_MAX)];
+ U32 scratchBuffer[FSE_BUILD_CTABLE_WORKSPACE_SIZE_U32(HUF_TABLELOG_MAX, MAX_FSE_TABLELOG_FOR_HUFF_HEADER)];
+ unsigned count[HUF_TABLELOG_MAX+1];
+ S16 norm[HUF_TABLELOG_MAX+1];
+} HUF_CompressWeightsWksp;
+
+static size_t HUF_compressWeights(void* dst, size_t dstSize, const void* weightTable, size_t wtSize, void* workspace, size_t workspaceSize)
{
BYTE* const ostart = (BYTE*) dst;
BYTE* op = ostart;
@@ -67,33 +75,30 @@ static size_t HUF_compressWeights (void* dst, size_t dstSize, const void* weight
unsigned maxSymbolValue = HUF_TABLELOG_MAX;
U32 tableLog = MAX_FSE_TABLELOG_FOR_HUFF_HEADER;
+ HUF_CompressWeightsWksp* wksp = (HUF_CompressWeightsWksp*)workspace;
- FSE_CTable CTable[FSE_CTABLE_SIZE_U32(MAX_FSE_TABLELOG_FOR_HUFF_HEADER, HUF_TABLELOG_MAX)];
- U32 scratchBuffer[FSE_BUILD_CTABLE_WORKSPACE_SIZE_U32(HUF_TABLELOG_MAX, MAX_FSE_TABLELOG_FOR_HUFF_HEADER)];
-
- unsigned count[HUF_TABLELOG_MAX+1];
- S16 norm[HUF_TABLELOG_MAX+1];
+ if (workspaceSize < sizeof(HUF_CompressWeightsWksp)) return ERROR(GENERIC);
/* init conditions */
if (wtSize <= 1) return 0; /* Not compressible */
/* Scan input and build symbol stats */
- { unsigned const maxCount = HIST_count_simple(count, &maxSymbolValue, weightTable, wtSize); /* never fails */
+ { unsigned const maxCount = HIST_count_simple(wksp->count, &maxSymbolValue, weightTable, wtSize); /* never fails */
if (maxCount == wtSize) return 1; /* only a single symbol in src : rle */
if (maxCount == 1) return 0; /* each symbol present maximum once => not compressible */
}
tableLog = FSE_optimalTableLog(tableLog, wtSize, maxSymbolValue);
- CHECK_F( FSE_normalizeCount(norm, tableLog, count, wtSize, maxSymbolValue, /* useLowProbCount */ 0) );
+ CHECK_F( FSE_normalizeCount(wksp->norm, tableLog, wksp->count, wtSize, maxSymbolValue, /* useLowProbCount */ 0) );
/* Write table description header */
- { CHECK_V_F(hSize, FSE_writeNCount(op, (size_t)(oend-op), norm, maxSymbolValue, tableLog) );
+ { CHECK_V_F(hSize, FSE_writeNCount(op, (size_t)(oend-op), wksp->norm, maxSymbolValue, tableLog) );
op += hSize;
}
/* Compress */
- CHECK_F( FSE_buildCTable_wksp(CTable, norm, maxSymbolValue, tableLog, scratchBuffer, sizeof(scratchBuffer)) );
- { CHECK_V_F(cSize, FSE_compress_usingCTable(op, (size_t)(oend - op), weightTable, wtSize, CTable) );
+ CHECK_F( FSE_buildCTable_wksp(wksp->CTable, wksp->norm, maxSymbolValue, tableLog, wksp->scratchBuffer, sizeof(wksp->scratchBuffer)) );
+ { CHECK_V_F(cSize, FSE_compress_usingCTable(op, (size_t)(oend - op), weightTable, wtSize, wksp->CTable) );
if (cSize == 0) return 0; /* not enough space for compressed data */
op += cSize;
}
@@ -102,29 +107,33 @@ static size_t HUF_compressWeights (void* dst, size_t dstSize, const void* weight
}
-/*! HUF_writeCTable() :
- `CTable` : Huffman tree to save, using huf representation.
- @return : size of saved CTable */
-size_t HUF_writeCTable (void* dst, size_t maxDstSize,
- const HUF_CElt* CTable, unsigned maxSymbolValue, unsigned huffLog)
-{
+typedef struct {
+ HUF_CompressWeightsWksp wksp;
BYTE bitsToWeight[HUF_TABLELOG_MAX + 1]; /* precomputed conversion table */
BYTE huffWeight[HUF_SYMBOLVALUE_MAX];
+} HUF_WriteCTableWksp;
+
+size_t HUF_writeCTable_wksp(void* dst, size_t maxDstSize,
+ const HUF_CElt* CTable, unsigned maxSymbolValue, unsigned huffLog,
+ void* workspace, size_t workspaceSize)
+{
BYTE* op = (BYTE*)dst;
U32 n;
+ HUF_WriteCTableWksp* wksp = (HUF_WriteCTableWksp*)workspace;
- /* check conditions */
+ /* check conditions */
+ if (workspaceSize < sizeof(HUF_WriteCTableWksp)) return ERROR(GENERIC);
if (maxSymbolValue > HUF_SYMBOLVALUE_MAX) return ERROR(maxSymbolValue_tooLarge);
/* convert to weight */
- bitsToWeight[0] = 0;
+ wksp->bitsToWeight[0] = 0;
for (n=1; n<huffLog+1; n++)
- bitsToWeight[n] = (BYTE)(huffLog + 1 - n);
+ wksp->bitsToWeight[n] = (BYTE)(huffLog + 1 - n);
for (n=0; n<maxSymbolValue; n++)
- huffWeight[n] = bitsToWeight[CTable[n].nbBits];
+ wksp->huffWeight[n] = wksp->bitsToWeight[CTable[n].nbBits];
/* attempt weights compression by FSE */
- { CHECK_V_F(hSize, HUF_compressWeights(op+1, maxDstSize-1, huffWeight, maxSymbolValue) );
+ { CHECK_V_F(hSize, HUF_compressWeights(op+1, maxDstSize-1, wksp->huffWeight, maxSymbolValue, &wksp->wksp, sizeof(wksp->wksp)) );
if ((hSize>1) & (hSize < maxSymbolValue/2)) { /* FSE compressed */
op[0] = (BYTE)hSize;
return hSize+1;
@@ -134,12 +143,22 @@ size_t HUF_writeCTable (void* dst, size_t maxDstSize,
if (maxSymbolValue > (256-128)) return ERROR(GENERIC); /* should not happen : likely means source cannot be compressed */
if (((maxSymbolValue+1)/2) + 1 > maxDstSize) return ERROR(dstSize_tooSmall); /* not enough space within dst buffer */
op[0] = (BYTE)(128 /*special case*/ + (maxSymbolValue-1));
- huffWeight[maxSymbolValue] = 0; /* to be sure it doesn't cause msan issue in final combination */
+ wksp->huffWeight[maxSymbolValue] = 0; /* to be sure it doesn't cause msan issue in final combination */
for (n=0; n<maxSymbolValue; n+=2)
- op[(n/2)+1] = (BYTE)((huffWeight[n] << 4) + huffWeight[n+1]);
+ op[(n/2)+1] = (BYTE)((wksp->huffWeight[n] << 4) + wksp->huffWeight[n+1]);
return ((maxSymbolValue+1)/2) + 1;
}
+/*! HUF_writeCTable() :
+ `CTable` : Huffman tree to save, using huf representation.
+ @return : size of saved CTable */
+size_t HUF_writeCTable (void* dst, size_t maxDstSize,
+ const HUF_CElt* CTable, unsigned maxSymbolValue, unsigned huffLog)
+{
+ HUF_WriteCTableWksp wksp;
+ return HUF_writeCTable_wksp(dst, maxDstSize, CTable, maxSymbolValue, huffLog, &wksp, sizeof(wksp));
+}
+
size_t HUF_readCTable (HUF_CElt* CTable, unsigned* maxSymbolValuePtr, const void* src, size_t srcSize, unsigned* hasZeroWeights)
{
@@ -732,7 +751,10 @@ static size_t HUF_compressCTable_internal(
typedef struct {
unsigned count[HUF_SYMBOLVALUE_MAX + 1];
HUF_CElt CTable[HUF_SYMBOLVALUE_MAX + 1];
- HUF_buildCTable_wksp_tables buildCTable_wksp;
+ union {
+ HUF_buildCTable_wksp_tables buildCTable_wksp;
+ HUF_WriteCTableWksp writeCTable_wksp;
+ } wksps;
} HUF_compress_tables_t;
/* HUF_compress_internal() :
@@ -795,7 +817,7 @@ HUF_compress_internal (void* dst, size_t dstSize,
huffLog = HUF_optimalTableLog(huffLog, srcSize, maxSymbolValue);
{ size_t const maxBits = HUF_buildCTable_wksp(table->CTable, table->count,
maxSymbolValue, huffLog,
- &table->buildCTable_wksp, sizeof(table->buildCTable_wksp));
+ &table->wksps.buildCTable_wksp, sizeof(table->wksps.buildCTable_wksp));
CHECK_F(maxBits);
huffLog = (U32)maxBits;
/* Zero unused symbols in CTable, so we can check it for validity */
@@ -804,7 +826,8 @@ HUF_compress_internal (void* dst, size_t dstSize,
}
/* Write table description header */
- { CHECK_V_F(hSize, HUF_writeCTable (op, dstSize, table->CTable, maxSymbolValue, huffLog) );
+ { CHECK_V_F(hSize, HUF_writeCTable_wksp(op, dstSize, table->CTable, maxSymbolValue, huffLog,
+ &table->wksps.writeCTable_wksp, sizeof(table->wksps.writeCTable_wksp)) );
/* Check if using previous huffman table is beneficial */
if (repeat && *repeat != HUF_repeat_none) {
size_t const oldSize = HUF_estimateCompressedSize(oldHufTable, table->count, maxSymbolValue);
diff --git a/thirdparty/zstd/compress/zstd_compress.c b/thirdparty/zstd/compress/zstd_compress.c
index 386b051df6..b7ee2980a7 100644
--- a/thirdparty/zstd/compress/zstd_compress.c
+++ b/thirdparty/zstd/compress/zstd_compress.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -72,6 +72,10 @@ struct ZSTD_CDict_s {
ZSTD_customMem customMem;
U32 dictID;
int compressionLevel; /* 0 indicates that advanced API was used to select CDict params */
+ ZSTD_useRowMatchFinderMode_e useRowMatchFinder; /* Indicates whether the CDict was created with params that would use
+ * row-based matchfinder. Unless the cdict is reloaded, we will use
+ * the same greedy/lazy matchfinder at compression time.
+ */
}; /* typedef'd to ZSTD_CDict within "zstd.h" */
ZSTD_CCtx* ZSTD_createCCtx(void)
@@ -202,6 +206,49 @@ size_t ZSTD_sizeof_CStream(const ZSTD_CStream* zcs)
/* private API call, for dictBuilder only */
const seqStore_t* ZSTD_getSeqStore(const ZSTD_CCtx* ctx) { return &(ctx->seqStore); }
+/* Returns true if the strategy supports using a row based matchfinder */
+static int ZSTD_rowMatchFinderSupported(const ZSTD_strategy strategy) {
+ return (strategy >= ZSTD_greedy && strategy <= ZSTD_lazy2);
+}
+
+/* Returns true if the strategy and useRowMatchFinder mode indicate that we will use the row based matchfinder
+ * for this compression.
+ */
+static int ZSTD_rowMatchFinderUsed(const ZSTD_strategy strategy, const ZSTD_useRowMatchFinderMode_e mode) {
+ assert(mode != ZSTD_urm_auto);
+ return ZSTD_rowMatchFinderSupported(strategy) && (mode == ZSTD_urm_enableRowMatchFinder);
+}
+
+/* Returns row matchfinder usage enum given an initial mode and cParams */
+static ZSTD_useRowMatchFinderMode_e ZSTD_resolveRowMatchFinderMode(ZSTD_useRowMatchFinderMode_e mode,
+ const ZSTD_compressionParameters* const cParams) {
+#if !defined(ZSTD_NO_INTRINSICS) && (defined(__SSE2__) || defined(__ARM_NEON))
+ int const kHasSIMD128 = 1;
+#else
+ int const kHasSIMD128 = 0;
+#endif
+ if (mode != ZSTD_urm_auto) return mode; /* if requested enabled, but no SIMD, we still will use row matchfinder */
+ mode = ZSTD_urm_disableRowMatchFinder;
+ if (!ZSTD_rowMatchFinderSupported(cParams->strategy)) return mode;
+ if (kHasSIMD128) {
+ if (cParams->windowLog > 14) mode = ZSTD_urm_enableRowMatchFinder;
+ } else {
+ if (cParams->windowLog > 17) mode = ZSTD_urm_enableRowMatchFinder;
+ }
+ return mode;
+}
+
+/* Returns 1 if the arguments indicate that we should allocate a chainTable, 0 otherwise */
+static int ZSTD_allocateChainTable(const ZSTD_strategy strategy,
+ const ZSTD_useRowMatchFinderMode_e useRowMatchFinder,
+ const U32 forDDSDict) {
+ assert(useRowMatchFinder != ZSTD_urm_auto);
+ /* We always should allocate a chaintable if we are allocating a matchstate for a DDS dictionary matchstate.
+ * We do not allocate a chaintable if we are using ZSTD_fast, or are using the row-based matchfinder.
+ */
+ return forDDSDict || ((strategy != ZSTD_fast) && !ZSTD_rowMatchFinderUsed(strategy, useRowMatchFinder));
+}
+
/* Returns 1 if compression parameters are such that we should
* enable long distance matching (wlog >= 27, strategy >= btopt).
* Returns 0 otherwise.
@@ -210,6 +257,14 @@ static U32 ZSTD_CParams_shouldEnableLdm(const ZSTD_compressionParameters* const
return cParams->strategy >= ZSTD_btopt && cParams->windowLog >= 27;
}
+/* Returns 1 if compression parameters are such that we should
+ * enable blockSplitter (wlog >= 17, strategy >= btopt).
+ * Returns 0 otherwise.
+ */
+static U32 ZSTD_CParams_useBlockSplitter(const ZSTD_compressionParameters* const cParams) {
+ return cParams->strategy >= ZSTD_btopt && cParams->windowLog >= 17;
+}
+
static ZSTD_CCtx_params ZSTD_makeCCtxParamsFromCParams(
ZSTD_compressionParameters cParams)
{
@@ -218,6 +273,7 @@ static ZSTD_CCtx_params ZSTD_makeCCtxParamsFromCParams(
ZSTD_CCtxParams_init(&cctxParams, ZSTD_CLEVEL_DEFAULT);
cctxParams.cParams = cParams;
+ /* Adjust advanced params according to cParams */
if (ZSTD_CParams_shouldEnableLdm(&cParams)) {
DEBUGLOG(4, "ZSTD_makeCCtxParamsFromCParams(): Including LDM into cctx params");
cctxParams.ldmParams.enableLdm = 1;
@@ -227,6 +283,12 @@ static ZSTD_CCtx_params ZSTD_makeCCtxParamsFromCParams(
assert(cctxParams.ldmParams.hashRateLog < 32);
}
+ if (ZSTD_CParams_useBlockSplitter(&cParams)) {
+ DEBUGLOG(4, "ZSTD_makeCCtxParamsFromCParams(): Including block splitting into cctx params");
+ cctxParams.splitBlocks = 1;
+ }
+
+ cctxParams.useRowMatchFinder = ZSTD_resolveRowMatchFinderMode(cctxParams.useRowMatchFinder, &cParams);
assert(!ZSTD_checkCParams(cParams));
return cctxParams;
}
@@ -269,29 +331,48 @@ size_t ZSTD_CCtxParams_init(ZSTD_CCtx_params* cctxParams, int compressionLevel)
return 0;
}
+#define ZSTD_NO_CLEVEL 0
+
+/**
+ * Initializes the cctxParams from params and compressionLevel.
+ * @param compressionLevel If params are derived from a compression level then that compression level, otherwise ZSTD_NO_CLEVEL.
+ */
+static void ZSTD_CCtxParams_init_internal(ZSTD_CCtx_params* cctxParams, ZSTD_parameters const* params, int compressionLevel)
+{
+ assert(!ZSTD_checkCParams(params->cParams));
+ ZSTD_memset(cctxParams, 0, sizeof(*cctxParams));
+ cctxParams->cParams = params->cParams;
+ cctxParams->fParams = params->fParams;
+ /* Should not matter, as all cParams are presumed properly defined.
+ * But, set it for tracing anyway.
+ */
+ cctxParams->compressionLevel = compressionLevel;
+ cctxParams->useRowMatchFinder = ZSTD_resolveRowMatchFinderMode(cctxParams->useRowMatchFinder, &params->cParams);
+ DEBUGLOG(4, "ZSTD_CCtxParams_init_internal: useRowMatchFinder=%d", cctxParams->useRowMatchFinder);
+}
+
size_t ZSTD_CCtxParams_init_advanced(ZSTD_CCtx_params* cctxParams, ZSTD_parameters params)
{
RETURN_ERROR_IF(!cctxParams, GENERIC, "NULL pointer!");
FORWARD_IF_ERROR( ZSTD_checkCParams(params.cParams) , "");
- ZSTD_memset(cctxParams, 0, sizeof(*cctxParams));
- assert(!ZSTD_checkCParams(params.cParams));
- cctxParams->cParams = params.cParams;
- cctxParams->fParams = params.fParams;
- cctxParams->compressionLevel = ZSTD_CLEVEL_DEFAULT; /* should not matter, as all cParams are presumed properly defined */
+ ZSTD_CCtxParams_init_internal(cctxParams, &params, ZSTD_NO_CLEVEL);
return 0;
}
-/* ZSTD_assignParamsToCCtxParams() :
- * params is presumed valid at this stage */
-static ZSTD_CCtx_params ZSTD_assignParamsToCCtxParams(
- const ZSTD_CCtx_params* cctxParams, const ZSTD_parameters* params)
+/**
+ * Sets cctxParams' cParams and fParams from params, but otherwise leaves them alone.
+ * @param param Validated zstd parameters.
+ */
+static void ZSTD_CCtxParams_setZstdParams(
+ ZSTD_CCtx_params* cctxParams, const ZSTD_parameters* params)
{
- ZSTD_CCtx_params ret = *cctxParams;
assert(!ZSTD_checkCParams(params->cParams));
- ret.cParams = params->cParams;
- ret.fParams = params->fParams;
- ret.compressionLevel = ZSTD_CLEVEL_DEFAULT; /* should not matter, as all cParams are presumed properly defined */
- return ret;
+ cctxParams->cParams = params->cParams;
+ cctxParams->fParams = params->fParams;
+ /* Should not matter, as all cParams are presumed properly defined.
+ * But, set it for tracing anyway.
+ */
+ cctxParams->compressionLevel = ZSTD_NO_CLEVEL;
}
ZSTD_bounds ZSTD_cParam_getBounds(ZSTD_cParameter param)
@@ -468,6 +549,21 @@ ZSTD_bounds ZSTD_cParam_getBounds(ZSTD_cParameter param)
bounds.upperBound = 1;
return bounds;
+ case ZSTD_c_splitBlocks:
+ bounds.lowerBound = 0;
+ bounds.upperBound = 1;
+ return bounds;
+
+ case ZSTD_c_useRowMatchFinder:
+ bounds.lowerBound = (int)ZSTD_urm_auto;
+ bounds.upperBound = (int)ZSTD_urm_enableRowMatchFinder;
+ return bounds;
+
+ case ZSTD_c_deterministicRefPrefix:
+ bounds.lowerBound = 0;
+ bounds.upperBound = 1;
+ return bounds;
+
default:
bounds.error = ERROR(parameter_unsupported);
return bounds;
@@ -529,6 +625,9 @@ static int ZSTD_isUpdateAuthorized(ZSTD_cParameter param)
case ZSTD_c_stableOutBuffer:
case ZSTD_c_blockDelimiters:
case ZSTD_c_validateSequences:
+ case ZSTD_c_splitBlocks:
+ case ZSTD_c_useRowMatchFinder:
+ case ZSTD_c_deterministicRefPrefix:
default:
return 0;
}
@@ -581,6 +680,9 @@ size_t ZSTD_CCtx_setParameter(ZSTD_CCtx* cctx, ZSTD_cParameter param, int value)
case ZSTD_c_stableOutBuffer:
case ZSTD_c_blockDelimiters:
case ZSTD_c_validateSequences:
+ case ZSTD_c_splitBlocks:
+ case ZSTD_c_useRowMatchFinder:
+ case ZSTD_c_deterministicRefPrefix:
break;
default: RETURN_ERROR(parameter_unsupported, "unknown parameter");
@@ -792,17 +894,32 @@ size_t ZSTD_CCtxParams_setParameter(ZSTD_CCtx_params* CCtxParams,
CCtxParams->validateSequences = value;
return CCtxParams->validateSequences;
+ case ZSTD_c_splitBlocks:
+ BOUNDCHECK(ZSTD_c_splitBlocks, value);
+ CCtxParams->splitBlocks = value;
+ return CCtxParams->splitBlocks;
+
+ case ZSTD_c_useRowMatchFinder:
+ BOUNDCHECK(ZSTD_c_useRowMatchFinder, value);
+ CCtxParams->useRowMatchFinder = (ZSTD_useRowMatchFinderMode_e)value;
+ return CCtxParams->useRowMatchFinder;
+
+ case ZSTD_c_deterministicRefPrefix:
+ BOUNDCHECK(ZSTD_c_deterministicRefPrefix, value);
+ CCtxParams->deterministicRefPrefix = !!value;
+ return CCtxParams->deterministicRefPrefix;
+
default: RETURN_ERROR(parameter_unsupported, "unknown parameter");
}
}
-size_t ZSTD_CCtx_getParameter(ZSTD_CCtx* cctx, ZSTD_cParameter param, int* value)
+size_t ZSTD_CCtx_getParameter(ZSTD_CCtx const* cctx, ZSTD_cParameter param, int* value)
{
return ZSTD_CCtxParams_getParameter(&cctx->requestedParams, param, value);
}
size_t ZSTD_CCtxParams_getParameter(
- ZSTD_CCtx_params* CCtxParams, ZSTD_cParameter param, int* value)
+ ZSTD_CCtx_params const* CCtxParams, ZSTD_cParameter param, int* value)
{
switch(param)
{
@@ -915,6 +1032,15 @@ size_t ZSTD_CCtxParams_getParameter(
case ZSTD_c_validateSequences :
*value = (int)CCtxParams->validateSequences;
break;
+ case ZSTD_c_splitBlocks :
+ *value = (int)CCtxParams->splitBlocks;
+ break;
+ case ZSTD_c_useRowMatchFinder :
+ *value = (int)CCtxParams->useRowMatchFinder;
+ break;
+ case ZSTD_c_deterministicRefPrefix:
+ *value = (int)CCtxParams->deterministicRefPrefix;
+ break;
default: RETURN_ERROR(parameter_unsupported, "unknown parameter");
}
return 0;
@@ -1188,15 +1314,26 @@ ZSTD_adjustCParams_internal(ZSTD_compressionParameters cPar,
const U64 maxWindowResize = 1ULL << (ZSTD_WINDOWLOG_MAX-1);
assert(ZSTD_checkCParams(cPar)==0);
- if (dictSize && srcSize == ZSTD_CONTENTSIZE_UNKNOWN)
- srcSize = minSrcSize;
-
switch (mode) {
- case ZSTD_cpm_noAttachDict:
case ZSTD_cpm_unknown:
+ case ZSTD_cpm_noAttachDict:
+ /* If we don't know the source size, don't make any
+ * assumptions about it. We will already have selected
+ * smaller parameters if a dictionary is in use.
+ */
+ break;
case ZSTD_cpm_createCDict:
+ /* Assume a small source size when creating a dictionary
+ * with an unkown source size.
+ */
+ if (dictSize && srcSize == ZSTD_CONTENTSIZE_UNKNOWN)
+ srcSize = minSrcSize;
break;
case ZSTD_cpm_attachDict:
+ /* Dictionary has its own dedicated parameters which have
+ * already been selected. We are selecting parameters
+ * for only the source.
+ */
dictSize = 0;
break;
default:
@@ -1213,7 +1350,8 @@ ZSTD_adjustCParams_internal(ZSTD_compressionParameters cPar,
ZSTD_highbit32(tSize-1) + 1;
if (cPar.windowLog > srcLog) cPar.windowLog = srcLog;
}
- { U32 const dictAndWindowLog = ZSTD_dictAndWindowLog(cPar.windowLog, (U64)srcSize, (U64)dictSize);
+ if (srcSize != ZSTD_CONTENTSIZE_UNKNOWN) {
+ U32 const dictAndWindowLog = ZSTD_dictAndWindowLog(cPar.windowLog, (U64)srcSize, (U64)dictSize);
U32 const cycleLog = ZSTD_cycleLog(cPar.chainLog, cPar.strategy);
if (cPar.hashLog > dictAndWindowLog+1) cPar.hashLog = dictAndWindowLog+1;
if (cycleLog > dictAndWindowLog)
@@ -1269,9 +1407,14 @@ ZSTD_compressionParameters ZSTD_getCParamsFromCCtxParams(
static size_t
ZSTD_sizeof_matchState(const ZSTD_compressionParameters* const cParams,
+ const ZSTD_useRowMatchFinderMode_e useRowMatchFinder,
+ const U32 enableDedicatedDictSearch,
const U32 forCCtx)
{
- size_t const chainSize = (cParams->strategy == ZSTD_fast) ? 0 : ((size_t)1 << cParams->chainLog);
+ /* chain table size should be 0 for fast or row-hash strategies */
+ size_t const chainSize = ZSTD_allocateChainTable(cParams->strategy, useRowMatchFinder, enableDedicatedDictSearch && !forCCtx)
+ ? ((size_t)1 << cParams->chainLog)
+ : 0;
size_t const hSize = ((size_t)1) << cParams->hashLog;
U32 const hashLog3 = (forCCtx && cParams->minMatch==3) ? MIN(ZSTD_HASHLOG3_MAX, cParams->windowLog) : 0;
size_t const h3Size = hashLog3 ? ((size_t)1) << hashLog3 : 0;
@@ -1281,24 +1424,34 @@ ZSTD_sizeof_matchState(const ZSTD_compressionParameters* const cParams,
+ hSize * sizeof(U32)
+ h3Size * sizeof(U32);
size_t const optPotentialSpace =
- ZSTD_cwksp_alloc_size((MaxML+1) * sizeof(U32))
- + ZSTD_cwksp_alloc_size((MaxLL+1) * sizeof(U32))
- + ZSTD_cwksp_alloc_size((MaxOff+1) * sizeof(U32))
- + ZSTD_cwksp_alloc_size((1<<Litbits) * sizeof(U32))
- + ZSTD_cwksp_alloc_size((ZSTD_OPT_NUM+1) * sizeof(ZSTD_match_t))
- + ZSTD_cwksp_alloc_size((ZSTD_OPT_NUM+1) * sizeof(ZSTD_optimal_t));
+ ZSTD_cwksp_aligned_alloc_size((MaxML+1) * sizeof(U32))
+ + ZSTD_cwksp_aligned_alloc_size((MaxLL+1) * sizeof(U32))
+ + ZSTD_cwksp_aligned_alloc_size((MaxOff+1) * sizeof(U32))
+ + ZSTD_cwksp_aligned_alloc_size((1<<Litbits) * sizeof(U32))
+ + ZSTD_cwksp_aligned_alloc_size((ZSTD_OPT_NUM+1) * sizeof(ZSTD_match_t))
+ + ZSTD_cwksp_aligned_alloc_size((ZSTD_OPT_NUM+1) * sizeof(ZSTD_optimal_t));
+ size_t const lazyAdditionalSpace = ZSTD_rowMatchFinderUsed(cParams->strategy, useRowMatchFinder)
+ ? ZSTD_cwksp_aligned_alloc_size(hSize*sizeof(U16))
+ : 0;
size_t const optSpace = (forCCtx && (cParams->strategy >= ZSTD_btopt))
? optPotentialSpace
: 0;
+ size_t const slackSpace = ZSTD_cwksp_slack_space_required();
+
+ /* tables are guaranteed to be sized in multiples of 64 bytes (or 16 uint32_t) */
+ ZSTD_STATIC_ASSERT(ZSTD_HASHLOG_MIN >= 4 && ZSTD_WINDOWLOG_MIN >= 4 && ZSTD_CHAINLOG_MIN >= 4);
+ assert(useRowMatchFinder != ZSTD_urm_auto);
+
DEBUGLOG(4, "chainSize: %u - hSize: %u - h3Size: %u",
(U32)chainSize, (U32)hSize, (U32)h3Size);
- return tableSpace + optSpace;
+ return tableSpace + optSpace + slackSpace + lazyAdditionalSpace;
}
static size_t ZSTD_estimateCCtxSize_usingCCtxParams_internal(
const ZSTD_compressionParameters* cParams,
const ldmParams_t* ldmParams,
const int isStatic,
+ const ZSTD_useRowMatchFinderMode_e useRowMatchFinder,
const size_t buffInSize,
const size_t buffOutSize,
const U64 pledgedSrcSize)
@@ -1308,16 +1461,16 @@ static size_t ZSTD_estimateCCtxSize_usingCCtxParams_internal(
U32 const divider = (cParams->minMatch==3) ? 3 : 4;
size_t const maxNbSeq = blockSize / divider;
size_t const tokenSpace = ZSTD_cwksp_alloc_size(WILDCOPY_OVERLENGTH + blockSize)
- + ZSTD_cwksp_alloc_size(maxNbSeq * sizeof(seqDef))
+ + ZSTD_cwksp_aligned_alloc_size(maxNbSeq * sizeof(seqDef))
+ 3 * ZSTD_cwksp_alloc_size(maxNbSeq * sizeof(BYTE));
size_t const entropySpace = ZSTD_cwksp_alloc_size(ENTROPY_WORKSPACE_SIZE);
size_t const blockStateSpace = 2 * ZSTD_cwksp_alloc_size(sizeof(ZSTD_compressedBlockState_t));
- size_t const matchStateSize = ZSTD_sizeof_matchState(cParams, /* forCCtx */ 1);
+ size_t const matchStateSize = ZSTD_sizeof_matchState(cParams, useRowMatchFinder, /* enableDedicatedDictSearch */ 0, /* forCCtx */ 1);
size_t const ldmSpace = ZSTD_ldm_getTableSize(*ldmParams);
size_t const maxNbLdmSeq = ZSTD_ldm_getMaxNbSeq(*ldmParams, blockSize);
size_t const ldmSeqSpace = ldmParams->enableLdm ?
- ZSTD_cwksp_alloc_size(maxNbLdmSeq * sizeof(rawSeq)) : 0;
+ ZSTD_cwksp_aligned_alloc_size(maxNbLdmSeq * sizeof(rawSeq)) : 0;
size_t const bufferSpace = ZSTD_cwksp_alloc_size(buffInSize)
@@ -1343,25 +1496,45 @@ size_t ZSTD_estimateCCtxSize_usingCCtxParams(const ZSTD_CCtx_params* params)
{
ZSTD_compressionParameters const cParams =
ZSTD_getCParamsFromCCtxParams(params, ZSTD_CONTENTSIZE_UNKNOWN, 0, ZSTD_cpm_noAttachDict);
+ ZSTD_useRowMatchFinderMode_e const useRowMatchFinder = ZSTD_resolveRowMatchFinderMode(params->useRowMatchFinder,
+ &cParams);
RETURN_ERROR_IF(params->nbWorkers > 0, GENERIC, "Estimate CCtx size is supported for single-threaded compression only.");
/* estimateCCtxSize is for one-shot compression. So no buffers should
* be needed. However, we still allocate two 0-sized buffers, which can
* take space under ASAN. */
return ZSTD_estimateCCtxSize_usingCCtxParams_internal(
- &cParams, &params->ldmParams, 1, 0, 0, ZSTD_CONTENTSIZE_UNKNOWN);
+ &cParams, &params->ldmParams, 1, useRowMatchFinder, 0, 0, ZSTD_CONTENTSIZE_UNKNOWN);
}
size_t ZSTD_estimateCCtxSize_usingCParams(ZSTD_compressionParameters cParams)
{
- ZSTD_CCtx_params const params = ZSTD_makeCCtxParamsFromCParams(cParams);
- return ZSTD_estimateCCtxSize_usingCCtxParams(&params);
+ ZSTD_CCtx_params initialParams = ZSTD_makeCCtxParamsFromCParams(cParams);
+ if (ZSTD_rowMatchFinderSupported(cParams.strategy)) {
+ /* Pick bigger of not using and using row-based matchfinder for greedy and lazy strategies */
+ size_t noRowCCtxSize;
+ size_t rowCCtxSize;
+ initialParams.useRowMatchFinder = ZSTD_urm_disableRowMatchFinder;
+ noRowCCtxSize = ZSTD_estimateCCtxSize_usingCCtxParams(&initialParams);
+ initialParams.useRowMatchFinder = ZSTD_urm_enableRowMatchFinder;
+ rowCCtxSize = ZSTD_estimateCCtxSize_usingCCtxParams(&initialParams);
+ return MAX(noRowCCtxSize, rowCCtxSize);
+ } else {
+ return ZSTD_estimateCCtxSize_usingCCtxParams(&initialParams);
+ }
}
static size_t ZSTD_estimateCCtxSize_internal(int compressionLevel)
{
- ZSTD_compressionParameters const cParams = ZSTD_getCParams_internal(compressionLevel, ZSTD_CONTENTSIZE_UNKNOWN, 0, ZSTD_cpm_noAttachDict);
- return ZSTD_estimateCCtxSize_usingCParams(cParams);
+ int tier = 0;
+ size_t largestSize = 0;
+ static const unsigned long long srcSizeTiers[4] = {16 KB, 128 KB, 256 KB, ZSTD_CONTENTSIZE_UNKNOWN};
+ for (; tier < 4; ++tier) {
+ /* Choose the set of cParams for a given level across all srcSizes that give the largest cctxSize */
+ ZSTD_compressionParameters const cParams = ZSTD_getCParams_internal(compressionLevel, srcSizeTiers[tier], 0, ZSTD_cpm_noAttachDict);
+ largestSize = MAX(ZSTD_estimateCCtxSize_usingCParams(cParams), largestSize);
+ }
+ return largestSize;
}
size_t ZSTD_estimateCCtxSize(int compressionLevel)
@@ -1369,6 +1542,7 @@ size_t ZSTD_estimateCCtxSize(int compressionLevel)
int level;
size_t memBudget = 0;
for (level=MIN(compressionLevel, 1); level<=compressionLevel; level++) {
+ /* Ensure monotonically increasing memory usage as compression level increases */
size_t const newMB = ZSTD_estimateCCtxSize_internal(level);
if (newMB > memBudget) memBudget = newMB;
}
@@ -1387,17 +1561,29 @@ size_t ZSTD_estimateCStreamSize_usingCCtxParams(const ZSTD_CCtx_params* params)
size_t const outBuffSize = (params->outBufferMode == ZSTD_bm_buffered)
? ZSTD_compressBound(blockSize) + 1
: 0;
+ ZSTD_useRowMatchFinderMode_e const useRowMatchFinder = ZSTD_resolveRowMatchFinderMode(params->useRowMatchFinder, &params->cParams);
return ZSTD_estimateCCtxSize_usingCCtxParams_internal(
- &cParams, &params->ldmParams, 1, inBuffSize, outBuffSize,
+ &cParams, &params->ldmParams, 1, useRowMatchFinder, inBuffSize, outBuffSize,
ZSTD_CONTENTSIZE_UNKNOWN);
}
}
size_t ZSTD_estimateCStreamSize_usingCParams(ZSTD_compressionParameters cParams)
{
- ZSTD_CCtx_params const params = ZSTD_makeCCtxParamsFromCParams(cParams);
- return ZSTD_estimateCStreamSize_usingCCtxParams(&params);
+ ZSTD_CCtx_params initialParams = ZSTD_makeCCtxParamsFromCParams(cParams);
+ if (ZSTD_rowMatchFinderSupported(cParams.strategy)) {
+ /* Pick bigger of not using and using row-based matchfinder for greedy and lazy strategies */
+ size_t noRowCCtxSize;
+ size_t rowCCtxSize;
+ initialParams.useRowMatchFinder = ZSTD_urm_disableRowMatchFinder;
+ noRowCCtxSize = ZSTD_estimateCStreamSize_usingCCtxParams(&initialParams);
+ initialParams.useRowMatchFinder = ZSTD_urm_enableRowMatchFinder;
+ rowCCtxSize = ZSTD_estimateCStreamSize_usingCCtxParams(&initialParams);
+ return MAX(noRowCCtxSize, rowCCtxSize);
+ } else {
+ return ZSTD_estimateCStreamSize_usingCCtxParams(&initialParams);
+ }
}
static size_t ZSTD_estimateCStreamSize_internal(int compressionLevel)
@@ -1522,20 +1708,27 @@ typedef enum {
ZSTD_resetTarget_CCtx
} ZSTD_resetTarget_e;
+
static size_t
ZSTD_reset_matchState(ZSTD_matchState_t* ms,
ZSTD_cwksp* ws,
const ZSTD_compressionParameters* cParams,
+ const ZSTD_useRowMatchFinderMode_e useRowMatchFinder,
const ZSTD_compResetPolicy_e crp,
const ZSTD_indexResetPolicy_e forceResetIndex,
const ZSTD_resetTarget_e forWho)
{
- size_t const chainSize = (cParams->strategy == ZSTD_fast) ? 0 : ((size_t)1 << cParams->chainLog);
+ /* disable chain table allocation for fast or row-based strategies */
+ size_t const chainSize = ZSTD_allocateChainTable(cParams->strategy, useRowMatchFinder,
+ ms->dedicatedDictSearch && (forWho == ZSTD_resetTarget_CDict))
+ ? ((size_t)1 << cParams->chainLog)
+ : 0;
size_t const hSize = ((size_t)1) << cParams->hashLog;
U32 const hashLog3 = ((forWho == ZSTD_resetTarget_CCtx) && cParams->minMatch==3) ? MIN(ZSTD_HASHLOG3_MAX, cParams->windowLog) : 0;
size_t const h3Size = hashLog3 ? ((size_t)1) << hashLog3 : 0;
DEBUGLOG(4, "reset indices : %u", forceResetIndex == ZSTDirp_reset);
+ assert(useRowMatchFinder != ZSTD_urm_auto);
if (forceResetIndex == ZSTDirp_reset) {
ZSTD_window_init(&ms->window);
ZSTD_cwksp_mark_tables_dirty(ws);
@@ -1574,11 +1767,23 @@ ZSTD_reset_matchState(ZSTD_matchState_t* ms,
ms->opt.priceTable = (ZSTD_optimal_t*)ZSTD_cwksp_reserve_aligned(ws, (ZSTD_OPT_NUM+1) * sizeof(ZSTD_optimal_t));
}
+ if (ZSTD_rowMatchFinderUsed(cParams->strategy, useRowMatchFinder)) {
+ { /* Row match finder needs an additional table of hashes ("tags") */
+ size_t const tagTableSize = hSize*sizeof(U16);
+ ms->tagTable = (U16*)ZSTD_cwksp_reserve_aligned(ws, tagTableSize);
+ if (ms->tagTable) ZSTD_memset(ms->tagTable, 0, tagTableSize);
+ }
+ { /* Switch to 32-entry rows if searchLog is 5 (or more) */
+ U32 const rowLog = cParams->searchLog < 5 ? 4 : 5;
+ assert(cParams->hashLog > rowLog);
+ ms->rowHashLog = cParams->hashLog - rowLog;
+ }
+ }
+
ms->cParams = *cParams;
RETURN_ERROR_IF(ZSTD_cwksp_reserve_failed(ws), memory_allocation,
"failed a workspace allocation in ZSTD_reset_matchState");
-
return 0;
}
@@ -1595,62 +1800,85 @@ static int ZSTD_indexTooCloseToMax(ZSTD_window_t w)
return (size_t)(w.nextSrc - w.base) > (ZSTD_CURRENT_MAX - ZSTD_INDEXOVERFLOW_MARGIN);
}
+/** ZSTD_dictTooBig():
+ * When dictionaries are larger than ZSTD_CHUNKSIZE_MAX they can't be loaded in
+ * one go generically. So we ensure that in that case we reset the tables to zero,
+ * so that we can load as much of the dictionary as possible.
+ */
+static int ZSTD_dictTooBig(size_t const loadedDictSize)
+{
+ return loadedDictSize > ZSTD_CHUNKSIZE_MAX;
+}
+
/*! ZSTD_resetCCtx_internal() :
- note : `params` are assumed fully validated at this stage */
+ * @param loadedDictSize The size of the dictionary to be loaded
+ * into the context, if any. If no dictionary is used, or the
+ * dictionary is being attached / copied, then pass 0.
+ * note : `params` are assumed fully validated at this stage.
+ */
static size_t ZSTD_resetCCtx_internal(ZSTD_CCtx* zc,
- ZSTD_CCtx_params params,
+ ZSTD_CCtx_params const* params,
U64 const pledgedSrcSize,
+ size_t const loadedDictSize,
ZSTD_compResetPolicy_e const crp,
ZSTD_buffered_policy_e const zbuff)
{
ZSTD_cwksp* const ws = &zc->workspace;
- DEBUGLOG(4, "ZSTD_resetCCtx_internal: pledgedSrcSize=%u, wlog=%u",
- (U32)pledgedSrcSize, params.cParams.windowLog);
- assert(!ZSTD_isError(ZSTD_checkCParams(params.cParams)));
+ DEBUGLOG(4, "ZSTD_resetCCtx_internal: pledgedSrcSize=%u, wlog=%u, useRowMatchFinder=%d",
+ (U32)pledgedSrcSize, params->cParams.windowLog, (int)params->useRowMatchFinder);
+ assert(!ZSTD_isError(ZSTD_checkCParams(params->cParams)));
zc->isFirstBlock = 1;
- if (params.ldmParams.enableLdm) {
+ /* Set applied params early so we can modify them for LDM,
+ * and point params at the applied params.
+ */
+ zc->appliedParams = *params;
+ params = &zc->appliedParams;
+
+ assert(params->useRowMatchFinder != ZSTD_urm_auto);
+ if (params->ldmParams.enableLdm) {
/* Adjust long distance matching parameters */
- ZSTD_ldm_adjustParameters(&params.ldmParams, &params.cParams);
- assert(params.ldmParams.hashLog >= params.ldmParams.bucketSizeLog);
- assert(params.ldmParams.hashRateLog < 32);
- zc->ldmState.hashPower = ZSTD_rollingHash_primePower(params.ldmParams.minMatchLength);
+ ZSTD_ldm_adjustParameters(&zc->appliedParams.ldmParams, &params->cParams);
+ assert(params->ldmParams.hashLog >= params->ldmParams.bucketSizeLog);
+ assert(params->ldmParams.hashRateLog < 32);
}
- { size_t const windowSize = MAX(1, (size_t)MIN(((U64)1 << params.cParams.windowLog), pledgedSrcSize));
+ { size_t const windowSize = MAX(1, (size_t)MIN(((U64)1 << params->cParams.windowLog), pledgedSrcSize));
size_t const blockSize = MIN(ZSTD_BLOCKSIZE_MAX, windowSize);
- U32 const divider = (params.cParams.minMatch==3) ? 3 : 4;
+ U32 const divider = (params->cParams.minMatch==3) ? 3 : 4;
size_t const maxNbSeq = blockSize / divider;
- size_t const buffOutSize = (zbuff == ZSTDb_buffered && params.outBufferMode == ZSTD_bm_buffered)
+ size_t const buffOutSize = (zbuff == ZSTDb_buffered && params->outBufferMode == ZSTD_bm_buffered)
? ZSTD_compressBound(blockSize) + 1
: 0;
- size_t const buffInSize = (zbuff == ZSTDb_buffered && params.inBufferMode == ZSTD_bm_buffered)
+ size_t const buffInSize = (zbuff == ZSTDb_buffered && params->inBufferMode == ZSTD_bm_buffered)
? windowSize + blockSize
: 0;
- size_t const maxNbLdmSeq = ZSTD_ldm_getMaxNbSeq(params.ldmParams, blockSize);
+ size_t const maxNbLdmSeq = ZSTD_ldm_getMaxNbSeq(params->ldmParams, blockSize);
int const indexTooClose = ZSTD_indexTooCloseToMax(zc->blockState.matchState.window);
+ int const dictTooBig = ZSTD_dictTooBig(loadedDictSize);
ZSTD_indexResetPolicy_e needsIndexReset =
- (!indexTooClose && zc->initialized) ? ZSTDirp_continue : ZSTDirp_reset;
+ (indexTooClose || dictTooBig || !zc->initialized) ? ZSTDirp_reset : ZSTDirp_continue;
size_t const neededSpace =
ZSTD_estimateCCtxSize_usingCCtxParams_internal(
- &params.cParams, &params.ldmParams, zc->staticSize != 0,
+ &params->cParams, &params->ldmParams, zc->staticSize != 0, params->useRowMatchFinder,
buffInSize, buffOutSize, pledgedSrcSize);
+ int resizeWorkspace;
+
FORWARD_IF_ERROR(neededSpace, "cctx size estimate failed!");
if (!zc->staticSize) ZSTD_cwksp_bump_oversized_duration(ws, 0);
- /* Check if workspace is large enough, alloc a new one if needed */
- {
+ { /* Check if workspace is large enough, alloc a new one if needed */
int const workspaceTooSmall = ZSTD_cwksp_sizeof(ws) < neededSpace;
int const workspaceWasteful = ZSTD_cwksp_check_wasteful(ws, neededSpace);
-
+ resizeWorkspace = workspaceTooSmall || workspaceWasteful;
DEBUGLOG(4, "Need %zu B workspace", neededSpace);
DEBUGLOG(4, "windowSize: %zu - blockSize: %zu", windowSize, blockSize);
- if (workspaceTooSmall || workspaceWasteful) {
+ if (resizeWorkspace) {
DEBUGLOG(4, "Resize workspaceSize from %zuKB to %zuKB",
ZSTD_cwksp_sizeof(ws) >> 10,
neededSpace >> 10);
@@ -1678,8 +1906,7 @@ static size_t ZSTD_resetCCtx_internal(ZSTD_CCtx* zc,
ZSTD_cwksp_clear(ws);
/* init params */
- zc->appliedParams = params;
- zc->blockState.matchState.cParams = params.cParams;
+ zc->blockState.matchState.cParams = params->cParams;
zc->pledgedSrcSizePlusOne = pledgedSrcSize+1;
zc->consumedSrcSize = 0;
zc->producedCSize = 0;
@@ -1692,6 +1919,7 @@ static size_t ZSTD_resetCCtx_internal(ZSTD_CCtx* zc,
XXH64_reset(&zc->xxhState, 0);
zc->stage = ZSTDcs_init;
zc->dictID = 0;
+ zc->dictContentSize = 0;
ZSTD_reset_compressedBlockState(zc->blockState.prevCBlock);
@@ -1709,13 +1937,13 @@ static size_t ZSTD_resetCCtx_internal(ZSTD_CCtx* zc,
zc->outBuff = (char*)ZSTD_cwksp_reserve_buffer(ws, buffOutSize);
/* ldm bucketOffsets table */
- if (params.ldmParams.enableLdm) {
+ if (params->ldmParams.enableLdm) {
/* TODO: avoid memset? */
- size_t const ldmBucketSize =
- ((size_t)1) << (params.ldmParams.hashLog -
- params.ldmParams.bucketSizeLog);
- zc->ldmState.bucketOffsets = ZSTD_cwksp_reserve_buffer(ws, ldmBucketSize);
- ZSTD_memset(zc->ldmState.bucketOffsets, 0, ldmBucketSize);
+ size_t const numBuckets =
+ ((size_t)1) << (params->ldmParams.hashLog -
+ params->ldmParams.bucketSizeLog);
+ zc->ldmState.bucketOffsets = ZSTD_cwksp_reserve_buffer(ws, numBuckets);
+ ZSTD_memset(zc->ldmState.bucketOffsets, 0, numBuckets);
}
/* sequences storage */
@@ -1729,32 +1957,28 @@ static size_t ZSTD_resetCCtx_internal(ZSTD_CCtx* zc,
FORWARD_IF_ERROR(ZSTD_reset_matchState(
&zc->blockState.matchState,
ws,
- &params.cParams,
+ &params->cParams,
+ params->useRowMatchFinder,
crp,
needsIndexReset,
ZSTD_resetTarget_CCtx), "");
/* ldm hash table */
- if (params.ldmParams.enableLdm) {
+ if (params->ldmParams.enableLdm) {
/* TODO: avoid memset? */
- size_t const ldmHSize = ((size_t)1) << params.ldmParams.hashLog;
+ size_t const ldmHSize = ((size_t)1) << params->ldmParams.hashLog;
zc->ldmState.hashTable = (ldmEntry_t*)ZSTD_cwksp_reserve_aligned(ws, ldmHSize * sizeof(ldmEntry_t));
ZSTD_memset(zc->ldmState.hashTable, 0, ldmHSize * sizeof(ldmEntry_t));
zc->ldmSequences = (rawSeq*)ZSTD_cwksp_reserve_aligned(ws, maxNbLdmSeq * sizeof(rawSeq));
zc->maxNbLdmSequences = maxNbLdmSeq;
ZSTD_window_init(&zc->ldmState.window);
- ZSTD_window_clear(&zc->ldmState.window);
zc->ldmState.loadedDictEnd = 0;
}
- /* Due to alignment, when reusing a workspace, we can actually consume
- * up to 3 extra bytes for alignment. See the comments in zstd_cwksp.h
- */
- assert(ZSTD_cwksp_used(ws) >= neededSpace &&
- ZSTD_cwksp_used(ws) <= neededSpace + 3);
-
+ assert(ZSTD_cwksp_estimated_space_within_bounds(ws, neededSpace, resizeWorkspace));
DEBUGLOG(3, "wksp: finished allocating, %zd bytes remain available", ZSTD_cwksp_available_space(ws));
+
zc->initialized = 1;
return 0;
@@ -1810,6 +2034,8 @@ ZSTD_resetCCtx_byAttachingCDict(ZSTD_CCtx* cctx,
U64 pledgedSrcSize,
ZSTD_buffered_policy_e zbuff)
{
+ DEBUGLOG(4, "ZSTD_resetCCtx_byAttachingCDict() pledgedSrcSize=%llu",
+ (unsigned long long)pledgedSrcSize);
{
ZSTD_compressionParameters adjusted_cdict_cParams = cdict->matchState.cParams;
unsigned const windowLog = params.cParams.windowLog;
@@ -1825,7 +2051,9 @@ ZSTD_resetCCtx_byAttachingCDict(ZSTD_CCtx* cctx,
params.cParams = ZSTD_adjustCParams_internal(adjusted_cdict_cParams, pledgedSrcSize,
cdict->dictContentSize, ZSTD_cpm_attachDict);
params.cParams.windowLog = windowLog;
- FORWARD_IF_ERROR(ZSTD_resetCCtx_internal(cctx, params, pledgedSrcSize,
+ params.useRowMatchFinder = cdict->useRowMatchFinder; /* cdict overrides */
+ FORWARD_IF_ERROR(ZSTD_resetCCtx_internal(cctx, &params, pledgedSrcSize,
+ /* loadedDictSize */ 0,
ZSTDcrp_makeClean, zbuff), "");
assert(cctx->appliedParams.cParams.strategy == adjusted_cdict_cParams.strategy);
}
@@ -1852,6 +2080,7 @@ ZSTD_resetCCtx_byAttachingCDict(ZSTD_CCtx* cctx,
} }
cctx->dictID = cdict->dictID;
+ cctx->dictContentSize = cdict->dictContentSize;
/* copy block state */
ZSTD_memcpy(cctx->blockState.prevCBlock, &cdict->cBlockState, sizeof(cdict->cBlockState));
@@ -1868,15 +2097,17 @@ static size_t ZSTD_resetCCtx_byCopyingCDict(ZSTD_CCtx* cctx,
const ZSTD_compressionParameters *cdict_cParams = &cdict->matchState.cParams;
assert(!cdict->matchState.dedicatedDictSearch);
-
- DEBUGLOG(4, "copying dictionary into context");
+ DEBUGLOG(4, "ZSTD_resetCCtx_byCopyingCDict() pledgedSrcSize=%llu",
+ (unsigned long long)pledgedSrcSize);
{ unsigned const windowLog = params.cParams.windowLog;
assert(windowLog != 0);
/* Copy only compression parameters related to tables. */
params.cParams = *cdict_cParams;
params.cParams.windowLog = windowLog;
- FORWARD_IF_ERROR(ZSTD_resetCCtx_internal(cctx, params, pledgedSrcSize,
+ params.useRowMatchFinder = cdict->useRowMatchFinder;
+ FORWARD_IF_ERROR(ZSTD_resetCCtx_internal(cctx, &params, pledgedSrcSize,
+ /* loadedDictSize */ 0,
ZSTDcrp_leaveDirty, zbuff), "");
assert(cctx->appliedParams.cParams.strategy == cdict_cParams->strategy);
assert(cctx->appliedParams.cParams.hashLog == cdict_cParams->hashLog);
@@ -1884,17 +2115,30 @@ static size_t ZSTD_resetCCtx_byCopyingCDict(ZSTD_CCtx* cctx,
}
ZSTD_cwksp_mark_tables_dirty(&cctx->workspace);
+ assert(params.useRowMatchFinder != ZSTD_urm_auto);
/* copy tables */
- { size_t const chainSize = (cdict_cParams->strategy == ZSTD_fast) ? 0 : ((size_t)1 << cdict_cParams->chainLog);
+ { size_t const chainSize = ZSTD_allocateChainTable(cdict_cParams->strategy, cdict->useRowMatchFinder, 0 /* DDS guaranteed disabled */)
+ ? ((size_t)1 << cdict_cParams->chainLog)
+ : 0;
size_t const hSize = (size_t)1 << cdict_cParams->hashLog;
ZSTD_memcpy(cctx->blockState.matchState.hashTable,
cdict->matchState.hashTable,
hSize * sizeof(U32));
- ZSTD_memcpy(cctx->blockState.matchState.chainTable,
+ /* Do not copy cdict's chainTable if cctx has parameters such that it would not use chainTable */
+ if (ZSTD_allocateChainTable(cctx->appliedParams.cParams.strategy, cctx->appliedParams.useRowMatchFinder, 0 /* forDDSDict */)) {
+ ZSTD_memcpy(cctx->blockState.matchState.chainTable,
cdict->matchState.chainTable,
chainSize * sizeof(U32));
+ }
+ /* copy tag table */
+ if (ZSTD_rowMatchFinderUsed(cdict_cParams->strategy, cdict->useRowMatchFinder)) {
+ size_t const tagTableSize = hSize*sizeof(U16);
+ ZSTD_memcpy(cctx->blockState.matchState.tagTable,
+ cdict->matchState.tagTable,
+ tagTableSize);
+ }
}
/* Zero the hashTable3, since the cdict never fills it */
@@ -1915,6 +2159,7 @@ static size_t ZSTD_resetCCtx_byCopyingCDict(ZSTD_CCtx* cctx,
}
cctx->dictID = cdict->dictID;
+ cctx->dictContentSize = cdict->dictContentSize;
/* copy block state */
ZSTD_memcpy(cctx->blockState.prevCBlock, &cdict->cBlockState, sizeof(cdict->cBlockState));
@@ -1957,16 +2202,18 @@ static size_t ZSTD_copyCCtx_internal(ZSTD_CCtx* dstCCtx,
U64 pledgedSrcSize,
ZSTD_buffered_policy_e zbuff)
{
- DEBUGLOG(5, "ZSTD_copyCCtx_internal");
RETURN_ERROR_IF(srcCCtx->stage!=ZSTDcs_init, stage_wrong,
"Can't copy a ctx that's not in init stage.");
-
+ DEBUGLOG(5, "ZSTD_copyCCtx_internal");
ZSTD_memcpy(&dstCCtx->customMem, &srcCCtx->customMem, sizeof(ZSTD_customMem));
{ ZSTD_CCtx_params params = dstCCtx->requestedParams;
/* Copy only compression parameters related to tables. */
params.cParams = srcCCtx->appliedParams.cParams;
+ assert(srcCCtx->appliedParams.useRowMatchFinder != ZSTD_urm_auto);
+ params.useRowMatchFinder = srcCCtx->appliedParams.useRowMatchFinder;
params.fParams = fParams;
- ZSTD_resetCCtx_internal(dstCCtx, params, pledgedSrcSize,
+ ZSTD_resetCCtx_internal(dstCCtx, &params, pledgedSrcSize,
+ /* loadedDictSize */ 0,
ZSTDcrp_leaveDirty, zbuff);
assert(dstCCtx->appliedParams.cParams.windowLog == srcCCtx->appliedParams.cParams.windowLog);
assert(dstCCtx->appliedParams.cParams.strategy == srcCCtx->appliedParams.cParams.strategy);
@@ -1978,7 +2225,11 @@ static size_t ZSTD_copyCCtx_internal(ZSTD_CCtx* dstCCtx,
ZSTD_cwksp_mark_tables_dirty(&dstCCtx->workspace);
/* copy tables */
- { size_t const chainSize = (srcCCtx->appliedParams.cParams.strategy == ZSTD_fast) ? 0 : ((size_t)1 << srcCCtx->appliedParams.cParams.chainLog);
+ { size_t const chainSize = ZSTD_allocateChainTable(srcCCtx->appliedParams.cParams.strategy,
+ srcCCtx->appliedParams.useRowMatchFinder,
+ 0 /* forDDSDict */)
+ ? ((size_t)1 << srcCCtx->appliedParams.cParams.chainLog)
+ : 0;
size_t const hSize = (size_t)1 << srcCCtx->appliedParams.cParams.hashLog;
int const h3log = srcCCtx->blockState.matchState.hashLog3;
size_t const h3Size = h3log ? ((size_t)1 << h3log) : 0;
@@ -2005,6 +2256,7 @@ static size_t ZSTD_copyCCtx_internal(ZSTD_CCtx* dstCCtx,
dstMatchState->loadedDictEnd= srcMatchState->loadedDictEnd;
}
dstCCtx->dictID = srcCCtx->dictID;
+ dstCCtx->dictContentSize = srcCCtx->dictContentSize;
/* copy block state */
ZSTD_memcpy(dstCCtx->blockState.prevCBlock, srcCCtx->blockState.prevCBlock, sizeof(*srcCCtx->blockState.prevCBlock));
@@ -2091,7 +2343,7 @@ static void ZSTD_reduceIndex (ZSTD_matchState_t* ms, ZSTD_CCtx_params const* par
ZSTD_reduceTable(ms->hashTable, hSize, reducerValue);
}
- if (params->cParams.strategy != ZSTD_fast) {
+ if (ZSTD_allocateChainTable(params->cParams.strategy, params->useRowMatchFinder, (U32)ms->dedicatedDictSearch)) {
U32 const chainSize = (U32)1 << params->cParams.chainLog;
if (params->cParams.strategy == ZSTD_btlazy2)
ZSTD_reduceTable_btlazy2(ms->chainTable, chainSize, reducerValue);
@@ -2128,9 +2380,9 @@ void ZSTD_seqToCodes(const seqStore_t* seqStorePtr)
ofCodeTable[u] = (BYTE)ZSTD_highbit32(sequences[u].offset);
mlCodeTable[u] = (BYTE)ZSTD_MLcode(mlv);
}
- if (seqStorePtr->longLengthID==1)
+ if (seqStorePtr->longLengthType==ZSTD_llt_literalLength)
llCodeTable[seqStorePtr->longLengthPos] = MaxLL;
- if (seqStorePtr->longLengthID==2)
+ if (seqStorePtr->longLengthType==ZSTD_llt_matchLength)
mlCodeTable[seqStorePtr->longLengthPos] = MaxML;
}
@@ -2144,10 +2396,158 @@ static int ZSTD_useTargetCBlockSize(const ZSTD_CCtx_params* cctxParams)
return (cctxParams->targetCBlockSize != 0);
}
-/* ZSTD_entropyCompressSequences_internal():
- * actually compresses both literals and sequences */
+/* ZSTD_blockSplitterEnabled():
+ * Returns if block splitting param is being used
+ * If used, compression will do best effort to split a block in order to improve compression ratio.
+ * Returns 1 if true, 0 otherwise. */
+static int ZSTD_blockSplitterEnabled(ZSTD_CCtx_params* cctxParams)
+{
+ DEBUGLOG(5, "ZSTD_blockSplitterEnabled(splitBlocks=%d)", cctxParams->splitBlocks);
+ return (cctxParams->splitBlocks != 0);
+}
+
+/* Type returned by ZSTD_buildSequencesStatistics containing finalized symbol encoding types
+ * and size of the sequences statistics
+ */
+typedef struct {
+ U32 LLtype;
+ U32 Offtype;
+ U32 MLtype;
+ size_t size;
+ size_t lastCountSize; /* Accounts for bug in 1.3.4. More detail in ZSTD_entropyCompressSeqStore_internal() */
+} ZSTD_symbolEncodingTypeStats_t;
+
+/* ZSTD_buildSequencesStatistics():
+ * Returns a ZSTD_symbolEncodingTypeStats_t, or a zstd error code in the `size` field.
+ * Modifies `nextEntropy` to have the appropriate values as a side effect.
+ * nbSeq must be greater than 0.
+ *
+ * entropyWkspSize must be of size at least ENTROPY_WORKSPACE_SIZE - (MaxSeq + 1)*sizeof(U32)
+ */
+static ZSTD_symbolEncodingTypeStats_t
+ZSTD_buildSequencesStatistics(seqStore_t* seqStorePtr, size_t nbSeq,
+ const ZSTD_fseCTables_t* prevEntropy, ZSTD_fseCTables_t* nextEntropy,
+ BYTE* dst, const BYTE* const dstEnd,
+ ZSTD_strategy strategy, unsigned* countWorkspace,
+ void* entropyWorkspace, size_t entropyWkspSize) {
+ BYTE* const ostart = dst;
+ const BYTE* const oend = dstEnd;
+ BYTE* op = ostart;
+ FSE_CTable* CTable_LitLength = nextEntropy->litlengthCTable;
+ FSE_CTable* CTable_OffsetBits = nextEntropy->offcodeCTable;
+ FSE_CTable* CTable_MatchLength = nextEntropy->matchlengthCTable;
+ const BYTE* const ofCodeTable = seqStorePtr->ofCode;
+ const BYTE* const llCodeTable = seqStorePtr->llCode;
+ const BYTE* const mlCodeTable = seqStorePtr->mlCode;
+ ZSTD_symbolEncodingTypeStats_t stats;
+
+ stats.lastCountSize = 0;
+ /* convert length/distances into codes */
+ ZSTD_seqToCodes(seqStorePtr);
+ assert(op <= oend);
+ assert(nbSeq != 0); /* ZSTD_selectEncodingType() divides by nbSeq */
+ /* build CTable for Literal Lengths */
+ { unsigned max = MaxLL;
+ size_t const mostFrequent = HIST_countFast_wksp(countWorkspace, &max, llCodeTable, nbSeq, entropyWorkspace, entropyWkspSize); /* can't fail */
+ DEBUGLOG(5, "Building LL table");
+ nextEntropy->litlength_repeatMode = prevEntropy->litlength_repeatMode;
+ stats.LLtype = ZSTD_selectEncodingType(&nextEntropy->litlength_repeatMode,
+ countWorkspace, max, mostFrequent, nbSeq,
+ LLFSELog, prevEntropy->litlengthCTable,
+ LL_defaultNorm, LL_defaultNormLog,
+ ZSTD_defaultAllowed, strategy);
+ assert(set_basic < set_compressed && set_rle < set_compressed);
+ assert(!(stats.LLtype < set_compressed && nextEntropy->litlength_repeatMode != FSE_repeat_none)); /* We don't copy tables */
+ { size_t const countSize = ZSTD_buildCTable(
+ op, (size_t)(oend - op),
+ CTable_LitLength, LLFSELog, (symbolEncodingType_e)stats.LLtype,
+ countWorkspace, max, llCodeTable, nbSeq,
+ LL_defaultNorm, LL_defaultNormLog, MaxLL,
+ prevEntropy->litlengthCTable,
+ sizeof(prevEntropy->litlengthCTable),
+ entropyWorkspace, entropyWkspSize);
+ if (ZSTD_isError(countSize)) {
+ DEBUGLOG(3, "ZSTD_buildCTable for LitLens failed");
+ stats.size = countSize;
+ return stats;
+ }
+ if (stats.LLtype == set_compressed)
+ stats.lastCountSize = countSize;
+ op += countSize;
+ assert(op <= oend);
+ } }
+ /* build CTable for Offsets */
+ { unsigned max = MaxOff;
+ size_t const mostFrequent = HIST_countFast_wksp(
+ countWorkspace, &max, ofCodeTable, nbSeq, entropyWorkspace, entropyWkspSize); /* can't fail */
+ /* We can only use the basic table if max <= DefaultMaxOff, otherwise the offsets are too large */
+ ZSTD_defaultPolicy_e const defaultPolicy = (max <= DefaultMaxOff) ? ZSTD_defaultAllowed : ZSTD_defaultDisallowed;
+ DEBUGLOG(5, "Building OF table");
+ nextEntropy->offcode_repeatMode = prevEntropy->offcode_repeatMode;
+ stats.Offtype = ZSTD_selectEncodingType(&nextEntropy->offcode_repeatMode,
+ countWorkspace, max, mostFrequent, nbSeq,
+ OffFSELog, prevEntropy->offcodeCTable,
+ OF_defaultNorm, OF_defaultNormLog,
+ defaultPolicy, strategy);
+ assert(!(stats.Offtype < set_compressed && nextEntropy->offcode_repeatMode != FSE_repeat_none)); /* We don't copy tables */
+ { size_t const countSize = ZSTD_buildCTable(
+ op, (size_t)(oend - op),
+ CTable_OffsetBits, OffFSELog, (symbolEncodingType_e)stats.Offtype,
+ countWorkspace, max, ofCodeTable, nbSeq,
+ OF_defaultNorm, OF_defaultNormLog, DefaultMaxOff,
+ prevEntropy->offcodeCTable,
+ sizeof(prevEntropy->offcodeCTable),
+ entropyWorkspace, entropyWkspSize);
+ if (ZSTD_isError(countSize)) {
+ DEBUGLOG(3, "ZSTD_buildCTable for Offsets failed");
+ stats.size = countSize;
+ return stats;
+ }
+ if (stats.Offtype == set_compressed)
+ stats.lastCountSize = countSize;
+ op += countSize;
+ assert(op <= oend);
+ } }
+ /* build CTable for MatchLengths */
+ { unsigned max = MaxML;
+ size_t const mostFrequent = HIST_countFast_wksp(
+ countWorkspace, &max, mlCodeTable, nbSeq, entropyWorkspace, entropyWkspSize); /* can't fail */
+ DEBUGLOG(5, "Building ML table (remaining space : %i)", (int)(oend-op));
+ nextEntropy->matchlength_repeatMode = prevEntropy->matchlength_repeatMode;
+ stats.MLtype = ZSTD_selectEncodingType(&nextEntropy->matchlength_repeatMode,
+ countWorkspace, max, mostFrequent, nbSeq,
+ MLFSELog, prevEntropy->matchlengthCTable,
+ ML_defaultNorm, ML_defaultNormLog,
+ ZSTD_defaultAllowed, strategy);
+ assert(!(stats.MLtype < set_compressed && nextEntropy->matchlength_repeatMode != FSE_repeat_none)); /* We don't copy tables */
+ { size_t const countSize = ZSTD_buildCTable(
+ op, (size_t)(oend - op),
+ CTable_MatchLength, MLFSELog, (symbolEncodingType_e)stats.MLtype,
+ countWorkspace, max, mlCodeTable, nbSeq,
+ ML_defaultNorm, ML_defaultNormLog, MaxML,
+ prevEntropy->matchlengthCTable,
+ sizeof(prevEntropy->matchlengthCTable),
+ entropyWorkspace, entropyWkspSize);
+ if (ZSTD_isError(countSize)) {
+ DEBUGLOG(3, "ZSTD_buildCTable for MatchLengths failed");
+ stats.size = countSize;
+ return stats;
+ }
+ if (stats.MLtype == set_compressed)
+ stats.lastCountSize = countSize;
+ op += countSize;
+ assert(op <= oend);
+ } }
+ stats.size = (size_t)(op-ostart);
+ return stats;
+}
+
+/* ZSTD_entropyCompressSeqStore_internal():
+ * compresses both literals and sequences
+ * Returns compressed size of block, or a zstd error.
+ */
MEM_STATIC size_t
-ZSTD_entropyCompressSequences_internal(seqStore_t* seqStorePtr,
+ZSTD_entropyCompressSeqStore_internal(seqStore_t* seqStorePtr,
const ZSTD_entropyCTables_t* prevEntropy,
ZSTD_entropyCTables_t* nextEntropy,
const ZSTD_CCtx_params* cctxParams,
@@ -2161,22 +2561,20 @@ ZSTD_entropyCompressSequences_internal(seqStore_t* seqStorePtr,
FSE_CTable* CTable_LitLength = nextEntropy->fse.litlengthCTable;
FSE_CTable* CTable_OffsetBits = nextEntropy->fse.offcodeCTable;
FSE_CTable* CTable_MatchLength = nextEntropy->fse.matchlengthCTable;
- U32 LLtype, Offtype, MLtype; /* compressed, raw or rle */
const seqDef* const sequences = seqStorePtr->sequencesStart;
+ const size_t nbSeq = seqStorePtr->sequences - seqStorePtr->sequencesStart;
const BYTE* const ofCodeTable = seqStorePtr->ofCode;
const BYTE* const llCodeTable = seqStorePtr->llCode;
const BYTE* const mlCodeTable = seqStorePtr->mlCode;
BYTE* const ostart = (BYTE*)dst;
BYTE* const oend = ostart + dstCapacity;
BYTE* op = ostart;
- size_t const nbSeq = (size_t)(seqStorePtr->sequences - seqStorePtr->sequencesStart);
- BYTE* seqHead;
- BYTE* lastNCount = NULL;
+ size_t lastCountSize;
entropyWorkspace = count + (MaxSeq + 1);
entropyWkspSize -= (MaxSeq + 1) * sizeof(*count);
- DEBUGLOG(4, "ZSTD_entropyCompressSequences_internal (nbSeq=%zu)", nbSeq);
+ DEBUGLOG(4, "ZSTD_entropyCompressSeqStore_internal (nbSeq=%zu)", nbSeq);
ZSTD_STATIC_ASSERT(HUF_WORKSPACE_SIZE >= (1<<MAX(MLFSELog,LLFSELog)));
assert(entropyWkspSize >= HUF_WORKSPACE_SIZE);
@@ -2216,95 +2614,20 @@ ZSTD_entropyCompressSequences_internal(seqStore_t* seqStorePtr,
ZSTD_memcpy(&nextEntropy->fse, &prevEntropy->fse, sizeof(prevEntropy->fse));
return (size_t)(op - ostart);
}
-
- /* seqHead : flags for FSE encoding type */
- seqHead = op++;
- assert(op <= oend);
-
- /* convert length/distances into codes */
- ZSTD_seqToCodes(seqStorePtr);
- /* build CTable for Literal Lengths */
- { unsigned max = MaxLL;
- size_t const mostFrequent = HIST_countFast_wksp(count, &max, llCodeTable, nbSeq, entropyWorkspace, entropyWkspSize); /* can't fail */
- DEBUGLOG(5, "Building LL table");
- nextEntropy->fse.litlength_repeatMode = prevEntropy->fse.litlength_repeatMode;
- LLtype = ZSTD_selectEncodingType(&nextEntropy->fse.litlength_repeatMode,
- count, max, mostFrequent, nbSeq,
- LLFSELog, prevEntropy->fse.litlengthCTable,
- LL_defaultNorm, LL_defaultNormLog,
- ZSTD_defaultAllowed, strategy);
- assert(set_basic < set_compressed && set_rle < set_compressed);
- assert(!(LLtype < set_compressed && nextEntropy->fse.litlength_repeatMode != FSE_repeat_none)); /* We don't copy tables */
- { size_t const countSize = ZSTD_buildCTable(
- op, (size_t)(oend - op),
- CTable_LitLength, LLFSELog, (symbolEncodingType_e)LLtype,
- count, max, llCodeTable, nbSeq,
- LL_defaultNorm, LL_defaultNormLog, MaxLL,
- prevEntropy->fse.litlengthCTable,
- sizeof(prevEntropy->fse.litlengthCTable),
- entropyWorkspace, entropyWkspSize);
- FORWARD_IF_ERROR(countSize, "ZSTD_buildCTable for LitLens failed");
- if (LLtype == set_compressed)
- lastNCount = op;
- op += countSize;
- assert(op <= oend);
- } }
- /* build CTable for Offsets */
- { unsigned max = MaxOff;
- size_t const mostFrequent = HIST_countFast_wksp(
- count, &max, ofCodeTable, nbSeq, entropyWorkspace, entropyWkspSize); /* can't fail */
- /* We can only use the basic table if max <= DefaultMaxOff, otherwise the offsets are too large */
- ZSTD_defaultPolicy_e const defaultPolicy = (max <= DefaultMaxOff) ? ZSTD_defaultAllowed : ZSTD_defaultDisallowed;
- DEBUGLOG(5, "Building OF table");
- nextEntropy->fse.offcode_repeatMode = prevEntropy->fse.offcode_repeatMode;
- Offtype = ZSTD_selectEncodingType(&nextEntropy->fse.offcode_repeatMode,
- count, max, mostFrequent, nbSeq,
- OffFSELog, prevEntropy->fse.offcodeCTable,
- OF_defaultNorm, OF_defaultNormLog,
- defaultPolicy, strategy);
- assert(!(Offtype < set_compressed && nextEntropy->fse.offcode_repeatMode != FSE_repeat_none)); /* We don't copy tables */
- { size_t const countSize = ZSTD_buildCTable(
- op, (size_t)(oend - op),
- CTable_OffsetBits, OffFSELog, (symbolEncodingType_e)Offtype,
- count, max, ofCodeTable, nbSeq,
- OF_defaultNorm, OF_defaultNormLog, DefaultMaxOff,
- prevEntropy->fse.offcodeCTable,
- sizeof(prevEntropy->fse.offcodeCTable),
- entropyWorkspace, entropyWkspSize);
- FORWARD_IF_ERROR(countSize, "ZSTD_buildCTable for Offsets failed");
- if (Offtype == set_compressed)
- lastNCount = op;
- op += countSize;
- assert(op <= oend);
- } }
- /* build CTable for MatchLengths */
- { unsigned max = MaxML;
- size_t const mostFrequent = HIST_countFast_wksp(
- count, &max, mlCodeTable, nbSeq, entropyWorkspace, entropyWkspSize); /* can't fail */
- DEBUGLOG(5, "Building ML table (remaining space : %i)", (int)(oend-op));
- nextEntropy->fse.matchlength_repeatMode = prevEntropy->fse.matchlength_repeatMode;
- MLtype = ZSTD_selectEncodingType(&nextEntropy->fse.matchlength_repeatMode,
- count, max, mostFrequent, nbSeq,
- MLFSELog, prevEntropy->fse.matchlengthCTable,
- ML_defaultNorm, ML_defaultNormLog,
- ZSTD_defaultAllowed, strategy);
- assert(!(MLtype < set_compressed && nextEntropy->fse.matchlength_repeatMode != FSE_repeat_none)); /* We don't copy tables */
- { size_t const countSize = ZSTD_buildCTable(
- op, (size_t)(oend - op),
- CTable_MatchLength, MLFSELog, (symbolEncodingType_e)MLtype,
- count, max, mlCodeTable, nbSeq,
- ML_defaultNorm, ML_defaultNormLog, MaxML,
- prevEntropy->fse.matchlengthCTable,
- sizeof(prevEntropy->fse.matchlengthCTable),
- entropyWorkspace, entropyWkspSize);
- FORWARD_IF_ERROR(countSize, "ZSTD_buildCTable for MatchLengths failed");
- if (MLtype == set_compressed)
- lastNCount = op;
- op += countSize;
- assert(op <= oend);
- } }
-
- *seqHead = (BYTE)((LLtype<<6) + (Offtype<<4) + (MLtype<<2));
+ {
+ ZSTD_symbolEncodingTypeStats_t stats;
+ BYTE* seqHead = op++;
+ /* build stats for sequences */
+ stats = ZSTD_buildSequencesStatistics(seqStorePtr, nbSeq,
+ &prevEntropy->fse, &nextEntropy->fse,
+ op, oend,
+ strategy, count,
+ entropyWorkspace, entropyWkspSize);
+ FORWARD_IF_ERROR(stats.size, "ZSTD_buildSequencesStatistics failed!");
+ *seqHead = (BYTE)((stats.LLtype<<6) + (stats.Offtype<<4) + (stats.MLtype<<2));
+ lastCountSize = stats.lastCountSize;
+ op += stats.size;
+ }
{ size_t const bitstreamSize = ZSTD_encodeSequences(
op, (size_t)(oend - op),
@@ -2324,9 +2647,9 @@ ZSTD_entropyCompressSequences_internal(seqStore_t* seqStorePtr,
* In this exceedingly rare case, we will simply emit an uncompressed
* block, since it isn't worth optimizing.
*/
- if (lastNCount && (op - lastNCount) < 4) {
- /* NCountSize >= 2 && bitstreamSize > 0 ==> lastCountSize == 3 */
- assert(op - lastNCount == 3);
+ if (lastCountSize && (lastCountSize + bitstreamSize) < 4) {
+ /* lastCountSize >= 2 && bitstreamSize > 0 ==> lastCountSize == 3 */
+ assert(lastCountSize + bitstreamSize == 3);
DEBUGLOG(5, "Avoiding bug in zstd decoder in versions <= 1.3.4 by "
"emitting an uncompressed block.");
return 0;
@@ -2338,7 +2661,7 @@ ZSTD_entropyCompressSequences_internal(seqStore_t* seqStorePtr,
}
MEM_STATIC size_t
-ZSTD_entropyCompressSequences(seqStore_t* seqStorePtr,
+ZSTD_entropyCompressSeqStore(seqStore_t* seqStorePtr,
const ZSTD_entropyCTables_t* prevEntropy,
ZSTD_entropyCTables_t* nextEntropy,
const ZSTD_CCtx_params* cctxParams,
@@ -2347,7 +2670,7 @@ ZSTD_entropyCompressSequences(seqStore_t* seqStorePtr,
void* entropyWorkspace, size_t entropyWkspSize,
int bmi2)
{
- size_t const cSize = ZSTD_entropyCompressSequences_internal(
+ size_t const cSize = ZSTD_entropyCompressSeqStore_internal(
seqStorePtr, prevEntropy, nextEntropy, cctxParams,
dst, dstCapacity,
entropyWorkspace, entropyWkspSize, bmi2);
@@ -2357,20 +2680,20 @@ ZSTD_entropyCompressSequences(seqStore_t* seqStorePtr,
*/
if ((cSize == ERROR(dstSize_tooSmall)) & (srcSize <= dstCapacity))
return 0; /* block not compressed */
- FORWARD_IF_ERROR(cSize, "ZSTD_entropyCompressSequences_internal failed");
+ FORWARD_IF_ERROR(cSize, "ZSTD_entropyCompressSeqStore_internal failed");
/* Check compressibility */
{ size_t const maxCSize = srcSize - ZSTD_minGain(srcSize, cctxParams->cParams.strategy);
if (cSize >= maxCSize) return 0; /* block not compressed */
}
- DEBUGLOG(4, "ZSTD_entropyCompressSequences() cSize: %zu\n", cSize);
+ DEBUGLOG(4, "ZSTD_entropyCompressSeqStore() cSize: %zu", cSize);
return cSize;
}
/* ZSTD_selectBlockCompressor() :
* Not static, but internal use only (used by long distance matcher)
* assumption : strat is a valid strategy */
-ZSTD_blockCompressor ZSTD_selectBlockCompressor(ZSTD_strategy strat, ZSTD_dictMode_e dictMode)
+ZSTD_blockCompressor ZSTD_selectBlockCompressor(ZSTD_strategy strat, ZSTD_useRowMatchFinderMode_e useRowMatchFinder, ZSTD_dictMode_e dictMode)
{
static const ZSTD_blockCompressor blockCompressor[4][ZSTD_STRATEGY_MAX+1] = {
{ ZSTD_compressBlock_fast /* default for 0 */,
@@ -2418,7 +2741,28 @@ ZSTD_blockCompressor ZSTD_selectBlockCompressor(ZSTD_strategy strat, ZSTD_dictMo
ZSTD_STATIC_ASSERT((unsigned)ZSTD_fast == 1);
assert(ZSTD_cParam_withinBounds(ZSTD_c_strategy, strat));
- selectedCompressor = blockCompressor[(int)dictMode][(int)strat];
+ DEBUGLOG(4, "Selected block compressor: dictMode=%d strat=%d rowMatchfinder=%d", (int)dictMode, (int)strat, (int)useRowMatchFinder);
+ if (ZSTD_rowMatchFinderUsed(strat, useRowMatchFinder)) {
+ static const ZSTD_blockCompressor rowBasedBlockCompressors[4][3] = {
+ { ZSTD_compressBlock_greedy_row,
+ ZSTD_compressBlock_lazy_row,
+ ZSTD_compressBlock_lazy2_row },
+ { ZSTD_compressBlock_greedy_extDict_row,
+ ZSTD_compressBlock_lazy_extDict_row,
+ ZSTD_compressBlock_lazy2_extDict_row },
+ { ZSTD_compressBlock_greedy_dictMatchState_row,
+ ZSTD_compressBlock_lazy_dictMatchState_row,
+ ZSTD_compressBlock_lazy2_dictMatchState_row },
+ { ZSTD_compressBlock_greedy_dedicatedDictSearch_row,
+ ZSTD_compressBlock_lazy_dedicatedDictSearch_row,
+ ZSTD_compressBlock_lazy2_dedicatedDictSearch_row }
+ };
+ DEBUGLOG(4, "Selecting a row-based matchfinder");
+ assert(useRowMatchFinder != ZSTD_urm_auto);
+ selectedCompressor = rowBasedBlockCompressors[(int)dictMode][(int)strat - (int)ZSTD_greedy];
+ } else {
+ selectedCompressor = blockCompressor[(int)dictMode][(int)strat];
+ }
assert(selectedCompressor != NULL);
return selectedCompressor;
}
@@ -2434,7 +2778,7 @@ void ZSTD_resetSeqStore(seqStore_t* ssPtr)
{
ssPtr->lit = ssPtr->litStart;
ssPtr->sequences = ssPtr->sequencesStart;
- ssPtr->longLengthID = 0;
+ ssPtr->longLengthType = ZSTD_llt_none;
}
typedef enum { ZSTDbss_compress, ZSTDbss_noCompress } ZSTD_buildSeqStore_e;
@@ -2487,6 +2831,7 @@ static size_t ZSTD_buildSeqStore(ZSTD_CCtx* zc, const void* src, size_t srcSize)
ZSTD_ldm_blockCompress(&zc->externSeqStore,
ms, &zc->seqStore,
zc->blockState.nextCBlock->rep,
+ zc->appliedParams.useRowMatchFinder,
src, srcSize);
assert(zc->externSeqStore.pos <= zc->externSeqStore.size);
} else if (zc->appliedParams.ldmParams.enableLdm) {
@@ -2503,10 +2848,13 @@ static size_t ZSTD_buildSeqStore(ZSTD_CCtx* zc, const void* src, size_t srcSize)
ZSTD_ldm_blockCompress(&ldmSeqStore,
ms, &zc->seqStore,
zc->blockState.nextCBlock->rep,
+ zc->appliedParams.useRowMatchFinder,
src, srcSize);
assert(ldmSeqStore.pos == ldmSeqStore.size);
} else { /* not long range mode */
- ZSTD_blockCompressor const blockCompressor = ZSTD_selectBlockCompressor(zc->appliedParams.cParams.strategy, dictMode);
+ ZSTD_blockCompressor const blockCompressor = ZSTD_selectBlockCompressor(zc->appliedParams.cParams.strategy,
+ zc->appliedParams.useRowMatchFinder,
+ dictMode);
ms->ldmSeqStore = NULL;
lastLLSize = blockCompressor(ms, &zc->seqStore, zc->blockState.nextCBlock->rep, src, srcSize);
}
@@ -2540,9 +2888,9 @@ static void ZSTD_copyBlockSequences(ZSTD_CCtx* zc)
outSeqs[i].rep = 0;
if (i == seqStore->longLengthPos) {
- if (seqStore->longLengthID == 1) {
+ if (seqStore->longLengthType == ZSTD_llt_literalLength) {
outSeqs[i].litLength += 0x10000;
- } else if (seqStore->longLengthID == 2) {
+ } else if (seqStore->longLengthType == ZSTD_llt_matchLength) {
outSeqs[i].matchLength += 0x10000;
}
}
@@ -2653,11 +3001,713 @@ static int ZSTD_maybeRLE(seqStore_t const* seqStore)
return nbSeqs < 4 && nbLits < 10;
}
-static void ZSTD_confirmRepcodesAndEntropyTables(ZSTD_CCtx* zc)
+static void ZSTD_blockState_confirmRepcodesAndEntropyTables(ZSTD_blockState_t* const bs)
{
- ZSTD_compressedBlockState_t* const tmp = zc->blockState.prevCBlock;
- zc->blockState.prevCBlock = zc->blockState.nextCBlock;
- zc->blockState.nextCBlock = tmp;
+ ZSTD_compressedBlockState_t* const tmp = bs->prevCBlock;
+ bs->prevCBlock = bs->nextCBlock;
+ bs->nextCBlock = tmp;
+}
+
+/* Writes the block header */
+static void writeBlockHeader(void* op, size_t cSize, size_t blockSize, U32 lastBlock) {
+ U32 const cBlockHeader = cSize == 1 ?
+ lastBlock + (((U32)bt_rle)<<1) + (U32)(blockSize << 3) :
+ lastBlock + (((U32)bt_compressed)<<1) + (U32)(cSize << 3);
+ MEM_writeLE24(op, cBlockHeader);
+ DEBUGLOG(3, "writeBlockHeader: cSize: %zu blockSize: %zu lastBlock: %u", cSize, blockSize, lastBlock);
+}
+
+/** ZSTD_buildBlockEntropyStats_literals() :
+ * Builds entropy for the literals.
+ * Stores literals block type (raw, rle, compressed, repeat) and
+ * huffman description table to hufMetadata.
+ * Requires ENTROPY_WORKSPACE_SIZE workspace
+ * @return : size of huffman description table or error code */
+static size_t ZSTD_buildBlockEntropyStats_literals(void* const src, size_t srcSize,
+ const ZSTD_hufCTables_t* prevHuf,
+ ZSTD_hufCTables_t* nextHuf,
+ ZSTD_hufCTablesMetadata_t* hufMetadata,
+ const int disableLiteralsCompression,
+ void* workspace, size_t wkspSize)
+{
+ BYTE* const wkspStart = (BYTE*)workspace;
+ BYTE* const wkspEnd = wkspStart + wkspSize;
+ BYTE* const countWkspStart = wkspStart;
+ unsigned* const countWksp = (unsigned*)workspace;
+ const size_t countWkspSize = (HUF_SYMBOLVALUE_MAX + 1) * sizeof(unsigned);
+ BYTE* const nodeWksp = countWkspStart + countWkspSize;
+ const size_t nodeWkspSize = wkspEnd-nodeWksp;
+ unsigned maxSymbolValue = HUF_SYMBOLVALUE_MAX;
+ unsigned huffLog = HUF_TABLELOG_DEFAULT;
+ HUF_repeat repeat = prevHuf->repeatMode;
+ DEBUGLOG(5, "ZSTD_buildBlockEntropyStats_literals (srcSize=%zu)", srcSize);
+
+ /* Prepare nextEntropy assuming reusing the existing table */
+ ZSTD_memcpy(nextHuf, prevHuf, sizeof(*prevHuf));
+
+ if (disableLiteralsCompression) {
+ DEBUGLOG(5, "set_basic - disabled");
+ hufMetadata->hType = set_basic;
+ return 0;
+ }
+
+ /* small ? don't even attempt compression (speed opt) */
+#ifndef COMPRESS_LITERALS_SIZE_MIN
+#define COMPRESS_LITERALS_SIZE_MIN 63
+#endif
+ { size_t const minLitSize = (prevHuf->repeatMode == HUF_repeat_valid) ? 6 : COMPRESS_LITERALS_SIZE_MIN;
+ if (srcSize <= minLitSize) {
+ DEBUGLOG(5, "set_basic - too small");
+ hufMetadata->hType = set_basic;
+ return 0;
+ }
+ }
+
+ /* Scan input and build symbol stats */
+ { size_t const largest = HIST_count_wksp (countWksp, &maxSymbolValue, (const BYTE*)src, srcSize, workspace, wkspSize);
+ FORWARD_IF_ERROR(largest, "HIST_count_wksp failed");
+ if (largest == srcSize) {
+ DEBUGLOG(5, "set_rle");
+ hufMetadata->hType = set_rle;
+ return 0;
+ }
+ if (largest <= (srcSize >> 7)+4) {
+ DEBUGLOG(5, "set_basic - no gain");
+ hufMetadata->hType = set_basic;
+ return 0;
+ }
+ }
+
+ /* Validate the previous Huffman table */
+ if (repeat == HUF_repeat_check && !HUF_validateCTable((HUF_CElt const*)prevHuf->CTable, countWksp, maxSymbolValue)) {
+ repeat = HUF_repeat_none;
+ }
+
+ /* Build Huffman Tree */
+ ZSTD_memset(nextHuf->CTable, 0, sizeof(nextHuf->CTable));
+ huffLog = HUF_optimalTableLog(huffLog, srcSize, maxSymbolValue);
+ { size_t const maxBits = HUF_buildCTable_wksp((HUF_CElt*)nextHuf->CTable, countWksp,
+ maxSymbolValue, huffLog,
+ nodeWksp, nodeWkspSize);
+ FORWARD_IF_ERROR(maxBits, "HUF_buildCTable_wksp");
+ huffLog = (U32)maxBits;
+ { /* Build and write the CTable */
+ size_t const newCSize = HUF_estimateCompressedSize(
+ (HUF_CElt*)nextHuf->CTable, countWksp, maxSymbolValue);
+ size_t const hSize = HUF_writeCTable_wksp(
+ hufMetadata->hufDesBuffer, sizeof(hufMetadata->hufDesBuffer),
+ (HUF_CElt*)nextHuf->CTable, maxSymbolValue, huffLog,
+ nodeWksp, nodeWkspSize);
+ /* Check against repeating the previous CTable */
+ if (repeat != HUF_repeat_none) {
+ size_t const oldCSize = HUF_estimateCompressedSize(
+ (HUF_CElt const*)prevHuf->CTable, countWksp, maxSymbolValue);
+ if (oldCSize < srcSize && (oldCSize <= hSize + newCSize || hSize + 12 >= srcSize)) {
+ DEBUGLOG(5, "set_repeat - smaller");
+ ZSTD_memcpy(nextHuf, prevHuf, sizeof(*prevHuf));
+ hufMetadata->hType = set_repeat;
+ return 0;
+ }
+ }
+ if (newCSize + hSize >= srcSize) {
+ DEBUGLOG(5, "set_basic - no gains");
+ ZSTD_memcpy(nextHuf, prevHuf, sizeof(*prevHuf));
+ hufMetadata->hType = set_basic;
+ return 0;
+ }
+ DEBUGLOG(5, "set_compressed (hSize=%u)", (U32)hSize);
+ hufMetadata->hType = set_compressed;
+ nextHuf->repeatMode = HUF_repeat_check;
+ return hSize;
+ }
+ }
+}
+
+
+/* ZSTD_buildDummySequencesStatistics():
+ * Returns a ZSTD_symbolEncodingTypeStats_t with all encoding types as set_basic,
+ * and updates nextEntropy to the appropriate repeatMode.
+ */
+static ZSTD_symbolEncodingTypeStats_t
+ZSTD_buildDummySequencesStatistics(ZSTD_fseCTables_t* nextEntropy) {
+ ZSTD_symbolEncodingTypeStats_t stats = {set_basic, set_basic, set_basic, 0, 0};
+ nextEntropy->litlength_repeatMode = FSE_repeat_none;
+ nextEntropy->offcode_repeatMode = FSE_repeat_none;
+ nextEntropy->matchlength_repeatMode = FSE_repeat_none;
+ return stats;
+}
+
+/** ZSTD_buildBlockEntropyStats_sequences() :
+ * Builds entropy for the sequences.
+ * Stores symbol compression modes and fse table to fseMetadata.
+ * Requires ENTROPY_WORKSPACE_SIZE wksp.
+ * @return : size of fse tables or error code */
+static size_t ZSTD_buildBlockEntropyStats_sequences(seqStore_t* seqStorePtr,
+ const ZSTD_fseCTables_t* prevEntropy,
+ ZSTD_fseCTables_t* nextEntropy,
+ const ZSTD_CCtx_params* cctxParams,
+ ZSTD_fseCTablesMetadata_t* fseMetadata,
+ void* workspace, size_t wkspSize)
+{
+ ZSTD_strategy const strategy = cctxParams->cParams.strategy;
+ size_t const nbSeq = seqStorePtr->sequences - seqStorePtr->sequencesStart;
+ BYTE* const ostart = fseMetadata->fseTablesBuffer;
+ BYTE* const oend = ostart + sizeof(fseMetadata->fseTablesBuffer);
+ BYTE* op = ostart;
+ unsigned* countWorkspace = (unsigned*)workspace;
+ unsigned* entropyWorkspace = countWorkspace + (MaxSeq + 1);
+ size_t entropyWorkspaceSize = wkspSize - (MaxSeq + 1) * sizeof(*countWorkspace);
+ ZSTD_symbolEncodingTypeStats_t stats;
+
+ DEBUGLOG(5, "ZSTD_buildBlockEntropyStats_sequences (nbSeq=%zu)", nbSeq);
+ stats = nbSeq != 0 ? ZSTD_buildSequencesStatistics(seqStorePtr, nbSeq,
+ prevEntropy, nextEntropy, op, oend,
+ strategy, countWorkspace,
+ entropyWorkspace, entropyWorkspaceSize)
+ : ZSTD_buildDummySequencesStatistics(nextEntropy);
+ FORWARD_IF_ERROR(stats.size, "ZSTD_buildSequencesStatistics failed!");
+ fseMetadata->llType = (symbolEncodingType_e) stats.LLtype;
+ fseMetadata->ofType = (symbolEncodingType_e) stats.Offtype;
+ fseMetadata->mlType = (symbolEncodingType_e) stats.MLtype;
+ fseMetadata->lastCountSize = stats.lastCountSize;
+ return stats.size;
+}
+
+
+/** ZSTD_buildBlockEntropyStats() :
+ * Builds entropy for the block.
+ * Requires workspace size ENTROPY_WORKSPACE_SIZE
+ *
+ * @return : 0 on success or error code
+ */
+size_t ZSTD_buildBlockEntropyStats(seqStore_t* seqStorePtr,
+ const ZSTD_entropyCTables_t* prevEntropy,
+ ZSTD_entropyCTables_t* nextEntropy,
+ const ZSTD_CCtx_params* cctxParams,
+ ZSTD_entropyCTablesMetadata_t* entropyMetadata,
+ void* workspace, size_t wkspSize)
+{
+ size_t const litSize = seqStorePtr->lit - seqStorePtr->litStart;
+ entropyMetadata->hufMetadata.hufDesSize =
+ ZSTD_buildBlockEntropyStats_literals(seqStorePtr->litStart, litSize,
+ &prevEntropy->huf, &nextEntropy->huf,
+ &entropyMetadata->hufMetadata,
+ ZSTD_disableLiteralsCompression(cctxParams),
+ workspace, wkspSize);
+ FORWARD_IF_ERROR(entropyMetadata->hufMetadata.hufDesSize, "ZSTD_buildBlockEntropyStats_literals failed");
+ entropyMetadata->fseMetadata.fseTablesSize =
+ ZSTD_buildBlockEntropyStats_sequences(seqStorePtr,
+ &prevEntropy->fse, &nextEntropy->fse,
+ cctxParams,
+ &entropyMetadata->fseMetadata,
+ workspace, wkspSize);
+ FORWARD_IF_ERROR(entropyMetadata->fseMetadata.fseTablesSize, "ZSTD_buildBlockEntropyStats_sequences failed");
+ return 0;
+}
+
+/* Returns the size estimate for the literals section (header + content) of a block */
+static size_t ZSTD_estimateBlockSize_literal(const BYTE* literals, size_t litSize,
+ const ZSTD_hufCTables_t* huf,
+ const ZSTD_hufCTablesMetadata_t* hufMetadata,
+ void* workspace, size_t wkspSize,
+ int writeEntropy)
+{
+ unsigned* const countWksp = (unsigned*)workspace;
+ unsigned maxSymbolValue = HUF_SYMBOLVALUE_MAX;
+ size_t literalSectionHeaderSize = 3 + (litSize >= 1 KB) + (litSize >= 16 KB);
+ U32 singleStream = litSize < 256;
+
+ if (hufMetadata->hType == set_basic) return litSize;
+ else if (hufMetadata->hType == set_rle) return 1;
+ else if (hufMetadata->hType == set_compressed || hufMetadata->hType == set_repeat) {
+ size_t const largest = HIST_count_wksp (countWksp, &maxSymbolValue, (const BYTE*)literals, litSize, workspace, wkspSize);
+ if (ZSTD_isError(largest)) return litSize;
+ { size_t cLitSizeEstimate = HUF_estimateCompressedSize((const HUF_CElt*)huf->CTable, countWksp, maxSymbolValue);
+ if (writeEntropy) cLitSizeEstimate += hufMetadata->hufDesSize;
+ if (!singleStream) cLitSizeEstimate += 6; /* multi-stream huffman uses 6-byte jump table */
+ return cLitSizeEstimate + literalSectionHeaderSize;
+ } }
+ assert(0); /* impossible */
+ return 0;
+}
+
+/* Returns the size estimate for the FSE-compressed symbols (of, ml, ll) of a block */
+static size_t ZSTD_estimateBlockSize_symbolType(symbolEncodingType_e type,
+ const BYTE* codeTable, size_t nbSeq, unsigned maxCode,
+ const FSE_CTable* fseCTable,
+ const U32* additionalBits,
+ short const* defaultNorm, U32 defaultNormLog, U32 defaultMax,
+ void* workspace, size_t wkspSize)
+{
+ unsigned* const countWksp = (unsigned*)workspace;
+ const BYTE* ctp = codeTable;
+ const BYTE* const ctStart = ctp;
+ const BYTE* const ctEnd = ctStart + nbSeq;
+ size_t cSymbolTypeSizeEstimateInBits = 0;
+ unsigned max = maxCode;
+
+ HIST_countFast_wksp(countWksp, &max, codeTable, nbSeq, workspace, wkspSize); /* can't fail */
+ if (type == set_basic) {
+ /* We selected this encoding type, so it must be valid. */
+ assert(max <= defaultMax);
+ (void)defaultMax;
+ cSymbolTypeSizeEstimateInBits = ZSTD_crossEntropyCost(defaultNorm, defaultNormLog, countWksp, max);
+ } else if (type == set_rle) {
+ cSymbolTypeSizeEstimateInBits = 0;
+ } else if (type == set_compressed || type == set_repeat) {
+ cSymbolTypeSizeEstimateInBits = ZSTD_fseBitCost(fseCTable, countWksp, max);
+ }
+ if (ZSTD_isError(cSymbolTypeSizeEstimateInBits)) {
+ return nbSeq * 10;
+ }
+ while (ctp < ctEnd) {
+ if (additionalBits) cSymbolTypeSizeEstimateInBits += additionalBits[*ctp];
+ else cSymbolTypeSizeEstimateInBits += *ctp; /* for offset, offset code is also the number of additional bits */
+ ctp++;
+ }
+ return cSymbolTypeSizeEstimateInBits >> 3;
+}
+
+/* Returns the size estimate for the sequences section (header + content) of a block */
+static size_t ZSTD_estimateBlockSize_sequences(const BYTE* ofCodeTable,
+ const BYTE* llCodeTable,
+ const BYTE* mlCodeTable,
+ size_t nbSeq,
+ const ZSTD_fseCTables_t* fseTables,
+ const ZSTD_fseCTablesMetadata_t* fseMetadata,
+ void* workspace, size_t wkspSize,
+ int writeEntropy)
+{
+ size_t sequencesSectionHeaderSize = 1 /* seqHead */ + 1 /* min seqSize size */ + (nbSeq >= 128) + (nbSeq >= LONGNBSEQ);
+ size_t cSeqSizeEstimate = 0;
+ cSeqSizeEstimate += ZSTD_estimateBlockSize_symbolType(fseMetadata->ofType, ofCodeTable, nbSeq, MaxOff,
+ fseTables->offcodeCTable, NULL,
+ OF_defaultNorm, OF_defaultNormLog, DefaultMaxOff,
+ workspace, wkspSize);
+ cSeqSizeEstimate += ZSTD_estimateBlockSize_symbolType(fseMetadata->llType, llCodeTable, nbSeq, MaxLL,
+ fseTables->litlengthCTable, LL_bits,
+ LL_defaultNorm, LL_defaultNormLog, MaxLL,
+ workspace, wkspSize);
+ cSeqSizeEstimate += ZSTD_estimateBlockSize_symbolType(fseMetadata->mlType, mlCodeTable, nbSeq, MaxML,
+ fseTables->matchlengthCTable, ML_bits,
+ ML_defaultNorm, ML_defaultNormLog, MaxML,
+ workspace, wkspSize);
+ if (writeEntropy) cSeqSizeEstimate += fseMetadata->fseTablesSize;
+ return cSeqSizeEstimate + sequencesSectionHeaderSize;
+}
+
+/* Returns the size estimate for a given stream of literals, of, ll, ml */
+static size_t ZSTD_estimateBlockSize(const BYTE* literals, size_t litSize,
+ const BYTE* ofCodeTable,
+ const BYTE* llCodeTable,
+ const BYTE* mlCodeTable,
+ size_t nbSeq,
+ const ZSTD_entropyCTables_t* entropy,
+ const ZSTD_entropyCTablesMetadata_t* entropyMetadata,
+ void* workspace, size_t wkspSize,
+ int writeLitEntropy, int writeSeqEntropy) {
+ size_t const literalsSize = ZSTD_estimateBlockSize_literal(literals, litSize,
+ &entropy->huf, &entropyMetadata->hufMetadata,
+ workspace, wkspSize, writeLitEntropy);
+ size_t const seqSize = ZSTD_estimateBlockSize_sequences(ofCodeTable, llCodeTable, mlCodeTable,
+ nbSeq, &entropy->fse, &entropyMetadata->fseMetadata,
+ workspace, wkspSize, writeSeqEntropy);
+ return seqSize + literalsSize + ZSTD_blockHeaderSize;
+}
+
+/* Builds entropy statistics and uses them for blocksize estimation.
+ *
+ * Returns the estimated compressed size of the seqStore, or a zstd error.
+ */
+static size_t ZSTD_buildEntropyStatisticsAndEstimateSubBlockSize(seqStore_t* seqStore, const ZSTD_CCtx* zc) {
+ ZSTD_entropyCTablesMetadata_t entropyMetadata;
+ FORWARD_IF_ERROR(ZSTD_buildBlockEntropyStats(seqStore,
+ &zc->blockState.prevCBlock->entropy,
+ &zc->blockState.nextCBlock->entropy,
+ &zc->appliedParams,
+ &entropyMetadata,
+ zc->entropyWorkspace, ENTROPY_WORKSPACE_SIZE /* statically allocated in resetCCtx */), "");
+ return ZSTD_estimateBlockSize(seqStore->litStart, (size_t)(seqStore->lit - seqStore->litStart),
+ seqStore->ofCode, seqStore->llCode, seqStore->mlCode,
+ (size_t)(seqStore->sequences - seqStore->sequencesStart),
+ &zc->blockState.nextCBlock->entropy, &entropyMetadata, zc->entropyWorkspace, ENTROPY_WORKSPACE_SIZE,
+ (int)(entropyMetadata.hufMetadata.hType == set_compressed), 1);
+}
+
+/* Returns literals bytes represented in a seqStore */
+static size_t ZSTD_countSeqStoreLiteralsBytes(const seqStore_t* const seqStore) {
+ size_t literalsBytes = 0;
+ size_t const nbSeqs = seqStore->sequences - seqStore->sequencesStart;
+ size_t i;
+ for (i = 0; i < nbSeqs; ++i) {
+ seqDef seq = seqStore->sequencesStart[i];
+ literalsBytes += seq.litLength;
+ if (i == seqStore->longLengthPos && seqStore->longLengthType == ZSTD_llt_literalLength) {
+ literalsBytes += 0x10000;
+ }
+ }
+ return literalsBytes;
+}
+
+/* Returns match bytes represented in a seqStore */
+static size_t ZSTD_countSeqStoreMatchBytes(const seqStore_t* const seqStore) {
+ size_t matchBytes = 0;
+ size_t const nbSeqs = seqStore->sequences - seqStore->sequencesStart;
+ size_t i;
+ for (i = 0; i < nbSeqs; ++i) {
+ seqDef seq = seqStore->sequencesStart[i];
+ matchBytes += seq.matchLength + MINMATCH;
+ if (i == seqStore->longLengthPos && seqStore->longLengthType == ZSTD_llt_matchLength) {
+ matchBytes += 0x10000;
+ }
+ }
+ return matchBytes;
+}
+
+/* Derives the seqStore that is a chunk of the originalSeqStore from [startIdx, endIdx).
+ * Stores the result in resultSeqStore.
+ */
+static void ZSTD_deriveSeqStoreChunk(seqStore_t* resultSeqStore,
+ const seqStore_t* originalSeqStore,
+ size_t startIdx, size_t endIdx) {
+ BYTE* const litEnd = originalSeqStore->lit;
+ size_t literalsBytes;
+ size_t literalsBytesPreceding = 0;
+
+ *resultSeqStore = *originalSeqStore;
+ if (startIdx > 0) {
+ resultSeqStore->sequences = originalSeqStore->sequencesStart + startIdx;
+ literalsBytesPreceding = ZSTD_countSeqStoreLiteralsBytes(resultSeqStore);
+ }
+
+ /* Move longLengthPos into the correct position if necessary */
+ if (originalSeqStore->longLengthType != ZSTD_llt_none) {
+ if (originalSeqStore->longLengthPos < startIdx || originalSeqStore->longLengthPos > endIdx) {
+ resultSeqStore->longLengthType = ZSTD_llt_none;
+ } else {
+ resultSeqStore->longLengthPos -= (U32)startIdx;
+ }
+ }
+ resultSeqStore->sequencesStart = originalSeqStore->sequencesStart + startIdx;
+ resultSeqStore->sequences = originalSeqStore->sequencesStart + endIdx;
+ literalsBytes = ZSTD_countSeqStoreLiteralsBytes(resultSeqStore);
+ resultSeqStore->litStart += literalsBytesPreceding;
+ if (endIdx == (size_t)(originalSeqStore->sequences - originalSeqStore->sequencesStart)) {
+ /* This accounts for possible last literals if the derived chunk reaches the end of the block */
+ resultSeqStore->lit = litEnd;
+ } else {
+ resultSeqStore->lit = resultSeqStore->litStart+literalsBytes;
+ }
+ resultSeqStore->llCode += startIdx;
+ resultSeqStore->mlCode += startIdx;
+ resultSeqStore->ofCode += startIdx;
+}
+
+/**
+ * Returns the raw offset represented by the combination of offCode, ll0, and repcode history.
+ * offCode must be an offCode representing a repcode, therefore in the range of [0, 2].
+ */
+static U32 ZSTD_resolveRepcodeToRawOffset(const U32 rep[ZSTD_REP_NUM], const U32 offCode, const U32 ll0) {
+ U32 const adjustedOffCode = offCode + ll0;
+ assert(offCode < ZSTD_REP_NUM);
+ if (adjustedOffCode == ZSTD_REP_NUM) {
+ /* litlength == 0 and offCode == 2 implies selection of first repcode - 1 */
+ assert(rep[0] > 0);
+ return rep[0] - 1;
+ }
+ return rep[adjustedOffCode];
+}
+
+/**
+ * ZSTD_seqStore_resolveOffCodes() reconciles any possible divergences in offset history that may arise
+ * due to emission of RLE/raw blocks that disturb the offset history, and replaces any repcodes within
+ * the seqStore that may be invalid.
+ *
+ * dRepcodes are updated as would be on the decompression side. cRepcodes are updated exactly in
+ * accordance with the seqStore.
+ */
+static void ZSTD_seqStore_resolveOffCodes(repcodes_t* const dRepcodes, repcodes_t* const cRepcodes,
+ seqStore_t* const seqStore, U32 const nbSeq) {
+ U32 idx = 0;
+ for (; idx < nbSeq; ++idx) {
+ seqDef* const seq = seqStore->sequencesStart + idx;
+ U32 const ll0 = (seq->litLength == 0);
+ U32 offCode = seq->offset - 1;
+ assert(seq->offset > 0);
+ if (offCode <= ZSTD_REP_MOVE) {
+ U32 const dRawOffset = ZSTD_resolveRepcodeToRawOffset(dRepcodes->rep, offCode, ll0);
+ U32 const cRawOffset = ZSTD_resolveRepcodeToRawOffset(cRepcodes->rep, offCode, ll0);
+ /* Adjust simulated decompression repcode history if we come across a mismatch. Replace
+ * the repcode with the offset it actually references, determined by the compression
+ * repcode history.
+ */
+ if (dRawOffset != cRawOffset) {
+ seq->offset = cRawOffset + ZSTD_REP_NUM;
+ }
+ }
+ /* Compression repcode history is always updated with values directly from the unmodified seqStore.
+ * Decompression repcode history may use modified seq->offset value taken from compression repcode history.
+ */
+ *dRepcodes = ZSTD_updateRep(dRepcodes->rep, seq->offset - 1, ll0);
+ *cRepcodes = ZSTD_updateRep(cRepcodes->rep, offCode, ll0);
+ }
+}
+
+/* ZSTD_compressSeqStore_singleBlock():
+ * Compresses a seqStore into a block with a block header, into the buffer dst.
+ *
+ * Returns the total size of that block (including header) or a ZSTD error code.
+ */
+static size_t ZSTD_compressSeqStore_singleBlock(ZSTD_CCtx* zc, seqStore_t* const seqStore,
+ repcodes_t* const dRep, repcodes_t* const cRep,
+ void* dst, size_t dstCapacity,
+ const void* src, size_t srcSize,
+ U32 lastBlock, U32 isPartition) {
+ const U32 rleMaxLength = 25;
+ BYTE* op = (BYTE*)dst;
+ const BYTE* ip = (const BYTE*)src;
+ size_t cSize;
+ size_t cSeqsSize;
+
+ /* In case of an RLE or raw block, the simulated decompression repcode history must be reset */
+ repcodes_t const dRepOriginal = *dRep;
+ if (isPartition)
+ ZSTD_seqStore_resolveOffCodes(dRep, cRep, seqStore, (U32)(seqStore->sequences - seqStore->sequencesStart));
+
+ cSeqsSize = ZSTD_entropyCompressSeqStore(seqStore,
+ &zc->blockState.prevCBlock->entropy, &zc->blockState.nextCBlock->entropy,
+ &zc->appliedParams,
+ op + ZSTD_blockHeaderSize, dstCapacity - ZSTD_blockHeaderSize,
+ srcSize,
+ zc->entropyWorkspace, ENTROPY_WORKSPACE_SIZE /* statically allocated in resetCCtx */,
+ zc->bmi2);
+ FORWARD_IF_ERROR(cSeqsSize, "ZSTD_entropyCompressSeqStore failed!");
+
+ if (!zc->isFirstBlock &&
+ cSeqsSize < rleMaxLength &&
+ ZSTD_isRLE((BYTE const*)src, srcSize)) {
+ /* We don't want to emit our first block as a RLE even if it qualifies because
+ * doing so will cause the decoder (cli only) to throw a "should consume all input error."
+ * This is only an issue for zstd <= v1.4.3
+ */
+ cSeqsSize = 1;
+ }
+
+ if (zc->seqCollector.collectSequences) {
+ ZSTD_copyBlockSequences(zc);
+ ZSTD_blockState_confirmRepcodesAndEntropyTables(&zc->blockState);
+ return 0;
+ }
+
+ if (zc->blockState.prevCBlock->entropy.fse.offcode_repeatMode == FSE_repeat_valid)
+ zc->blockState.prevCBlock->entropy.fse.offcode_repeatMode = FSE_repeat_check;
+
+ if (cSeqsSize == 0) {
+ cSize = ZSTD_noCompressBlock(op, dstCapacity, ip, srcSize, lastBlock);
+ FORWARD_IF_ERROR(cSize, "Nocompress block failed");
+ DEBUGLOG(4, "Writing out nocompress block, size: %zu", cSize);
+ *dRep = dRepOriginal; /* reset simulated decompression repcode history */
+ } else if (cSeqsSize == 1) {
+ cSize = ZSTD_rleCompressBlock(op, dstCapacity, *ip, srcSize, lastBlock);
+ FORWARD_IF_ERROR(cSize, "RLE compress block failed");
+ DEBUGLOG(4, "Writing out RLE block, size: %zu", cSize);
+ *dRep = dRepOriginal; /* reset simulated decompression repcode history */
+ } else {
+ ZSTD_blockState_confirmRepcodesAndEntropyTables(&zc->blockState);
+ writeBlockHeader(op, cSeqsSize, srcSize, lastBlock);
+ cSize = ZSTD_blockHeaderSize + cSeqsSize;
+ DEBUGLOG(4, "Writing out compressed block, size: %zu", cSize);
+ }
+ return cSize;
+}
+
+/* Struct to keep track of where we are in our recursive calls. */
+typedef struct {
+ U32* splitLocations; /* Array of split indices */
+ size_t idx; /* The current index within splitLocations being worked on */
+} seqStoreSplits;
+
+#define MIN_SEQUENCES_BLOCK_SPLITTING 300
+#define MAX_NB_SPLITS 196
+
+/* Helper function to perform the recursive search for block splits.
+ * Estimates the cost of seqStore prior to split, and estimates the cost of splitting the sequences in half.
+ * If advantageous to split, then we recurse down the two sub-blocks. If not, or if an error occurred in estimation, then
+ * we do not recurse.
+ *
+ * Note: The recursion depth is capped by a heuristic minimum number of sequences, defined by MIN_SEQUENCES_BLOCK_SPLITTING.
+ * In theory, this means the absolute largest recursion depth is 10 == log2(maxNbSeqInBlock/MIN_SEQUENCES_BLOCK_SPLITTING).
+ * In practice, recursion depth usually doesn't go beyond 4.
+ *
+ * Furthermore, the number of splits is capped by MAX_NB_SPLITS. At MAX_NB_SPLITS == 196 with the current existing blockSize
+ * maximum of 128 KB, this value is actually impossible to reach.
+ */
+static void ZSTD_deriveBlockSplitsHelper(seqStoreSplits* splits, size_t startIdx, size_t endIdx,
+ const ZSTD_CCtx* zc, const seqStore_t* origSeqStore) {
+ seqStore_t fullSeqStoreChunk;
+ seqStore_t firstHalfSeqStore;
+ seqStore_t secondHalfSeqStore;
+ size_t estimatedOriginalSize;
+ size_t estimatedFirstHalfSize;
+ size_t estimatedSecondHalfSize;
+ size_t midIdx = (startIdx + endIdx)/2;
+
+ if (endIdx - startIdx < MIN_SEQUENCES_BLOCK_SPLITTING || splits->idx >= MAX_NB_SPLITS) {
+ return;
+ }
+ ZSTD_deriveSeqStoreChunk(&fullSeqStoreChunk, origSeqStore, startIdx, endIdx);
+ ZSTD_deriveSeqStoreChunk(&firstHalfSeqStore, origSeqStore, startIdx, midIdx);
+ ZSTD_deriveSeqStoreChunk(&secondHalfSeqStore, origSeqStore, midIdx, endIdx);
+ estimatedOriginalSize = ZSTD_buildEntropyStatisticsAndEstimateSubBlockSize(&fullSeqStoreChunk, zc);
+ estimatedFirstHalfSize = ZSTD_buildEntropyStatisticsAndEstimateSubBlockSize(&firstHalfSeqStore, zc);
+ estimatedSecondHalfSize = ZSTD_buildEntropyStatisticsAndEstimateSubBlockSize(&secondHalfSeqStore, zc);
+ DEBUGLOG(5, "Estimated original block size: %zu -- First half split: %zu -- Second half split: %zu",
+ estimatedOriginalSize, estimatedFirstHalfSize, estimatedSecondHalfSize);
+ if (ZSTD_isError(estimatedOriginalSize) || ZSTD_isError(estimatedFirstHalfSize) || ZSTD_isError(estimatedSecondHalfSize)) {
+ return;
+ }
+ if (estimatedFirstHalfSize + estimatedSecondHalfSize < estimatedOriginalSize) {
+ ZSTD_deriveBlockSplitsHelper(splits, startIdx, midIdx, zc, origSeqStore);
+ splits->splitLocations[splits->idx] = (U32)midIdx;
+ splits->idx++;
+ ZSTD_deriveBlockSplitsHelper(splits, midIdx, endIdx, zc, origSeqStore);
+ }
+}
+
+/* Base recursive function. Populates a table with intra-block partition indices that can improve compression ratio.
+ *
+ * Returns the number of splits made (which equals the size of the partition table - 1).
+ */
+static size_t ZSTD_deriveBlockSplits(ZSTD_CCtx* zc, U32 partitions[], U32 nbSeq) {
+ seqStoreSplits splits = {partitions, 0};
+ if (nbSeq <= 4) {
+ DEBUGLOG(4, "ZSTD_deriveBlockSplits: Too few sequences to split");
+ /* Refuse to try and split anything with less than 4 sequences */
+ return 0;
+ }
+ ZSTD_deriveBlockSplitsHelper(&splits, 0, nbSeq, zc, &zc->seqStore);
+ splits.splitLocations[splits.idx] = nbSeq;
+ DEBUGLOG(5, "ZSTD_deriveBlockSplits: final nb partitions: %zu", splits.idx+1);
+ return splits.idx;
+}
+
+/* ZSTD_compressBlock_splitBlock():
+ * Attempts to split a given block into multiple blocks to improve compression ratio.
+ *
+ * Returns combined size of all blocks (which includes headers), or a ZSTD error code.
+ */
+static size_t ZSTD_compressBlock_splitBlock_internal(ZSTD_CCtx* zc, void* dst, size_t dstCapacity,
+ const void* src, size_t blockSize, U32 lastBlock, U32 nbSeq) {
+ size_t cSize = 0;
+ const BYTE* ip = (const BYTE*)src;
+ BYTE* op = (BYTE*)dst;
+ U32 partitions[MAX_NB_SPLITS];
+ size_t i = 0;
+ size_t srcBytesTotal = 0;
+ size_t numSplits = ZSTD_deriveBlockSplits(zc, partitions, nbSeq);
+ seqStore_t nextSeqStore;
+ seqStore_t currSeqStore;
+
+ /* If a block is split and some partitions are emitted as RLE/uncompressed, then repcode history
+ * may become invalid. In order to reconcile potentially invalid repcodes, we keep track of two
+ * separate repcode histories that simulate repcode history on compression and decompression side,
+ * and use the histories to determine whether we must replace a particular repcode with its raw offset.
+ *
+ * 1) cRep gets updated for each partition, regardless of whether the block was emitted as uncompressed
+ * or RLE. This allows us to retrieve the offset value that an invalid repcode references within
+ * a nocompress/RLE block.
+ * 2) dRep gets updated only for compressed partitions, and when a repcode gets replaced, will use
+ * the replacement offset value rather than the original repcode to update the repcode history.
+ * dRep also will be the final repcode history sent to the next block.
+ *
+ * See ZSTD_seqStore_resolveOffCodes() for more details.
+ */
+ repcodes_t dRep;
+ repcodes_t cRep;
+ ZSTD_memcpy(dRep.rep, zc->blockState.prevCBlock->rep, sizeof(repcodes_t));
+ ZSTD_memcpy(cRep.rep, zc->blockState.prevCBlock->rep, sizeof(repcodes_t));
+
+ DEBUGLOG(4, "ZSTD_compressBlock_splitBlock_internal (dstCapacity=%u, dictLimit=%u, nextToUpdate=%u)",
+ (unsigned)dstCapacity, (unsigned)zc->blockState.matchState.window.dictLimit,
+ (unsigned)zc->blockState.matchState.nextToUpdate);
+
+ if (numSplits == 0) {
+ size_t cSizeSingleBlock = ZSTD_compressSeqStore_singleBlock(zc, &zc->seqStore,
+ &dRep, &cRep,
+ op, dstCapacity,
+ ip, blockSize,
+ lastBlock, 0 /* isPartition */);
+ FORWARD_IF_ERROR(cSizeSingleBlock, "Compressing single block from splitBlock_internal() failed!");
+ DEBUGLOG(5, "ZSTD_compressBlock_splitBlock_internal: No splits");
+ assert(cSizeSingleBlock <= ZSTD_BLOCKSIZE_MAX + ZSTD_blockHeaderSize);
+ return cSizeSingleBlock;
+ }
+
+ ZSTD_deriveSeqStoreChunk(&currSeqStore, &zc->seqStore, 0, partitions[0]);
+ for (i = 0; i <= numSplits; ++i) {
+ size_t srcBytes;
+ size_t cSizeChunk;
+ U32 const lastPartition = (i == numSplits);
+ U32 lastBlockEntireSrc = 0;
+
+ srcBytes = ZSTD_countSeqStoreLiteralsBytes(&currSeqStore) + ZSTD_countSeqStoreMatchBytes(&currSeqStore);
+ srcBytesTotal += srcBytes;
+ if (lastPartition) {
+ /* This is the final partition, need to account for possible last literals */
+ srcBytes += blockSize - srcBytesTotal;
+ lastBlockEntireSrc = lastBlock;
+ } else {
+ ZSTD_deriveSeqStoreChunk(&nextSeqStore, &zc->seqStore, partitions[i], partitions[i+1]);
+ }
+
+ cSizeChunk = ZSTD_compressSeqStore_singleBlock(zc, &currSeqStore,
+ &dRep, &cRep,
+ op, dstCapacity,
+ ip, srcBytes,
+ lastBlockEntireSrc, 1 /* isPartition */);
+ DEBUGLOG(5, "Estimated size: %zu actual size: %zu", ZSTD_buildEntropyStatisticsAndEstimateSubBlockSize(&currSeqStore, zc), cSizeChunk);
+ FORWARD_IF_ERROR(cSizeChunk, "Compressing chunk failed!");
+
+ ip += srcBytes;
+ op += cSizeChunk;
+ dstCapacity -= cSizeChunk;
+ cSize += cSizeChunk;
+ currSeqStore = nextSeqStore;
+ assert(cSizeChunk <= ZSTD_BLOCKSIZE_MAX + ZSTD_blockHeaderSize);
+ }
+ /* cRep and dRep may have diverged during the compression. If so, we use the dRep repcodes
+ * for the next block.
+ */
+ ZSTD_memcpy(zc->blockState.prevCBlock->rep, dRep.rep, sizeof(repcodes_t));
+ return cSize;
+}
+
+static size_t ZSTD_compressBlock_splitBlock(ZSTD_CCtx* zc,
+ void* dst, size_t dstCapacity,
+ const void* src, size_t srcSize, U32 lastBlock) {
+ const BYTE* ip = (const BYTE*)src;
+ BYTE* op = (BYTE*)dst;
+ U32 nbSeq;
+ size_t cSize;
+ DEBUGLOG(4, "ZSTD_compressBlock_splitBlock");
+
+ { const size_t bss = ZSTD_buildSeqStore(zc, src, srcSize);
+ FORWARD_IF_ERROR(bss, "ZSTD_buildSeqStore failed");
+ if (bss == ZSTDbss_noCompress) {
+ if (zc->blockState.prevCBlock->entropy.fse.offcode_repeatMode == FSE_repeat_valid)
+ zc->blockState.prevCBlock->entropy.fse.offcode_repeatMode = FSE_repeat_check;
+ cSize = ZSTD_noCompressBlock(op, dstCapacity, ip, srcSize, lastBlock);
+ FORWARD_IF_ERROR(cSize, "ZSTD_noCompressBlock failed");
+ DEBUGLOG(4, "ZSTD_compressBlock_splitBlock: Nocompress block");
+ return cSize;
+ }
+ nbSeq = (U32)(zc->seqStore.sequences - zc->seqStore.sequencesStart);
+ }
+
+ assert(zc->appliedParams.splitBlocks == 1);
+ cSize = ZSTD_compressBlock_splitBlock_internal(zc, dst, dstCapacity, src, srcSize, lastBlock, nbSeq);
+ FORWARD_IF_ERROR(cSize, "Splitting blocks failed!");
+ return cSize;
}
static size_t ZSTD_compressBlock_internal(ZSTD_CCtx* zc,
@@ -2683,12 +3733,12 @@ static size_t ZSTD_compressBlock_internal(ZSTD_CCtx* zc,
if (zc->seqCollector.collectSequences) {
ZSTD_copyBlockSequences(zc);
- ZSTD_confirmRepcodesAndEntropyTables(zc);
+ ZSTD_blockState_confirmRepcodesAndEntropyTables(&zc->blockState);
return 0;
}
/* encode sequences and literals */
- cSize = ZSTD_entropyCompressSequences(&zc->seqStore,
+ cSize = ZSTD_entropyCompressSeqStore(&zc->seqStore,
&zc->blockState.prevCBlock->entropy, &zc->blockState.nextCBlock->entropy,
&zc->appliedParams,
dst, dstCapacity,
@@ -2717,7 +3767,7 @@ static size_t ZSTD_compressBlock_internal(ZSTD_CCtx* zc,
out:
if (!ZSTD_isError(cSize) && cSize > 1) {
- ZSTD_confirmRepcodesAndEntropyTables(zc);
+ ZSTD_blockState_confirmRepcodesAndEntropyTables(&zc->blockState);
}
/* We check that dictionaries have offset codes available for the first
* block. After the first block, the offcode table might not have large
@@ -2770,7 +3820,7 @@ static size_t ZSTD_compressBlock_targetCBlockSize_body(ZSTD_CCtx* zc,
size_t const maxCSize = srcSize - ZSTD_minGain(srcSize, zc->appliedParams.cParams.strategy);
FORWARD_IF_ERROR(cSize, "ZSTD_compressSuperBlock failed");
if (cSize != 0 && cSize < maxCSize + ZSTD_blockHeaderSize) {
- ZSTD_confirmRepcodesAndEntropyTables(zc);
+ ZSTD_blockState_confirmRepcodesAndEntropyTables(&zc->blockState);
return cSize;
}
}
@@ -2810,9 +3860,9 @@ static void ZSTD_overflowCorrectIfNeeded(ZSTD_matchState_t* ms,
void const* ip,
void const* iend)
{
- if (ZSTD_window_needOverflowCorrection(ms->window, iend)) {
- U32 const maxDist = (U32)1 << params->cParams.windowLog;
- U32 const cycleLog = ZSTD_cycleLog(params->cParams.chainLog, params->cParams.strategy);
+ U32 const cycleLog = ZSTD_cycleLog(params->cParams.chainLog, params->cParams.strategy);
+ U32 const maxDist = (U32)1 << params->cParams.windowLog;
+ if (ZSTD_window_needOverflowCorrection(ms->window, cycleLog, maxDist, ms->loadedDictEnd, ip, iend)) {
U32 const correction = ZSTD_window_correctOverflow(&ms->window, cycleLog, maxDist, ip);
ZSTD_STATIC_ASSERT(ZSTD_CHAINLOG_MAX <= 30);
ZSTD_STATIC_ASSERT(ZSTD_WINDOWLOG_MAX_32 <= 30);
@@ -2835,7 +3885,7 @@ static void ZSTD_overflowCorrectIfNeeded(ZSTD_matchState_t* ms,
* Frame is supposed already started (header already produced)
* @return : compressed size, or an error code
*/
-static size_t ZSTD_compress_frameChunk (ZSTD_CCtx* cctx,
+static size_t ZSTD_compress_frameChunk(ZSTD_CCtx* cctx,
void* dst, size_t dstCapacity,
const void* src, size_t srcSize,
U32 lastFrameChunk)
@@ -2875,6 +3925,10 @@ static size_t ZSTD_compress_frameChunk (ZSTD_CCtx* cctx,
FORWARD_IF_ERROR(cSize, "ZSTD_compressBlock_targetCBlockSize failed");
assert(cSize > 0);
assert(cSize <= blockSize + ZSTD_blockHeaderSize);
+ } else if (ZSTD_blockSplitterEnabled(&cctx->appliedParams)) {
+ cSize = ZSTD_compressBlock_splitBlock(cctx, op, dstCapacity, ip, blockSize, lastBlock);
+ FORWARD_IF_ERROR(cSize, "ZSTD_compressBlock_splitBlock failed");
+ assert(cSize > 0 || cctx->seqCollector.collectSequences == 1);
} else {
cSize = ZSTD_compressBlock_internal(cctx,
op+ZSTD_blockHeaderSize, dstCapacity-ZSTD_blockHeaderSize,
@@ -2954,6 +4008,26 @@ static size_t ZSTD_writeFrameHeader(void* dst, size_t dstCapacity,
return pos;
}
+/* ZSTD_writeSkippableFrame_advanced() :
+ * Writes out a skippable frame with the specified magic number variant (16 are supported),
+ * from ZSTD_MAGIC_SKIPPABLE_START to ZSTD_MAGIC_SKIPPABLE_START+15, and the desired source data.
+ *
+ * Returns the total number of bytes written, or a ZSTD error code.
+ */
+size_t ZSTD_writeSkippableFrame(void* dst, size_t dstCapacity,
+ const void* src, size_t srcSize, unsigned magicVariant) {
+ BYTE* op = (BYTE*)dst;
+ RETURN_ERROR_IF(dstCapacity < srcSize + ZSTD_SKIPPABLEHEADERSIZE /* Skippable frame overhead */,
+ dstSize_tooSmall, "Not enough room for skippable frame");
+ RETURN_ERROR_IF(srcSize > (unsigned)0xFFFFFFFF, srcSize_wrong, "Src size too large for skippable frame");
+ RETURN_ERROR_IF(magicVariant > 15, parameter_outOfBound, "Skippable frame magic number variant not supported");
+
+ MEM_writeLE32(op, (U32)(ZSTD_MAGIC_SKIPPABLE_START + magicVariant));
+ MEM_writeLE32(op+4, (U32)srcSize);
+ ZSTD_memcpy(op+8, src, srcSize);
+ return srcSize + ZSTD_SKIPPABLEHEADERSIZE;
+}
+
/* ZSTD_writeLastEmptyBlock() :
* output an empty Block with end-of-frame mark to complete a frame
* @return : size of data written into `dst` (== ZSTD_blockHeaderSize (defined in zstd_internal.h))
@@ -3010,11 +4084,12 @@ static size_t ZSTD_compressContinue_internal (ZSTD_CCtx* cctx,
if (!srcSize) return fhSize; /* do not generate an empty block if no input */
- if (!ZSTD_window_update(&ms->window, src, srcSize)) {
+ if (!ZSTD_window_update(&ms->window, src, srcSize, ms->forceNonContiguous)) {
+ ms->forceNonContiguous = 0;
ms->nextToUpdate = ms->window.dictLimit;
}
if (cctx->appliedParams.ldmParams.enableLdm) {
- ZSTD_window_update(&cctx->ldmState.window, src, srcSize);
+ ZSTD_window_update(&cctx->ldmState.window, src, srcSize, /* forceNonContiguous */ 0);
}
if (!frame) {
@@ -3082,63 +4157,86 @@ static size_t ZSTD_loadDictionaryContent(ZSTD_matchState_t* ms,
{
const BYTE* ip = (const BYTE*) src;
const BYTE* const iend = ip + srcSize;
+ int const loadLdmDict = params->ldmParams.enableLdm && ls != NULL;
+
+ /* Assert that we the ms params match the params we're being given */
+ ZSTD_assertEqualCParams(params->cParams, ms->cParams);
- ZSTD_window_update(&ms->window, src, srcSize);
+ if (srcSize > ZSTD_CHUNKSIZE_MAX) {
+ /* Allow the dictionary to set indices up to exactly ZSTD_CURRENT_MAX.
+ * Dictionaries right at the edge will immediately trigger overflow
+ * correction, but I don't want to insert extra constraints here.
+ */
+ U32 const maxDictSize = ZSTD_CURRENT_MAX - 1;
+ /* We must have cleared our windows when our source is this large. */
+ assert(ZSTD_window_isEmpty(ms->window));
+ if (loadLdmDict)
+ assert(ZSTD_window_isEmpty(ls->window));
+ /* If the dictionary is too large, only load the suffix of the dictionary. */
+ if (srcSize > maxDictSize) {
+ ip = iend - maxDictSize;
+ src = ip;
+ srcSize = maxDictSize;
+ }
+ }
+
+ DEBUGLOG(4, "ZSTD_loadDictionaryContent(): useRowMatchFinder=%d", (int)params->useRowMatchFinder);
+ ZSTD_window_update(&ms->window, src, srcSize, /* forceNonContiguous */ 0);
ms->loadedDictEnd = params->forceWindow ? 0 : (U32)(iend - ms->window.base);
+ ms->forceNonContiguous = params->deterministicRefPrefix;
- if (params->ldmParams.enableLdm && ls != NULL) {
- ZSTD_window_update(&ls->window, src, srcSize);
+ if (loadLdmDict) {
+ ZSTD_window_update(&ls->window, src, srcSize, /* forceNonContiguous */ 0);
ls->loadedDictEnd = params->forceWindow ? 0 : (U32)(iend - ls->window.base);
}
- /* Assert that we the ms params match the params we're being given */
- ZSTD_assertEqualCParams(params->cParams, ms->cParams);
-
if (srcSize <= HASH_READ_SIZE) return 0;
- while (iend - ip > HASH_READ_SIZE) {
- size_t const remaining = (size_t)(iend - ip);
- size_t const chunk = MIN(remaining, ZSTD_CHUNKSIZE_MAX);
- const BYTE* const ichunk = ip + chunk;
+ ZSTD_overflowCorrectIfNeeded(ms, ws, params, ip, iend);
- ZSTD_overflowCorrectIfNeeded(ms, ws, params, ip, ichunk);
+ if (loadLdmDict)
+ ZSTD_ldm_fillHashTable(ls, ip, iend, &params->ldmParams);
- if (params->ldmParams.enableLdm && ls != NULL)
- ZSTD_ldm_fillHashTable(ls, (const BYTE*)src, (const BYTE*)src + srcSize, &params->ldmParams);
-
- switch(params->cParams.strategy)
- {
- case ZSTD_fast:
- ZSTD_fillHashTable(ms, ichunk, dtlm);
- break;
- case ZSTD_dfast:
- ZSTD_fillDoubleHashTable(ms, ichunk, dtlm);
- break;
+ switch(params->cParams.strategy)
+ {
+ case ZSTD_fast:
+ ZSTD_fillHashTable(ms, iend, dtlm);
+ break;
+ case ZSTD_dfast:
+ ZSTD_fillDoubleHashTable(ms, iend, dtlm);
+ break;
- case ZSTD_greedy:
- case ZSTD_lazy:
- case ZSTD_lazy2:
- if (chunk >= HASH_READ_SIZE && ms->dedicatedDictSearch) {
- assert(chunk == remaining); /* must load everything in one go */
- ZSTD_dedicatedDictSearch_lazy_loadDictionary(ms, ichunk-HASH_READ_SIZE);
- } else if (chunk >= HASH_READ_SIZE) {
- ZSTD_insertAndFindFirstIndex(ms, ichunk-HASH_READ_SIZE);
+ case ZSTD_greedy:
+ case ZSTD_lazy:
+ case ZSTD_lazy2:
+ assert(srcSize >= HASH_READ_SIZE);
+ if (ms->dedicatedDictSearch) {
+ assert(ms->chainTable != NULL);
+ ZSTD_dedicatedDictSearch_lazy_loadDictionary(ms, iend-HASH_READ_SIZE);
+ } else {
+ assert(params->useRowMatchFinder != ZSTD_urm_auto);
+ if (params->useRowMatchFinder == ZSTD_urm_enableRowMatchFinder) {
+ size_t const tagTableSize = ((size_t)1 << params->cParams.hashLog) * sizeof(U16);
+ ZSTD_memset(ms->tagTable, 0, tagTableSize);
+ ZSTD_row_update(ms, iend-HASH_READ_SIZE);
+ DEBUGLOG(4, "Using row-based hash table for lazy dict");
+ } else {
+ ZSTD_insertAndFindFirstIndex(ms, iend-HASH_READ_SIZE);
+ DEBUGLOG(4, "Using chain-based hash table for lazy dict");
}
- break;
-
- case ZSTD_btlazy2: /* we want the dictionary table fully sorted */
- case ZSTD_btopt:
- case ZSTD_btultra:
- case ZSTD_btultra2:
- if (chunk >= HASH_READ_SIZE)
- ZSTD_updateTree(ms, ichunk-HASH_READ_SIZE, ichunk);
- break;
-
- default:
- assert(0); /* not possible : not a valid strategy id */
}
+ break;
+
+ case ZSTD_btlazy2: /* we want the dictionary table fully sorted */
+ case ZSTD_btopt:
+ case ZSTD_btultra:
+ case ZSTD_btultra2:
+ assert(srcSize >= HASH_READ_SIZE);
+ ZSTD_updateTree(ms, iend-HASH_READ_SIZE, iend);
+ break;
- ip = ichunk;
+ default:
+ assert(0); /* not possible : not a valid strategy id */
}
ms->nextToUpdate = (U32)(iend - ms->window.base);
@@ -3277,7 +4375,6 @@ static size_t ZSTD_loadZstdDictionary(ZSTD_compressedBlockState_t* bs,
const BYTE* const dictEnd = dictPtr + dictSize;
size_t dictID;
size_t eSize;
-
ZSTD_STATIC_ASSERT(HUF_WORKSPACE_SIZE >= (1<<MAX(MLFSELog,LLFSELog)));
assert(dictSize >= 8);
assert(MEM_readLE32(dictPtr) == ZSTD_MAGIC_DICTIONARY);
@@ -3348,6 +4445,10 @@ static size_t ZSTD_compressBegin_internal(ZSTD_CCtx* cctx,
const ZSTD_CCtx_params* params, U64 pledgedSrcSize,
ZSTD_buffered_policy_e zbuff)
{
+ size_t const dictContentSize = cdict ? cdict->dictContentSize : dictSize;
+#if ZSTD_TRACE
+ cctx->traceCtx = (ZSTD_trace_compress_begin != NULL) ? ZSTD_trace_compress_begin(cctx) : 0;
+#endif
DEBUGLOG(4, "ZSTD_compressBegin_internal: wlog=%u", params->cParams.windowLog);
/* params are supposed to be fully validated at this point */
assert(!ZSTD_isError(ZSTD_checkCParams(params->cParams)));
@@ -3362,7 +4463,8 @@ static size_t ZSTD_compressBegin_internal(ZSTD_CCtx* cctx,
return ZSTD_resetCCtx_usingCDict(cctx, cdict, params, pledgedSrcSize, zbuff);
}
- FORWARD_IF_ERROR( ZSTD_resetCCtx_internal(cctx, *params, pledgedSrcSize,
+ FORWARD_IF_ERROR( ZSTD_resetCCtx_internal(cctx, params, pledgedSrcSize,
+ dictContentSize,
ZSTDcrp_makeClean, zbuff) , "");
{ size_t const dictID = cdict ?
ZSTD_compress_insertDictionary(
@@ -3377,6 +4479,7 @@ static size_t ZSTD_compressBegin_internal(ZSTD_CCtx* cctx,
FORWARD_IF_ERROR(dictID, "ZSTD_compress_insertDictionary failed");
assert(dictID <= UINT_MAX);
cctx->dictID = (U32)dictID;
+ cctx->dictContentSize = dictContentSize;
}
return 0;
}
@@ -3405,8 +4508,8 @@ size_t ZSTD_compressBegin_advanced(ZSTD_CCtx* cctx,
const void* dict, size_t dictSize,
ZSTD_parameters params, unsigned long long pledgedSrcSize)
{
- ZSTD_CCtx_params const cctxParams =
- ZSTD_assignParamsToCCtxParams(&cctx->requestedParams, &params);
+ ZSTD_CCtx_params cctxParams;
+ ZSTD_CCtxParams_init_internal(&cctxParams, &params, ZSTD_NO_CLEVEL);
return ZSTD_compressBegin_advanced_internal(cctx,
dict, dictSize, ZSTD_dct_auto, ZSTD_dtlm_fast,
NULL /*cdict*/,
@@ -3415,9 +4518,11 @@ size_t ZSTD_compressBegin_advanced(ZSTD_CCtx* cctx,
size_t ZSTD_compressBegin_usingDict(ZSTD_CCtx* cctx, const void* dict, size_t dictSize, int compressionLevel)
{
- ZSTD_parameters const params = ZSTD_getParams_internal(compressionLevel, ZSTD_CONTENTSIZE_UNKNOWN, dictSize, ZSTD_cpm_noAttachDict);
- ZSTD_CCtx_params const cctxParams =
- ZSTD_assignParamsToCCtxParams(&cctx->requestedParams, &params);
+ ZSTD_CCtx_params cctxParams;
+ {
+ ZSTD_parameters const params = ZSTD_getParams_internal(compressionLevel, ZSTD_CONTENTSIZE_UNKNOWN, dictSize, ZSTD_cpm_noAttachDict);
+ ZSTD_CCtxParams_init_internal(&cctxParams, &params, (compressionLevel == 0) ? ZSTD_CLEVEL_DEFAULT : compressionLevel);
+ }
DEBUGLOG(4, "ZSTD_compressBegin_usingDict (dictSize=%u)", (unsigned)dictSize);
return ZSTD_compressBegin_internal(cctx, dict, dictSize, ZSTD_dct_auto, ZSTD_dtlm_fast, NULL,
&cctxParams, ZSTD_CONTENTSIZE_UNKNOWN, ZSTDb_not_buffered);
@@ -3471,6 +4576,30 @@ static size_t ZSTD_writeEpilogue(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity)
return op-ostart;
}
+void ZSTD_CCtx_trace(ZSTD_CCtx* cctx, size_t extraCSize)
+{
+#if ZSTD_TRACE
+ if (cctx->traceCtx && ZSTD_trace_compress_end != NULL) {
+ int const streaming = cctx->inBuffSize > 0 || cctx->outBuffSize > 0 || cctx->appliedParams.nbWorkers > 0;
+ ZSTD_Trace trace;
+ ZSTD_memset(&trace, 0, sizeof(trace));
+ trace.version = ZSTD_VERSION_NUMBER;
+ trace.streaming = streaming;
+ trace.dictionaryID = cctx->dictID;
+ trace.dictionarySize = cctx->dictContentSize;
+ trace.uncompressedSize = cctx->consumedSrcSize;
+ trace.compressedSize = cctx->producedCSize + extraCSize;
+ trace.params = &cctx->appliedParams;
+ trace.cctx = cctx;
+ ZSTD_trace_compress_end(cctx->traceCtx, &trace);
+ }
+ cctx->traceCtx = 0;
+#else
+ (void)cctx;
+ (void)extraCSize;
+#endif
+}
+
size_t ZSTD_compressEnd (ZSTD_CCtx* cctx,
void* dst, size_t dstCapacity,
const void* src, size_t srcSize)
@@ -3493,25 +4622,10 @@ size_t ZSTD_compressEnd (ZSTD_CCtx* cctx,
(unsigned)cctx->pledgedSrcSizePlusOne-1,
(unsigned)cctx->consumedSrcSize);
}
+ ZSTD_CCtx_trace(cctx, endResult);
return cSize + endResult;
}
-static size_t ZSTD_compress_internal (ZSTD_CCtx* cctx,
- void* dst, size_t dstCapacity,
- const void* src, size_t srcSize,
- const void* dict,size_t dictSize,
- const ZSTD_parameters* params)
-{
- ZSTD_CCtx_params const cctxParams =
- ZSTD_assignParamsToCCtxParams(&cctx->requestedParams, params);
- DEBUGLOG(4, "ZSTD_compress_internal");
- return ZSTD_compress_advanced_internal(cctx,
- dst, dstCapacity,
- src, srcSize,
- dict, dictSize,
- &cctxParams);
-}
-
size_t ZSTD_compress_advanced (ZSTD_CCtx* cctx,
void* dst, size_t dstCapacity,
const void* src, size_t srcSize,
@@ -3520,11 +4634,12 @@ size_t ZSTD_compress_advanced (ZSTD_CCtx* cctx,
{
DEBUGLOG(4, "ZSTD_compress_advanced");
FORWARD_IF_ERROR(ZSTD_checkCParams(params.cParams), "");
- return ZSTD_compress_internal(cctx,
- dst, dstCapacity,
- src, srcSize,
- dict, dictSize,
- &params);
+ ZSTD_CCtxParams_init_internal(&cctx->simpleApiParams, &params, ZSTD_NO_CLEVEL);
+ return ZSTD_compress_advanced_internal(cctx,
+ dst, dstCapacity,
+ src, srcSize,
+ dict, dictSize,
+ &cctx->simpleApiParams);
}
/* Internal */
@@ -3548,11 +4663,13 @@ size_t ZSTD_compress_usingDict(ZSTD_CCtx* cctx,
const void* dict, size_t dictSize,
int compressionLevel)
{
- ZSTD_parameters const params = ZSTD_getParams_internal(compressionLevel, srcSize, dict ? dictSize : 0, ZSTD_cpm_noAttachDict);
- ZSTD_CCtx_params cctxParams = ZSTD_assignParamsToCCtxParams(&cctx->requestedParams, &params);
+ {
+ ZSTD_parameters const params = ZSTD_getParams_internal(compressionLevel, srcSize, dict ? dictSize : 0, ZSTD_cpm_noAttachDict);
+ assert(params.fParams.contentSizeFlag == 1);
+ ZSTD_CCtxParams_init_internal(&cctx->simpleApiParams, &params, (compressionLevel == 0) ? ZSTD_CLEVEL_DEFAULT: compressionLevel);
+ }
DEBUGLOG(4, "ZSTD_compress_usingDict (srcSize=%u)", (unsigned)srcSize);
- assert(params.fParams.contentSizeFlag == 1);
- return ZSTD_compress_advanced_internal(cctx, dst, dstCapacity, src, srcSize, dict, dictSize, &cctxParams);
+ return ZSTD_compress_advanced_internal(cctx, dst, dstCapacity, src, srcSize, dict, dictSize, &cctx->simpleApiParams);
}
size_t ZSTD_compressCCtx(ZSTD_CCtx* cctx,
@@ -3596,7 +4713,10 @@ size_t ZSTD_estimateCDictSize_advanced(
DEBUGLOG(5, "sizeof(ZSTD_CDict) : %u", (unsigned)sizeof(ZSTD_CDict));
return ZSTD_cwksp_alloc_size(sizeof(ZSTD_CDict))
+ ZSTD_cwksp_alloc_size(HUF_WORKSPACE_SIZE)
- + ZSTD_sizeof_matchState(&cParams, /* forCCtx */ 0)
+ /* enableDedicatedDictSearch == 1 ensures that CDict estimation will not be too small
+ * in case we are using DDS with row-hash. */
+ + ZSTD_sizeof_matchState(&cParams, ZSTD_resolveRowMatchFinderMode(ZSTD_urm_auto, &cParams),
+ /* enableDedicatedDictSearch */ 1, /* forCCtx */ 0)
+ (dictLoadMethod == ZSTD_dlm_byRef ? 0
: ZSTD_cwksp_alloc_size(ZSTD_cwksp_align(dictSize, sizeof(void *))));
}
@@ -3627,9 +4747,6 @@ static size_t ZSTD_initCDict_internal(
assert(!ZSTD_checkCParams(params.cParams));
cdict->matchState.cParams = params.cParams;
cdict->matchState.dedicatedDictSearch = params.enableDedicatedDictSearch;
- if (cdict->matchState.dedicatedDictSearch && dictSize > ZSTD_CHUNKSIZE_MAX) {
- cdict->matchState.dedicatedDictSearch = 0;
- }
if ((dictLoadMethod == ZSTD_dlm_byRef) || (!dictBuffer) || (!dictSize)) {
cdict->dictContent = dictBuffer;
} else {
@@ -3650,6 +4767,7 @@ static size_t ZSTD_initCDict_internal(
&cdict->matchState,
&cdict->workspace,
&params.cParams,
+ params.useRowMatchFinder,
ZSTDcrp_makeClean,
ZSTDirp_reset,
ZSTD_resetTarget_CDict), "");
@@ -3673,14 +4791,17 @@ static size_t ZSTD_initCDict_internal(
static ZSTD_CDict* ZSTD_createCDict_advanced_internal(size_t dictSize,
ZSTD_dictLoadMethod_e dictLoadMethod,
- ZSTD_compressionParameters cParams, ZSTD_customMem customMem)
+ ZSTD_compressionParameters cParams,
+ ZSTD_useRowMatchFinderMode_e useRowMatchFinder,
+ U32 enableDedicatedDictSearch,
+ ZSTD_customMem customMem)
{
if ((!customMem.customAlloc) ^ (!customMem.customFree)) return NULL;
{ size_t const workspaceSize =
ZSTD_cwksp_alloc_size(sizeof(ZSTD_CDict)) +
ZSTD_cwksp_alloc_size(HUF_WORKSPACE_SIZE) +
- ZSTD_sizeof_matchState(&cParams, /* forCCtx */ 0) +
+ ZSTD_sizeof_matchState(&cParams, useRowMatchFinder, enableDedicatedDictSearch, /* forCCtx */ 0) +
(dictLoadMethod == ZSTD_dlm_byRef ? 0
: ZSTD_cwksp_alloc_size(ZSTD_cwksp_align(dictSize, sizeof(void*))));
void* const workspace = ZSTD_customMalloc(workspaceSize, customMem);
@@ -3698,8 +4819,8 @@ static ZSTD_CDict* ZSTD_createCDict_advanced_internal(size_t dictSize,
assert(cdict != NULL);
ZSTD_cwksp_move(&cdict->workspace, &ws);
cdict->customMem = customMem;
- cdict->compressionLevel = 0; /* signals advanced API usage */
-
+ cdict->compressionLevel = ZSTD_NO_CLEVEL; /* signals advanced API usage */
+ cdict->useRowMatchFinder = useRowMatchFinder;
return cdict;
}
}
@@ -3751,10 +4872,13 @@ ZSTDLIB_API ZSTD_CDict* ZSTD_createCDict_advanced2(
&cctxParams, ZSTD_CONTENTSIZE_UNKNOWN, dictSize, ZSTD_cpm_createCDict);
}
+ DEBUGLOG(3, "ZSTD_createCDict_advanced2: DDS: %u", cctxParams.enableDedicatedDictSearch);
cctxParams.cParams = cParams;
+ cctxParams.useRowMatchFinder = ZSTD_resolveRowMatchFinderMode(cctxParams.useRowMatchFinder, &cParams);
cdict = ZSTD_createCDict_advanced_internal(dictSize,
dictLoadMethod, cctxParams.cParams,
+ cctxParams.useRowMatchFinder, cctxParams.enableDedicatedDictSearch,
customMem);
if (ZSTD_isError( ZSTD_initCDict_internal(cdict,
@@ -3823,7 +4947,9 @@ const ZSTD_CDict* ZSTD_initStaticCDict(
ZSTD_dictContentType_e dictContentType,
ZSTD_compressionParameters cParams)
{
- size_t const matchStateSize = ZSTD_sizeof_matchState(&cParams, /* forCCtx */ 0);
+ ZSTD_useRowMatchFinderMode_e const useRowMatchFinder = ZSTD_resolveRowMatchFinderMode(ZSTD_urm_auto, &cParams);
+ /* enableDedicatedDictSearch == 1 ensures matchstate is not too small in case this CDict will be used for DDS + row hash */
+ size_t const matchStateSize = ZSTD_sizeof_matchState(&cParams, useRowMatchFinder, /* enableDedicatedDictSearch */ 1, /* forCCtx */ 0);
size_t const neededSize = ZSTD_cwksp_alloc_size(sizeof(ZSTD_CDict))
+ (dictLoadMethod == ZSTD_dlm_byRef ? 0
: ZSTD_cwksp_alloc_size(ZSTD_cwksp_align(dictSize, sizeof(void*))))
@@ -3848,6 +4974,8 @@ const ZSTD_CDict* ZSTD_initStaticCDict(
ZSTD_CCtxParams_init(&params, 0);
params.cParams = cParams;
+ params.useRowMatchFinder = useRowMatchFinder;
+ cdict->useRowMatchFinder = useRowMatchFinder;
if (ZSTD_isError( ZSTD_initCDict_internal(cdict,
dict, dictSize,
@@ -3874,62 +5002,88 @@ unsigned ZSTD_getDictID_fromCDict(const ZSTD_CDict* cdict)
return cdict->dictID;
}
-
-/* ZSTD_compressBegin_usingCDict_advanced() :
- * cdict must be != NULL */
-size_t ZSTD_compressBegin_usingCDict_advanced(
+/* ZSTD_compressBegin_usingCDict_internal() :
+ * Implementation of various ZSTD_compressBegin_usingCDict* functions.
+ */
+static size_t ZSTD_compressBegin_usingCDict_internal(
ZSTD_CCtx* const cctx, const ZSTD_CDict* const cdict,
ZSTD_frameParameters const fParams, unsigned long long const pledgedSrcSize)
{
- DEBUGLOG(4, "ZSTD_compressBegin_usingCDict_advanced");
+ ZSTD_CCtx_params cctxParams;
+ DEBUGLOG(4, "ZSTD_compressBegin_usingCDict_internal");
RETURN_ERROR_IF(cdict==NULL, dictionary_wrong, "NULL pointer!");
- { ZSTD_CCtx_params params = cctx->requestedParams;
+ /* Initialize the cctxParams from the cdict */
+ {
+ ZSTD_parameters params;
+ params.fParams = fParams;
params.cParams = ( pledgedSrcSize < ZSTD_USE_CDICT_PARAMS_SRCSIZE_CUTOFF
|| pledgedSrcSize < cdict->dictContentSize * ZSTD_USE_CDICT_PARAMS_DICTSIZE_MULTIPLIER
|| pledgedSrcSize == ZSTD_CONTENTSIZE_UNKNOWN
- || cdict->compressionLevel == 0 )
- && (params.attachDictPref != ZSTD_dictForceLoad) ?
+ || cdict->compressionLevel == 0 ) ?
ZSTD_getCParamsFromCDict(cdict)
: ZSTD_getCParams(cdict->compressionLevel,
pledgedSrcSize,
cdict->dictContentSize);
- /* Increase window log to fit the entire dictionary and source if the
- * source size is known. Limit the increase to 19, which is the
- * window log for compression level 1 with the largest source size.
- */
- if (pledgedSrcSize != ZSTD_CONTENTSIZE_UNKNOWN) {
- U32 const limitedSrcSize = (U32)MIN(pledgedSrcSize, 1U << 19);
- U32 const limitedSrcLog = limitedSrcSize > 1 ? ZSTD_highbit32(limitedSrcSize - 1) + 1 : 1;
- params.cParams.windowLog = MAX(params.cParams.windowLog, limitedSrcLog);
- }
- params.fParams = fParams;
- return ZSTD_compressBegin_internal(cctx,
- NULL, 0, ZSTD_dct_auto, ZSTD_dtlm_fast,
- cdict,
- &params, pledgedSrcSize,
- ZSTDb_not_buffered);
+ ZSTD_CCtxParams_init_internal(&cctxParams, &params, cdict->compressionLevel);
+ }
+ /* Increase window log to fit the entire dictionary and source if the
+ * source size is known. Limit the increase to 19, which is the
+ * window log for compression level 1 with the largest source size.
+ */
+ if (pledgedSrcSize != ZSTD_CONTENTSIZE_UNKNOWN) {
+ U32 const limitedSrcSize = (U32)MIN(pledgedSrcSize, 1U << 19);
+ U32 const limitedSrcLog = limitedSrcSize > 1 ? ZSTD_highbit32(limitedSrcSize - 1) + 1 : 1;
+ cctxParams.cParams.windowLog = MAX(cctxParams.cParams.windowLog, limitedSrcLog);
}
+ return ZSTD_compressBegin_internal(cctx,
+ NULL, 0, ZSTD_dct_auto, ZSTD_dtlm_fast,
+ cdict,
+ &cctxParams, pledgedSrcSize,
+ ZSTDb_not_buffered);
+}
+
+
+/* ZSTD_compressBegin_usingCDict_advanced() :
+ * This function is DEPRECATED.
+ * cdict must be != NULL */
+size_t ZSTD_compressBegin_usingCDict_advanced(
+ ZSTD_CCtx* const cctx, const ZSTD_CDict* const cdict,
+ ZSTD_frameParameters const fParams, unsigned long long const pledgedSrcSize)
+{
+ return ZSTD_compressBegin_usingCDict_internal(cctx, cdict, fParams, pledgedSrcSize);
}
/* ZSTD_compressBegin_usingCDict() :
- * pledgedSrcSize=0 means "unknown"
- * if pledgedSrcSize>0, it will enable contentSizeFlag */
+ * cdict must be != NULL */
size_t ZSTD_compressBegin_usingCDict(ZSTD_CCtx* cctx, const ZSTD_CDict* cdict)
{
ZSTD_frameParameters const fParams = { 0 /*content*/, 0 /*checksum*/, 0 /*noDictID*/ };
- DEBUGLOG(4, "ZSTD_compressBegin_usingCDict : dictIDFlag == %u", !fParams.noDictIDFlag);
- return ZSTD_compressBegin_usingCDict_advanced(cctx, cdict, fParams, ZSTD_CONTENTSIZE_UNKNOWN);
+ return ZSTD_compressBegin_usingCDict_internal(cctx, cdict, fParams, ZSTD_CONTENTSIZE_UNKNOWN);
}
-size_t ZSTD_compress_usingCDict_advanced(ZSTD_CCtx* cctx,
+/*! ZSTD_compress_usingCDict_internal():
+ * Implementation of various ZSTD_compress_usingCDict* functions.
+ */
+static size_t ZSTD_compress_usingCDict_internal(ZSTD_CCtx* cctx,
void* dst, size_t dstCapacity,
const void* src, size_t srcSize,
const ZSTD_CDict* cdict, ZSTD_frameParameters fParams)
{
- FORWARD_IF_ERROR(ZSTD_compressBegin_usingCDict_advanced(cctx, cdict, fParams, srcSize), ""); /* will check if cdict != NULL */
+ FORWARD_IF_ERROR(ZSTD_compressBegin_usingCDict_internal(cctx, cdict, fParams, srcSize), ""); /* will check if cdict != NULL */
return ZSTD_compressEnd(cctx, dst, dstCapacity, src, srcSize);
}
+/*! ZSTD_compress_usingCDict_advanced():
+ * This function is DEPRECATED.
+ */
+size_t ZSTD_compress_usingCDict_advanced(ZSTD_CCtx* cctx,
+ void* dst, size_t dstCapacity,
+ const void* src, size_t srcSize,
+ const ZSTD_CDict* cdict, ZSTD_frameParameters fParams)
+{
+ return ZSTD_compress_usingCDict_internal(cctx, dst, dstCapacity, src, srcSize, cdict, fParams);
+}
+
/*! ZSTD_compress_usingCDict() :
* Compression using a digested Dictionary.
* Faster startup than ZSTD_compress_usingDict(), recommended when same dictionary is used multiple times.
@@ -3941,7 +5095,7 @@ size_t ZSTD_compress_usingCDict(ZSTD_CCtx* cctx,
const ZSTD_CDict* cdict)
{
ZSTD_frameParameters const fParams = { 1 /*content*/, 0 /*checksum*/, 0 /*noDictID*/ };
- return ZSTD_compress_usingCDict_advanced(cctx, dst, dstCapacity, src, srcSize, cdict, fParams);
+ return ZSTD_compress_usingCDict_internal(cctx, dst, dstCapacity, src, srcSize, cdict, fParams);
}
@@ -4071,7 +5225,7 @@ size_t ZSTD_initCStream_advanced(ZSTD_CStream* zcs,
FORWARD_IF_ERROR( ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only) , "");
FORWARD_IF_ERROR( ZSTD_CCtx_setPledgedSrcSize(zcs, pledgedSrcSize) , "");
FORWARD_IF_ERROR( ZSTD_checkCParams(params.cParams) , "");
- zcs->requestedParams = ZSTD_assignParamsToCCtxParams(&zcs->requestedParams, &params);
+ ZSTD_CCtxParams_setZstdParams(&zcs->requestedParams, &params);
FORWARD_IF_ERROR( ZSTD_CCtx_loadDictionary(zcs, dict, dictSize) , "");
return 0;
}
@@ -4351,8 +5505,13 @@ static size_t ZSTD_CCtx_init_compressStream2(ZSTD_CCtx* cctx,
FORWARD_IF_ERROR( ZSTD_initLocalDict(cctx) , ""); /* Init the local dict if present. */
ZSTD_memset(&cctx->prefixDict, 0, sizeof(cctx->prefixDict)); /* single usage */
assert(prefixDict.dict==NULL || cctx->cdict==NULL); /* only one can be set */
- if (cctx->cdict)
- params.compressionLevel = cctx->cdict->compressionLevel; /* let cdict take priority in terms of compression level */
+ if (cctx->cdict && !cctx->localDict.cdict) {
+ /* Let the cdict's compression level take priority over the requested params.
+ * But do not take the cdict's compression level if the "cdict" is actually a localDict
+ * generated from ZSTD_initLocalDict().
+ */
+ params.compressionLevel = cctx->cdict->compressionLevel;
+ }
DEBUGLOG(4, "ZSTD_compressStream2 : transparent init stage");
if (endOp == ZSTD_e_end) cctx->pledgedSrcSizePlusOne = inSize + 1; /* auto-fix pledgedSrcSize */
{
@@ -4371,11 +5530,21 @@ static size_t ZSTD_CCtx_init_compressStream2(ZSTD_CCtx* cctx,
params.ldmParams.enableLdm = 1;
}
+ if (ZSTD_CParams_useBlockSplitter(&params.cParams)) {
+ DEBUGLOG(4, "Block splitter enabled by default (window size >= 128K, strategy >= btopt)");
+ params.splitBlocks = 1;
+ }
+
+ params.useRowMatchFinder = ZSTD_resolveRowMatchFinderMode(params.useRowMatchFinder, &params.cParams);
+
#ifdef ZSTD_MULTITHREAD
if ((cctx->pledgedSrcSizePlusOne-1) <= ZSTDMT_JOBSIZE_MIN) {
params.nbWorkers = 0; /* do not invoke multi-threading when src size is too small */
}
if (params.nbWorkers > 0) {
+#if ZSTD_TRACE
+ cctx->traceCtx = (ZSTD_trace_compress_begin != NULL) ? ZSTD_trace_compress_begin(cctx) : 0;
+#endif
/* mt context creation */
if (cctx->mtctx == NULL) {
DEBUGLOG(4, "ZSTD_compressStream2: creating new mtctx for nbWorkers=%u",
@@ -4389,6 +5558,10 @@ static size_t ZSTD_CCtx_init_compressStream2(ZSTD_CCtx* cctx,
cctx->mtctx,
prefixDict.dict, prefixDict.dictSize, prefixDict.dictContentType,
cctx->cdict, params, cctx->pledgedSrcSizePlusOne-1) , "");
+ cctx->dictID = cctx->cdict ? cctx->cdict->dictID : 0;
+ cctx->dictContentSize = cctx->cdict ? cctx->cdict->dictContentSize : prefixDict.dictSize;
+ cctx->consumedSrcSize = 0;
+ cctx->producedCSize = 0;
cctx->streamStage = zcss_load;
cctx->appliedParams = params;
} else
@@ -4450,8 +5623,12 @@ size_t ZSTD_compressStream2( ZSTD_CCtx* cctx,
size_t const ipos = input->pos;
size_t const opos = output->pos;
flushMin = ZSTDMT_compressStream_generic(cctx->mtctx, output, input, endOp);
+ cctx->consumedSrcSize += (U64)(input->pos - ipos);
+ cctx->producedCSize += (U64)(output->pos - opos);
if ( ZSTD_isError(flushMin)
|| (endOp == ZSTD_e_end && flushMin == 0) ) { /* compression completed */
+ if (flushMin == 0)
+ ZSTD_CCtx_trace(cctx, 0);
ZSTD_CCtx_reset(cctx, ZSTD_reset_session_only);
}
FORWARD_IF_ERROR(flushMin, "ZSTDMT_compressStream_generic failed");
@@ -4834,7 +6011,7 @@ static size_t ZSTD_compressSequences_internal(ZSTD_CCtx* cctx,
continue;
}
- compressedSeqsSize = ZSTD_entropyCompressSequences(&cctx->seqStore,
+ compressedSeqsSize = ZSTD_entropyCompressSeqStore(&cctx->seqStore,
&cctx->blockState.prevCBlock->entropy, &cctx->blockState.nextCBlock->entropy,
&cctx->appliedParams,
op + ZSTD_blockHeaderSize /* Leave space for block header */, dstCapacity - ZSTD_blockHeaderSize,
@@ -4866,7 +6043,7 @@ static size_t ZSTD_compressSequences_internal(ZSTD_CCtx* cctx,
} else {
U32 cBlockHeader;
/* Error checking and repcodes update */
- ZSTD_confirmRepcodesAndEntropyTables(cctx);
+ ZSTD_blockState_confirmRepcodesAndEntropyTables(&cctx->blockState);
if (cctx->blockState.prevCBlock->entropy.fse.offcode_repeatMode == FSE_repeat_valid)
cctx->blockState.prevCBlock->entropy.fse.offcode_repeatMode = FSE_repeat_check;
@@ -4967,6 +6144,7 @@ size_t ZSTD_endStream(ZSTD_CStream* zcs, ZSTD_outBuffer* output)
#define ZSTD_MAX_CLEVEL 22
int ZSTD_maxCLevel(void) { return ZSTD_MAX_CLEVEL; }
int ZSTD_minCLevel(void) { return (int)-ZSTD_TARGETLENGTH_MAX; }
+int ZSTD_defaultCLevel(void) { return ZSTD_CLEVEL_DEFAULT; }
static const ZSTD_compressionParameters ZSTD_defaultCParameters[4][ZSTD_MAX_CLEVEL+1] = {
{ /* "default" - for any srcSize > 256 KB */
@@ -5099,7 +6277,10 @@ static ZSTD_compressionParameters ZSTD_dedicatedDictSearch_getCParams(int const
static int ZSTD_dedicatedDictSearch_isSupported(
ZSTD_compressionParameters const* cParams)
{
- return (cParams->strategy >= ZSTD_greedy) && (cParams->strategy <= ZSTD_lazy2);
+ return (cParams->strategy >= ZSTD_greedy)
+ && (cParams->strategy <= ZSTD_lazy2)
+ && (cParams->hashLog > cParams->chainLog)
+ && (cParams->chainLog <= 24);
}
/**
@@ -5117,6 +6298,9 @@ static void ZSTD_dedicatedDictSearch_revertCParams(
case ZSTD_lazy:
case ZSTD_lazy2:
cParams->hashLog -= ZSTD_LAZY_DDSS_BUCKET_LOG;
+ if (cParams->hashLog < ZSTD_HASHLOG_MIN) {
+ cParams->hashLog = ZSTD_HASHLOG_MIN;
+ }
break;
case ZSTD_btlazy2:
case ZSTD_btopt:
@@ -5165,6 +6349,7 @@ static ZSTD_compressionParameters ZSTD_getCParams_internal(int compressionLevel,
else row = compressionLevel;
{ ZSTD_compressionParameters cp = ZSTD_defaultCParameters[tableID][row];
+ DEBUGLOG(5, "ZSTD_getCParams_internal selected tableID: %u row: %u strat: %u", tableID, row, (U32)cp.strategy);
/* acceleration factor */
if (compressionLevel < 0) {
int const clampedCompressionLevel = MAX(ZSTD_minCLevel(), compressionLevel);
diff --git a/thirdparty/zstd/compress/zstd_compress_internal.h b/thirdparty/zstd/compress/zstd_compress_internal.h
index c04998b8b1..3b04fd09f6 100644
--- a/thirdparty/zstd/compress/zstd_compress_internal.h
+++ b/thirdparty/zstd/compress/zstd_compress_internal.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -81,6 +81,53 @@ typedef struct {
ZSTD_fseCTables_t fse;
} ZSTD_entropyCTables_t;
+/***********************************************
+* Entropy buffer statistics structs and funcs *
+***********************************************/
+/** ZSTD_hufCTablesMetadata_t :
+ * Stores Literals Block Type for a super-block in hType, and
+ * huffman tree description in hufDesBuffer.
+ * hufDesSize refers to the size of huffman tree description in bytes.
+ * This metadata is populated in ZSTD_buildBlockEntropyStats_literals() */
+typedef struct {
+ symbolEncodingType_e hType;
+ BYTE hufDesBuffer[ZSTD_MAX_HUF_HEADER_SIZE];
+ size_t hufDesSize;
+} ZSTD_hufCTablesMetadata_t;
+
+/** ZSTD_fseCTablesMetadata_t :
+ * Stores symbol compression modes for a super-block in {ll, ol, ml}Type, and
+ * fse tables in fseTablesBuffer.
+ * fseTablesSize refers to the size of fse tables in bytes.
+ * This metadata is populated in ZSTD_buildBlockEntropyStats_sequences() */
+typedef struct {
+ symbolEncodingType_e llType;
+ symbolEncodingType_e ofType;
+ symbolEncodingType_e mlType;
+ BYTE fseTablesBuffer[ZSTD_MAX_FSE_HEADERS_SIZE];
+ size_t fseTablesSize;
+ size_t lastCountSize; /* This is to account for bug in 1.3.4. More detail in ZSTD_entropyCompressSeqStore_internal() */
+} ZSTD_fseCTablesMetadata_t;
+
+typedef struct {
+ ZSTD_hufCTablesMetadata_t hufMetadata;
+ ZSTD_fseCTablesMetadata_t fseMetadata;
+} ZSTD_entropyCTablesMetadata_t;
+
+/** ZSTD_buildBlockEntropyStats() :
+ * Builds entropy for the block.
+ * @return : 0 on success or error code */
+size_t ZSTD_buildBlockEntropyStats(seqStore_t* seqStorePtr,
+ const ZSTD_entropyCTables_t* prevEntropy,
+ ZSTD_entropyCTables_t* nextEntropy,
+ const ZSTD_CCtx_params* cctxParams,
+ ZSTD_entropyCTablesMetadata_t* entropyMetadata,
+ void* workspace, size_t wkspSize);
+
+/*********************************
+* Compression internals structs *
+*********************************/
+
typedef struct {
U32 off; /* Offset code (offset + ZSTD_REP_MOVE) for the match */
U32 len; /* Raw length of match */
@@ -141,14 +188,21 @@ typedef struct {
} ZSTD_compressedBlockState_t;
typedef struct {
- BYTE const* nextSrc; /* next block here to continue on current prefix */
- BYTE const* base; /* All regular indexes relative to this position */
- BYTE const* dictBase; /* extDict indexes relative to this position */
- U32 dictLimit; /* below that point, need extDict */
- U32 lowLimit; /* below that point, no more valid data */
+ BYTE const* nextSrc; /* next block here to continue on current prefix */
+ BYTE const* base; /* All regular indexes relative to this position */
+ BYTE const* dictBase; /* extDict indexes relative to this position */
+ U32 dictLimit; /* below that point, need extDict */
+ U32 lowLimit; /* below that point, no more valid data */
+ U32 nbOverflowCorrections; /* Number of times overflow correction has run since
+ * ZSTD_window_init(). Useful for debugging coredumps
+ * and for ZSTD_WINDOW_OVERFLOW_CORRECT_FREQUENTLY.
+ */
} ZSTD_window_t;
typedef struct ZSTD_matchState_t ZSTD_matchState_t;
+
+#define ZSTD_ROW_HASH_CACHE_SIZE 8 /* Size of prefetching hash cache for row-based matchfinder */
+
struct ZSTD_matchState_t {
ZSTD_window_t window; /* State for window round buffer management */
U32 loadedDictEnd; /* index of end of dictionary, within context's referential.
@@ -160,9 +214,17 @@ struct ZSTD_matchState_t {
*/
U32 nextToUpdate; /* index from which to continue table update */
U32 hashLog3; /* dispatch table for matches of len==3 : larger == faster, more memory */
+
+ U32 rowHashLog; /* For row-based matchfinder: Hashlog based on nb of rows in the hashTable.*/
+ U16* tagTable; /* For row-based matchFinder: A row-based table containing the hashes and head index. */
+ U32 hashCache[ZSTD_ROW_HASH_CACHE_SIZE]; /* For row-based matchFinder: a cache of hashes to improve speed */
+
U32* hashTable;
U32* hashTable3;
U32* chainTable;
+
+ U32 forceNonContiguous; /* Non-zero if we should force non-contiguous load for the next window update. */
+
int dedicatedDictSearch; /* Indicates whether this matchState is using the
* dedicated dictionary search structure.
*/
@@ -184,12 +246,21 @@ typedef struct {
} ldmEntry_t;
typedef struct {
+ BYTE const* split;
+ U32 hash;
+ U32 checksum;
+ ldmEntry_t* bucket;
+} ldmMatchCandidate_t;
+
+#define LDM_BATCH_SIZE 64
+
+typedef struct {
ZSTD_window_t window; /* State for the window round buffer management */
ldmEntry_t* hashTable;
U32 loadedDictEnd;
BYTE* bucketOffsets; /* Next position in bucket to insert entry */
- U64 hashPower; /* Used to compute the rolling hash.
- * Depends on ldmParams.minMatchLength */
+ size_t splitIndices[LDM_BATCH_SIZE];
+ ldmMatchCandidate_t matchCandidates[LDM_BATCH_SIZE];
} ldmState_t;
typedef struct {
@@ -246,6 +317,15 @@ struct ZSTD_CCtx_params_s {
ZSTD_sequenceFormat_e blockDelimiters;
int validateSequences;
+ /* Block splitting */
+ int splitBlocks;
+
+ /* Param for deciding whether to use row-based matchfinder */
+ ZSTD_useRowMatchFinderMode_e useRowMatchFinder;
+
+ /* Always load a dictionary in ext-dict mode (not prefix mode)? */
+ int deterministicRefPrefix;
+
/* Internal use, for createCCtxParams() and freeCCtxParams() only */
ZSTD_customMem customMem;
}; /* typedef'd to ZSTD_CCtx_params within "zstd.h" */
@@ -269,7 +349,9 @@ struct ZSTD_CCtx_s {
int bmi2; /* == 1 if the CPU supports BMI2 and 0 otherwise. CPU support is determined dynamically once per context lifetime. */
ZSTD_CCtx_params requestedParams;
ZSTD_CCtx_params appliedParams;
+ ZSTD_CCtx_params simpleApiParams; /* Param storage used by the simple API - not sticky. Must only be used in top-level simple API functions for storage. */
U32 dictID;
+ size_t dictContentSize;
ZSTD_cwksp workspace; /* manages buffer for dynamic allocations */
size_t blockSize;
@@ -321,6 +403,11 @@ struct ZSTD_CCtx_s {
#ifdef ZSTD_MULTITHREAD
ZSTDMT_CCtx* mtctx;
#endif
+
+ /* Tracing */
+#if ZSTD_TRACE
+ ZSTD_TraceCtx traceCtx;
+#endif
};
typedef enum { ZSTD_dtlm_fast, ZSTD_dtlm_full } ZSTD_dictTableLoadMethod_e;
@@ -355,7 +442,7 @@ typedef enum {
typedef size_t (*ZSTD_blockCompressor) (
ZSTD_matchState_t* bs, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
void const* src, size_t srcSize);
-ZSTD_blockCompressor ZSTD_selectBlockCompressor(ZSTD_strategy strat, ZSTD_dictMode_e dictMode);
+ZSTD_blockCompressor ZSTD_selectBlockCompressor(ZSTD_strategy strat, ZSTD_useRowMatchFinderMode_e rowMatchfinderMode, ZSTD_dictMode_e dictMode);
MEM_STATIC U32 ZSTD_LLcode(U32 litLength)
@@ -532,8 +619,8 @@ void ZSTD_storeSeq(seqStore_t* seqStorePtr, size_t litLength, const BYTE* litera
/* literal Length */
if (litLength>0xFFFF) {
- assert(seqStorePtr->longLengthID == 0); /* there can only be a single long length */
- seqStorePtr->longLengthID = 1;
+ assert(seqStorePtr->longLengthType == ZSTD_llt_none); /* there can only be a single long length */
+ seqStorePtr->longLengthType = ZSTD_llt_literalLength;
seqStorePtr->longLengthPos = (U32)(seqStorePtr->sequences - seqStorePtr->sequencesStart);
}
seqStorePtr->sequences[0].litLength = (U16)litLength;
@@ -543,8 +630,8 @@ void ZSTD_storeSeq(seqStore_t* seqStorePtr, size_t litLength, const BYTE* litera
/* match Length */
if (mlBase>0xFFFF) {
- assert(seqStorePtr->longLengthID == 0); /* there can only be a single long length */
- seqStorePtr->longLengthID = 2;
+ assert(seqStorePtr->longLengthType == ZSTD_llt_none); /* there can only be a single long length */
+ seqStorePtr->longLengthType = ZSTD_llt_matchLength;
seqStorePtr->longLengthPos = (U32)(seqStorePtr->sequences - seqStorePtr->sequencesStart);
}
seqStorePtr->sequences[0].matchLength = (U16)mlBase;
@@ -795,6 +882,13 @@ MEM_STATIC void ZSTD_window_clear(ZSTD_window_t* window)
window->dictLimit = end;
}
+MEM_STATIC U32 ZSTD_window_isEmpty(ZSTD_window_t const window)
+{
+ return window.dictLimit == 1 &&
+ window.lowLimit == 1 &&
+ (window.nextSrc - window.base) == 1;
+}
+
/**
* ZSTD_window_hasExtDict():
* Returns non-zero if the window has a non-empty extDict.
@@ -818,15 +912,69 @@ MEM_STATIC ZSTD_dictMode_e ZSTD_matchState_dictMode(const ZSTD_matchState_t *ms)
ZSTD_noDict;
}
+/* Defining this macro to non-zero tells zstd to run the overflow correction
+ * code much more frequently. This is very inefficient, and should only be
+ * used for tests and fuzzers.
+ */
+#ifndef ZSTD_WINDOW_OVERFLOW_CORRECT_FREQUENTLY
+# ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
+# define ZSTD_WINDOW_OVERFLOW_CORRECT_FREQUENTLY 1
+# else
+# define ZSTD_WINDOW_OVERFLOW_CORRECT_FREQUENTLY 0
+# endif
+#endif
+
+/**
+ * ZSTD_window_canOverflowCorrect():
+ * Returns non-zero if the indices are large enough for overflow correction
+ * to work correctly without impacting compression ratio.
+ */
+MEM_STATIC U32 ZSTD_window_canOverflowCorrect(ZSTD_window_t const window,
+ U32 cycleLog,
+ U32 maxDist,
+ U32 loadedDictEnd,
+ void const* src)
+{
+ U32 const cycleSize = 1u << cycleLog;
+ U32 const curr = (U32)((BYTE const*)src - window.base);
+ U32 const minIndexToOverflowCorrect = cycleSize + MAX(maxDist, cycleSize);
+
+ /* Adjust the min index to backoff the overflow correction frequency,
+ * so we don't waste too much CPU in overflow correction. If this
+ * computation overflows we don't really care, we just need to make
+ * sure it is at least minIndexToOverflowCorrect.
+ */
+ U32 const adjustment = window.nbOverflowCorrections + 1;
+ U32 const adjustedIndex = MAX(minIndexToOverflowCorrect * adjustment,
+ minIndexToOverflowCorrect);
+ U32 const indexLargeEnough = curr > adjustedIndex;
+
+ /* Only overflow correct early if the dictionary is invalidated already,
+ * so we don't hurt compression ratio.
+ */
+ U32 const dictionaryInvalidated = curr > maxDist + loadedDictEnd;
+
+ return indexLargeEnough && dictionaryInvalidated;
+}
+
/**
* ZSTD_window_needOverflowCorrection():
* Returns non-zero if the indices are getting too large and need overflow
* protection.
*/
MEM_STATIC U32 ZSTD_window_needOverflowCorrection(ZSTD_window_t const window,
+ U32 cycleLog,
+ U32 maxDist,
+ U32 loadedDictEnd,
+ void const* src,
void const* srcEnd)
{
U32 const curr = (U32)((BYTE const*)srcEnd - window.base);
+ if (ZSTD_WINDOW_OVERFLOW_CORRECT_FREQUENTLY) {
+ if (ZSTD_window_canOverflowCorrect(window, cycleLog, maxDist, loadedDictEnd, src)) {
+ return 1;
+ }
+ }
return curr > ZSTD_CURRENT_MAX;
}
@@ -838,7 +986,6 @@ MEM_STATIC U32 ZSTD_window_needOverflowCorrection(ZSTD_window_t const window,
*
* The least significant cycleLog bits of the indices must remain the same,
* which may be 0. Every index up to maxDist in the past must be valid.
- * NOTE: (maxDist & cycleMask) must be zero.
*/
MEM_STATIC U32 ZSTD_window_correctOverflow(ZSTD_window_t* window, U32 cycleLog,
U32 maxDist, void const* src)
@@ -862,17 +1009,25 @@ MEM_STATIC U32 ZSTD_window_correctOverflow(ZSTD_window_t* window, U32 cycleLog,
* 3. (cctx->lowLimit + 1<<windowLog) < 1<<32:
* windowLog <= 31 ==> 3<<29 + 1<<windowLog < 7<<29 < 1<<32.
*/
- U32 const cycleMask = (1U << cycleLog) - 1;
+ U32 const cycleSize = 1u << cycleLog;
+ U32 const cycleMask = cycleSize - 1;
U32 const curr = (U32)((BYTE const*)src - window->base);
U32 const currentCycle0 = curr & cycleMask;
/* Exclude zero so that newCurrent - maxDist >= 1. */
- U32 const currentCycle1 = currentCycle0 == 0 ? (1U << cycleLog) : currentCycle0;
- U32 const newCurrent = currentCycle1 + maxDist;
+ U32 const currentCycle1 = currentCycle0 == 0 ? cycleSize : currentCycle0;
+ U32 const newCurrent = currentCycle1 + MAX(maxDist, cycleSize);
U32 const correction = curr - newCurrent;
- assert((maxDist & cycleMask) == 0);
+ /* maxDist must be a power of two so that:
+ * (newCurrent & cycleMask) == (curr & cycleMask)
+ * This is required to not corrupt the chains / binary tree.
+ */
+ assert((maxDist & (maxDist - 1)) == 0);
+ assert((curr & cycleMask) == (newCurrent & cycleMask));
assert(curr > newCurrent);
- /* Loose bound, should be around 1<<29 (see above) */
- assert(correction > 1<<28);
+ if (!ZSTD_WINDOW_OVERFLOW_CORRECT_FREQUENTLY) {
+ /* Loose bound, should be around 1<<29 (see above) */
+ assert(correction > 1<<28);
+ }
window->base += correction;
window->dictBase += correction;
@@ -888,6 +1043,8 @@ MEM_STATIC U32 ZSTD_window_correctOverflow(ZSTD_window_t* window, U32 cycleLog,
assert(window->lowLimit <= newCurrent);
assert(window->dictLimit <= newCurrent);
+ ++window->nbOverflowCorrections;
+
DEBUGLOG(4, "Correction of 0x%x bytes to lowLimit=0x%x", correction,
window->lowLimit);
return correction;
@@ -997,6 +1154,7 @@ MEM_STATIC void ZSTD_window_init(ZSTD_window_t* window) {
window->dictLimit = 1; /* start from 1, so that 1st position is valid */
window->lowLimit = 1; /* it ensures first and later CCtx usages compress the same */
window->nextSrc = window->base + 1; /* see issue #1241 */
+ window->nbOverflowCorrections = 0;
}
/**
@@ -1007,7 +1165,8 @@ MEM_STATIC void ZSTD_window_init(ZSTD_window_t* window) {
* Returns non-zero if the segment is contiguous.
*/
MEM_STATIC U32 ZSTD_window_update(ZSTD_window_t* window,
- void const* src, size_t srcSize)
+ void const* src, size_t srcSize,
+ int forceNonContiguous)
{
BYTE const* const ip = (BYTE const*)src;
U32 contiguous = 1;
@@ -1017,7 +1176,7 @@ MEM_STATIC U32 ZSTD_window_update(ZSTD_window_t* window,
assert(window->base != NULL);
assert(window->dictBase != NULL);
/* Check if blocks follow each other */
- if (src != window->nextSrc) {
+ if (src != window->nextSrc || forceNonContiguous) {
/* not contiguous */
size_t const distanceFromBase = (size_t)(window->nextSrc - window->base);
DEBUGLOG(5, "Non contiguous blocks, new segment starts at %u", window->dictLimit);
@@ -1200,4 +1359,9 @@ size_t ZSTD_referenceExternalSequences(ZSTD_CCtx* cctx, rawSeq* seq, size_t nbSe
* condition for correct operation : hashLog > 1 */
U32 ZSTD_cycleLog(U32 hashLog, ZSTD_strategy strat);
+/** ZSTD_CCtx_trace() :
+ * Trace the end of a compression call.
+ */
+void ZSTD_CCtx_trace(ZSTD_CCtx* cctx, size_t extraCSize);
+
#endif /* ZSTD_COMPRESS_H */
diff --git a/thirdparty/zstd/compress/zstd_compress_literals.c b/thirdparty/zstd/compress/zstd_compress_literals.c
index 6dd1c1447a..008337bb1b 100644
--- a/thirdparty/zstd/compress/zstd_compress_literals.c
+++ b/thirdparty/zstd/compress/zstd_compress_literals.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -15,7 +15,7 @@
size_t ZSTD_noCompressLiterals (void* dst, size_t dstCapacity, const void* src, size_t srcSize)
{
- BYTE* const ostart = (BYTE* const)dst;
+ BYTE* const ostart = (BYTE*)dst;
U32 const flSize = 1 + (srcSize>31) + (srcSize>4095);
RETURN_ERROR_IF(srcSize + flSize > dstCapacity, dstSize_tooSmall, "");
@@ -42,7 +42,7 @@ size_t ZSTD_noCompressLiterals (void* dst, size_t dstCapacity, const void* src,
size_t ZSTD_compressRleLiteralsBlock (void* dst, size_t dstCapacity, const void* src, size_t srcSize)
{
- BYTE* const ostart = (BYTE* const)dst;
+ BYTE* const ostart = (BYTE*)dst;
U32 const flSize = 1 + (srcSize>31) + (srcSize>4095);
(void)dstCapacity; /* dstCapacity already guaranteed to be >=4, hence large enough */
@@ -117,7 +117,7 @@ size_t ZSTD_compressLiterals (ZSTD_hufCTables_t const* prevHuf,
}
}
- if ((cLitSize==0) | (cLitSize >= srcSize - minGain) | ERR_isError(cLitSize)) {
+ if ((cLitSize==0) || (cLitSize >= srcSize - minGain) || ERR_isError(cLitSize)) {
ZSTD_memcpy(nextHuf, prevHuf, sizeof(*prevHuf));
return ZSTD_noCompressLiterals(dst, dstCapacity, src, srcSize);
}
diff --git a/thirdparty/zstd/compress/zstd_compress_literals.h b/thirdparty/zstd/compress/zstd_compress_literals.h
index 8b08705743..9904c0cd30 100644
--- a/thirdparty/zstd/compress/zstd_compress_literals.h
+++ b/thirdparty/zstd/compress/zstd_compress_literals.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
diff --git a/thirdparty/zstd/compress/zstd_compress_sequences.c b/thirdparty/zstd/compress/zstd_compress_sequences.c
index be30c08c6b..611eabdcbb 100644
--- a/thirdparty/zstd/compress/zstd_compress_sequences.c
+++ b/thirdparty/zstd/compress/zstd_compress_sequences.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -85,6 +85,8 @@ static size_t ZSTD_entropyCost(unsigned const* count, unsigned const max, size_t
{
unsigned cost = 0;
unsigned s;
+
+ assert(total > 0);
for (s = 0; s <= max; ++s) {
unsigned norm = (unsigned)((256 * count[s]) / total);
if (count[s] != 0 && norm == 0)
@@ -232,6 +234,11 @@ ZSTD_selectEncodingType(
return set_compressed;
}
+typedef struct {
+ S16 norm[MaxSeq + 1];
+ U32 wksp[FSE_BUILD_CTABLE_WORKSPACE_SIZE_U32(MaxSeq, MaxFSELog)];
+} ZSTD_BuildCTableWksp;
+
size_t
ZSTD_buildCTable(void* dst, size_t dstCapacity,
FSE_CTable* nextCTable, U32 FSELog, symbolEncodingType_e type,
@@ -258,7 +265,7 @@ ZSTD_buildCTable(void* dst, size_t dstCapacity,
FORWARD_IF_ERROR(FSE_buildCTable_wksp(nextCTable, defaultNorm, defaultMax, defaultNormLog, entropyWorkspace, entropyWorkspaceSize), ""); /* note : could be pre-calculated */
return 0;
case set_compressed: {
- S16 norm[MaxSeq + 1];
+ ZSTD_BuildCTableWksp* wksp = (ZSTD_BuildCTableWksp*)entropyWorkspace;
size_t nbSeq_1 = nbSeq;
const U32 tableLog = FSE_optimalTableLog(FSELog, nbSeq, max);
if (count[codeTable[nbSeq-1]] > 1) {
@@ -266,11 +273,12 @@ ZSTD_buildCTable(void* dst, size_t dstCapacity,
nbSeq_1--;
}
assert(nbSeq_1 > 1);
- assert(entropyWorkspaceSize >= FSE_BUILD_CTABLE_WORKSPACE_SIZE(MaxSeq, MaxFSELog));
- FORWARD_IF_ERROR(FSE_normalizeCount(norm, tableLog, count, nbSeq_1, max, ZSTD_useLowProbCount(nbSeq_1)), "");
- { size_t const NCountSize = FSE_writeNCount(op, oend - op, norm, max, tableLog); /* overflow protected */
+ assert(entropyWorkspaceSize >= sizeof(ZSTD_BuildCTableWksp));
+ (void)entropyWorkspaceSize;
+ FORWARD_IF_ERROR(FSE_normalizeCount(wksp->norm, tableLog, count, nbSeq_1, max, ZSTD_useLowProbCount(nbSeq_1)), "");
+ { size_t const NCountSize = FSE_writeNCount(op, oend - op, wksp->norm, max, tableLog); /* overflow protected */
FORWARD_IF_ERROR(NCountSize, "FSE_writeNCount failed");
- FORWARD_IF_ERROR(FSE_buildCTable_wksp(nextCTable, norm, max, tableLog, entropyWorkspace, entropyWorkspaceSize), "");
+ FORWARD_IF_ERROR(FSE_buildCTable_wksp(nextCTable, wksp->norm, max, tableLog, wksp->wksp, sizeof(wksp->wksp)), "");
return NCountSize;
}
}
diff --git a/thirdparty/zstd/compress/zstd_compress_sequences.h b/thirdparty/zstd/compress/zstd_compress_sequences.h
index 68c6f9a5ac..7991364c2f 100644
--- a/thirdparty/zstd/compress/zstd_compress_sequences.h
+++ b/thirdparty/zstd/compress/zstd_compress_sequences.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
diff --git a/thirdparty/zstd/compress/zstd_compress_superblock.c b/thirdparty/zstd/compress/zstd_compress_superblock.c
index e23e619eef..e4e45069bc 100644
--- a/thirdparty/zstd/compress/zstd_compress_superblock.c
+++ b/thirdparty/zstd/compress/zstd_compress_superblock.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -15,288 +15,10 @@
#include "../common/zstd_internal.h" /* ZSTD_getSequenceLength */
#include "hist.h" /* HIST_countFast_wksp */
-#include "zstd_compress_internal.h"
+#include "zstd_compress_internal.h" /* ZSTD_[huf|fse|entropy]CTablesMetadata_t */
#include "zstd_compress_sequences.h"
#include "zstd_compress_literals.h"
-/*-*************************************
-* Superblock entropy buffer structs
-***************************************/
-/** ZSTD_hufCTablesMetadata_t :
- * Stores Literals Block Type for a super-block in hType, and
- * huffman tree description in hufDesBuffer.
- * hufDesSize refers to the size of huffman tree description in bytes.
- * This metadata is populated in ZSTD_buildSuperBlockEntropy_literal() */
-typedef struct {
- symbolEncodingType_e hType;
- BYTE hufDesBuffer[ZSTD_MAX_HUF_HEADER_SIZE];
- size_t hufDesSize;
-} ZSTD_hufCTablesMetadata_t;
-
-/** ZSTD_fseCTablesMetadata_t :
- * Stores symbol compression modes for a super-block in {ll, ol, ml}Type, and
- * fse tables in fseTablesBuffer.
- * fseTablesSize refers to the size of fse tables in bytes.
- * This metadata is populated in ZSTD_buildSuperBlockEntropy_sequences() */
-typedef struct {
- symbolEncodingType_e llType;
- symbolEncodingType_e ofType;
- symbolEncodingType_e mlType;
- BYTE fseTablesBuffer[ZSTD_MAX_FSE_HEADERS_SIZE];
- size_t fseTablesSize;
- size_t lastCountSize; /* This is to account for bug in 1.3.4. More detail in ZSTD_compressSubBlock_sequences() */
-} ZSTD_fseCTablesMetadata_t;
-
-typedef struct {
- ZSTD_hufCTablesMetadata_t hufMetadata;
- ZSTD_fseCTablesMetadata_t fseMetadata;
-} ZSTD_entropyCTablesMetadata_t;
-
-
-/** ZSTD_buildSuperBlockEntropy_literal() :
- * Builds entropy for the super-block literals.
- * Stores literals block type (raw, rle, compressed, repeat) and
- * huffman description table to hufMetadata.
- * @return : size of huffman description table or error code */
-static size_t ZSTD_buildSuperBlockEntropy_literal(void* const src, size_t srcSize,
- const ZSTD_hufCTables_t* prevHuf,
- ZSTD_hufCTables_t* nextHuf,
- ZSTD_hufCTablesMetadata_t* hufMetadata,
- const int disableLiteralsCompression,
- void* workspace, size_t wkspSize)
-{
- BYTE* const wkspStart = (BYTE*)workspace;
- BYTE* const wkspEnd = wkspStart + wkspSize;
- BYTE* const countWkspStart = wkspStart;
- unsigned* const countWksp = (unsigned*)workspace;
- const size_t countWkspSize = (HUF_SYMBOLVALUE_MAX + 1) * sizeof(unsigned);
- BYTE* const nodeWksp = countWkspStart + countWkspSize;
- const size_t nodeWkspSize = wkspEnd-nodeWksp;
- unsigned maxSymbolValue = 255;
- unsigned huffLog = HUF_TABLELOG_DEFAULT;
- HUF_repeat repeat = prevHuf->repeatMode;
-
- DEBUGLOG(5, "ZSTD_buildSuperBlockEntropy_literal (srcSize=%zu)", srcSize);
-
- /* Prepare nextEntropy assuming reusing the existing table */
- ZSTD_memcpy(nextHuf, prevHuf, sizeof(*prevHuf));
-
- if (disableLiteralsCompression) {
- DEBUGLOG(5, "set_basic - disabled");
- hufMetadata->hType = set_basic;
- return 0;
- }
-
- /* small ? don't even attempt compression (speed opt) */
-# define COMPRESS_LITERALS_SIZE_MIN 63
- { size_t const minLitSize = (prevHuf->repeatMode == HUF_repeat_valid) ? 6 : COMPRESS_LITERALS_SIZE_MIN;
- if (srcSize <= minLitSize) {
- DEBUGLOG(5, "set_basic - too small");
- hufMetadata->hType = set_basic;
- return 0;
- }
- }
-
- /* Scan input and build symbol stats */
- { size_t const largest = HIST_count_wksp (countWksp, &maxSymbolValue, (const BYTE*)src, srcSize, workspace, wkspSize);
- FORWARD_IF_ERROR(largest, "HIST_count_wksp failed");
- if (largest == srcSize) {
- DEBUGLOG(5, "set_rle");
- hufMetadata->hType = set_rle;
- return 0;
- }
- if (largest <= (srcSize >> 7)+4) {
- DEBUGLOG(5, "set_basic - no gain");
- hufMetadata->hType = set_basic;
- return 0;
- }
- }
-
- /* Validate the previous Huffman table */
- if (repeat == HUF_repeat_check && !HUF_validateCTable((HUF_CElt const*)prevHuf->CTable, countWksp, maxSymbolValue)) {
- repeat = HUF_repeat_none;
- }
-
- /* Build Huffman Tree */
- ZSTD_memset(nextHuf->CTable, 0, sizeof(nextHuf->CTable));
- huffLog = HUF_optimalTableLog(huffLog, srcSize, maxSymbolValue);
- { size_t const maxBits = HUF_buildCTable_wksp((HUF_CElt*)nextHuf->CTable, countWksp,
- maxSymbolValue, huffLog,
- nodeWksp, nodeWkspSize);
- FORWARD_IF_ERROR(maxBits, "HUF_buildCTable_wksp");
- huffLog = (U32)maxBits;
- { /* Build and write the CTable */
- size_t const newCSize = HUF_estimateCompressedSize(
- (HUF_CElt*)nextHuf->CTable, countWksp, maxSymbolValue);
- size_t const hSize = HUF_writeCTable(
- hufMetadata->hufDesBuffer, sizeof(hufMetadata->hufDesBuffer),
- (HUF_CElt*)nextHuf->CTable, maxSymbolValue, huffLog);
- /* Check against repeating the previous CTable */
- if (repeat != HUF_repeat_none) {
- size_t const oldCSize = HUF_estimateCompressedSize(
- (HUF_CElt const*)prevHuf->CTable, countWksp, maxSymbolValue);
- if (oldCSize < srcSize && (oldCSize <= hSize + newCSize || hSize + 12 >= srcSize)) {
- DEBUGLOG(5, "set_repeat - smaller");
- ZSTD_memcpy(nextHuf, prevHuf, sizeof(*prevHuf));
- hufMetadata->hType = set_repeat;
- return 0;
- }
- }
- if (newCSize + hSize >= srcSize) {
- DEBUGLOG(5, "set_basic - no gains");
- ZSTD_memcpy(nextHuf, prevHuf, sizeof(*prevHuf));
- hufMetadata->hType = set_basic;
- return 0;
- }
- DEBUGLOG(5, "set_compressed (hSize=%u)", (U32)hSize);
- hufMetadata->hType = set_compressed;
- nextHuf->repeatMode = HUF_repeat_check;
- return hSize;
- }
- }
-}
-
-/** ZSTD_buildSuperBlockEntropy_sequences() :
- * Builds entropy for the super-block sequences.
- * Stores symbol compression modes and fse table to fseMetadata.
- * @return : size of fse tables or error code */
-static size_t ZSTD_buildSuperBlockEntropy_sequences(seqStore_t* seqStorePtr,
- const ZSTD_fseCTables_t* prevEntropy,
- ZSTD_fseCTables_t* nextEntropy,
- const ZSTD_CCtx_params* cctxParams,
- ZSTD_fseCTablesMetadata_t* fseMetadata,
- void* workspace, size_t wkspSize)
-{
- BYTE* const wkspStart = (BYTE*)workspace;
- BYTE* const wkspEnd = wkspStart + wkspSize;
- BYTE* const countWkspStart = wkspStart;
- unsigned* const countWksp = (unsigned*)workspace;
- const size_t countWkspSize = (MaxSeq + 1) * sizeof(unsigned);
- BYTE* const cTableWksp = countWkspStart + countWkspSize;
- const size_t cTableWkspSize = wkspEnd-cTableWksp;
- ZSTD_strategy const strategy = cctxParams->cParams.strategy;
- FSE_CTable* CTable_LitLength = nextEntropy->litlengthCTable;
- FSE_CTable* CTable_OffsetBits = nextEntropy->offcodeCTable;
- FSE_CTable* CTable_MatchLength = nextEntropy->matchlengthCTable;
- const BYTE* const ofCodeTable = seqStorePtr->ofCode;
- const BYTE* const llCodeTable = seqStorePtr->llCode;
- const BYTE* const mlCodeTable = seqStorePtr->mlCode;
- size_t const nbSeq = seqStorePtr->sequences - seqStorePtr->sequencesStart;
- BYTE* const ostart = fseMetadata->fseTablesBuffer;
- BYTE* const oend = ostart + sizeof(fseMetadata->fseTablesBuffer);
- BYTE* op = ostart;
-
- assert(cTableWkspSize >= (1 << MaxFSELog) * sizeof(FSE_FUNCTION_TYPE));
- DEBUGLOG(5, "ZSTD_buildSuperBlockEntropy_sequences (nbSeq=%zu)", nbSeq);
- ZSTD_memset(workspace, 0, wkspSize);
-
- fseMetadata->lastCountSize = 0;
- /* convert length/distances into codes */
- ZSTD_seqToCodes(seqStorePtr);
- /* build CTable for Literal Lengths */
- { U32 LLtype;
- unsigned max = MaxLL;
- size_t const mostFrequent = HIST_countFast_wksp(countWksp, &max, llCodeTable, nbSeq, workspace, wkspSize); /* can't fail */
- DEBUGLOG(5, "Building LL table");
- nextEntropy->litlength_repeatMode = prevEntropy->litlength_repeatMode;
- LLtype = ZSTD_selectEncodingType(&nextEntropy->litlength_repeatMode,
- countWksp, max, mostFrequent, nbSeq,
- LLFSELog, prevEntropy->litlengthCTable,
- LL_defaultNorm, LL_defaultNormLog,
- ZSTD_defaultAllowed, strategy);
- assert(set_basic < set_compressed && set_rle < set_compressed);
- assert(!(LLtype < set_compressed && nextEntropy->litlength_repeatMode != FSE_repeat_none)); /* We don't copy tables */
- { size_t const countSize = ZSTD_buildCTable(op, oend - op, CTable_LitLength, LLFSELog, (symbolEncodingType_e)LLtype,
- countWksp, max, llCodeTable, nbSeq, LL_defaultNorm, LL_defaultNormLog, MaxLL,
- prevEntropy->litlengthCTable, sizeof(prevEntropy->litlengthCTable),
- cTableWksp, cTableWkspSize);
- FORWARD_IF_ERROR(countSize, "ZSTD_buildCTable for LitLens failed");
- if (LLtype == set_compressed)
- fseMetadata->lastCountSize = countSize;
- op += countSize;
- fseMetadata->llType = (symbolEncodingType_e) LLtype;
- } }
- /* build CTable for Offsets */
- { U32 Offtype;
- unsigned max = MaxOff;
- size_t const mostFrequent = HIST_countFast_wksp(countWksp, &max, ofCodeTable, nbSeq, workspace, wkspSize); /* can't fail */
- /* We can only use the basic table if max <= DefaultMaxOff, otherwise the offsets are too large */
- ZSTD_defaultPolicy_e const defaultPolicy = (max <= DefaultMaxOff) ? ZSTD_defaultAllowed : ZSTD_defaultDisallowed;
- DEBUGLOG(5, "Building OF table");
- nextEntropy->offcode_repeatMode = prevEntropy->offcode_repeatMode;
- Offtype = ZSTD_selectEncodingType(&nextEntropy->offcode_repeatMode,
- countWksp, max, mostFrequent, nbSeq,
- OffFSELog, prevEntropy->offcodeCTable,
- OF_defaultNorm, OF_defaultNormLog,
- defaultPolicy, strategy);
- assert(!(Offtype < set_compressed && nextEntropy->offcode_repeatMode != FSE_repeat_none)); /* We don't copy tables */
- { size_t const countSize = ZSTD_buildCTable(op, oend - op, CTable_OffsetBits, OffFSELog, (symbolEncodingType_e)Offtype,
- countWksp, max, ofCodeTable, nbSeq, OF_defaultNorm, OF_defaultNormLog, DefaultMaxOff,
- prevEntropy->offcodeCTable, sizeof(prevEntropy->offcodeCTable),
- cTableWksp, cTableWkspSize);
- FORWARD_IF_ERROR(countSize, "ZSTD_buildCTable for Offsets failed");
- if (Offtype == set_compressed)
- fseMetadata->lastCountSize = countSize;
- op += countSize;
- fseMetadata->ofType = (symbolEncodingType_e) Offtype;
- } }
- /* build CTable for MatchLengths */
- { U32 MLtype;
- unsigned max = MaxML;
- size_t const mostFrequent = HIST_countFast_wksp(countWksp, &max, mlCodeTable, nbSeq, workspace, wkspSize); /* can't fail */
- DEBUGLOG(5, "Building ML table (remaining space : %i)", (int)(oend-op));
- nextEntropy->matchlength_repeatMode = prevEntropy->matchlength_repeatMode;
- MLtype = ZSTD_selectEncodingType(&nextEntropy->matchlength_repeatMode,
- countWksp, max, mostFrequent, nbSeq,
- MLFSELog, prevEntropy->matchlengthCTable,
- ML_defaultNorm, ML_defaultNormLog,
- ZSTD_defaultAllowed, strategy);
- assert(!(MLtype < set_compressed && nextEntropy->matchlength_repeatMode != FSE_repeat_none)); /* We don't copy tables */
- { size_t const countSize = ZSTD_buildCTable(op, oend - op, CTable_MatchLength, MLFSELog, (symbolEncodingType_e)MLtype,
- countWksp, max, mlCodeTable, nbSeq, ML_defaultNorm, ML_defaultNormLog, MaxML,
- prevEntropy->matchlengthCTable, sizeof(prevEntropy->matchlengthCTable),
- cTableWksp, cTableWkspSize);
- FORWARD_IF_ERROR(countSize, "ZSTD_buildCTable for MatchLengths failed");
- if (MLtype == set_compressed)
- fseMetadata->lastCountSize = countSize;
- op += countSize;
- fseMetadata->mlType = (symbolEncodingType_e) MLtype;
- } }
- assert((size_t) (op-ostart) <= sizeof(fseMetadata->fseTablesBuffer));
- return op-ostart;
-}
-
-
-/** ZSTD_buildSuperBlockEntropy() :
- * Builds entropy for the super-block.
- * @return : 0 on success or error code */
-static size_t
-ZSTD_buildSuperBlockEntropy(seqStore_t* seqStorePtr,
- const ZSTD_entropyCTables_t* prevEntropy,
- ZSTD_entropyCTables_t* nextEntropy,
- const ZSTD_CCtx_params* cctxParams,
- ZSTD_entropyCTablesMetadata_t* entropyMetadata,
- void* workspace, size_t wkspSize)
-{
- size_t const litSize = seqStorePtr->lit - seqStorePtr->litStart;
- DEBUGLOG(5, "ZSTD_buildSuperBlockEntropy");
- entropyMetadata->hufMetadata.hufDesSize =
- ZSTD_buildSuperBlockEntropy_literal(seqStorePtr->litStart, litSize,
- &prevEntropy->huf, &nextEntropy->huf,
- &entropyMetadata->hufMetadata,
- ZSTD_disableLiteralsCompression(cctxParams),
- workspace, wkspSize);
- FORWARD_IF_ERROR(entropyMetadata->hufMetadata.hufDesSize, "ZSTD_buildSuperBlockEntropy_literal failed");
- entropyMetadata->fseMetadata.fseTablesSize =
- ZSTD_buildSuperBlockEntropy_sequences(seqStorePtr,
- &prevEntropy->fse, &nextEntropy->fse,
- cctxParams,
- &entropyMetadata->fseMetadata,
- workspace, wkspSize);
- FORWARD_IF_ERROR(entropyMetadata->fseMetadata.fseTablesSize, "ZSTD_buildSuperBlockEntropy_sequences failed");
- return 0;
-}
-
/** ZSTD_compressSubBlock_literal() :
* Compresses literals section for a sub-block.
* When we have to write the Huffman table we will sometimes choose a header
@@ -304,7 +26,7 @@ ZSTD_buildSuperBlockEntropy(seqStore_t* seqStorePtr,
* before we know the table size + compressed size, so we have a bound on the
* table size. If we guessed incorrectly, we fall back to uncompressed literals.
*
- * We write the header when writeEntropy=1 and set entropyWrriten=1 when we succeeded
+ * We write the header when writeEntropy=1 and set entropyWritten=1 when we succeeded
* in writing the header, otherwise it is set to 0.
*
* hufMetadata->hType has literals block type info.
@@ -643,8 +365,9 @@ static size_t ZSTD_estimateSubBlockSize_sequences(const BYTE* ofCodeTable,
void* workspace, size_t wkspSize,
int writeEntropy)
{
- size_t sequencesSectionHeaderSize = 3; /* Use hard coded size of 3 bytes */
+ size_t const sequencesSectionHeaderSize = 3; /* Use hard coded size of 3 bytes */
size_t cSeqSizeEstimate = 0;
+ if (nbSeq == 0) return sequencesSectionHeaderSize;
cSeqSizeEstimate += ZSTD_estimateSubBlockSize_symbolType(fseMetadata->ofType, ofCodeTable, MaxOff,
nbSeq, fseTables->offcodeCTable, NULL,
OF_defaultNorm, OF_defaultNormLog, DefaultMaxOff,
@@ -830,7 +553,7 @@ size_t ZSTD_compressSuperBlock(ZSTD_CCtx* zc,
unsigned lastBlock) {
ZSTD_entropyCTablesMetadata_t entropyMetadata;
- FORWARD_IF_ERROR(ZSTD_buildSuperBlockEntropy(&zc->seqStore,
+ FORWARD_IF_ERROR(ZSTD_buildBlockEntropyStats(&zc->seqStore,
&zc->blockState.prevCBlock->entropy,
&zc->blockState.nextCBlock->entropy,
&zc->appliedParams,
diff --git a/thirdparty/zstd/compress/zstd_compress_superblock.h b/thirdparty/zstd/compress/zstd_compress_superblock.h
index 07f4cb1dc6..176f9b106f 100644
--- a/thirdparty/zstd/compress/zstd_compress_superblock.h
+++ b/thirdparty/zstd/compress/zstd_compress_superblock.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
diff --git a/thirdparty/zstd/compress/zstd_cwksp.h b/thirdparty/zstd/compress/zstd_cwksp.h
index d65170b39c..2656d26ca2 100644
--- a/thirdparty/zstd/compress/zstd_cwksp.h
+++ b/thirdparty/zstd/compress/zstd_cwksp.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -35,6 +35,10 @@ extern "C" {
#define ZSTD_CWKSP_ASAN_REDZONE_SIZE 128
#endif
+
+/* Set our tables and aligneds to align by 64 bytes */
+#define ZSTD_CWKSP_ALIGNMENT_BYTES 64
+
/*-*************************************
* Structures
***************************************/
@@ -117,10 +121,11 @@ typedef enum {
* - Tables: these are any of several different datastructures (hash tables,
* chain tables, binary trees) that all respect a common format: they are
* uint32_t arrays, all of whose values are between 0 and (nextSrc - base).
- * Their sizes depend on the cparams.
+ * Their sizes depend on the cparams. These tables are 64-byte aligned.
*
* - Aligned: these buffers are used for various purposes that require 4 byte
- * alignment, but don't require any initialization before they're used.
+ * alignment, but don't require any initialization before they're used. These
+ * buffers are each aligned to 64 bytes.
*
* - Buffers: these buffers are used for various purposes that don't require
* any alignment or initialization before they're used. This means they can
@@ -133,8 +138,7 @@ typedef enum {
*
* 1. Objects
* 2. Buffers
- * 3. Aligned
- * 4. Tables
+ * 3. Aligned/Tables
*
* Attempts to reserve objects of different types out of order will fail.
*/
@@ -187,6 +191,8 @@ MEM_STATIC size_t ZSTD_cwksp_align(size_t size, size_t const align) {
* Since tables aren't currently redzoned, you don't need to call through this
* to figure out how much space you need for the matchState tables. Everything
* else is though.
+ *
+ * Do not use for sizing aligned buffers. Instead, use ZSTD_cwksp_aligned_alloc_size().
*/
MEM_STATIC size_t ZSTD_cwksp_alloc_size(size_t size) {
if (size == 0)
@@ -198,30 +204,110 @@ MEM_STATIC size_t ZSTD_cwksp_alloc_size(size_t size) {
#endif
}
-MEM_STATIC void ZSTD_cwksp_internal_advance_phase(
+/**
+ * Returns an adjusted alloc size that is the nearest larger multiple of 64 bytes.
+ * Used to determine the number of bytes required for a given "aligned".
+ */
+MEM_STATIC size_t ZSTD_cwksp_aligned_alloc_size(size_t size) {
+ return ZSTD_cwksp_alloc_size(ZSTD_cwksp_align(size, ZSTD_CWKSP_ALIGNMENT_BYTES));
+}
+
+/**
+ * Returns the amount of additional space the cwksp must allocate
+ * for internal purposes (currently only alignment).
+ */
+MEM_STATIC size_t ZSTD_cwksp_slack_space_required(void) {
+ /* For alignment, the wksp will always allocate an additional n_1=[1, 64] bytes
+ * to align the beginning of tables section, as well as another n_2=[0, 63] bytes
+ * to align the beginning of the aligned secion.
+ *
+ * n_1 + n_2 == 64 bytes if the cwksp is freshly allocated, due to tables and
+ * aligneds being sized in multiples of 64 bytes.
+ */
+ size_t const slackSpace = ZSTD_CWKSP_ALIGNMENT_BYTES;
+ return slackSpace;
+}
+
+
+/**
+ * Return the number of additional bytes required to align a pointer to the given number of bytes.
+ * alignBytes must be a power of two.
+ */
+MEM_STATIC size_t ZSTD_cwksp_bytes_to_align_ptr(void* ptr, const size_t alignBytes) {
+ size_t const alignBytesMask = alignBytes - 1;
+ size_t const bytes = (alignBytes - ((size_t)ptr & (alignBytesMask))) & alignBytesMask;
+ assert((alignBytes & alignBytesMask) == 0);
+ assert(bytes != ZSTD_CWKSP_ALIGNMENT_BYTES);
+ return bytes;
+}
+
+/**
+ * Internal function. Do not use directly.
+ * Reserves the given number of bytes within the aligned/buffer segment of the wksp, which
+ * counts from the end of the wksp. (as opposed to the object/table segment)
+ *
+ * Returns a pointer to the beginning of that space.
+ */
+MEM_STATIC void* ZSTD_cwksp_reserve_internal_buffer_space(ZSTD_cwksp* ws, size_t const bytes) {
+ void* const alloc = (BYTE*)ws->allocStart - bytes;
+ void* const bottom = ws->tableEnd;
+ DEBUGLOG(5, "cwksp: reserving %p %zd bytes, %zd bytes remaining",
+ alloc, bytes, ZSTD_cwksp_available_space(ws) - bytes);
+ ZSTD_cwksp_assert_internal_consistency(ws);
+ assert(alloc >= bottom);
+ if (alloc < bottom) {
+ DEBUGLOG(4, "cwksp: alloc failed!");
+ ws->allocFailed = 1;
+ return NULL;
+ }
+ if (alloc < ws->tableValidEnd) {
+ ws->tableValidEnd = alloc;
+ }
+ ws->allocStart = alloc;
+ return alloc;
+}
+
+/**
+ * Moves the cwksp to the next phase, and does any necessary allocations.
+ * Returns a 0 on success, or zstd error
+ */
+MEM_STATIC size_t ZSTD_cwksp_internal_advance_phase(
ZSTD_cwksp* ws, ZSTD_cwksp_alloc_phase_e phase) {
assert(phase >= ws->phase);
if (phase > ws->phase) {
+ /* Going from allocating objects to allocating buffers */
if (ws->phase < ZSTD_cwksp_alloc_buffers &&
phase >= ZSTD_cwksp_alloc_buffers) {
ws->tableValidEnd = ws->objectEnd;
}
+
+ /* Going from allocating buffers to allocating aligneds/tables */
if (ws->phase < ZSTD_cwksp_alloc_aligned &&
phase >= ZSTD_cwksp_alloc_aligned) {
- /* If unaligned allocations down from a too-large top have left us
- * unaligned, we need to realign our alloc ptr. Technically, this
- * can consume space that is unaccounted for in the neededSpace
- * calculation. However, I believe this can only happen when the
- * workspace is too large, and specifically when it is too large
- * by a larger margin than the space that will be consumed. */
- /* TODO: cleaner, compiler warning friendly way to do this??? */
- ws->allocStart = (BYTE*)ws->allocStart - ((size_t)ws->allocStart & (sizeof(U32)-1));
- if (ws->allocStart < ws->tableValidEnd) {
- ws->tableValidEnd = ws->allocStart;
+ { /* Align the start of the "aligned" to 64 bytes. Use [1, 64] bytes. */
+ size_t const bytesToAlign =
+ ZSTD_CWKSP_ALIGNMENT_BYTES - ZSTD_cwksp_bytes_to_align_ptr(ws->allocStart, ZSTD_CWKSP_ALIGNMENT_BYTES);
+ DEBUGLOG(5, "reserving aligned alignment addtl space: %zu", bytesToAlign);
+ ZSTD_STATIC_ASSERT((ZSTD_CWKSP_ALIGNMENT_BYTES & (ZSTD_CWKSP_ALIGNMENT_BYTES - 1)) == 0); /* power of 2 */
+ RETURN_ERROR_IF(!ZSTD_cwksp_reserve_internal_buffer_space(ws, bytesToAlign),
+ memory_allocation, "aligned phase - alignment initial allocation failed!");
+ }
+ { /* Align the start of the tables to 64 bytes. Use [0, 63] bytes */
+ void* const alloc = ws->objectEnd;
+ size_t const bytesToAlign = ZSTD_cwksp_bytes_to_align_ptr(alloc, ZSTD_CWKSP_ALIGNMENT_BYTES);
+ void* const end = (BYTE*)alloc + bytesToAlign;
+ DEBUGLOG(5, "reserving table alignment addtl space: %zu", bytesToAlign);
+ RETURN_ERROR_IF(end > ws->workspaceEnd, memory_allocation,
+ "table phase - alignment initial allocation failed!");
+ ws->objectEnd = end;
+ ws->tableEnd = end;
+ ws->tableValidEnd = end;
}
}
ws->phase = phase;
+ ZSTD_cwksp_assert_internal_consistency(ws);
}
+ return 0;
}
/**
@@ -237,38 +323,25 @@ MEM_STATIC int ZSTD_cwksp_owns_buffer(const ZSTD_cwksp* ws, const void* ptr) {
MEM_STATIC void* ZSTD_cwksp_reserve_internal(
ZSTD_cwksp* ws, size_t bytes, ZSTD_cwksp_alloc_phase_e phase) {
void* alloc;
- void* bottom = ws->tableEnd;
- ZSTD_cwksp_internal_advance_phase(ws, phase);
- alloc = (BYTE *)ws->allocStart - bytes;
-
- if (bytes == 0)
+ if (ZSTD_isError(ZSTD_cwksp_internal_advance_phase(ws, phase)) || bytes == 0) {
return NULL;
+ }
#if ZSTD_ADDRESS_SANITIZER && !defined (ZSTD_ASAN_DONT_POISON_WORKSPACE)
/* over-reserve space */
- alloc = (BYTE *)alloc - 2 * ZSTD_CWKSP_ASAN_REDZONE_SIZE;
+ bytes += 2 * ZSTD_CWKSP_ASAN_REDZONE_SIZE;
#endif
- DEBUGLOG(5, "cwksp: reserving %p %zd bytes, %zd bytes remaining",
- alloc, bytes, ZSTD_cwksp_available_space(ws) - bytes);
- ZSTD_cwksp_assert_internal_consistency(ws);
- assert(alloc >= bottom);
- if (alloc < bottom) {
- DEBUGLOG(4, "cwksp: alloc failed!");
- ws->allocFailed = 1;
- return NULL;
- }
- if (alloc < ws->tableValidEnd) {
- ws->tableValidEnd = alloc;
- }
- ws->allocStart = alloc;
+ alloc = ZSTD_cwksp_reserve_internal_buffer_space(ws, bytes);
#if ZSTD_ADDRESS_SANITIZER && !defined (ZSTD_ASAN_DONT_POISON_WORKSPACE)
/* Move alloc so there's ZSTD_CWKSP_ASAN_REDZONE_SIZE unused space on
* either size. */
- alloc = (BYTE *)alloc + ZSTD_CWKSP_ASAN_REDZONE_SIZE;
- if (ws->isStatic == ZSTD_cwksp_dynamic_alloc) {
- __asan_unpoison_memory_region(alloc, bytes);
+ if (alloc) {
+ alloc = (BYTE *)alloc + ZSTD_CWKSP_ASAN_REDZONE_SIZE;
+ if (ws->isStatic == ZSTD_cwksp_dynamic_alloc) {
+ __asan_unpoison_memory_region(alloc, bytes);
+ }
}
#endif
@@ -283,28 +356,36 @@ MEM_STATIC BYTE* ZSTD_cwksp_reserve_buffer(ZSTD_cwksp* ws, size_t bytes) {
}
/**
- * Reserves and returns memory sized on and aligned on sizeof(unsigned).
+ * Reserves and returns memory sized on and aligned on ZSTD_CWKSP_ALIGNMENT_BYTES (64 bytes).
*/
MEM_STATIC void* ZSTD_cwksp_reserve_aligned(ZSTD_cwksp* ws, size_t bytes) {
- assert((bytes & (sizeof(U32)-1)) == 0);
- return ZSTD_cwksp_reserve_internal(ws, ZSTD_cwksp_align(bytes, sizeof(U32)), ZSTD_cwksp_alloc_aligned);
+ void* ptr = ZSTD_cwksp_reserve_internal(ws, ZSTD_cwksp_align(bytes, ZSTD_CWKSP_ALIGNMENT_BYTES),
+ ZSTD_cwksp_alloc_aligned);
+ assert(((size_t)ptr & (ZSTD_CWKSP_ALIGNMENT_BYTES-1))== 0);
+ return ptr;
}
/**
- * Aligned on sizeof(unsigned). These buffers have the special property that
+ * Aligned on 64 bytes. These buffers have the special property that
* their values remain constrained, allowing us to re-use them without
* memset()-ing them.
*/
MEM_STATIC void* ZSTD_cwksp_reserve_table(ZSTD_cwksp* ws, size_t bytes) {
const ZSTD_cwksp_alloc_phase_e phase = ZSTD_cwksp_alloc_aligned;
- void* alloc = ws->tableEnd;
- void* end = (BYTE *)alloc + bytes;
- void* top = ws->allocStart;
+ void* alloc;
+ void* end;
+ void* top;
+
+ if (ZSTD_isError(ZSTD_cwksp_internal_advance_phase(ws, phase))) {
+ return NULL;
+ }
+ alloc = ws->tableEnd;
+ end = (BYTE *)alloc + bytes;
+ top = ws->allocStart;
DEBUGLOG(5, "cwksp: reserving %p table %zd bytes, %zd bytes remaining",
alloc, bytes, ZSTD_cwksp_available_space(ws) - bytes);
assert((bytes & (sizeof(U32)-1)) == 0);
- ZSTD_cwksp_internal_advance_phase(ws, phase);
ZSTD_cwksp_assert_internal_consistency(ws);
assert(end <= top);
if (end > top) {
@@ -320,6 +401,8 @@ MEM_STATIC void* ZSTD_cwksp_reserve_table(ZSTD_cwksp* ws, size_t bytes) {
}
#endif
+ assert((bytes & (ZSTD_CWKSP_ALIGNMENT_BYTES-1)) == 0);
+ assert(((size_t)alloc & (ZSTD_CWKSP_ALIGNMENT_BYTES-1))== 0);
return alloc;
}
@@ -503,7 +586,7 @@ MEM_STATIC void ZSTD_cwksp_free(ZSTD_cwksp* ws, ZSTD_customMem customMem) {
/**
* Moves the management of a workspace from one cwksp to another. The src cwksp
- * is left in an invalid state (src must be re-init()'ed before its used again).
+ * is left in an invalid state (src must be re-init()'ed before it's used again).
*/
MEM_STATIC void ZSTD_cwksp_move(ZSTD_cwksp* dst, ZSTD_cwksp* src) {
*dst = *src;
@@ -527,6 +610,24 @@ MEM_STATIC int ZSTD_cwksp_reserve_failed(const ZSTD_cwksp* ws) {
* Functions Checking Free Space
***************************************/
+/* ZSTD_alignmentSpaceWithinBounds() :
+ * Returns if the estimated space needed for a wksp is within an acceptable limit of the
+ * actual amount of space used.
+ */
+MEM_STATIC int ZSTD_cwksp_estimated_space_within_bounds(const ZSTD_cwksp* const ws,
+ size_t const estimatedSpace, int resizedWorkspace) {
+ if (resizedWorkspace) {
+ /* Resized/newly allocated wksp should have exact bounds */
+ return ZSTD_cwksp_used(ws) == estimatedSpace;
+ } else {
+ /* Due to alignment, when reusing a workspace, we can actually consume 63 fewer or more bytes
+ * than estimatedSpace. See the comments in zstd_cwksp.h for details.
+ */
+ return (ZSTD_cwksp_used(ws) >= estimatedSpace - 63) && (ZSTD_cwksp_used(ws) <= estimatedSpace + 63);
+ }
+}
+
+
MEM_STATIC size_t ZSTD_cwksp_available_space(ZSTD_cwksp* ws) {
return (size_t)((BYTE*)ws->allocStart - (BYTE*)ws->tableEnd);
}
diff --git a/thirdparty/zstd/compress/zstd_double_fast.c b/thirdparty/zstd/compress/zstd_double_fast.c
index ef12a524f7..d0d3a784dd 100644
--- a/thirdparty/zstd/compress/zstd_double_fast.c
+++ b/thirdparty/zstd/compress/zstd_double_fast.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -409,7 +409,7 @@ static size_t ZSTD_compressBlock_doubleFast_extDict_generic(
hashSmall[hSmall] = hashLong[hLong] = curr; /* update hash table */
if ((((U32)((prefixStartIndex-1) - repIndex) >= 3) /* intentional underflow : ensure repIndex doesn't overlap dict + prefix */
- & (repIndex > dictStartIndex))
+ & (offset_1 < curr+1 - dictStartIndex)) /* note: we are searching at curr+1 */
&& (MEM_read32(repMatch) == MEM_read32(ip+1)) ) {
const BYTE* repMatchEnd = repIndex < prefixStartIndex ? dictEnd : iend;
mLength = ZSTD_count_2segments(ip+1+4, repMatch+4, iend, repMatchEnd, prefixStart) + 4;
@@ -477,7 +477,7 @@ static size_t ZSTD_compressBlock_doubleFast_extDict_generic(
U32 const repIndex2 = current2 - offset_2;
const BYTE* repMatch2 = repIndex2 < prefixStartIndex ? dictBase + repIndex2 : base + repIndex2;
if ( (((U32)((prefixStartIndex-1) - repIndex2) >= 3) /* intentional overflow : ensure repIndex2 doesn't overlap dict + prefix */
- & (repIndex2 > dictStartIndex))
+ & (offset_2 < current2 - dictStartIndex))
&& (MEM_read32(repMatch2) == MEM_read32(ip)) ) {
const BYTE* const repEnd2 = repIndex2 < prefixStartIndex ? dictEnd : iend;
size_t const repLength2 = ZSTD_count_2segments(ip+4, repMatch2+4, iend, repEnd2, prefixStart) + 4;
diff --git a/thirdparty/zstd/compress/zstd_double_fast.h b/thirdparty/zstd/compress/zstd_double_fast.h
index 14d944d69b..e16b7b03a3 100644
--- a/thirdparty/zstd/compress/zstd_double_fast.h
+++ b/thirdparty/zstd/compress/zstd_double_fast.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
diff --git a/thirdparty/zstd/compress/zstd_fast.c b/thirdparty/zstd/compress/zstd_fast.c
index db7ce83d0a..4edc04dccd 100644
--- a/thirdparty/zstd/compress/zstd_fast.c
+++ b/thirdparty/zstd/compress/zstd_fast.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -242,7 +242,7 @@ size_t ZSTD_compressBlock_fast_dictMatchState_generic(
assert(endIndex - prefixStartIndex <= maxDistance);
(void)maxDistance; (void)endIndex; /* these variables are not used when assert() is disabled */
- /* ensure there will be no no underflow
+ /* ensure there will be no underflow
* when translating a dict index into a local index */
assert(prefixStartIndex >= (U32)(dictEnd - dictBase));
@@ -416,9 +416,9 @@ static size_t ZSTD_compressBlock_fast_extDict_generic(
const BYTE* const repMatch = repBase + repIndex;
hashTable[h] = curr; /* update hash table */
DEBUGLOG(7, "offset_1 = %u , curr = %u", offset_1, curr);
- assert(offset_1 <= curr +1); /* check repIndex */
- if ( (((U32)((prefixStartIndex-1) - repIndex) >= 3) /* intentional underflow */ & (repIndex > dictStartIndex))
+ if ( ( ((U32)((prefixStartIndex-1) - repIndex) >= 3) /* intentional underflow */
+ & (offset_1 < curr+1 - dictStartIndex) ) /* note: we are searching at curr+1 */
&& (MEM_read32(repMatch) == MEM_read32(ip+1)) ) {
const BYTE* const repMatchEnd = repIndex < prefixStartIndex ? dictEnd : iend;
size_t const rLength = ZSTD_count_2segments(ip+1 +4, repMatch +4, iend, repMatchEnd, prefixStart) + 4;
@@ -453,7 +453,7 @@ static size_t ZSTD_compressBlock_fast_extDict_generic(
U32 const current2 = (U32)(ip-base);
U32 const repIndex2 = current2 - offset_2;
const BYTE* const repMatch2 = repIndex2 < prefixStartIndex ? dictBase + repIndex2 : base + repIndex2;
- if ( (((U32)((prefixStartIndex-1) - repIndex2) >= 3) & (repIndex2 > dictStartIndex)) /* intentional overflow */
+ if ( (((U32)((prefixStartIndex-1) - repIndex2) >= 3) & (offset_2 < curr - dictStartIndex)) /* intentional overflow */
&& (MEM_read32(repMatch2) == MEM_read32(ip)) ) {
const BYTE* const repEnd2 = repIndex2 < prefixStartIndex ? dictEnd : iend;
size_t const repLength2 = ZSTD_count_2segments(ip+4, repMatch2+4, iend, repEnd2, prefixStart) + 4;
diff --git a/thirdparty/zstd/compress/zstd_fast.h b/thirdparty/zstd/compress/zstd_fast.h
index cf6aaa8e67..0d4a0c1090 100644
--- a/thirdparty/zstd/compress/zstd_fast.h
+++ b/thirdparty/zstd/compress/zstd_fast.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
diff --git a/thirdparty/zstd/compress/zstd_lazy.c b/thirdparty/zstd/compress/zstd_lazy.c
index 49ec1b09ef..3d523e8472 100644
--- a/thirdparty/zstd/compress/zstd_lazy.c
+++ b/thirdparty/zstd/compress/zstd_lazy.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -438,43 +438,9 @@ static size_t ZSTD_BtFindBestMatch_extDict_selectMLS (
}
}
-
-
-/* *********************************
-* Hash Chain
+/***********************************
+* Dedicated dict search
***********************************/
-#define NEXT_IN_CHAIN(d, mask) chainTable[(d) & (mask)]
-
-/* Update chains up to ip (excluded)
- Assumption : always within prefix (i.e. not within extDict) */
-FORCE_INLINE_TEMPLATE U32 ZSTD_insertAndFindFirstIndex_internal(
- ZSTD_matchState_t* ms,
- const ZSTD_compressionParameters* const cParams,
- const BYTE* ip, U32 const mls)
-{
- U32* const hashTable = ms->hashTable;
- const U32 hashLog = cParams->hashLog;
- U32* const chainTable = ms->chainTable;
- const U32 chainMask = (1 << cParams->chainLog) - 1;
- const BYTE* const base = ms->window.base;
- const U32 target = (U32)(ip - base);
- U32 idx = ms->nextToUpdate;
-
- while(idx < target) { /* catch up */
- size_t const h = ZSTD_hashPtr(base+idx, hashLog, mls);
- NEXT_IN_CHAIN(idx, chainMask) = hashTable[h];
- hashTable[h] = idx;
- idx++;
- }
-
- ms->nextToUpdate = target;
- return hashTable[ZSTD_hashPtr(ip, hashLog, mls)];
-}
-
-U32 ZSTD_insertAndFindFirstIndex(ZSTD_matchState_t* ms, const BYTE* ip) {
- const ZSTD_compressionParameters* const cParams = &ms->cParams;
- return ZSTD_insertAndFindFirstIndex_internal(ms, cParams, ip, ms->cParams.minMatch);
-}
void ZSTD_dedicatedDictSearch_lazy_loadDictionary(ZSTD_matchState_t* ms, const BYTE* const ip)
{
@@ -500,11 +466,10 @@ void ZSTD_dedicatedDictSearch_lazy_loadDictionary(ZSTD_matchState_t* ms, const B
U32* const tmpChainTable = hashTable + ((size_t)1 << hashLog);
U32 const tmpChainSize = ((1 << ZSTD_LAZY_DDSS_BUCKET_LOG) - 1) << hashLog;
U32 const tmpMinChain = tmpChainSize < target ? target - tmpChainSize : idx;
-
U32 hashIdx;
assert(ms->cParams.chainLog <= 24);
- assert(ms->cParams.hashLog >= ms->cParams.chainLog);
+ assert(ms->cParams.hashLog > ms->cParams.chainLog);
assert(idx != 0);
assert(tmpMinChain <= minChain);
@@ -535,7 +500,7 @@ void ZSTD_dedicatedDictSearch_lazy_loadDictionary(ZSTD_matchState_t* ms, const B
if (count == cacheSize) {
for (count = 0; count < chainLimit;) {
if (i < minChain) {
- if (!i || countBeyondMinChain++ > cacheSize) {
+ if (!i || ++countBeyondMinChain > cacheSize) {
/* only allow pulling `cacheSize` number of entries
* into the cache or chainTable beyond `minChain`,
* to replace the entries pulled out of the
@@ -591,6 +556,139 @@ void ZSTD_dedicatedDictSearch_lazy_loadDictionary(ZSTD_matchState_t* ms, const B
ms->nextToUpdate = target;
}
+/* Returns the longest match length found in the dedicated dict search structure.
+ * If none are longer than the argument ml, then ml will be returned.
+ */
+FORCE_INLINE_TEMPLATE
+size_t ZSTD_dedicatedDictSearch_lazy_search(size_t* offsetPtr, size_t ml, U32 nbAttempts,
+ const ZSTD_matchState_t* const dms,
+ const BYTE* const ip, const BYTE* const iLimit,
+ const BYTE* const prefixStart, const U32 curr,
+ const U32 dictLimit, const size_t ddsIdx) {
+ const U32 ddsLowestIndex = dms->window.dictLimit;
+ const BYTE* const ddsBase = dms->window.base;
+ const BYTE* const ddsEnd = dms->window.nextSrc;
+ const U32 ddsSize = (U32)(ddsEnd - ddsBase);
+ const U32 ddsIndexDelta = dictLimit - ddsSize;
+ const U32 bucketSize = (1 << ZSTD_LAZY_DDSS_BUCKET_LOG);
+ const U32 bucketLimit = nbAttempts < bucketSize - 1 ? nbAttempts : bucketSize - 1;
+ U32 ddsAttempt;
+ U32 matchIndex;
+
+ for (ddsAttempt = 0; ddsAttempt < bucketSize - 1; ddsAttempt++) {
+ PREFETCH_L1(ddsBase + dms->hashTable[ddsIdx + ddsAttempt]);
+ }
+
+ {
+ U32 const chainPackedPointer = dms->hashTable[ddsIdx + bucketSize - 1];
+ U32 const chainIndex = chainPackedPointer >> 8;
+
+ PREFETCH_L1(&dms->chainTable[chainIndex]);
+ }
+
+ for (ddsAttempt = 0; ddsAttempt < bucketLimit; ddsAttempt++) {
+ size_t currentMl=0;
+ const BYTE* match;
+ matchIndex = dms->hashTable[ddsIdx + ddsAttempt];
+ match = ddsBase + matchIndex;
+
+ if (!matchIndex) {
+ return ml;
+ }
+
+ /* guaranteed by table construction */
+ (void)ddsLowestIndex;
+ assert(matchIndex >= ddsLowestIndex);
+ assert(match+4 <= ddsEnd);
+ if (MEM_read32(match) == MEM_read32(ip)) {
+ /* assumption : matchIndex <= dictLimit-4 (by table construction) */
+ currentMl = ZSTD_count_2segments(ip+4, match+4, iLimit, ddsEnd, prefixStart) + 4;
+ }
+
+ /* save best solution */
+ if (currentMl > ml) {
+ ml = currentMl;
+ *offsetPtr = curr - (matchIndex + ddsIndexDelta) + ZSTD_REP_MOVE;
+ if (ip+currentMl == iLimit) {
+ /* best possible, avoids read overflow on next attempt */
+ return ml;
+ }
+ }
+ }
+
+ {
+ U32 const chainPackedPointer = dms->hashTable[ddsIdx + bucketSize - 1];
+ U32 chainIndex = chainPackedPointer >> 8;
+ U32 const chainLength = chainPackedPointer & 0xFF;
+ U32 const chainAttempts = nbAttempts - ddsAttempt;
+ U32 const chainLimit = chainAttempts > chainLength ? chainLength : chainAttempts;
+ U32 chainAttempt;
+
+ for (chainAttempt = 0 ; chainAttempt < chainLimit; chainAttempt++) {
+ PREFETCH_L1(ddsBase + dms->chainTable[chainIndex + chainAttempt]);
+ }
+
+ for (chainAttempt = 0 ; chainAttempt < chainLimit; chainAttempt++, chainIndex++) {
+ size_t currentMl=0;
+ const BYTE* match;
+ matchIndex = dms->chainTable[chainIndex];
+ match = ddsBase + matchIndex;
+
+ /* guaranteed by table construction */
+ assert(matchIndex >= ddsLowestIndex);
+ assert(match+4 <= ddsEnd);
+ if (MEM_read32(match) == MEM_read32(ip)) {
+ /* assumption : matchIndex <= dictLimit-4 (by table construction) */
+ currentMl = ZSTD_count_2segments(ip+4, match+4, iLimit, ddsEnd, prefixStart) + 4;
+ }
+
+ /* save best solution */
+ if (currentMl > ml) {
+ ml = currentMl;
+ *offsetPtr = curr - (matchIndex + ddsIndexDelta) + ZSTD_REP_MOVE;
+ if (ip+currentMl == iLimit) break; /* best possible, avoids read overflow on next attempt */
+ }
+ }
+ }
+ return ml;
+}
+
+
+/* *********************************
+* Hash Chain
+***********************************/
+#define NEXT_IN_CHAIN(d, mask) chainTable[(d) & (mask)]
+
+/* Update chains up to ip (excluded)
+ Assumption : always within prefix (i.e. not within extDict) */
+FORCE_INLINE_TEMPLATE U32 ZSTD_insertAndFindFirstIndex_internal(
+ ZSTD_matchState_t* ms,
+ const ZSTD_compressionParameters* const cParams,
+ const BYTE* ip, U32 const mls)
+{
+ U32* const hashTable = ms->hashTable;
+ const U32 hashLog = cParams->hashLog;
+ U32* const chainTable = ms->chainTable;
+ const U32 chainMask = (1 << cParams->chainLog) - 1;
+ const BYTE* const base = ms->window.base;
+ const U32 target = (U32)(ip - base);
+ U32 idx = ms->nextToUpdate;
+
+ while(idx < target) { /* catch up */
+ size_t const h = ZSTD_hashPtr(base+idx, hashLog, mls);
+ NEXT_IN_CHAIN(idx, chainMask) = hashTable[h];
+ hashTable[h] = idx;
+ idx++;
+ }
+
+ ms->nextToUpdate = target;
+ return hashTable[ZSTD_hashPtr(ip, hashLog, mls)];
+}
+
+U32 ZSTD_insertAndFindFirstIndex(ZSTD_matchState_t* ms, const BYTE* ip) {
+ const ZSTD_compressionParameters* const cParams = &ms->cParams;
+ return ZSTD_insertAndFindFirstIndex_internal(ms, cParams, ip, ms->cParams.minMatch);
+}
/* inlining is important to hardwire a hot branch (template emulation) */
FORCE_INLINE_TEMPLATE
@@ -661,90 +759,8 @@ size_t ZSTD_HcFindBestMatch_generic (
}
if (dictMode == ZSTD_dedicatedDictSearch) {
- const U32 ddsLowestIndex = dms->window.dictLimit;
- const BYTE* const ddsBase = dms->window.base;
- const BYTE* const ddsEnd = dms->window.nextSrc;
- const U32 ddsSize = (U32)(ddsEnd - ddsBase);
- const U32 ddsIndexDelta = dictLimit - ddsSize;
- const U32 bucketSize = (1 << ZSTD_LAZY_DDSS_BUCKET_LOG);
- const U32 bucketLimit = nbAttempts < bucketSize - 1 ? nbAttempts : bucketSize - 1;
- U32 ddsAttempt;
-
- for (ddsAttempt = 0; ddsAttempt < bucketSize - 1; ddsAttempt++) {
- PREFETCH_L1(ddsBase + dms->hashTable[ddsIdx + ddsAttempt]);
- }
-
- {
- U32 const chainPackedPointer = dms->hashTable[ddsIdx + bucketSize - 1];
- U32 const chainIndex = chainPackedPointer >> 8;
-
- PREFETCH_L1(&dms->chainTable[chainIndex]);
- }
-
- for (ddsAttempt = 0; ddsAttempt < bucketLimit; ddsAttempt++) {
- size_t currentMl=0;
- const BYTE* match;
- matchIndex = dms->hashTable[ddsIdx + ddsAttempt];
- match = ddsBase + matchIndex;
-
- if (!matchIndex) {
- return ml;
- }
-
- /* guaranteed by table construction */
- (void)ddsLowestIndex;
- assert(matchIndex >= ddsLowestIndex);
- assert(match+4 <= ddsEnd);
- if (MEM_read32(match) == MEM_read32(ip)) {
- /* assumption : matchIndex <= dictLimit-4 (by table construction) */
- currentMl = ZSTD_count_2segments(ip+4, match+4, iLimit, ddsEnd, prefixStart) + 4;
- }
-
- /* save best solution */
- if (currentMl > ml) {
- ml = currentMl;
- *offsetPtr = curr - (matchIndex + ddsIndexDelta) + ZSTD_REP_MOVE;
- if (ip+currentMl == iLimit) {
- /* best possible, avoids read overflow on next attempt */
- return ml;
- }
- }
- }
-
- {
- U32 const chainPackedPointer = dms->hashTable[ddsIdx + bucketSize - 1];
- U32 chainIndex = chainPackedPointer >> 8;
- U32 const chainLength = chainPackedPointer & 0xFF;
- U32 const chainAttempts = nbAttempts - ddsAttempt;
- U32 const chainLimit = chainAttempts > chainLength ? chainLength : chainAttempts;
- U32 chainAttempt;
-
- for (chainAttempt = 0 ; chainAttempt < chainLimit; chainAttempt++) {
- PREFETCH_L1(ddsBase + dms->chainTable[chainIndex + chainAttempt]);
- }
-
- for (chainAttempt = 0 ; chainAttempt < chainLimit; chainAttempt++, chainIndex++) {
- size_t currentMl=0;
- const BYTE* match;
- matchIndex = dms->chainTable[chainIndex];
- match = ddsBase + matchIndex;
-
- /* guaranteed by table construction */
- assert(matchIndex >= ddsLowestIndex);
- assert(match+4 <= ddsEnd);
- if (MEM_read32(match) == MEM_read32(ip)) {
- /* assumption : matchIndex <= dictLimit-4 (by table construction) */
- currentMl = ZSTD_count_2segments(ip+4, match+4, iLimit, ddsEnd, prefixStart) + 4;
- }
-
- /* save best solution */
- if (currentMl > ml) {
- ml = currentMl;
- *offsetPtr = curr - (matchIndex + ddsIndexDelta) + ZSTD_REP_MOVE;
- if (ip+currentMl == iLimit) break; /* best possible, avoids read overflow on next attempt */
- }
- }
- }
+ ml = ZSTD_dedicatedDictSearch_lazy_search(offsetPtr, ml, nbAttempts, dms,
+ ip, iLimit, prefixStart, curr, dictLimit, ddsIdx);
} else if (dictMode == ZSTD_dictMatchState) {
const U32* const dmsChainTable = dms->chainTable;
const U32 dmsChainSize = (1 << dms->cParams.chainLog);
@@ -845,11 +861,657 @@ FORCE_INLINE_TEMPLATE size_t ZSTD_HcFindBestMatch_extDict_selectMLS (
}
}
+/* *********************************
+* (SIMD) Row-based matchfinder
+***********************************/
+/* Constants for row-based hash */
+#define ZSTD_ROW_HASH_TAG_OFFSET 1 /* byte offset of hashes in the match state's tagTable from the beginning of a row */
+#define ZSTD_ROW_HASH_TAG_BITS 8 /* nb bits to use for the tag */
+#define ZSTD_ROW_HASH_TAG_MASK ((1u << ZSTD_ROW_HASH_TAG_BITS) - 1)
+
+#define ZSTD_ROW_HASH_CACHE_MASK (ZSTD_ROW_HASH_CACHE_SIZE - 1)
+
+typedef U32 ZSTD_VecMask; /* Clarifies when we are interacting with a U32 representing a mask of matches */
+
+#if !defined(ZSTD_NO_INTRINSICS) && defined(__SSE2__) /* SIMD SSE version */
+
+#include <emmintrin.h>
+typedef __m128i ZSTD_Vec128;
+
+/* Returns a 128-bit container with 128-bits from src */
+static ZSTD_Vec128 ZSTD_Vec128_read(const void* const src) {
+ return _mm_loadu_si128((ZSTD_Vec128 const*)src);
+}
+
+/* Returns a ZSTD_Vec128 with the byte "val" packed 16 times */
+static ZSTD_Vec128 ZSTD_Vec128_set8(BYTE val) {
+ return _mm_set1_epi8((char)val);
+}
+
+/* Do byte-by-byte comparison result of x and y. Then collapse 128-bit resultant mask
+ * into a 32-bit mask that is the MSB of each byte.
+ * */
+static ZSTD_VecMask ZSTD_Vec128_cmpMask8(ZSTD_Vec128 x, ZSTD_Vec128 y) {
+ return (ZSTD_VecMask)_mm_movemask_epi8(_mm_cmpeq_epi8(x, y));
+}
+
+typedef struct {
+ __m128i fst;
+ __m128i snd;
+} ZSTD_Vec256;
+
+static ZSTD_Vec256 ZSTD_Vec256_read(const void* const ptr) {
+ ZSTD_Vec256 v;
+ v.fst = ZSTD_Vec128_read(ptr);
+ v.snd = ZSTD_Vec128_read((ZSTD_Vec128 const*)ptr + 1);
+ return v;
+}
+
+static ZSTD_Vec256 ZSTD_Vec256_set8(BYTE val) {
+ ZSTD_Vec256 v;
+ v.fst = ZSTD_Vec128_set8(val);
+ v.snd = ZSTD_Vec128_set8(val);
+ return v;
+}
+
+static ZSTD_VecMask ZSTD_Vec256_cmpMask8(ZSTD_Vec256 x, ZSTD_Vec256 y) {
+ ZSTD_VecMask fstMask;
+ ZSTD_VecMask sndMask;
+ fstMask = ZSTD_Vec128_cmpMask8(x.fst, y.fst);
+ sndMask = ZSTD_Vec128_cmpMask8(x.snd, y.snd);
+ return fstMask | (sndMask << 16);
+}
+
+#elif !defined(ZSTD_NO_INTRINSICS) && defined(__ARM_NEON) /* SIMD ARM NEON Version */
+
+#include <arm_neon.h>
+typedef uint8x16_t ZSTD_Vec128;
+
+static ZSTD_Vec128 ZSTD_Vec128_read(const void* const src) {
+ return vld1q_u8((const BYTE* const)src);
+}
+
+static ZSTD_Vec128 ZSTD_Vec128_set8(BYTE val) {
+ return vdupq_n_u8(val);
+}
+
+/* Mimics '_mm_movemask_epi8()' from SSE */
+static U32 ZSTD_vmovmaskq_u8(ZSTD_Vec128 val) {
+ /* Shift out everything but the MSB bits in each byte */
+ uint16x8_t highBits = vreinterpretq_u16_u8(vshrq_n_u8(val, 7));
+ /* Merge the even lanes together with vsra (right shift and add) */
+ uint32x4_t paired16 = vreinterpretq_u32_u16(vsraq_n_u16(highBits, highBits, 7));
+ uint64x2_t paired32 = vreinterpretq_u64_u32(vsraq_n_u32(paired16, paired16, 14));
+ uint8x16_t paired64 = vreinterpretq_u8_u64(vsraq_n_u64(paired32, paired32, 28));
+ /* Extract the low 8 bits from each lane, merge */
+ return vgetq_lane_u8(paired64, 0) | ((U32)vgetq_lane_u8(paired64, 8) << 8);
+}
+
+static ZSTD_VecMask ZSTD_Vec128_cmpMask8(ZSTD_Vec128 x, ZSTD_Vec128 y) {
+ return (ZSTD_VecMask)ZSTD_vmovmaskq_u8(vceqq_u8(x, y));
+}
+
+typedef struct {
+ uint8x16_t fst;
+ uint8x16_t snd;
+} ZSTD_Vec256;
+
+static ZSTD_Vec256 ZSTD_Vec256_read(const void* const ptr) {
+ ZSTD_Vec256 v;
+ v.fst = ZSTD_Vec128_read(ptr);
+ v.snd = ZSTD_Vec128_read((ZSTD_Vec128 const*)ptr + 1);
+ return v;
+}
+
+static ZSTD_Vec256 ZSTD_Vec256_set8(BYTE val) {
+ ZSTD_Vec256 v;
+ v.fst = ZSTD_Vec128_set8(val);
+ v.snd = ZSTD_Vec128_set8(val);
+ return v;
+}
+
+static ZSTD_VecMask ZSTD_Vec256_cmpMask8(ZSTD_Vec256 x, ZSTD_Vec256 y) {
+ ZSTD_VecMask fstMask;
+ ZSTD_VecMask sndMask;
+ fstMask = ZSTD_Vec128_cmpMask8(x.fst, y.fst);
+ sndMask = ZSTD_Vec128_cmpMask8(x.snd, y.snd);
+ return fstMask | (sndMask << 16);
+}
+
+#else /* Scalar fallback version */
+
+#define VEC128_NB_SIZE_T (16 / sizeof(size_t))
+typedef struct {
+ size_t vec[VEC128_NB_SIZE_T];
+} ZSTD_Vec128;
+
+static ZSTD_Vec128 ZSTD_Vec128_read(const void* const src) {
+ ZSTD_Vec128 ret;
+ ZSTD_memcpy(ret.vec, src, VEC128_NB_SIZE_T*sizeof(size_t));
+ return ret;
+}
+
+static ZSTD_Vec128 ZSTD_Vec128_set8(BYTE val) {
+ ZSTD_Vec128 ret = { {0} };
+ int startBit = sizeof(size_t) * 8 - 8;
+ for (;startBit >= 0; startBit -= 8) {
+ unsigned j = 0;
+ for (;j < VEC128_NB_SIZE_T; ++j) {
+ ret.vec[j] |= ((size_t)val << startBit);
+ }
+ }
+ return ret;
+}
+
+/* Compare x to y, byte by byte, generating a "matches" bitfield */
+static ZSTD_VecMask ZSTD_Vec128_cmpMask8(ZSTD_Vec128 x, ZSTD_Vec128 y) {
+ ZSTD_VecMask res = 0;
+ unsigned i = 0;
+ unsigned l = 0;
+ for (; i < VEC128_NB_SIZE_T; ++i) {
+ const size_t cmp1 = x.vec[i];
+ const size_t cmp2 = y.vec[i];
+ unsigned j = 0;
+ for (; j < sizeof(size_t); ++j, ++l) {
+ if (((cmp1 >> j*8) & 0xFF) == ((cmp2 >> j*8) & 0xFF)) {
+ res |= ((U32)1 << (j+i*sizeof(size_t)));
+ }
+ }
+ }
+ return res;
+}
+
+#define VEC256_NB_SIZE_T 2*VEC128_NB_SIZE_T
+typedef struct {
+ size_t vec[VEC256_NB_SIZE_T];
+} ZSTD_Vec256;
+
+static ZSTD_Vec256 ZSTD_Vec256_read(const void* const src) {
+ ZSTD_Vec256 ret;
+ ZSTD_memcpy(ret.vec, src, VEC256_NB_SIZE_T*sizeof(size_t));
+ return ret;
+}
+
+static ZSTD_Vec256 ZSTD_Vec256_set8(BYTE val) {
+ ZSTD_Vec256 ret = { {0} };
+ int startBit = sizeof(size_t) * 8 - 8;
+ for (;startBit >= 0; startBit -= 8) {
+ unsigned j = 0;
+ for (;j < VEC256_NB_SIZE_T; ++j) {
+ ret.vec[j] |= ((size_t)val << startBit);
+ }
+ }
+ return ret;
+}
+
+/* Compare x to y, byte by byte, generating a "matches" bitfield */
+static ZSTD_VecMask ZSTD_Vec256_cmpMask8(ZSTD_Vec256 x, ZSTD_Vec256 y) {
+ ZSTD_VecMask res = 0;
+ unsigned i = 0;
+ unsigned l = 0;
+ for (; i < VEC256_NB_SIZE_T; ++i) {
+ const size_t cmp1 = x.vec[i];
+ const size_t cmp2 = y.vec[i];
+ unsigned j = 0;
+ for (; j < sizeof(size_t); ++j, ++l) {
+ if (((cmp1 >> j*8) & 0xFF) == ((cmp2 >> j*8) & 0xFF)) {
+ res |= ((U32)1 << (j+i*sizeof(size_t)));
+ }
+ }
+ }
+ return res;
+}
+
+#endif /* !defined(ZSTD_NO_INTRINSICS) && defined(__SSE2__) */
+
+/* ZSTD_VecMask_next():
+ * Starting from the LSB, returns the idx of the next non-zero bit.
+ * Basically counting the nb of trailing zeroes.
+ */
+static U32 ZSTD_VecMask_next(ZSTD_VecMask val) {
+# if defined(_MSC_VER) /* Visual */
+ unsigned long r=0;
+ return _BitScanForward(&r, val) ? (U32)r : 0;
+# elif defined(__GNUC__) && (__GNUC__ >= 3)
+ return (U32)__builtin_ctz(val);
+# else
+ /* Software ctz version: http://graphics.stanford.edu/~seander/bithacks.html#ZerosOnRightMultLookup */
+ static const U32 multiplyDeBruijnBitPosition[32] =
+ {
+ 0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8,
+ 31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9
+ };
+ return multiplyDeBruijnBitPosition[((U32)((v & -(int)v) * 0x077CB531U)) >> 27];
+# endif
+}
+
+/* ZSTD_VecMask_rotateRight():
+ * Rotates a bitfield to the right by "rotation" bits.
+ * If the rotation is greater than totalBits, the returned mask is 0.
+ */
+FORCE_INLINE_TEMPLATE ZSTD_VecMask
+ZSTD_VecMask_rotateRight(ZSTD_VecMask mask, U32 const rotation, U32 const totalBits) {
+ if (rotation == 0)
+ return mask;
+ switch (totalBits) {
+ default:
+ assert(0);
+ case 16:
+ return (mask >> rotation) | (U16)(mask << (16 - rotation));
+ case 32:
+ return (mask >> rotation) | (U32)(mask << (32 - rotation));
+ }
+}
+
+/* ZSTD_row_nextIndex():
+ * Returns the next index to insert at within a tagTable row, and updates the "head"
+ * value to reflect the update. Essentially cycles backwards from [0, {entries per row})
+ */
+FORCE_INLINE_TEMPLATE U32 ZSTD_row_nextIndex(BYTE* const tagRow, U32 const rowMask) {
+ U32 const next = (*tagRow - 1) & rowMask;
+ *tagRow = (BYTE)next;
+ return next;
+}
+
+/* ZSTD_isAligned():
+ * Checks that a pointer is aligned to "align" bytes which must be a power of 2.
+ */
+MEM_STATIC int ZSTD_isAligned(void const* ptr, size_t align) {
+ assert((align & (align - 1)) == 0);
+ return (((size_t)ptr) & (align - 1)) == 0;
+}
+
+/* ZSTD_row_prefetch():
+ * Performs prefetching for the hashTable and tagTable at a given row.
+ */
+FORCE_INLINE_TEMPLATE void ZSTD_row_prefetch(U32 const* hashTable, U16 const* tagTable, U32 const relRow, U32 const rowLog) {
+ PREFETCH_L1(hashTable + relRow);
+ if (rowLog == 5) {
+ PREFETCH_L1(hashTable + relRow + 16);
+ }
+ PREFETCH_L1(tagTable + relRow);
+ assert(rowLog == 4 || rowLog == 5);
+ assert(ZSTD_isAligned(hashTable + relRow, 64)); /* prefetched hash row always 64-byte aligned */
+ assert(ZSTD_isAligned(tagTable + relRow, (size_t)1 << rowLog)); /* prefetched tagRow sits on a multiple of 32 or 64 bytes */
+}
+
+/* ZSTD_row_fillHashCache():
+ * Fill up the hash cache starting at idx, prefetching up to ZSTD_ROW_HASH_CACHE_SIZE entries,
+ * but not beyond iLimit.
+ */
+static void ZSTD_row_fillHashCache(ZSTD_matchState_t* ms, const BYTE* base,
+ U32 const rowLog, U32 const mls,
+ U32 idx, const BYTE* const iLimit)
+{
+ U32 const* const hashTable = ms->hashTable;
+ U16 const* const tagTable = ms->tagTable;
+ U32 const hashLog = ms->rowHashLog;
+ U32 const maxElemsToPrefetch = (base + idx) > iLimit ? 0 : (U32)(iLimit - (base + idx) + 1);
+ U32 const lim = idx + MIN(ZSTD_ROW_HASH_CACHE_SIZE, maxElemsToPrefetch);
+
+ for (; idx < lim; ++idx) {
+ U32 const hash = (U32)ZSTD_hashPtr(base + idx, hashLog + ZSTD_ROW_HASH_TAG_BITS, mls);
+ U32 const row = (hash >> ZSTD_ROW_HASH_TAG_BITS) << rowLog;
+ ZSTD_row_prefetch(hashTable, tagTable, row, rowLog);
+ ms->hashCache[idx & ZSTD_ROW_HASH_CACHE_MASK] = hash;
+ }
+
+ DEBUGLOG(6, "ZSTD_row_fillHashCache(): [%u %u %u %u %u %u %u %u]", ms->hashCache[0], ms->hashCache[1],
+ ms->hashCache[2], ms->hashCache[3], ms->hashCache[4],
+ ms->hashCache[5], ms->hashCache[6], ms->hashCache[7]);
+}
+
+/* ZSTD_row_nextCachedHash():
+ * Returns the hash of base + idx, and replaces the hash in the hash cache with the byte at
+ * base + idx + ZSTD_ROW_HASH_CACHE_SIZE. Also prefetches the appropriate rows from hashTable and tagTable.
+ */
+FORCE_INLINE_TEMPLATE U32 ZSTD_row_nextCachedHash(U32* cache, U32 const* hashTable,
+ U16 const* tagTable, BYTE const* base,
+ U32 idx, U32 const hashLog,
+ U32 const rowLog, U32 const mls)
+{
+ U32 const newHash = (U32)ZSTD_hashPtr(base+idx+ZSTD_ROW_HASH_CACHE_SIZE, hashLog + ZSTD_ROW_HASH_TAG_BITS, mls);
+ U32 const row = (newHash >> ZSTD_ROW_HASH_TAG_BITS) << rowLog;
+ ZSTD_row_prefetch(hashTable, tagTable, row, rowLog);
+ { U32 const hash = cache[idx & ZSTD_ROW_HASH_CACHE_MASK];
+ cache[idx & ZSTD_ROW_HASH_CACHE_MASK] = newHash;
+ return hash;
+ }
+}
+
+/* ZSTD_row_update_internal():
+ * Inserts the byte at ip into the appropriate position in the hash table.
+ * Determines the relative row, and the position within the {16, 32} entry row to insert at.
+ */
+FORCE_INLINE_TEMPLATE void ZSTD_row_update_internal(ZSTD_matchState_t* ms, const BYTE* ip,
+ U32 const mls, U32 const rowLog,
+ U32 const rowMask, U32 const useCache)
+{
+ U32* const hashTable = ms->hashTable;
+ U16* const tagTable = ms->tagTable;
+ U32 const hashLog = ms->rowHashLog;
+ const BYTE* const base = ms->window.base;
+ const U32 target = (U32)(ip - base);
+ U32 idx = ms->nextToUpdate;
+
+ DEBUGLOG(6, "ZSTD_row_update_internal(): nextToUpdate=%u, current=%u", idx, target);
+ for (; idx < target; ++idx) {
+ U32 const hash = useCache ? ZSTD_row_nextCachedHash(ms->hashCache, hashTable, tagTable, base, idx, hashLog, rowLog, mls)
+ : (U32)ZSTD_hashPtr(base + idx, hashLog + ZSTD_ROW_HASH_TAG_BITS, mls);
+ U32 const relRow = (hash >> ZSTD_ROW_HASH_TAG_BITS) << rowLog;
+ U32* const row = hashTable + relRow;
+ BYTE* tagRow = (BYTE*)(tagTable + relRow); /* Though tagTable is laid out as a table of U16, each tag is only 1 byte.
+ Explicit cast allows us to get exact desired position within each row */
+ U32 const pos = ZSTD_row_nextIndex(tagRow, rowMask);
+
+ assert(hash == ZSTD_hashPtr(base + idx, hashLog + ZSTD_ROW_HASH_TAG_BITS, mls));
+ ((BYTE*)tagRow)[pos + ZSTD_ROW_HASH_TAG_OFFSET] = hash & ZSTD_ROW_HASH_TAG_MASK;
+ row[pos] = idx;
+ }
+ ms->nextToUpdate = target;
+}
+
+/* ZSTD_row_update():
+ * External wrapper for ZSTD_row_update_internal(). Used for filling the hashtable during dictionary
+ * processing.
+ */
+void ZSTD_row_update(ZSTD_matchState_t* const ms, const BYTE* ip) {
+ const U32 rowLog = ms->cParams.searchLog < 5 ? 4 : 5;
+ const U32 rowMask = (1u << rowLog) - 1;
+ const U32 mls = MIN(ms->cParams.minMatch, 6 /* mls caps out at 6 */);
+
+ DEBUGLOG(5, "ZSTD_row_update(), rowLog=%u", rowLog);
+ ZSTD_row_update_internal(ms, ip, mls, rowLog, rowMask, 0 /* dont use cache */);
+}
+
+/* Returns a ZSTD_VecMask (U32) that has the nth bit set to 1 if the newly-computed "tag" matches
+ * the hash at the nth position in a row of the tagTable.
+ */
+FORCE_INLINE_TEMPLATE
+ZSTD_VecMask ZSTD_row_getMatchMask(const BYTE* const tagRow, const BYTE tag, const U32 head, const U32 rowEntries) {
+ ZSTD_VecMask matches = 0;
+ if (rowEntries == 16) {
+ ZSTD_Vec128 hashes = ZSTD_Vec128_read(tagRow + ZSTD_ROW_HASH_TAG_OFFSET);
+ ZSTD_Vec128 expandedTags = ZSTD_Vec128_set8(tag);
+ matches = ZSTD_Vec128_cmpMask8(hashes, expandedTags);
+ } else if (rowEntries == 32) {
+ ZSTD_Vec256 hashes = ZSTD_Vec256_read(tagRow + ZSTD_ROW_HASH_TAG_OFFSET);
+ ZSTD_Vec256 expandedTags = ZSTD_Vec256_set8(tag);
+ matches = ZSTD_Vec256_cmpMask8(hashes, expandedTags);
+ } else {
+ assert(0);
+ }
+ /* Each row is a circular buffer beginning at the value of "head". So we must rotate the "matches" bitfield
+ to match up with the actual layout of the entries within the hashTable */
+ return ZSTD_VecMask_rotateRight(matches, head, rowEntries);
+}
+
+/* The high-level approach of the SIMD row based match finder is as follows:
+ * - Figure out where to insert the new entry:
+ * - Generate a hash from a byte along with an additional 1-byte "short hash". The additional byte is our "tag"
+ * - The hashTable is effectively split into groups or "rows" of 16 or 32 entries of U32, and the hash determines
+ * which row to insert into.
+ * - Determine the correct position within the row to insert the entry into. Each row of 16 or 32 can
+ * be considered as a circular buffer with a "head" index that resides in the tagTable.
+ * - Also insert the "tag" into the equivalent row and position in the tagTable.
+ * - Note: The tagTable has 17 or 33 1-byte entries per row, due to 16 or 32 tags, and 1 "head" entry.
+ * The 17 or 33 entry rows are spaced out to occur every 32 or 64 bytes, respectively,
+ * for alignment/performance reasons, leaving some bytes unused.
+ * - Use SIMD to efficiently compare the tags in the tagTable to the 1-byte "short hash" and
+ * generate a bitfield that we can cycle through to check the collisions in the hash table.
+ * - Pick the longest match.
+ */
+FORCE_INLINE_TEMPLATE
+size_t ZSTD_RowFindBestMatch_generic (
+ ZSTD_matchState_t* ms,
+ const BYTE* const ip, const BYTE* const iLimit,
+ size_t* offsetPtr,
+ const U32 mls, const ZSTD_dictMode_e dictMode,
+ const U32 rowLog)
+{
+ U32* const hashTable = ms->hashTable;
+ U16* const tagTable = ms->tagTable;
+ U32* const hashCache = ms->hashCache;
+ const U32 hashLog = ms->rowHashLog;
+ const ZSTD_compressionParameters* const cParams = &ms->cParams;
+ const BYTE* const base = ms->window.base;
+ const BYTE* const dictBase = ms->window.dictBase;
+ const U32 dictLimit = ms->window.dictLimit;
+ const BYTE* const prefixStart = base + dictLimit;
+ const BYTE* const dictEnd = dictBase + dictLimit;
+ const U32 curr = (U32)(ip-base);
+ const U32 maxDistance = 1U << cParams->windowLog;
+ const U32 lowestValid = ms->window.lowLimit;
+ const U32 withinMaxDistance = (curr - lowestValid > maxDistance) ? curr - maxDistance : lowestValid;
+ const U32 isDictionary = (ms->loadedDictEnd != 0);
+ const U32 lowLimit = isDictionary ? lowestValid : withinMaxDistance;
+ const U32 rowEntries = (1U << rowLog);
+ const U32 rowMask = rowEntries - 1;
+ const U32 cappedSearchLog = MIN(cParams->searchLog, rowLog); /* nb of searches is capped at nb entries per row */
+ U32 nbAttempts = 1U << cappedSearchLog;
+ size_t ml=4-1;
+
+ /* DMS/DDS variables that may be referenced laster */
+ const ZSTD_matchState_t* const dms = ms->dictMatchState;
+ size_t ddsIdx;
+ U32 ddsExtraAttempts; /* cctx hash tables are limited in searches, but allow extra searches into DDS */
+ U32 dmsTag;
+ U32* dmsRow;
+ BYTE* dmsTagRow;
+
+ if (dictMode == ZSTD_dedicatedDictSearch) {
+ const U32 ddsHashLog = dms->cParams.hashLog - ZSTD_LAZY_DDSS_BUCKET_LOG;
+ { /* Prefetch DDS hashtable entry */
+ ddsIdx = ZSTD_hashPtr(ip, ddsHashLog, mls) << ZSTD_LAZY_DDSS_BUCKET_LOG;
+ PREFETCH_L1(&dms->hashTable[ddsIdx]);
+ }
+ ddsExtraAttempts = cParams->searchLog > rowLog ? 1U << (cParams->searchLog - rowLog) : 0;
+ }
+
+ if (dictMode == ZSTD_dictMatchState) {
+ /* Prefetch DMS rows */
+ U32* const dmsHashTable = dms->hashTable;
+ U16* const dmsTagTable = dms->tagTable;
+ U32 const dmsHash = (U32)ZSTD_hashPtr(ip, dms->rowHashLog + ZSTD_ROW_HASH_TAG_BITS, mls);
+ U32 const dmsRelRow = (dmsHash >> ZSTD_ROW_HASH_TAG_BITS) << rowLog;
+ dmsTag = dmsHash & ZSTD_ROW_HASH_TAG_MASK;
+ dmsTagRow = (BYTE*)(dmsTagTable + dmsRelRow);
+ dmsRow = dmsHashTable + dmsRelRow;
+ ZSTD_row_prefetch(dmsHashTable, dmsTagTable, dmsRelRow, rowLog);
+ }
+
+ /* Update the hashTable and tagTable up to (but not including) ip */
+ ZSTD_row_update_internal(ms, ip, mls, rowLog, rowMask, 1 /* useCache */);
+ { /* Get the hash for ip, compute the appropriate row */
+ U32 const hash = ZSTD_row_nextCachedHash(hashCache, hashTable, tagTable, base, curr, hashLog, rowLog, mls);
+ U32 const relRow = (hash >> ZSTD_ROW_HASH_TAG_BITS) << rowLog;
+ U32 const tag = hash & ZSTD_ROW_HASH_TAG_MASK;
+ U32* const row = hashTable + relRow;
+ BYTE* tagRow = (BYTE*)(tagTable + relRow);
+ U32 const head = *tagRow & rowMask;
+ U32 matchBuffer[32 /* maximum nb entries per row */];
+ size_t numMatches = 0;
+ size_t currMatch = 0;
+ ZSTD_VecMask matches = ZSTD_row_getMatchMask(tagRow, (BYTE)tag, head, rowEntries);
+
+ /* Cycle through the matches and prefetch */
+ for (; (matches > 0) && (nbAttempts > 0); --nbAttempts, matches &= (matches - 1)) {
+ U32 const matchPos = (head + ZSTD_VecMask_next(matches)) & rowMask;
+ U32 const matchIndex = row[matchPos];
+ assert(numMatches < rowEntries);
+ if (matchIndex < lowLimit)
+ break;
+ if ((dictMode != ZSTD_extDict) || matchIndex >= dictLimit) {
+ PREFETCH_L1(base + matchIndex);
+ } else {
+ PREFETCH_L1(dictBase + matchIndex);
+ }
+ matchBuffer[numMatches++] = matchIndex;
+ }
+
+ /* Speed opt: insert current byte into hashtable too. This allows us to avoid one iteration of the loop
+ in ZSTD_row_update_internal() at the next search. */
+ {
+ U32 const pos = ZSTD_row_nextIndex(tagRow, rowMask);
+ tagRow[pos + ZSTD_ROW_HASH_TAG_OFFSET] = (BYTE)tag;
+ row[pos] = ms->nextToUpdate++;
+ }
+
+ /* Return the longest match */
+ for (; currMatch < numMatches; ++currMatch) {
+ U32 const matchIndex = matchBuffer[currMatch];
+ size_t currentMl=0;
+ assert(matchIndex < curr);
+ assert(matchIndex >= lowLimit);
+
+ if ((dictMode != ZSTD_extDict) || matchIndex >= dictLimit) {
+ const BYTE* const match = base + matchIndex;
+ assert(matchIndex >= dictLimit); /* ensures this is true if dictMode != ZSTD_extDict */
+ if (match[ml] == ip[ml]) /* potentially better */
+ currentMl = ZSTD_count(ip, match, iLimit);
+ } else {
+ const BYTE* const match = dictBase + matchIndex;
+ assert(match+4 <= dictEnd);
+ if (MEM_read32(match) == MEM_read32(ip)) /* assumption : matchIndex <= dictLimit-4 (by table construction) */
+ currentMl = ZSTD_count_2segments(ip+4, match+4, iLimit, dictEnd, prefixStart) + 4;
+ }
+
+ /* Save best solution */
+ if (currentMl > ml) {
+ ml = currentMl;
+ *offsetPtr = curr - matchIndex + ZSTD_REP_MOVE;
+ if (ip+currentMl == iLimit) break; /* best possible, avoids read overflow on next attempt */
+ }
+ }
+ }
+
+ if (dictMode == ZSTD_dedicatedDictSearch) {
+ ml = ZSTD_dedicatedDictSearch_lazy_search(offsetPtr, ml, nbAttempts + ddsExtraAttempts, dms,
+ ip, iLimit, prefixStart, curr, dictLimit, ddsIdx);
+ } else if (dictMode == ZSTD_dictMatchState) {
+ /* TODO: Measure and potentially add prefetching to DMS */
+ const U32 dmsLowestIndex = dms->window.dictLimit;
+ const BYTE* const dmsBase = dms->window.base;
+ const BYTE* const dmsEnd = dms->window.nextSrc;
+ const U32 dmsSize = (U32)(dmsEnd - dmsBase);
+ const U32 dmsIndexDelta = dictLimit - dmsSize;
+
+ { U32 const head = *dmsTagRow & rowMask;
+ U32 matchBuffer[32 /* maximum nb row entries */];
+ size_t numMatches = 0;
+ size_t currMatch = 0;
+ ZSTD_VecMask matches = ZSTD_row_getMatchMask(dmsTagRow, (BYTE)dmsTag, head, rowEntries);
+
+ for (; (matches > 0) && (nbAttempts > 0); --nbAttempts, matches &= (matches - 1)) {
+ U32 const matchPos = (head + ZSTD_VecMask_next(matches)) & rowMask;
+ U32 const matchIndex = dmsRow[matchPos];
+ if (matchIndex < dmsLowestIndex)
+ break;
+ PREFETCH_L1(dmsBase + matchIndex);
+ matchBuffer[numMatches++] = matchIndex;
+ }
+
+ /* Return the longest match */
+ for (; currMatch < numMatches; ++currMatch) {
+ U32 const matchIndex = matchBuffer[currMatch];
+ size_t currentMl=0;
+ assert(matchIndex >= dmsLowestIndex);
+ assert(matchIndex < curr);
+
+ { const BYTE* const match = dmsBase + matchIndex;
+ assert(match+4 <= dmsEnd);
+ if (MEM_read32(match) == MEM_read32(ip))
+ currentMl = ZSTD_count_2segments(ip+4, match+4, iLimit, dmsEnd, prefixStart) + 4;
+ }
+
+ if (currentMl > ml) {
+ ml = currentMl;
+ *offsetPtr = curr - (matchIndex + dmsIndexDelta) + ZSTD_REP_MOVE;
+ if (ip+currentMl == iLimit) break;
+ }
+ }
+ }
+ }
+ return ml;
+}
+
+/* Inlining is important to hardwire a hot branch (template emulation) */
+FORCE_INLINE_TEMPLATE size_t ZSTD_RowFindBestMatch_selectMLS (
+ ZSTD_matchState_t* ms,
+ const BYTE* ip, const BYTE* const iLimit,
+ const ZSTD_dictMode_e dictMode, size_t* offsetPtr, const U32 rowLog)
+{
+ switch(ms->cParams.minMatch)
+ {
+ default : /* includes case 3 */
+ case 4 : return ZSTD_RowFindBestMatch_generic(ms, ip, iLimit, offsetPtr, 4, dictMode, rowLog);
+ case 5 : return ZSTD_RowFindBestMatch_generic(ms, ip, iLimit, offsetPtr, 5, dictMode, rowLog);
+ case 7 :
+ case 6 : return ZSTD_RowFindBestMatch_generic(ms, ip, iLimit, offsetPtr, 6, dictMode, rowLog);
+ }
+}
+
+FORCE_INLINE_TEMPLATE size_t ZSTD_RowFindBestMatch_selectRowLog (
+ ZSTD_matchState_t* ms,
+ const BYTE* ip, const BYTE* const iLimit,
+ size_t* offsetPtr)
+{
+ const U32 cappedSearchLog = MIN(ms->cParams.searchLog, 5);
+ switch(cappedSearchLog)
+ {
+ default :
+ case 4 : return ZSTD_RowFindBestMatch_selectMLS(ms, ip, iLimit, ZSTD_noDict, offsetPtr, 4);
+ case 5 : return ZSTD_RowFindBestMatch_selectMLS(ms, ip, iLimit, ZSTD_noDict, offsetPtr, 5);
+ }
+}
+
+FORCE_INLINE_TEMPLATE size_t ZSTD_RowFindBestMatch_dictMatchState_selectRowLog(
+ ZSTD_matchState_t* ms,
+ const BYTE* ip, const BYTE* const iLimit,
+ size_t* offsetPtr)
+{
+ const U32 cappedSearchLog = MIN(ms->cParams.searchLog, 5);
+ switch(cappedSearchLog)
+ {
+ default :
+ case 4 : return ZSTD_RowFindBestMatch_selectMLS(ms, ip, iLimit, ZSTD_dictMatchState, offsetPtr, 4);
+ case 5 : return ZSTD_RowFindBestMatch_selectMLS(ms, ip, iLimit, ZSTD_dictMatchState, offsetPtr, 5);
+ }
+}
+
+FORCE_INLINE_TEMPLATE size_t ZSTD_RowFindBestMatch_dedicatedDictSearch_selectRowLog(
+ ZSTD_matchState_t* ms,
+ const BYTE* ip, const BYTE* const iLimit,
+ size_t* offsetPtr)
+{
+ const U32 cappedSearchLog = MIN(ms->cParams.searchLog, 5);
+ switch(cappedSearchLog)
+ {
+ default :
+ case 4 : return ZSTD_RowFindBestMatch_selectMLS(ms, ip, iLimit, ZSTD_dedicatedDictSearch, offsetPtr, 4);
+ case 5 : return ZSTD_RowFindBestMatch_selectMLS(ms, ip, iLimit, ZSTD_dedicatedDictSearch, offsetPtr, 5);
+ }
+}
+
+FORCE_INLINE_TEMPLATE size_t ZSTD_RowFindBestMatch_extDict_selectRowLog (
+ ZSTD_matchState_t* ms,
+ const BYTE* ip, const BYTE* const iLimit,
+ size_t* offsetPtr)
+{
+ const U32 cappedSearchLog = MIN(ms->cParams.searchLog, 5);
+ switch(cappedSearchLog)
+ {
+ default :
+ case 4 : return ZSTD_RowFindBestMatch_selectMLS(ms, ip, iLimit, ZSTD_extDict, offsetPtr, 4);
+ case 5 : return ZSTD_RowFindBestMatch_selectMLS(ms, ip, iLimit, ZSTD_extDict, offsetPtr, 5);
+ }
+}
+
/* *******************************
* Common parser - lazy strategy
*********************************/
-typedef enum { search_hashChain, search_binaryTree } searchMethod_e;
+typedef enum { search_hashChain=0, search_binaryTree=1, search_rowHash=2 } searchMethod_e;
FORCE_INLINE_TEMPLATE size_t
ZSTD_compressBlock_lazy_generic(
@@ -863,10 +1525,11 @@ ZSTD_compressBlock_lazy_generic(
const BYTE* ip = istart;
const BYTE* anchor = istart;
const BYTE* const iend = istart + srcSize;
- const BYTE* const ilimit = iend - 8;
+ const BYTE* const ilimit = searchMethod == search_rowHash ? iend - 8 - ZSTD_ROW_HASH_CACHE_SIZE : iend - 8;
const BYTE* const base = ms->window.base;
const U32 prefixLowestIndex = ms->window.dictLimit;
const BYTE* const prefixLowest = base + prefixLowestIndex;
+ const U32 rowLog = ms->cParams.searchLog < 5 ? 4 : 5;
typedef size_t (*searchMax_f)(
ZSTD_matchState_t* ms,
@@ -878,26 +1541,30 @@ ZSTD_compressBlock_lazy_generic(
* that should never occur (extDict modes go to the other implementation
* below and there is no DDSS for binary tree search yet).
*/
- const searchMax_f searchFuncs[4][2] = {
+ const searchMax_f searchFuncs[4][3] = {
{
ZSTD_HcFindBestMatch_selectMLS,
- ZSTD_BtFindBestMatch_selectMLS
+ ZSTD_BtFindBestMatch_selectMLS,
+ ZSTD_RowFindBestMatch_selectRowLog
},
{
NULL,
+ NULL,
NULL
},
{
ZSTD_HcFindBestMatch_dictMatchState_selectMLS,
- ZSTD_BtFindBestMatch_dictMatchState_selectMLS
+ ZSTD_BtFindBestMatch_dictMatchState_selectMLS,
+ ZSTD_RowFindBestMatch_dictMatchState_selectRowLog
},
{
ZSTD_HcFindBestMatch_dedicatedDictSearch_selectMLS,
- NULL
+ NULL,
+ ZSTD_RowFindBestMatch_dedicatedDictSearch_selectRowLog
}
};
- searchMax_f const searchMax = searchFuncs[dictMode][searchMethod == search_binaryTree];
+ searchMax_f const searchMax = searchFuncs[dictMode][(int)searchMethod];
U32 offset_1 = rep[0], offset_2 = rep[1], savedOffset=0;
const int isDMS = dictMode == ZSTD_dictMatchState;
@@ -915,9 +1582,7 @@ ZSTD_compressBlock_lazy_generic(
assert(searchMax != NULL);
- DEBUGLOG(5, "ZSTD_compressBlock_lazy_generic (dictMode=%u)", (U32)dictMode);
-
- /* init */
+ DEBUGLOG(5, "ZSTD_compressBlock_lazy_generic (dictMode=%u) (searchFunc=%u)", (U32)dictMode, (U32)searchMethod);
ip += (dictAndPrefixLength == 0);
if (dictMode == ZSTD_noDict) {
U32 const curr = (U32)(ip - base);
@@ -933,6 +1598,12 @@ ZSTD_compressBlock_lazy_generic(
assert(offset_2 <= dictAndPrefixLength);
}
+ if (searchMethod == search_rowHash) {
+ ZSTD_row_fillHashCache(ms, base, rowLog,
+ MIN(ms->cParams.minMatch, 6 /* mls caps out at 6 */),
+ ms->nextToUpdate, ilimit);
+ }
+
/* Match Loop */
#if defined(__GNUC__) && defined(__x86_64__)
/* I've measured random a 5% speed loss on levels 5 & 6 (greedy) when the
@@ -1198,6 +1869,70 @@ size_t ZSTD_compressBlock_greedy_dedicatedDictSearch(
return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_hashChain, 0, ZSTD_dedicatedDictSearch);
}
+/* Row-based matchfinder */
+size_t ZSTD_compressBlock_lazy2_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize)
+{
+ return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_rowHash, 2, ZSTD_noDict);
+}
+
+size_t ZSTD_compressBlock_lazy_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize)
+{
+ return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_rowHash, 1, ZSTD_noDict);
+}
+
+size_t ZSTD_compressBlock_greedy_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize)
+{
+ return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_rowHash, 0, ZSTD_noDict);
+}
+
+size_t ZSTD_compressBlock_lazy2_dictMatchState_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize)
+{
+ return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_rowHash, 2, ZSTD_dictMatchState);
+}
+
+size_t ZSTD_compressBlock_lazy_dictMatchState_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize)
+{
+ return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_rowHash, 1, ZSTD_dictMatchState);
+}
+
+size_t ZSTD_compressBlock_greedy_dictMatchState_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize)
+{
+ return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_rowHash, 0, ZSTD_dictMatchState);
+}
+
+
+size_t ZSTD_compressBlock_lazy2_dedicatedDictSearch_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize)
+{
+ return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_rowHash, 2, ZSTD_dedicatedDictSearch);
+}
+
+size_t ZSTD_compressBlock_lazy_dedicatedDictSearch_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize)
+{
+ return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_rowHash, 1, ZSTD_dedicatedDictSearch);
+}
+
+size_t ZSTD_compressBlock_greedy_dedicatedDictSearch_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize)
+{
+ return ZSTD_compressBlock_lazy_generic(ms, seqStore, rep, src, srcSize, search_rowHash, 0, ZSTD_dedicatedDictSearch);
+}
FORCE_INLINE_TEMPLATE
size_t ZSTD_compressBlock_lazy_extDict_generic(
@@ -1210,7 +1945,7 @@ size_t ZSTD_compressBlock_lazy_extDict_generic(
const BYTE* ip = istart;
const BYTE* anchor = istart;
const BYTE* const iend = istart + srcSize;
- const BYTE* const ilimit = iend - 8;
+ const BYTE* const ilimit = searchMethod == search_rowHash ? iend - 8 - ZSTD_ROW_HASH_CACHE_SIZE : iend - 8;
const BYTE* const base = ms->window.base;
const U32 dictLimit = ms->window.dictLimit;
const BYTE* const prefixStart = base + dictLimit;
@@ -1218,18 +1953,28 @@ size_t ZSTD_compressBlock_lazy_extDict_generic(
const BYTE* const dictEnd = dictBase + dictLimit;
const BYTE* const dictStart = dictBase + ms->window.lowLimit;
const U32 windowLog = ms->cParams.windowLog;
+ const U32 rowLog = ms->cParams.searchLog < 5 ? 4 : 5;
typedef size_t (*searchMax_f)(
ZSTD_matchState_t* ms,
const BYTE* ip, const BYTE* iLimit, size_t* offsetPtr);
- searchMax_f searchMax = searchMethod==search_binaryTree ? ZSTD_BtFindBestMatch_extDict_selectMLS : ZSTD_HcFindBestMatch_extDict_selectMLS;
-
+ const searchMax_f searchFuncs[3] = {
+ ZSTD_HcFindBestMatch_extDict_selectMLS,
+ ZSTD_BtFindBestMatch_extDict_selectMLS,
+ ZSTD_RowFindBestMatch_extDict_selectRowLog
+ };
+ searchMax_f searchMax = searchFuncs[(int)searchMethod];
U32 offset_1 = rep[0], offset_2 = rep[1];
- DEBUGLOG(5, "ZSTD_compressBlock_lazy_extDict_generic");
+ DEBUGLOG(5, "ZSTD_compressBlock_lazy_extDict_generic (searchFunc=%u)", (U32)searchMethod);
/* init */
ip += (ip == prefixStart);
+ if (searchMethod == search_rowHash) {
+ ZSTD_row_fillHashCache(ms, base, rowLog,
+ MIN(ms->cParams.minMatch, 6 /* mls caps out at 6 */),
+ ms->nextToUpdate, ilimit);
+ }
/* Match Loop */
#if defined(__GNUC__) && defined(__x86_64__)
@@ -1249,7 +1994,8 @@ size_t ZSTD_compressBlock_lazy_extDict_generic(
const U32 repIndex = (U32)(curr+1 - offset_1);
const BYTE* const repBase = repIndex < dictLimit ? dictBase : base;
const BYTE* const repMatch = repBase + repIndex;
- if (((U32)((dictLimit-1) - repIndex) >= 3) & (repIndex > windowLow)) /* intentional overflow */
+ if ( ((U32)((dictLimit-1) - repIndex) >= 3) /* intentional overflow */
+ & (offset_1 < curr+1 - windowLow) ) /* note: we are searching at curr+1 */
if (MEM_read32(ip+1) == MEM_read32(repMatch)) {
/* repcode detected we should take it */
const BYTE* const repEnd = repIndex < dictLimit ? dictEnd : iend;
@@ -1280,7 +2026,8 @@ size_t ZSTD_compressBlock_lazy_extDict_generic(
const U32 repIndex = (U32)(curr - offset_1);
const BYTE* const repBase = repIndex < dictLimit ? dictBase : base;
const BYTE* const repMatch = repBase + repIndex;
- if (((U32)((dictLimit-1) - repIndex) >= 3) & (repIndex > windowLow)) /* intentional overflow */
+ if ( ((U32)((dictLimit-1) - repIndex) >= 3) /* intentional overflow : do not test positions overlapping 2 memory segments */
+ & (offset_1 < curr - windowLow) ) /* equivalent to `curr > repIndex >= windowLow` */
if (MEM_read32(ip) == MEM_read32(repMatch)) {
/* repcode detected */
const BYTE* const repEnd = repIndex < dictLimit ? dictEnd : iend;
@@ -1311,7 +2058,8 @@ size_t ZSTD_compressBlock_lazy_extDict_generic(
const U32 repIndex = (U32)(curr - offset_1);
const BYTE* const repBase = repIndex < dictLimit ? dictBase : base;
const BYTE* const repMatch = repBase + repIndex;
- if (((U32)((dictLimit-1) - repIndex) >= 3) & (repIndex > windowLow)) /* intentional overflow */
+ if ( ((U32)((dictLimit-1) - repIndex) >= 3) /* intentional overflow : do not test positions overlapping 2 memory segments */
+ & (offset_1 < curr - windowLow) ) /* equivalent to `curr > repIndex >= windowLow` */
if (MEM_read32(ip) == MEM_read32(repMatch)) {
/* repcode detected */
const BYTE* const repEnd = repIndex < dictLimit ? dictEnd : iend;
@@ -1357,7 +2105,8 @@ _storeSequence:
const U32 repIndex = repCurrent - offset_2;
const BYTE* const repBase = repIndex < dictLimit ? dictBase : base;
const BYTE* const repMatch = repBase + repIndex;
- if (((U32)((dictLimit-1) - repIndex) >= 3) & (repIndex > windowLow)) /* intentional overflow */
+ if ( ((U32)((dictLimit-1) - repIndex) >= 3) /* intentional overflow : do not test positions overlapping 2 memory segments */
+ & (offset_2 < repCurrent - windowLow) ) /* equivalent to `curr > repIndex >= windowLow` */
if (MEM_read32(ip) == MEM_read32(repMatch)) {
/* repcode detected we should take it */
const BYTE* const repEnd = repIndex < dictLimit ? dictEnd : iend;
@@ -1410,3 +2159,26 @@ size_t ZSTD_compressBlock_btlazy2_extDict(
{
return ZSTD_compressBlock_lazy_extDict_generic(ms, seqStore, rep, src, srcSize, search_binaryTree, 2);
}
+
+size_t ZSTD_compressBlock_greedy_extDict_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize)
+{
+ return ZSTD_compressBlock_lazy_extDict_generic(ms, seqStore, rep, src, srcSize, search_rowHash, 0);
+}
+
+size_t ZSTD_compressBlock_lazy_extDict_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize)
+
+{
+ return ZSTD_compressBlock_lazy_extDict_generic(ms, seqStore, rep, src, srcSize, search_rowHash, 1);
+}
+
+size_t ZSTD_compressBlock_lazy2_extDict_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize)
+
+{
+ return ZSTD_compressBlock_lazy_extDict_generic(ms, seqStore, rep, src, srcSize, search_rowHash, 2);
+}
diff --git a/thirdparty/zstd/compress/zstd_lazy.h b/thirdparty/zstd/compress/zstd_lazy.h
index d0214d5e73..150f7b390b 100644
--- a/thirdparty/zstd/compress/zstd_lazy.h
+++ b/thirdparty/zstd/compress/zstd_lazy.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -26,6 +26,7 @@ extern "C" {
#define ZSTD_LAZY_DDSS_BUCKET_LOG 2
U32 ZSTD_insertAndFindFirstIndex(ZSTD_matchState_t* ms, const BYTE* ip);
+void ZSTD_row_update(ZSTD_matchState_t* const ms, const BYTE* ip);
void ZSTD_dedicatedDictSearch_lazy_loadDictionary(ZSTD_matchState_t* ms, const BYTE* const ip);
@@ -43,6 +44,15 @@ size_t ZSTD_compressBlock_lazy(
size_t ZSTD_compressBlock_greedy(
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
void const* src, size_t srcSize);
+size_t ZSTD_compressBlock_lazy2_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize);
+size_t ZSTD_compressBlock_lazy_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize);
+size_t ZSTD_compressBlock_greedy_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize);
size_t ZSTD_compressBlock_btlazy2_dictMatchState(
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
@@ -56,6 +66,15 @@ size_t ZSTD_compressBlock_lazy_dictMatchState(
size_t ZSTD_compressBlock_greedy_dictMatchState(
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
void const* src, size_t srcSize);
+size_t ZSTD_compressBlock_lazy2_dictMatchState_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize);
+size_t ZSTD_compressBlock_lazy_dictMatchState_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize);
+size_t ZSTD_compressBlock_greedy_dictMatchState_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize);
size_t ZSTD_compressBlock_lazy2_dedicatedDictSearch(
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
@@ -66,6 +85,15 @@ size_t ZSTD_compressBlock_lazy_dedicatedDictSearch(
size_t ZSTD_compressBlock_greedy_dedicatedDictSearch(
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
void const* src, size_t srcSize);
+size_t ZSTD_compressBlock_lazy2_dedicatedDictSearch_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize);
+size_t ZSTD_compressBlock_lazy_dedicatedDictSearch_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize);
+size_t ZSTD_compressBlock_greedy_dedicatedDictSearch_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize);
size_t ZSTD_compressBlock_greedy_extDict(
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
@@ -76,9 +104,19 @@ size_t ZSTD_compressBlock_lazy_extDict(
size_t ZSTD_compressBlock_lazy2_extDict(
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
void const* src, size_t srcSize);
+size_t ZSTD_compressBlock_greedy_extDict_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize);
+size_t ZSTD_compressBlock_lazy_extDict_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize);
+size_t ZSTD_compressBlock_lazy2_extDict_row(
+ ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ void const* src, size_t srcSize);
size_t ZSTD_compressBlock_btlazy2_extDict(
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
void const* src, size_t srcSize);
+
#if defined (__cplusplus)
}
diff --git a/thirdparty/zstd/compress/zstd_ldm.c b/thirdparty/zstd/compress/zstd_ldm.c
index 3f3d7c46ab..fa4ebeabd7 100644
--- a/thirdparty/zstd/compress/zstd_ldm.c
+++ b/thirdparty/zstd/compress/zstd_ldm.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -11,13 +11,126 @@
#include "zstd_ldm.h"
#include "../common/debug.h"
+#include "../common/xxhash.h"
#include "zstd_fast.h" /* ZSTD_fillHashTable() */
#include "zstd_double_fast.h" /* ZSTD_fillDoubleHashTable() */
+#include "zstd_ldm_geartab.h"
#define LDM_BUCKET_SIZE_LOG 3
#define LDM_MIN_MATCH_LENGTH 64
#define LDM_HASH_RLOG 7
-#define LDM_HASH_CHAR_OFFSET 10
+
+typedef struct {
+ U64 rolling;
+ U64 stopMask;
+} ldmRollingHashState_t;
+
+/** ZSTD_ldm_gear_init():
+ *
+ * Initializes the rolling hash state such that it will honor the
+ * settings in params. */
+static void ZSTD_ldm_gear_init(ldmRollingHashState_t* state, ldmParams_t const* params)
+{
+ unsigned maxBitsInMask = MIN(params->minMatchLength, 64);
+ unsigned hashRateLog = params->hashRateLog;
+
+ state->rolling = ~(U32)0;
+
+ /* The choice of the splitting criterion is subject to two conditions:
+ * 1. it has to trigger on average every 2^(hashRateLog) bytes;
+ * 2. ideally, it has to depend on a window of minMatchLength bytes.
+ *
+ * In the gear hash algorithm, bit n depends on the last n bytes;
+ * so in order to obtain a good quality splitting criterion it is
+ * preferable to use bits with high weight.
+ *
+ * To match condition 1 we use a mask with hashRateLog bits set
+ * and, because of the previous remark, we make sure these bits
+ * have the highest possible weight while still respecting
+ * condition 2.
+ */
+ if (hashRateLog > 0 && hashRateLog <= maxBitsInMask) {
+ state->stopMask = (((U64)1 << hashRateLog) - 1) << (maxBitsInMask - hashRateLog);
+ } else {
+ /* In this degenerate case we simply honor the hash rate. */
+ state->stopMask = ((U64)1 << hashRateLog) - 1;
+ }
+}
+
+/** ZSTD_ldm_gear_reset()
+ * Feeds [data, data + minMatchLength) into the hash without registering any
+ * splits. This effectively resets the hash state. This is used when skipping
+ * over data, either at the beginning of a block, or skipping sections.
+ */
+static void ZSTD_ldm_gear_reset(ldmRollingHashState_t* state,
+ BYTE const* data, size_t minMatchLength)
+{
+ U64 hash = state->rolling;
+ size_t n = 0;
+
+#define GEAR_ITER_ONCE() do { \
+ hash = (hash << 1) + ZSTD_ldm_gearTab[data[n] & 0xff]; \
+ n += 1; \
+ } while (0)
+ while (n + 3 < minMatchLength) {
+ GEAR_ITER_ONCE();
+ GEAR_ITER_ONCE();
+ GEAR_ITER_ONCE();
+ GEAR_ITER_ONCE();
+ }
+ while (n < minMatchLength) {
+ GEAR_ITER_ONCE();
+ }
+#undef GEAR_ITER_ONCE
+}
+
+/** ZSTD_ldm_gear_feed():
+ *
+ * Registers in the splits array all the split points found in the first
+ * size bytes following the data pointer. This function terminates when
+ * either all the data has been processed or LDM_BATCH_SIZE splits are
+ * present in the splits array.
+ *
+ * Precondition: The splits array must not be full.
+ * Returns: The number of bytes processed. */
+static size_t ZSTD_ldm_gear_feed(ldmRollingHashState_t* state,
+ BYTE const* data, size_t size,
+ size_t* splits, unsigned* numSplits)
+{
+ size_t n;
+ U64 hash, mask;
+
+ hash = state->rolling;
+ mask = state->stopMask;
+ n = 0;
+
+#define GEAR_ITER_ONCE() do { \
+ hash = (hash << 1) + ZSTD_ldm_gearTab[data[n] & 0xff]; \
+ n += 1; \
+ if (UNLIKELY((hash & mask) == 0)) { \
+ splits[*numSplits] = n; \
+ *numSplits += 1; \
+ if (*numSplits == LDM_BATCH_SIZE) \
+ goto done; \
+ } \
+ } while (0)
+
+ while (n + 3 < size) {
+ GEAR_ITER_ONCE();
+ GEAR_ITER_ONCE();
+ GEAR_ITER_ONCE();
+ GEAR_ITER_ONCE();
+ }
+ while (n < size) {
+ GEAR_ITER_ONCE();
+ }
+
+#undef GEAR_ITER_ONCE
+
+done:
+ state->rolling = hash;
+ return n;
+}
void ZSTD_ldm_adjustParameters(ldmParams_t* params,
ZSTD_compressionParameters const* cParams)
@@ -54,41 +167,6 @@ size_t ZSTD_ldm_getMaxNbSeq(ldmParams_t params, size_t maxChunkSize)
return params.enableLdm ? (maxChunkSize / params.minMatchLength) : 0;
}
-/** ZSTD_ldm_getSmallHash() :
- * numBits should be <= 32
- * If numBits==0, returns 0.
- * @return : the most significant numBits of value. */
-static U32 ZSTD_ldm_getSmallHash(U64 value, U32 numBits)
-{
- assert(numBits <= 32);
- return numBits == 0 ? 0 : (U32)(value >> (64 - numBits));
-}
-
-/** ZSTD_ldm_getChecksum() :
- * numBitsToDiscard should be <= 32
- * @return : the next most significant 32 bits after numBitsToDiscard */
-static U32 ZSTD_ldm_getChecksum(U64 hash, U32 numBitsToDiscard)
-{
- assert(numBitsToDiscard <= 32);
- return (hash >> (64 - 32 - numBitsToDiscard)) & 0xFFFFFFFF;
-}
-
-/** ZSTD_ldm_getTag() ;
- * Given the hash, returns the most significant numTagBits bits
- * after (32 + hbits) bits.
- *
- * If there are not enough bits remaining, return the last
- * numTagBits bits. */
-static U32 ZSTD_ldm_getTag(U64 hash, U32 hbits, U32 numTagBits)
-{
- assert(numTagBits < 32 && hbits <= 32);
- if (32 - hbits < numTagBits) {
- return hash & (((U32)1 << numTagBits) - 1);
- } else {
- return (hash >> (32 - hbits - numTagBits)) & (((U32)1 << numTagBits) - 1);
- }
-}
-
/** ZSTD_ldm_getBucket() :
* Returns a pointer to the start of the bucket associated with hash. */
static ldmEntry_t* ZSTD_ldm_getBucket(
@@ -103,38 +181,12 @@ static void ZSTD_ldm_insertEntry(ldmState_t* ldmState,
size_t const hash, const ldmEntry_t entry,
ldmParams_t const ldmParams)
{
- BYTE* const bucketOffsets = ldmState->bucketOffsets;
- *(ZSTD_ldm_getBucket(ldmState, hash, ldmParams) + bucketOffsets[hash]) = entry;
- bucketOffsets[hash]++;
- bucketOffsets[hash] &= ((U32)1 << ldmParams.bucketSizeLog) - 1;
-}
+ BYTE* const pOffset = ldmState->bucketOffsets + hash;
+ unsigned const offset = *pOffset;
+
+ *(ZSTD_ldm_getBucket(ldmState, hash, ldmParams) + offset) = entry;
+ *pOffset = (BYTE)((offset + 1) & ((1u << ldmParams.bucketSizeLog) - 1));
-/** ZSTD_ldm_makeEntryAndInsertByTag() :
- *
- * Gets the small hash, checksum, and tag from the rollingHash.
- *
- * If the tag matches (1 << ldmParams.hashRateLog)-1, then
- * creates an ldmEntry from the offset, and inserts it into the hash table.
- *
- * hBits is the length of the small hash, which is the most significant hBits
- * of rollingHash. The checksum is the next 32 most significant bits, followed
- * by ldmParams.hashRateLog bits that make up the tag. */
-static void ZSTD_ldm_makeEntryAndInsertByTag(ldmState_t* ldmState,
- U64 const rollingHash,
- U32 const hBits,
- U32 const offset,
- ldmParams_t const ldmParams)
-{
- U32 const tag = ZSTD_ldm_getTag(rollingHash, hBits, ldmParams.hashRateLog);
- U32 const tagMask = ((U32)1 << ldmParams.hashRateLog) - 1;
- if (tag == tagMask) {
- U32 const hash = ZSTD_ldm_getSmallHash(rollingHash, hBits);
- U32 const checksum = ZSTD_ldm_getChecksum(rollingHash, hBits);
- ldmEntry_t entry;
- entry.offset = offset;
- entry.checksum = checksum;
- ZSTD_ldm_insertEntry(ldmState, hash, entry, ldmParams);
- }
}
/** ZSTD_ldm_countBackwardsMatch() :
@@ -212,43 +264,42 @@ static size_t ZSTD_ldm_fillFastTables(ZSTD_matchState_t* ms,
return 0;
}
-/** ZSTD_ldm_fillLdmHashTable() :
- *
- * Fills hashTable from (lastHashed + 1) to iend (non-inclusive).
- * lastHash is the rolling hash that corresponds to lastHashed.
- *
- * Returns the rolling hash corresponding to position iend-1. */
-static U64 ZSTD_ldm_fillLdmHashTable(ldmState_t* state,
- U64 lastHash, const BYTE* lastHashed,
- const BYTE* iend, const BYTE* base,
- U32 hBits, ldmParams_t const ldmParams)
-{
- U64 rollingHash = lastHash;
- const BYTE* cur = lastHashed + 1;
-
- while (cur < iend) {
- rollingHash = ZSTD_rollingHash_rotate(rollingHash, cur[-1],
- cur[ldmParams.minMatchLength-1],
- state->hashPower);
- ZSTD_ldm_makeEntryAndInsertByTag(state,
- rollingHash, hBits,
- (U32)(cur - base), ldmParams);
- ++cur;
- }
- return rollingHash;
-}
-
void ZSTD_ldm_fillHashTable(
- ldmState_t* state, const BYTE* ip,
+ ldmState_t* ldmState, const BYTE* ip,
const BYTE* iend, ldmParams_t const* params)
{
+ U32 const minMatchLength = params->minMatchLength;
+ U32 const hBits = params->hashLog - params->bucketSizeLog;
+ BYTE const* const base = ldmState->window.base;
+ BYTE const* const istart = ip;
+ ldmRollingHashState_t hashState;
+ size_t* const splits = ldmState->splitIndices;
+ unsigned numSplits;
+
DEBUGLOG(5, "ZSTD_ldm_fillHashTable");
- if ((size_t)(iend - ip) >= params->minMatchLength) {
- U64 startingHash = ZSTD_rollingHash_compute(ip, params->minMatchLength);
- ZSTD_ldm_fillLdmHashTable(
- state, startingHash, ip, iend - params->minMatchLength, state->window.base,
- params->hashLog - params->bucketSizeLog,
- *params);
+
+ ZSTD_ldm_gear_init(&hashState, params);
+ while (ip < iend) {
+ size_t hashed;
+ unsigned n;
+
+ numSplits = 0;
+ hashed = ZSTD_ldm_gear_feed(&hashState, ip, iend - ip, splits, &numSplits);
+
+ for (n = 0; n < numSplits; n++) {
+ if (ip + splits[n] >= istart + minMatchLength) {
+ BYTE const* const split = ip + splits[n] - minMatchLength;
+ U64 const xxhash = XXH64(split, minMatchLength, 0);
+ U32 const hash = (U32)(xxhash & (((U32)1 << hBits) - 1));
+ ldmEntry_t entry;
+
+ entry.offset = (U32)(split - base);
+ entry.checksum = (U32)(xxhash >> 32);
+ ZSTD_ldm_insertEntry(ldmState, hash, entry, *params);
+ }
+ }
+
+ ip += hashed;
}
}
@@ -274,11 +325,8 @@ static size_t ZSTD_ldm_generateSequences_internal(
/* LDM parameters */
int const extDict = ZSTD_window_hasExtDict(ldmState->window);
U32 const minMatchLength = params->minMatchLength;
- U64 const hashPower = ldmState->hashPower;
+ U32 const entsPerBucket = 1U << params->bucketSizeLog;
U32 const hBits = params->hashLog - params->bucketSizeLog;
- U32 const ldmBucketSize = 1U << params->bucketSizeLog;
- U32 const hashRateLog = params->hashRateLog;
- U32 const ldmTagMask = (1U << params->hashRateLog) - 1;
/* Prefix and extDict parameters */
U32 const dictLimit = ldmState->window.dictLimit;
U32 const lowestIndex = extDict ? ldmState->window.lowLimit : dictLimit;
@@ -290,45 +338,69 @@ static size_t ZSTD_ldm_generateSequences_internal(
/* Input bounds */
BYTE const* const istart = (BYTE const*)src;
BYTE const* const iend = istart + srcSize;
- BYTE const* const ilimit = iend - MAX(minMatchLength, HASH_READ_SIZE);
+ BYTE const* const ilimit = iend - HASH_READ_SIZE;
/* Input positions */
BYTE const* anchor = istart;
BYTE const* ip = istart;
- /* Rolling hash */
- BYTE const* lastHashed = NULL;
- U64 rollingHash = 0;
-
- while (ip <= ilimit) {
- size_t mLength;
- U32 const curr = (U32)(ip - base);
- size_t forwardMatchLength = 0, backwardMatchLength = 0;
- ldmEntry_t* bestEntry = NULL;
- if (ip != istart) {
- rollingHash = ZSTD_rollingHash_rotate(rollingHash, lastHashed[0],
- lastHashed[minMatchLength],
- hashPower);
- } else {
- rollingHash = ZSTD_rollingHash_compute(ip, minMatchLength);
+ /* Rolling hash state */
+ ldmRollingHashState_t hashState;
+ /* Arrays for staged-processing */
+ size_t* const splits = ldmState->splitIndices;
+ ldmMatchCandidate_t* const candidates = ldmState->matchCandidates;
+ unsigned numSplits;
+
+ if (srcSize < minMatchLength)
+ return iend - anchor;
+
+ /* Initialize the rolling hash state with the first minMatchLength bytes */
+ ZSTD_ldm_gear_init(&hashState, params);
+ ZSTD_ldm_gear_reset(&hashState, ip, minMatchLength);
+ ip += minMatchLength;
+
+ while (ip < ilimit) {
+ size_t hashed;
+ unsigned n;
+
+ numSplits = 0;
+ hashed = ZSTD_ldm_gear_feed(&hashState, ip, ilimit - ip,
+ splits, &numSplits);
+
+ for (n = 0; n < numSplits; n++) {
+ BYTE const* const split = ip + splits[n] - minMatchLength;
+ U64 const xxhash = XXH64(split, minMatchLength, 0);
+ U32 const hash = (U32)(xxhash & (((U32)1 << hBits) - 1));
+
+ candidates[n].split = split;
+ candidates[n].hash = hash;
+ candidates[n].checksum = (U32)(xxhash >> 32);
+ candidates[n].bucket = ZSTD_ldm_getBucket(ldmState, hash, *params);
+ PREFETCH_L1(candidates[n].bucket);
}
- lastHashed = ip;
- /* Do not insert and do not look for a match */
- if (ZSTD_ldm_getTag(rollingHash, hBits, hashRateLog) != ldmTagMask) {
- ip++;
- continue;
- }
+ for (n = 0; n < numSplits; n++) {
+ size_t forwardMatchLength = 0, backwardMatchLength = 0,
+ bestMatchLength = 0, mLength;
+ U32 offset;
+ BYTE const* const split = candidates[n].split;
+ U32 const checksum = candidates[n].checksum;
+ U32 const hash = candidates[n].hash;
+ ldmEntry_t* const bucket = candidates[n].bucket;
+ ldmEntry_t const* cur;
+ ldmEntry_t const* bestEntry = NULL;
+ ldmEntry_t newEntry;
+
+ newEntry.offset = (U32)(split - base);
+ newEntry.checksum = checksum;
+
+ /* If a split point would generate a sequence overlapping with
+ * the previous one, we merely register it in the hash table and
+ * move on */
+ if (split < anchor) {
+ ZSTD_ldm_insertEntry(ldmState, hash, newEntry, *params);
+ continue;
+ }
- /* Get the best entry and compute the match lengths */
- {
- ldmEntry_t* const bucket =
- ZSTD_ldm_getBucket(ldmState,
- ZSTD_ldm_getSmallHash(rollingHash, hBits),
- *params);
- ldmEntry_t* cur;
- size_t bestMatchLength = 0;
- U32 const checksum = ZSTD_ldm_getChecksum(rollingHash, hBits);
-
- for (cur = bucket; cur < bucket + ldmBucketSize; ++cur) {
+ for (cur = bucket; cur < bucket + entsPerBucket; cur++) {
size_t curForwardMatchLength, curBackwardMatchLength,
curTotalMatchLength;
if (cur->checksum != checksum || cur->offset <= lowestIndex) {
@@ -342,31 +414,23 @@ static size_t ZSTD_ldm_generateSequences_internal(
cur->offset < dictLimit ? dictEnd : iend;
BYTE const* const lowMatchPtr =
cur->offset < dictLimit ? dictStart : lowPrefixPtr;
-
- curForwardMatchLength = ZSTD_count_2segments(
- ip, pMatch, iend,
- matchEnd, lowPrefixPtr);
+ curForwardMatchLength =
+ ZSTD_count_2segments(split, pMatch, iend, matchEnd, lowPrefixPtr);
if (curForwardMatchLength < minMatchLength) {
continue;
}
- curBackwardMatchLength =
- ZSTD_ldm_countBackwardsMatch_2segments(ip, anchor,
- pMatch, lowMatchPtr,
- dictStart, dictEnd);
- curTotalMatchLength = curForwardMatchLength +
- curBackwardMatchLength;
+ curBackwardMatchLength = ZSTD_ldm_countBackwardsMatch_2segments(
+ split, anchor, pMatch, lowMatchPtr, dictStart, dictEnd);
} else { /* !extDict */
BYTE const* const pMatch = base + cur->offset;
- curForwardMatchLength = ZSTD_count(ip, pMatch, iend);
+ curForwardMatchLength = ZSTD_count(split, pMatch, iend);
if (curForwardMatchLength < minMatchLength) {
continue;
}
curBackwardMatchLength =
- ZSTD_ldm_countBackwardsMatch(ip, anchor, pMatch,
- lowPrefixPtr);
- curTotalMatchLength = curForwardMatchLength +
- curBackwardMatchLength;
+ ZSTD_ldm_countBackwardsMatch(split, anchor, pMatch, lowPrefixPtr);
}
+ curTotalMatchLength = curForwardMatchLength + curBackwardMatchLength;
if (curTotalMatchLength > bestMatchLength) {
bestMatchLength = curTotalMatchLength;
@@ -375,57 +439,54 @@ static size_t ZSTD_ldm_generateSequences_internal(
bestEntry = cur;
}
}
- }
-
- /* No match found -- continue searching */
- if (bestEntry == NULL) {
- ZSTD_ldm_makeEntryAndInsertByTag(ldmState, rollingHash,
- hBits, curr,
- *params);
- ip++;
- continue;
- }
- /* Match found */
- mLength = forwardMatchLength + backwardMatchLength;
- ip -= backwardMatchLength;
+ /* No match found -- insert an entry into the hash table
+ * and process the next candidate match */
+ if (bestEntry == NULL) {
+ ZSTD_ldm_insertEntry(ldmState, hash, newEntry, *params);
+ continue;
+ }
- {
- /* Store the sequence:
- * ip = curr - backwardMatchLength
- * The match is at (bestEntry->offset - backwardMatchLength)
- */
- U32 const matchIndex = bestEntry->offset;
- U32 const offset = curr - matchIndex;
- rawSeq* const seq = rawSeqStore->seq + rawSeqStore->size;
-
- /* Out of sequence storage */
- if (rawSeqStore->size == rawSeqStore->capacity)
- return ERROR(dstSize_tooSmall);
- seq->litLength = (U32)(ip - anchor);
- seq->matchLength = (U32)mLength;
- seq->offset = offset;
- rawSeqStore->size++;
- }
+ /* Match found */
+ offset = (U32)(split - base) - bestEntry->offset;
+ mLength = forwardMatchLength + backwardMatchLength;
+ {
+ rawSeq* const seq = rawSeqStore->seq + rawSeqStore->size;
+
+ /* Out of sequence storage */
+ if (rawSeqStore->size == rawSeqStore->capacity)
+ return ERROR(dstSize_tooSmall);
+ seq->litLength = (U32)(split - backwardMatchLength - anchor);
+ seq->matchLength = (U32)mLength;
+ seq->offset = offset;
+ rawSeqStore->size++;
+ }
- /* Insert the current entry into the hash table */
- ZSTD_ldm_makeEntryAndInsertByTag(ldmState, rollingHash, hBits,
- (U32)(lastHashed - base),
- *params);
+ /* Insert the current entry into the hash table --- it must be
+ * done after the previous block to avoid clobbering bestEntry */
+ ZSTD_ldm_insertEntry(ldmState, hash, newEntry, *params);
- assert(ip + backwardMatchLength == lastHashed);
+ anchor = split + forwardMatchLength;
- /* Fill the hash table from lastHashed+1 to ip+mLength*/
- /* Heuristic: don't need to fill the entire table at end of block */
- if (ip + mLength <= ilimit) {
- rollingHash = ZSTD_ldm_fillLdmHashTable(
- ldmState, rollingHash, lastHashed,
- ip + mLength, base, hBits, *params);
- lastHashed = ip + mLength - 1;
+ /* If we find a match that ends after the data that we've hashed
+ * then we have a repeating, overlapping, pattern. E.g. all zeros.
+ * If one repetition of the pattern matches our `stopMask` then all
+ * repetitions will. We don't need to insert them all into out table,
+ * only the first one. So skip over overlapping matches.
+ * This is a major speed boost (20x) for compressing a single byte
+ * repeated, when that byte ends up in the table.
+ */
+ if (anchor > ip + hashed) {
+ ZSTD_ldm_gear_reset(&hashState, anchor - minMatchLength, minMatchLength);
+ /* Continue the outter loop at anchor (ip + hashed == anchor). */
+ ip = anchor - hashed;
+ break;
+ }
}
- ip += mLength;
- anchor = ip;
+
+ ip += hashed;
}
+
return iend - anchor;
}
@@ -474,7 +535,7 @@ size_t ZSTD_ldm_generateSequences(
assert(chunkStart < iend);
/* 1. Perform overflow correction if necessary. */
- if (ZSTD_window_needOverflowCorrection(ldmState->window, chunkEnd)) {
+ if (ZSTD_window_needOverflowCorrection(ldmState->window, 0, maxDist, ldmState->loadedDictEnd, chunkStart, chunkEnd)) {
U32 const ldmHSize = 1U << params->hashLog;
U32 const correction = ZSTD_window_correctOverflow(
&ldmState->window, /* cycleLog */ 0, maxDist, chunkStart);
@@ -596,12 +657,13 @@ void ZSTD_ldm_skipRawSeqStoreBytes(rawSeqStore_t* rawSeqStore, size_t nbBytes) {
size_t ZSTD_ldm_blockCompress(rawSeqStore_t* rawSeqStore,
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ ZSTD_useRowMatchFinderMode_e useRowMatchFinder,
void const* src, size_t srcSize)
{
const ZSTD_compressionParameters* const cParams = &ms->cParams;
unsigned const minMatch = cParams->minMatch;
ZSTD_blockCompressor const blockCompressor =
- ZSTD_selectBlockCompressor(cParams->strategy, ZSTD_matchState_dictMode(ms));
+ ZSTD_selectBlockCompressor(cParams->strategy, useRowMatchFinder, ZSTD_matchState_dictMode(ms));
/* Input bounds */
BYTE const* const istart = (BYTE const*)src;
BYTE const* const iend = istart + srcSize;
@@ -620,7 +682,7 @@ size_t ZSTD_ldm_blockCompress(rawSeqStore_t* rawSeqStore,
assert(rawSeqStore->pos <= rawSeqStore->size);
assert(rawSeqStore->size <= rawSeqStore->capacity);
- /* Loop through each sequence and apply the block compressor to the lits */
+ /* Loop through each sequence and apply the block compressor to the literals */
while (rawSeqStore->pos < rawSeqStore->size && ip < iend) {
/* maybeSplitSequence updates rawSeqStore->pos */
rawSeq const sequence = maybeSplitSequence(rawSeqStore,
diff --git a/thirdparty/zstd/compress/zstd_ldm.h b/thirdparty/zstd/compress/zstd_ldm.h
index 6561024e4c..393466fa9f 100644
--- a/thirdparty/zstd/compress/zstd_ldm.h
+++ b/thirdparty/zstd/compress/zstd_ldm.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -66,6 +66,7 @@ size_t ZSTD_ldm_generateSequences(
*/
size_t ZSTD_ldm_blockCompress(rawSeqStore_t* rawSeqStore,
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
+ ZSTD_useRowMatchFinderMode_e useRowMatchFinder,
void const* src, size_t srcSize);
/**
@@ -73,7 +74,7 @@ size_t ZSTD_ldm_blockCompress(rawSeqStore_t* rawSeqStore,
*
* Skip past `srcSize` bytes worth of sequences in `rawSeqStore`.
* Avoids emitting matches less than `minMatch` bytes.
- * Must be called for data with is not passed to ZSTD_ldm_blockCompress().
+ * Must be called for data that is not passed to ZSTD_ldm_blockCompress().
*/
void ZSTD_ldm_skipSequences(rawSeqStore_t* rawSeqStore, size_t srcSize,
U32 const minMatch);
diff --git a/thirdparty/zstd/compress/zstd_ldm_geartab.h b/thirdparty/zstd/compress/zstd_ldm_geartab.h
new file mode 100644
index 0000000000..e5c24d856b
--- /dev/null
+++ b/thirdparty/zstd/compress/zstd_ldm_geartab.h
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) Yann Collet, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under both the BSD-style license (found in the
+ * LICENSE file in the root directory of this source tree) and the GPLv2 (found
+ * in the COPYING file in the root directory of this source tree).
+ * You may select, at your option, one of the above-listed licenses.
+ */
+
+#ifndef ZSTD_LDM_GEARTAB_H
+#define ZSTD_LDM_GEARTAB_H
+
+static U64 ZSTD_ldm_gearTab[256] = {
+ 0xf5b8f72c5f77775c, 0x84935f266b7ac412, 0xb647ada9ca730ccc,
+ 0xb065bb4b114fb1de, 0x34584e7e8c3a9fd0, 0x4e97e17c6ae26b05,
+ 0x3a03d743bc99a604, 0xcecd042422c4044f, 0x76de76c58524259e,
+ 0x9c8528f65badeaca, 0x86563706e2097529, 0x2902475fa375d889,
+ 0xafb32a9739a5ebe6, 0xce2714da3883e639, 0x21eaf821722e69e,
+ 0x37b628620b628, 0x49a8d455d88caf5, 0x8556d711e6958140,
+ 0x4f7ae74fc605c1f, 0x829f0c3468bd3a20, 0x4ffdc885c625179e,
+ 0x8473de048a3daf1b, 0x51008822b05646b2, 0x69d75d12b2d1cc5f,
+ 0x8c9d4a19159154bc, 0xc3cc10f4abbd4003, 0xd06ddc1cecb97391,
+ 0xbe48e6e7ed80302e, 0x3481db31cee03547, 0xacc3f67cdaa1d210,
+ 0x65cb771d8c7f96cc, 0x8eb27177055723dd, 0xc789950d44cd94be,
+ 0x934feadc3700b12b, 0x5e485f11edbdf182, 0x1e2e2a46fd64767a,
+ 0x2969ca71d82efa7c, 0x9d46e9935ebbba2e, 0xe056b67e05e6822b,
+ 0x94d73f55739d03a0, 0xcd7010bdb69b5a03, 0x455ef9fcd79b82f4,
+ 0x869cb54a8749c161, 0x38d1a4fa6185d225, 0xb475166f94bbe9bb,
+ 0xa4143548720959f1, 0x7aed4780ba6b26ba, 0xd0ce264439e02312,
+ 0x84366d746078d508, 0xa8ce973c72ed17be, 0x21c323a29a430b01,
+ 0x9962d617e3af80ee, 0xab0ce91d9c8cf75b, 0x530e8ee6d19a4dbc,
+ 0x2ef68c0cf53f5d72, 0xc03a681640a85506, 0x496e4e9f9c310967,
+ 0x78580472b59b14a0, 0x273824c23b388577, 0x66bf923ad45cb553,
+ 0x47ae1a5a2492ba86, 0x35e304569e229659, 0x4765182a46870b6f,
+ 0x6cbab625e9099412, 0xddac9a2e598522c1, 0x7172086e666624f2,
+ 0xdf5003ca503b7837, 0x88c0c1db78563d09, 0x58d51865acfc289d,
+ 0x177671aec65224f1, 0xfb79d8a241e967d7, 0x2be1e101cad9a49a,
+ 0x6625682f6e29186b, 0x399553457ac06e50, 0x35dffb4c23abb74,
+ 0x429db2591f54aade, 0xc52802a8037d1009, 0x6acb27381f0b25f3,
+ 0xf45e2551ee4f823b, 0x8b0ea2d99580c2f7, 0x3bed519cbcb4e1e1,
+ 0xff452823dbb010a, 0x9d42ed614f3dd267, 0x5b9313c06257c57b,
+ 0xa114b8008b5e1442, 0xc1fe311c11c13d4b, 0x66e8763ea34c5568,
+ 0x8b982af1c262f05d, 0xee8876faaa75fbb7, 0x8a62a4d0d172bb2a,
+ 0xc13d94a3b7449a97, 0x6dbbba9dc15d037c, 0xc786101f1d92e0f1,
+ 0xd78681a907a0b79b, 0xf61aaf2962c9abb9, 0x2cfd16fcd3cb7ad9,
+ 0x868c5b6744624d21, 0x25e650899c74ddd7, 0xba042af4a7c37463,
+ 0x4eb1a539465a3eca, 0xbe09dbf03b05d5ca, 0x774e5a362b5472ba,
+ 0x47a1221229d183cd, 0x504b0ca18ef5a2df, 0xdffbdfbde2456eb9,
+ 0x46cd2b2fbee34634, 0xf2aef8fe819d98c3, 0x357f5276d4599d61,
+ 0x24a5483879c453e3, 0x88026889192b4b9, 0x28da96671782dbec,
+ 0x4ef37c40588e9aaa, 0x8837b90651bc9fb3, 0xc164f741d3f0e5d6,
+ 0xbc135a0a704b70ba, 0x69cd868f7622ada, 0xbc37ba89e0b9c0ab,
+ 0x47c14a01323552f6, 0x4f00794bacee98bb, 0x7107de7d637a69d5,
+ 0x88af793bb6f2255e, 0xf3c6466b8799b598, 0xc288c616aa7f3b59,
+ 0x81ca63cf42fca3fd, 0x88d85ace36a2674b, 0xd056bd3792389e7,
+ 0xe55c396c4e9dd32d, 0xbefb504571e6c0a6, 0x96ab32115e91e8cc,
+ 0xbf8acb18de8f38d1, 0x66dae58801672606, 0x833b6017872317fb,
+ 0xb87c16f2d1c92864, 0xdb766a74e58b669c, 0x89659f85c61417be,
+ 0xc8daad856011ea0c, 0x76a4b565b6fe7eae, 0xa469d085f6237312,
+ 0xaaf0365683a3e96c, 0x4dbb746f8424f7b8, 0x638755af4e4acc1,
+ 0x3d7807f5bde64486, 0x17be6d8f5bbb7639, 0x903f0cd44dc35dc,
+ 0x67b672eafdf1196c, 0xa676ff93ed4c82f1, 0x521d1004c5053d9d,
+ 0x37ba9ad09ccc9202, 0x84e54d297aacfb51, 0xa0b4b776a143445,
+ 0x820d471e20b348e, 0x1874383cb83d46dc, 0x97edeec7a1efe11c,
+ 0xb330e50b1bdc42aa, 0x1dd91955ce70e032, 0xa514cdb88f2939d5,
+ 0x2791233fd90db9d3, 0x7b670a4cc50f7a9b, 0x77c07d2a05c6dfa5,
+ 0xe3778b6646d0a6fa, 0xb39c8eda47b56749, 0x933ed448addbef28,
+ 0xaf846af6ab7d0bf4, 0xe5af208eb666e49, 0x5e6622f73534cd6a,
+ 0x297daeca42ef5b6e, 0x862daef3d35539a6, 0xe68722498f8e1ea9,
+ 0x981c53093dc0d572, 0xfa09b0bfbf86fbf5, 0x30b1e96166219f15,
+ 0x70e7d466bdc4fb83, 0x5a66736e35f2a8e9, 0xcddb59d2b7c1baef,
+ 0xd6c7d247d26d8996, 0xea4e39eac8de1ba3, 0x539c8bb19fa3aff2,
+ 0x9f90e4c5fd508d8, 0xa34e5956fbaf3385, 0x2e2f8e151d3ef375,
+ 0x173691e9b83faec1, 0xb85a8d56bf016379, 0x8382381267408ae3,
+ 0xb90f901bbdc0096d, 0x7c6ad32933bcec65, 0x76bb5e2f2c8ad595,
+ 0x390f851a6cf46d28, 0xc3e6064da1c2da72, 0xc52a0c101cfa5389,
+ 0xd78eaf84a3fbc530, 0x3781b9e2288b997e, 0x73c2f6dea83d05c4,
+ 0x4228e364c5b5ed7, 0x9d7a3edf0da43911, 0x8edcfeda24686756,
+ 0x5e7667a7b7a9b3a1, 0x4c4f389fa143791d, 0xb08bc1023da7cddc,
+ 0x7ab4be3ae529b1cc, 0x754e6132dbe74ff9, 0x71635442a839df45,
+ 0x2f6fb1643fbe52de, 0x961e0a42cf7a8177, 0xf3b45d83d89ef2ea,
+ 0xee3de4cf4a6e3e9b, 0xcd6848542c3295e7, 0xe4cee1664c78662f,
+ 0x9947548b474c68c4, 0x25d73777a5ed8b0b, 0xc915b1d636b7fc,
+ 0x21c2ba75d9b0d2da, 0x5f6b5dcf608a64a1, 0xdcf333255ff9570c,
+ 0x633b922418ced4ee, 0xc136dde0b004b34a, 0x58cc83b05d4b2f5a,
+ 0x5eb424dda28e42d2, 0x62df47369739cd98, 0xb4e0b42485e4ce17,
+ 0x16e1f0c1f9a8d1e7, 0x8ec3916707560ebf, 0x62ba6e2df2cc9db3,
+ 0xcbf9f4ff77d83a16, 0x78d9d7d07d2bbcc4, 0xef554ce1e02c41f4,
+ 0x8d7581127eccf94d, 0xa9b53336cb3c8a05, 0x38c42c0bf45c4f91,
+ 0x640893cdf4488863, 0x80ec34bc575ea568, 0x39f324f5b48eaa40,
+ 0xe9d9ed1f8eff527f, 0x9224fc058cc5a214, 0xbaba00b04cfe7741,
+ 0x309a9f120fcf52af, 0xa558f3ec65626212, 0x424bec8b7adabe2f,
+ 0x41622513a6aea433, 0xb88da2d5324ca798, 0xd287733b245528a4,
+ 0x9a44697e6d68aec3, 0x7b1093be2f49bb28, 0x50bbec632e3d8aad,
+ 0x6cd90723e1ea8283, 0x897b9e7431b02bf3, 0x219efdcb338a7047,
+ 0x3b0311f0a27c0656, 0xdb17bf91c0db96e7, 0x8cd4fd6b4e85a5b2,
+ 0xfab071054ba6409d, 0x40d6fe831fa9dfd9, 0xaf358debad7d791e,
+ 0xeb8d0e25a65e3e58, 0xbbcbd3df14e08580, 0xcf751f27ecdab2b,
+ 0x2b4da14f2613d8f4
+};
+
+#endif /* ZSTD_LDM_GEARTAB_H */
diff --git a/thirdparty/zstd/compress/zstd_opt.c b/thirdparty/zstd/compress/zstd_opt.c
index e55c459deb..402a7e5c76 100644
--- a/thirdparty/zstd/compress/zstd_opt.c
+++ b/thirdparty/zstd/compress/zstd_opt.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Przemyslaw Skibinski, Yann Collet, Facebook, Inc.
+ * Copyright (c) Przemyslaw Skibinski, Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
diff --git a/thirdparty/zstd/compress/zstd_opt.h b/thirdparty/zstd/compress/zstd_opt.h
index 9aba8a9018..627255f53d 100644
--- a/thirdparty/zstd/compress/zstd_opt.h
+++ b/thirdparty/zstd/compress/zstd_opt.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
diff --git a/thirdparty/zstd/compress/zstdmt_compress.c b/thirdparty/zstd/compress/zstdmt_compress.c
index 50454a50b9..22aa3e1245 100644
--- a/thirdparty/zstd/compress/zstdmt_compress.c
+++ b/thirdparty/zstd/compress/zstdmt_compress.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -472,8 +472,6 @@ ZSTDMT_serialState_reset(serialState_t* serialState,
ZSTD_ldm_adjustParameters(&params.ldmParams, &params.cParams);
assert(params.ldmParams.hashLog >= params.ldmParams.bucketSizeLog);
assert(params.ldmParams.hashRateLog < 32);
- serialState->ldmState.hashPower =
- ZSTD_rollingHash_primePower(params.ldmParams.minMatchLength);
} else {
ZSTD_memset(&params.ldmParams, 0, sizeof(params.ldmParams));
}
@@ -486,10 +484,10 @@ ZSTDMT_serialState_reset(serialState_t* serialState,
size_t const hashSize = ((size_t)1 << hashLog) * sizeof(ldmEntry_t);
unsigned const bucketLog =
params.ldmParams.hashLog - params.ldmParams.bucketSizeLog;
- size_t const bucketSize = (size_t)1 << bucketLog;
unsigned const prevBucketLog =
serialState->params.ldmParams.hashLog -
serialState->params.ldmParams.bucketSizeLog;
+ size_t const numBuckets = (size_t)1 << bucketLog;
/* Size the seq pool tables */
ZSTDMT_setNbSeq(seqPool, ZSTD_ldm_getMaxNbSeq(params.ldmParams, jobSize));
/* Reset the window */
@@ -501,20 +499,20 @@ ZSTDMT_serialState_reset(serialState_t* serialState,
}
if (serialState->ldmState.bucketOffsets == NULL || prevBucketLog < bucketLog) {
ZSTD_customFree(serialState->ldmState.bucketOffsets, cMem);
- serialState->ldmState.bucketOffsets = (BYTE*)ZSTD_customMalloc(bucketSize, cMem);
+ serialState->ldmState.bucketOffsets = (BYTE*)ZSTD_customMalloc(numBuckets, cMem);
}
if (!serialState->ldmState.hashTable || !serialState->ldmState.bucketOffsets)
return 1;
/* Zero the tables */
ZSTD_memset(serialState->ldmState.hashTable, 0, hashSize);
- ZSTD_memset(serialState->ldmState.bucketOffsets, 0, bucketSize);
+ ZSTD_memset(serialState->ldmState.bucketOffsets, 0, numBuckets);
/* Update window state and fill hash table with dict */
serialState->ldmState.loadedDictEnd = 0;
if (dictSize > 0) {
if (dictContentType == ZSTD_dct_rawContent) {
BYTE const* const dictEnd = (const BYTE*)dict + dictSize;
- ZSTD_window_update(&serialState->ldmState.window, dict, dictSize);
+ ZSTD_window_update(&serialState->ldmState.window, dict, dictSize, /* forceNonContiguous */ 0);
ZSTD_ldm_fillHashTable(&serialState->ldmState, (const BYTE*)dict, dictEnd, &params.ldmParams);
serialState->ldmState.loadedDictEnd = params.forceWindow ? 0 : (U32)(dictEnd - serialState->ldmState.window.base);
} else {
@@ -571,7 +569,7 @@ static void ZSTDMT_serialState_update(serialState_t* serialState,
assert(seqStore.seq != NULL && seqStore.pos == 0 &&
seqStore.size == 0 && seqStore.capacity > 0);
assert(src.size <= serialState->params.jobSize);
- ZSTD_window_update(&serialState->ldmState.window, src.start, src.size);
+ ZSTD_window_update(&serialState->ldmState.window, src.start, src.size, /* forceNonContiguous */ 0);
error = ZSTD_ldm_generateSequences(
&serialState->ldmState, &seqStore,
&serialState->params.ldmParams, src.start, src.size);
@@ -683,6 +681,8 @@ static void ZSTDMT_compressionJob(void* jobDescription)
if (job->jobID != 0) jobParams.fParams.checksumFlag = 0;
/* Don't run LDM for the chunks, since we handle it externally */
jobParams.ldmParams.enableLdm = 0;
+ /* Correct nbWorkers to 0. */
+ jobParams.nbWorkers = 0;
/* init */
@@ -695,6 +695,10 @@ static void ZSTDMT_compressionJob(void* jobDescription)
{ size_t const forceWindowError = ZSTD_CCtxParams_setParameter(&jobParams, ZSTD_c_forceMaxWindow, !job->firstJob);
if (ZSTD_isError(forceWindowError)) JOB_ERROR(forceWindowError);
}
+ if (!job->firstJob) {
+ size_t const err = ZSTD_CCtxParams_setParameter(&jobParams, ZSTD_c_deterministicRefPrefix, 0);
+ if (ZSTD_isError(err)) JOB_ERROR(err);
+ }
{ size_t const initError = ZSTD_compressBegin_advanced_internal(cctx,
job->prefix.start, job->prefix.size, ZSTD_dct_rawContent, /* load dictionary in "content-only" mode (no header analysis) */
ZSTD_dtlm_fast,
@@ -750,6 +754,13 @@ static void ZSTDMT_compressionJob(void* jobDescription)
if (ZSTD_isError(cSize)) JOB_ERROR(cSize);
lastCBlockSize = cSize;
} }
+ if (!job->firstJob) {
+ /* Double check that we don't have an ext-dict, because then our
+ * repcode invalidation doesn't work.
+ */
+ assert(!ZSTD_window_hasExtDict(cctx->blockState.matchState.window));
+ }
+ ZSTD_CCtx_trace(cctx, 0);
_endJob:
ZSTDMT_serialState_ensureFinished(job->serial, job->jobID, job->cSize);
@@ -1239,9 +1250,8 @@ size_t ZSTDMT_initCStream_internal(
if (params.rsyncable) {
/* Aim for the targetsectionSize as the average job size. */
- U32 const jobSizeMB = (U32)(mtctx->targetSectionSize >> 20);
- U32 const rsyncBits = ZSTD_highbit32(jobSizeMB) + 20;
- assert(jobSizeMB >= 1);
+ U32 const jobSizeKB = (U32)(mtctx->targetSectionSize >> 10);
+ U32 const rsyncBits = (assert(jobSizeKB >= 1), ZSTD_highbit32(jobSizeKB) + 10);
DEBUGLOG(4, "rsyncLog = %u", rsyncBits);
mtctx->rsync.hash = 0;
mtctx->rsync.hitMask = (1ULL << rsyncBits) - 1;
diff --git a/thirdparty/zstd/compress/zstdmt_compress.h b/thirdparty/zstd/compress/zstdmt_compress.h
index 0a9e551c99..2fee2ec745 100644
--- a/thirdparty/zstd/compress/zstdmt_compress.h
+++ b/thirdparty/zstd/compress/zstdmt_compress.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -32,11 +32,11 @@
/* === Constants === */
-#ifndef ZSTDMT_NBWORKERS_MAX
-# define ZSTDMT_NBWORKERS_MAX 200
+#ifndef ZSTDMT_NBWORKERS_MAX /* a different value can be selected at compile time */
+# define ZSTDMT_NBWORKERS_MAX ((sizeof(void*)==4) /*32-bit*/ ? 64 : 256)
#endif
-#ifndef ZSTDMT_JOBSIZE_MIN
-# define ZSTDMT_JOBSIZE_MIN (1 MB)
+#ifndef ZSTDMT_JOBSIZE_MIN /* a different value can be selected at compile time */
+# define ZSTDMT_JOBSIZE_MIN (512 KB)
#endif
#define ZSTDMT_JOBLOG_MAX (MEM_32bits() ? 29 : 30)
#define ZSTDMT_JOBSIZE_MAX (MEM_32bits() ? (512 MB) : (1024 MB))
diff --git a/thirdparty/zstd/decompress/huf_decompress.c b/thirdparty/zstd/decompress/huf_decompress.c
index 1418206718..b93c9a003b 100644
--- a/thirdparty/zstd/decompress/huf_decompress.c
+++ b/thirdparty/zstd/decompress/huf_decompress.c
@@ -1,7 +1,7 @@
/* ******************************************************************
* huff0 huffman decoder,
* part of Finite State Entropy library
- * Copyright (c) 2013-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
*
* You can contact the author at :
* - FSE+HUF source repository : https://github.com/Cyan4973/FiniteStateEntropy
@@ -528,13 +528,15 @@ typedef rankValCol_t rankVal_t[HUF_TABLELOG_MAX];
static void HUF_fillDTableX2Level2(HUF_DEltX2* DTable, U32 sizeLog, const U32 consumed,
const U32* rankValOrigin, const int minWeight,
const sortedSymbol_t* sortedSymbols, const U32 sortedListSize,
- U32 nbBitsBaseline, U16 baseSeq)
+ U32 nbBitsBaseline, U16 baseSeq, U32* wksp, size_t wkspSize)
{
HUF_DEltX2 DElt;
- U32 rankVal[HUF_TABLELOG_MAX + 1];
+ U32* rankVal = wksp;
+ assert(wkspSize >= HUF_TABLELOG_MAX + 1);
+ (void)wkspSize;
/* get pre-calculated rankVal */
- ZSTD_memcpy(rankVal, rankValOrigin, sizeof(rankVal));
+ ZSTD_memcpy(rankVal, rankValOrigin, sizeof(U32) * (HUF_TABLELOG_MAX + 1));
/* fill skipped values */
if (minWeight>1) {
@@ -569,14 +571,18 @@ static void HUF_fillDTableX2Level2(HUF_DEltX2* DTable, U32 sizeLog, const U32 co
static void HUF_fillDTableX2(HUF_DEltX2* DTable, const U32 targetLog,
const sortedSymbol_t* sortedList, const U32 sortedListSize,
const U32* rankStart, rankVal_t rankValOrigin, const U32 maxWeight,
- const U32 nbBitsBaseline)
+ const U32 nbBitsBaseline, U32* wksp, size_t wkspSize)
{
- U32 rankVal[HUF_TABLELOG_MAX + 1];
+ U32* rankVal = wksp;
const int scaleLog = nbBitsBaseline - targetLog; /* note : targetLog >= srcLog, hence scaleLog <= 1 */
const U32 minBits = nbBitsBaseline - maxWeight;
U32 s;
- ZSTD_memcpy(rankVal, rankValOrigin, sizeof(rankVal));
+ assert(wkspSize >= HUF_TABLELOG_MAX + 1);
+ wksp += HUF_TABLELOG_MAX + 1;
+ wkspSize -= HUF_TABLELOG_MAX + 1;
+
+ ZSTD_memcpy(rankVal, rankValOrigin, sizeof(U32) * (HUF_TABLELOG_MAX + 1));
/* fill DTable */
for (s=0; s<sortedListSize; s++) {
@@ -594,7 +600,7 @@ static void HUF_fillDTableX2(HUF_DEltX2* DTable, const U32 targetLog,
HUF_fillDTableX2Level2(DTable+start, targetLog-nbBits, nbBits,
rankValOrigin[nbBits], minWeight,
sortedList+sortedRank, sortedListSize-sortedRank,
- nbBitsBaseline, symbol);
+ nbBitsBaseline, symbol, wksp, wkspSize);
} else {
HUF_DEltX2 DElt;
MEM_writeLE16(&(DElt.sequence), symbol);
@@ -608,6 +614,15 @@ static void HUF_fillDTableX2(HUF_DEltX2* DTable, const U32 targetLog,
}
}
+typedef struct {
+ rankValCol_t rankVal[HUF_TABLELOG_MAX];
+ U32 rankStats[HUF_TABLELOG_MAX + 1];
+ U32 rankStart0[HUF_TABLELOG_MAX + 2];
+ sortedSymbol_t sortedSymbol[HUF_SYMBOLVALUE_MAX + 1];
+ BYTE weightList[HUF_SYMBOLVALUE_MAX + 1];
+ U32 calleeWksp[HUF_READ_STATS_WORKSPACE_SIZE_U32];
+} HUF_ReadDTableX2_Workspace;
+
size_t HUF_readDTableX2_wksp(HUF_DTable* DTable,
const void* src, size_t srcSize,
void* workSpace, size_t wkspSize)
@@ -620,47 +635,32 @@ size_t HUF_readDTableX2_wksp(HUF_DTable* DTable,
HUF_DEltX2* const dt = (HUF_DEltX2*)dtPtr;
U32 *rankStart;
- rankValCol_t* rankVal;
- U32* rankStats;
- U32* rankStart0;
- sortedSymbol_t* sortedSymbol;
- BYTE* weightList;
- size_t spaceUsed32 = 0;
-
- rankVal = (rankValCol_t *)((U32 *)workSpace + spaceUsed32);
- spaceUsed32 += (sizeof(rankValCol_t) * HUF_TABLELOG_MAX) >> 2;
- rankStats = (U32 *)workSpace + spaceUsed32;
- spaceUsed32 += HUF_TABLELOG_MAX + 1;
- rankStart0 = (U32 *)workSpace + spaceUsed32;
- spaceUsed32 += HUF_TABLELOG_MAX + 2;
- sortedSymbol = (sortedSymbol_t *)workSpace + (spaceUsed32 * sizeof(U32)) / sizeof(sortedSymbol_t);
- spaceUsed32 += HUF_ALIGN(sizeof(sortedSymbol_t) * (HUF_SYMBOLVALUE_MAX + 1), sizeof(U32)) >> 2;
- weightList = (BYTE *)((U32 *)workSpace + spaceUsed32);
- spaceUsed32 += HUF_ALIGN(HUF_SYMBOLVALUE_MAX + 1, sizeof(U32)) >> 2;
-
- if ((spaceUsed32 << 2) > wkspSize) return ERROR(tableLog_tooLarge);
-
- rankStart = rankStart0 + 1;
- ZSTD_memset(rankStats, 0, sizeof(U32) * (2 * HUF_TABLELOG_MAX + 2 + 1));
+ HUF_ReadDTableX2_Workspace* const wksp = (HUF_ReadDTableX2_Workspace*)workSpace;
+
+ if (sizeof(*wksp) > wkspSize) return ERROR(GENERIC);
+
+ rankStart = wksp->rankStart0 + 1;
+ ZSTD_memset(wksp->rankStats, 0, sizeof(wksp->rankStats));
+ ZSTD_memset(wksp->rankStart0, 0, sizeof(wksp->rankStart0));
DEBUG_STATIC_ASSERT(sizeof(HUF_DEltX2) == sizeof(HUF_DTable)); /* if compiler fails here, assertion is wrong */
if (maxTableLog > HUF_TABLELOG_MAX) return ERROR(tableLog_tooLarge);
/* ZSTD_memset(weightList, 0, sizeof(weightList)); */ /* is not necessary, even though some analyzer complain ... */
- iSize = HUF_readStats(weightList, HUF_SYMBOLVALUE_MAX + 1, rankStats, &nbSymbols, &tableLog, src, srcSize);
+ iSize = HUF_readStats_wksp(wksp->weightList, HUF_SYMBOLVALUE_MAX + 1, wksp->rankStats, &nbSymbols, &tableLog, src, srcSize, wksp->calleeWksp, sizeof(wksp->calleeWksp), /* bmi2 */ 0);
if (HUF_isError(iSize)) return iSize;
/* check result */
if (tableLog > maxTableLog) return ERROR(tableLog_tooLarge); /* DTable can't fit code depth */
/* find maxWeight */
- for (maxW = tableLog; rankStats[maxW]==0; maxW--) {} /* necessarily finds a solution before 0 */
+ for (maxW = tableLog; wksp->rankStats[maxW]==0; maxW--) {} /* necessarily finds a solution before 0 */
/* Get start index of each weight */
{ U32 w, nextRankStart = 0;
for (w=1; w<maxW+1; w++) {
U32 curr = nextRankStart;
- nextRankStart += rankStats[w];
+ nextRankStart += wksp->rankStats[w];
rankStart[w] = curr;
}
rankStart[0] = nextRankStart; /* put all 0w symbols at the end of sorted list*/
@@ -670,37 +670,38 @@ size_t HUF_readDTableX2_wksp(HUF_DTable* DTable,
/* sort symbols by weight */
{ U32 s;
for (s=0; s<nbSymbols; s++) {
- U32 const w = weightList[s];
+ U32 const w = wksp->weightList[s];
U32 const r = rankStart[w]++;
- sortedSymbol[r].symbol = (BYTE)s;
- sortedSymbol[r].weight = (BYTE)w;
+ wksp->sortedSymbol[r].symbol = (BYTE)s;
+ wksp->sortedSymbol[r].weight = (BYTE)w;
}
rankStart[0] = 0; /* forget 0w symbols; this is beginning of weight(1) */
}
/* Build rankVal */
- { U32* const rankVal0 = rankVal[0];
+ { U32* const rankVal0 = wksp->rankVal[0];
{ int const rescale = (maxTableLog-tableLog) - 1; /* tableLog <= maxTableLog */
U32 nextRankVal = 0;
U32 w;
for (w=1; w<maxW+1; w++) {
U32 curr = nextRankVal;
- nextRankVal += rankStats[w] << (w+rescale);
+ nextRankVal += wksp->rankStats[w] << (w+rescale);
rankVal0[w] = curr;
} }
{ U32 const minBits = tableLog+1 - maxW;
U32 consumed;
for (consumed = minBits; consumed < maxTableLog - minBits + 1; consumed++) {
- U32* const rankValPtr = rankVal[consumed];
+ U32* const rankValPtr = wksp->rankVal[consumed];
U32 w;
for (w = 1; w < maxW+1; w++) {
rankValPtr[w] = rankVal0[w] >> consumed;
} } } }
HUF_fillDTableX2(dt, maxTableLog,
- sortedSymbol, sizeOfSort,
- rankStart0, rankVal, maxW,
- tableLog+1);
+ wksp->sortedSymbol, sizeOfSort,
+ wksp->rankStart0, wksp->rankVal, maxW,
+ tableLog+1,
+ wksp->calleeWksp, sizeof(wksp->calleeWksp) / sizeof(U32));
dtd.tableLog = (BYTE)maxTableLog;
dtd.tableType = 1;
@@ -1225,7 +1226,7 @@ size_t HUF_decompress1X1 (void* dst, size_t dstSize, const void* cSrc, size_t cS
HUF_CREATE_STATIC_DTABLEX1(DTable, HUF_TABLELOG_MAX);
return HUF_decompress1X1_DCtx (DTable, dst, dstSize, cSrc, cSrcSize);
}
-#endif
+#endif
#ifndef HUF_FORCE_DECOMPRESS_X1
size_t HUF_readDTableX2(HUF_DTable* DTable, const void* src, size_t srcSize)
diff --git a/thirdparty/zstd/decompress/zstd_ddict.c b/thirdparty/zstd/decompress/zstd_ddict.c
index f5cc23b387..ce335477b3 100644
--- a/thirdparty/zstd/decompress/zstd_ddict.c
+++ b/thirdparty/zstd/decompress/zstd_ddict.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
diff --git a/thirdparty/zstd/decompress/zstd_ddict.h b/thirdparty/zstd/decompress/zstd_ddict.h
index 8906a71c94..bd03268b50 100644
--- a/thirdparty/zstd/decompress/zstd_ddict.h
+++ b/thirdparty/zstd/decompress/zstd_ddict.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
diff --git a/thirdparty/zstd/decompress/zstd_decompress.c b/thirdparty/zstd/decompress/zstd_decompress.c
index 21f846bc77..910bc034c0 100644
--- a/thirdparty/zstd/decompress/zstd_decompress.c
+++ b/thirdparty/zstd/decompress/zstd_decompress.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -62,6 +62,7 @@
#include "../common/fse.h"
#define HUF_STATIC_LINKING_ONLY
#include "../common/huf.h"
+#include "../common/xxhash.h" /* XXH64_reset, XXH64_update, XXH64_digest, XXH64 */
#include "../common/zstd_internal.h" /* blockProperties_t */
#include "zstd_decompress_internal.h" /* ZSTD_DCtx */
#include "zstd_ddict.h" /* ZSTD_DDictDictContent */
@@ -72,6 +73,144 @@
#endif
+
+/*************************************
+ * Multiple DDicts Hashset internals *
+ *************************************/
+
+#define DDICT_HASHSET_MAX_LOAD_FACTOR_COUNT_MULT 4
+#define DDICT_HASHSET_MAX_LOAD_FACTOR_SIZE_MULT 3 /* These two constants represent SIZE_MULT/COUNT_MULT load factor without using a float.
+ * Currently, that means a 0.75 load factor.
+ * So, if count * COUNT_MULT / size * SIZE_MULT != 0, then we've exceeded
+ * the load factor of the ddict hash set.
+ */
+
+#define DDICT_HASHSET_TABLE_BASE_SIZE 64
+#define DDICT_HASHSET_RESIZE_FACTOR 2
+
+/* Hash function to determine starting position of dict insertion within the table
+ * Returns an index between [0, hashSet->ddictPtrTableSize]
+ */
+static size_t ZSTD_DDictHashSet_getIndex(const ZSTD_DDictHashSet* hashSet, U32 dictID) {
+ const U64 hash = XXH64(&dictID, sizeof(U32), 0);
+ /* DDict ptr table size is a multiple of 2, use size - 1 as mask to get index within [0, hashSet->ddictPtrTableSize) */
+ return hash & (hashSet->ddictPtrTableSize - 1);
+}
+
+/* Adds DDict to a hashset without resizing it.
+ * If inserting a DDict with a dictID that already exists in the set, replaces the one in the set.
+ * Returns 0 if successful, or a zstd error code if something went wrong.
+ */
+static size_t ZSTD_DDictHashSet_emplaceDDict(ZSTD_DDictHashSet* hashSet, const ZSTD_DDict* ddict) {
+ const U32 dictID = ZSTD_getDictID_fromDDict(ddict);
+ size_t idx = ZSTD_DDictHashSet_getIndex(hashSet, dictID);
+ const size_t idxRangeMask = hashSet->ddictPtrTableSize - 1;
+ RETURN_ERROR_IF(hashSet->ddictPtrCount == hashSet->ddictPtrTableSize, GENERIC, "Hash set is full!");
+ DEBUGLOG(4, "Hashed index: for dictID: %u is %zu", dictID, idx);
+ while (hashSet->ddictPtrTable[idx] != NULL) {
+ /* Replace existing ddict if inserting ddict with same dictID */
+ if (ZSTD_getDictID_fromDDict(hashSet->ddictPtrTable[idx]) == dictID) {
+ DEBUGLOG(4, "DictID already exists, replacing rather than adding");
+ hashSet->ddictPtrTable[idx] = ddict;
+ return 0;
+ }
+ idx &= idxRangeMask;
+ idx++;
+ }
+ DEBUGLOG(4, "Final idx after probing for dictID %u is: %zu", dictID, idx);
+ hashSet->ddictPtrTable[idx] = ddict;
+ hashSet->ddictPtrCount++;
+ return 0;
+}
+
+/* Expands hash table by factor of DDICT_HASHSET_RESIZE_FACTOR and
+ * rehashes all values, allocates new table, frees old table.
+ * Returns 0 on success, otherwise a zstd error code.
+ */
+static size_t ZSTD_DDictHashSet_expand(ZSTD_DDictHashSet* hashSet, ZSTD_customMem customMem) {
+ size_t newTableSize = hashSet->ddictPtrTableSize * DDICT_HASHSET_RESIZE_FACTOR;
+ const ZSTD_DDict** newTable = (const ZSTD_DDict**)ZSTD_customCalloc(sizeof(ZSTD_DDict*) * newTableSize, customMem);
+ const ZSTD_DDict** oldTable = hashSet->ddictPtrTable;
+ size_t oldTableSize = hashSet->ddictPtrTableSize;
+ size_t i;
+
+ DEBUGLOG(4, "Expanding DDict hash table! Old size: %zu new size: %zu", oldTableSize, newTableSize);
+ RETURN_ERROR_IF(!newTable, memory_allocation, "Expanded hashset allocation failed!");
+ hashSet->ddictPtrTable = newTable;
+ hashSet->ddictPtrTableSize = newTableSize;
+ hashSet->ddictPtrCount = 0;
+ for (i = 0; i < oldTableSize; ++i) {
+ if (oldTable[i] != NULL) {
+ FORWARD_IF_ERROR(ZSTD_DDictHashSet_emplaceDDict(hashSet, oldTable[i]), "");
+ }
+ }
+ ZSTD_customFree((void*)oldTable, customMem);
+ DEBUGLOG(4, "Finished re-hash");
+ return 0;
+}
+
+/* Fetches a DDict with the given dictID
+ * Returns the ZSTD_DDict* with the requested dictID. If it doesn't exist, then returns NULL.
+ */
+static const ZSTD_DDict* ZSTD_DDictHashSet_getDDict(ZSTD_DDictHashSet* hashSet, U32 dictID) {
+ size_t idx = ZSTD_DDictHashSet_getIndex(hashSet, dictID);
+ const size_t idxRangeMask = hashSet->ddictPtrTableSize - 1;
+ DEBUGLOG(4, "Hashed index: for dictID: %u is %zu", dictID, idx);
+ for (;;) {
+ size_t currDictID = ZSTD_getDictID_fromDDict(hashSet->ddictPtrTable[idx]);
+ if (currDictID == dictID || currDictID == 0) {
+ /* currDictID == 0 implies a NULL ddict entry */
+ break;
+ } else {
+ idx &= idxRangeMask; /* Goes to start of table when we reach the end */
+ idx++;
+ }
+ }
+ DEBUGLOG(4, "Final idx after probing for dictID %u is: %zu", dictID, idx);
+ return hashSet->ddictPtrTable[idx];
+}
+
+/* Allocates space for and returns a ddict hash set
+ * The hash set's ZSTD_DDict* table has all values automatically set to NULL to begin with.
+ * Returns NULL if allocation failed.
+ */
+static ZSTD_DDictHashSet* ZSTD_createDDictHashSet(ZSTD_customMem customMem) {
+ ZSTD_DDictHashSet* ret = (ZSTD_DDictHashSet*)ZSTD_customMalloc(sizeof(ZSTD_DDictHashSet), customMem);
+ DEBUGLOG(4, "Allocating new hash set");
+ ret->ddictPtrTable = (const ZSTD_DDict**)ZSTD_customCalloc(DDICT_HASHSET_TABLE_BASE_SIZE * sizeof(ZSTD_DDict*), customMem);
+ ret->ddictPtrTableSize = DDICT_HASHSET_TABLE_BASE_SIZE;
+ ret->ddictPtrCount = 0;
+ if (!ret || !ret->ddictPtrTable) {
+ return NULL;
+ }
+ return ret;
+}
+
+/* Frees the table of ZSTD_DDict* within a hashset, then frees the hashset itself.
+ * Note: The ZSTD_DDict* within the table are NOT freed.
+ */
+static void ZSTD_freeDDictHashSet(ZSTD_DDictHashSet* hashSet, ZSTD_customMem customMem) {
+ DEBUGLOG(4, "Freeing ddict hash set");
+ if (hashSet && hashSet->ddictPtrTable) {
+ ZSTD_customFree((void*)hashSet->ddictPtrTable, customMem);
+ }
+ if (hashSet) {
+ ZSTD_customFree(hashSet, customMem);
+ }
+}
+
+/* Public function: Adds a DDict into the ZSTD_DDictHashSet, possibly triggering a resize of the hash set.
+ * Returns 0 on success, or a ZSTD error.
+ */
+static size_t ZSTD_DDictHashSet_addDDict(ZSTD_DDictHashSet* hashSet, const ZSTD_DDict* ddict, ZSTD_customMem customMem) {
+ DEBUGLOG(4, "Adding dict ID: %u to hashset with - Count: %zu Tablesize: %zu", ZSTD_getDictID_fromDDict(ddict), hashSet->ddictPtrCount, hashSet->ddictPtrTableSize);
+ if (hashSet->ddictPtrCount * DDICT_HASHSET_MAX_LOAD_FACTOR_COUNT_MULT / hashSet->ddictPtrTableSize * DDICT_HASHSET_MAX_LOAD_FACTOR_SIZE_MULT != 0) {
+ FORWARD_IF_ERROR(ZSTD_DDictHashSet_expand(hashSet, customMem), "");
+ }
+ FORWARD_IF_ERROR(ZSTD_DDictHashSet_emplaceDDict(hashSet, ddict), "");
+ return 0;
+}
+
/*-*************************************************************
* Context management
***************************************************************/
@@ -101,6 +240,7 @@ static void ZSTD_DCtx_resetParameters(ZSTD_DCtx* dctx)
dctx->maxWindowSize = ZSTD_MAXWINDOWSIZE_DEFAULT;
dctx->outBufferMode = ZSTD_bm_buffered;
dctx->forceIgnoreChecksum = ZSTD_d_validateChecksum;
+ dctx->refMultipleDDicts = ZSTD_rmd_refSingleDDict;
}
static void ZSTD_initDCtx_internal(ZSTD_DCtx* dctx)
@@ -120,8 +260,8 @@ static void ZSTD_initDCtx_internal(ZSTD_DCtx* dctx)
dctx->noForwardProgress = 0;
dctx->oversizedDuration = 0;
dctx->bmi2 = ZSTD_cpuid_bmi2(ZSTD_cpuid());
+ dctx->ddictSet = NULL;
ZSTD_DCtx_resetParameters(dctx);
- dctx->validateChecksum = 1;
#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
dctx->dictContentEndForFuzzing = NULL;
#endif
@@ -178,6 +318,10 @@ size_t ZSTD_freeDCtx(ZSTD_DCtx* dctx)
if (dctx->legacyContext)
ZSTD_freeLegacyStreamContext(dctx->legacyContext, dctx->previousLegacyVersion);
#endif
+ if (dctx->ddictSet) {
+ ZSTD_freeDDictHashSet(dctx->ddictSet, cMem);
+ dctx->ddictSet = NULL;
+ }
ZSTD_customFree(dctx, cMem);
return 0;
}
@@ -190,6 +334,29 @@ void ZSTD_copyDCtx(ZSTD_DCtx* dstDCtx, const ZSTD_DCtx* srcDCtx)
ZSTD_memcpy(dstDCtx, srcDCtx, toCopy); /* no need to copy workspace */
}
+/* Given a dctx with a digested frame params, re-selects the correct ZSTD_DDict based on
+ * the requested dict ID from the frame. If there exists a reference to the correct ZSTD_DDict, then
+ * accordingly sets the ddict to be used to decompress the frame.
+ *
+ * If no DDict is found, then no action is taken, and the ZSTD_DCtx::ddict remains as-is.
+ *
+ * ZSTD_d_refMultipleDDicts must be enabled for this function to be called.
+ */
+static void ZSTD_DCtx_selectFrameDDict(ZSTD_DCtx* dctx) {
+ assert(dctx->refMultipleDDicts && dctx->ddictSet);
+ DEBUGLOG(4, "Adjusting DDict based on requested dict ID from frame");
+ if (dctx->ddict) {
+ const ZSTD_DDict* frameDDict = ZSTD_DDictHashSet_getDDict(dctx->ddictSet, dctx->fParams.dictID);
+ if (frameDDict) {
+ DEBUGLOG(4, "DDict found!");
+ ZSTD_clearDict(dctx);
+ dctx->dictID = dctx->fParams.dictID;
+ dctx->ddict = frameDDict;
+ dctx->dictUses = ZSTD_use_indefinitely;
+ }
+ }
+}
+
/*-*************************************************************
* Frame header decoding
@@ -441,12 +608,19 @@ unsigned long long ZSTD_getDecompressedSize(const void* src, size_t srcSize)
/** ZSTD_decodeFrameHeader() :
* `headerSize` must be the size provided by ZSTD_frameHeaderSize().
+ * If multiple DDict references are enabled, also will choose the correct DDict to use.
* @return : 0 if success, or an error code, which can be tested using ZSTD_isError() */
static size_t ZSTD_decodeFrameHeader(ZSTD_DCtx* dctx, const void* src, size_t headerSize)
{
size_t const result = ZSTD_getFrameHeader_advanced(&(dctx->fParams), src, headerSize, dctx->format);
if (ZSTD_isError(result)) return result; /* invalid header */
RETURN_ERROR_IF(result>0, srcSize_wrong, "headerSize too small");
+
+ /* Reference DDict requested by frame if dctx references multiple ddicts */
+ if (dctx->refMultipleDDicts == ZSTD_rmd_refMultipleDDicts && dctx->ddictSet) {
+ ZSTD_DCtx_selectFrameDDict(dctx);
+ }
+
#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
/* Skip the dictID check in fuzzing mode, because it makes the search
* harder.
@@ -456,6 +630,7 @@ static size_t ZSTD_decodeFrameHeader(ZSTD_DCtx* dctx, const void* src, size_t he
#endif
dctx->validateChecksum = (dctx->fParams.checksumFlag && !dctx->forceIgnoreChecksum) ? 1 : 0;
if (dctx->validateChecksum) XXH64_reset(&dctx->xxhState, 0);
+ dctx->processedCSize += headerSize;
return 0;
}
@@ -578,7 +753,7 @@ unsigned long long ZSTD_decompressBound(const void* src, size_t srcSize)
size_t ZSTD_insertBlock(ZSTD_DCtx* dctx, const void* blockStart, size_t blockSize)
{
DEBUGLOG(5, "ZSTD_insertBlock: %u bytes", (unsigned)blockSize);
- ZSTD_checkContinuity(dctx, blockStart);
+ ZSTD_checkContinuity(dctx, blockStart, blockSize);
dctx->previousDstEnd = (const char*)blockStart + blockSize;
return blockSize;
}
@@ -610,6 +785,32 @@ static size_t ZSTD_setRleBlock(void* dst, size_t dstCapacity,
return regenSize;
}
+static void ZSTD_DCtx_trace_end(ZSTD_DCtx const* dctx, U64 uncompressedSize, U64 compressedSize, unsigned streaming)
+{
+#if ZSTD_TRACE
+ if (dctx->traceCtx && ZSTD_trace_decompress_end != NULL) {
+ ZSTD_Trace trace;
+ ZSTD_memset(&trace, 0, sizeof(trace));
+ trace.version = ZSTD_VERSION_NUMBER;
+ trace.streaming = streaming;
+ if (dctx->ddict) {
+ trace.dictionaryID = ZSTD_getDictID_fromDDict(dctx->ddict);
+ trace.dictionarySize = ZSTD_DDict_dictSize(dctx->ddict);
+ trace.dictionaryIsCold = dctx->ddictIsCold;
+ }
+ trace.uncompressedSize = (size_t)uncompressedSize;
+ trace.compressedSize = (size_t)compressedSize;
+ trace.dctx = dctx;
+ ZSTD_trace_decompress_end(dctx->traceCtx, &trace);
+ }
+#else
+ (void)dctx;
+ (void)uncompressedSize;
+ (void)compressedSize;
+ (void)streaming;
+#endif
+}
+
/*! ZSTD_decompressFrame() :
* @dctx must be properly initialized
@@ -619,8 +820,9 @@ static size_t ZSTD_decompressFrame(ZSTD_DCtx* dctx,
void* dst, size_t dstCapacity,
const void** srcPtr, size_t *srcSizePtr)
{
- const BYTE* ip = (const BYTE*)(*srcPtr);
- BYTE* const ostart = (BYTE* const)dst;
+ const BYTE* const istart = (const BYTE*)(*srcPtr);
+ const BYTE* ip = istart;
+ BYTE* const ostart = (BYTE*)dst;
BYTE* const oend = dstCapacity != 0 ? ostart + dstCapacity : ostart;
BYTE* op = ostart;
size_t remainingSrcSize = *srcSizePtr;
@@ -695,7 +897,7 @@ static size_t ZSTD_decompressFrame(ZSTD_DCtx* dctx,
ip += 4;
remainingSrcSize -= 4;
}
-
+ ZSTD_DCtx_trace_end(dctx, (U64)(op-ostart), (U64)(ip-istart), /* streaming */ 0);
/* Allow caller to get size read */
*srcPtr = ip;
*srcSizePtr = remainingSrcSize;
@@ -764,7 +966,7 @@ static size_t ZSTD_decompressMultiFrame(ZSTD_DCtx* dctx,
* use this in all cases but ddict */
FORWARD_IF_ERROR(ZSTD_decompressBegin_usingDict(dctx, dict, dictSize), "");
}
- ZSTD_checkContinuity(dctx, dst);
+ ZSTD_checkContinuity(dctx, dst, dstCapacity);
{ const size_t res = ZSTD_decompressFrame(dctx, dst, dstCapacity,
&src, &srcSize);
@@ -899,7 +1101,9 @@ size_t ZSTD_decompressContinue(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, c
DEBUGLOG(5, "ZSTD_decompressContinue (srcSize:%u)", (unsigned)srcSize);
/* Sanity check */
RETURN_ERROR_IF(srcSize != ZSTD_nextSrcSizeToDecompressWithInputSize(dctx, srcSize), srcSize_wrong, "not allowed");
- if (dstCapacity) ZSTD_checkContinuity(dctx, dst);
+ ZSTD_checkContinuity(dctx, dst, dstCapacity);
+
+ dctx->processedCSize += srcSize;
switch (dctx->stage)
{
@@ -1004,6 +1208,7 @@ size_t ZSTD_decompressContinue(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, c
dctx->expected = 4;
dctx->stage = ZSTDds_checkChecksum;
} else {
+ ZSTD_DCtx_trace_end(dctx, dctx->decodedSize, dctx->processedCSize, /* streaming */ 1);
dctx->expected = 0; /* ends here */
dctx->stage = ZSTDds_getFrameHeaderSize;
}
@@ -1023,6 +1228,7 @@ size_t ZSTD_decompressContinue(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, c
DEBUGLOG(4, "ZSTD_decompressContinue: checksum : calculated %08X :: %08X read", (unsigned)h32, (unsigned)check32);
RETURN_ERROR_IF(check32 != h32, checksum_wrong, "");
}
+ ZSTD_DCtx_trace_end(dctx, dctx->decodedSize, dctx->processedCSize, /* streaming */ 1);
dctx->expected = 0;
dctx->stage = ZSTDds_getFrameHeaderSize;
return 0;
@@ -1176,8 +1382,12 @@ static size_t ZSTD_decompress_insertDictionary(ZSTD_DCtx* dctx, const void* dict
size_t ZSTD_decompressBegin(ZSTD_DCtx* dctx)
{
assert(dctx != NULL);
+#if ZSTD_TRACE
+ dctx->traceCtx = (ZSTD_trace_decompress_begin != NULL) ? ZSTD_trace_decompress_begin(dctx) : 0;
+#endif
dctx->expected = ZSTD_startingInputLength(dctx->format); /* dctx->format must be properly set */
dctx->stage = ZSTDds_getFrameHeaderSize;
+ dctx->processedCSize = 0;
dctx->decodedSize = 0;
dctx->previousDstEnd = NULL;
dctx->prefixStart = NULL;
@@ -1391,6 +1601,16 @@ size_t ZSTD_DCtx_refDDict(ZSTD_DCtx* dctx, const ZSTD_DDict* ddict)
if (ddict) {
dctx->ddict = ddict;
dctx->dictUses = ZSTD_use_indefinitely;
+ if (dctx->refMultipleDDicts == ZSTD_rmd_refMultipleDDicts) {
+ if (dctx->ddictSet == NULL) {
+ dctx->ddictSet = ZSTD_createDDictHashSet(dctx->customMem);
+ if (!dctx->ddictSet) {
+ RETURN_ERROR(memory_allocation, "Failed to allocate memory for hash set!");
+ }
+ }
+ assert(!dctx->staticSize); /* Impossible: ddictSet cannot have been allocated if static dctx */
+ FORWARD_IF_ERROR(ZSTD_DDictHashSet_addDDict(dctx->ddictSet, ddict, dctx->customMem), "");
+ }
}
return 0;
}
@@ -1436,6 +1656,10 @@ ZSTD_bounds ZSTD_dParam_getBounds(ZSTD_dParameter dParam)
bounds.lowerBound = (int)ZSTD_d_validateChecksum;
bounds.upperBound = (int)ZSTD_d_ignoreChecksum;
return bounds;
+ case ZSTD_d_refMultipleDDicts:
+ bounds.lowerBound = (int)ZSTD_rmd_refSingleDDict;
+ bounds.upperBound = (int)ZSTD_rmd_refMultipleDDicts;
+ return bounds;
default:;
}
bounds.error = ERROR(parameter_unsupported);
@@ -1473,6 +1697,9 @@ size_t ZSTD_DCtx_getParameter(ZSTD_DCtx* dctx, ZSTD_dParameter param, int* value
case ZSTD_d_forceIgnoreChecksum:
*value = (int)dctx->forceIgnoreChecksum;
return 0;
+ case ZSTD_d_refMultipleDDicts:
+ *value = (int)dctx->refMultipleDDicts;
+ return 0;
default:;
}
RETURN_ERROR(parameter_unsupported, "");
@@ -1499,6 +1726,13 @@ size_t ZSTD_DCtx_setParameter(ZSTD_DCtx* dctx, ZSTD_dParameter dParam, int value
CHECK_DBOUNDS(ZSTD_d_forceIgnoreChecksum, value);
dctx->forceIgnoreChecksum = (ZSTD_forceIgnoreChecksum_e)value;
return 0;
+ case ZSTD_d_refMultipleDDicts:
+ CHECK_DBOUNDS(ZSTD_d_refMultipleDDicts, value);
+ if (dctx->staticSize != 0) {
+ RETURN_ERROR(parameter_unsupported, "Static dctx does not support multiple DDicts!");
+ }
+ dctx->refMultipleDDicts = (ZSTD_refMultipleDDicts_e)value;
+ return 0;
default:;
}
RETURN_ERROR(parameter_unsupported, "");
@@ -1680,6 +1914,9 @@ size_t ZSTD_decompressStream(ZSTD_DStream* zds, ZSTD_outBuffer* output, ZSTD_inB
} }
#endif
{ size_t const hSize = ZSTD_getFrameHeader_advanced(&zds->fParams, zds->headerBuffer, zds->lhSize, zds->format);
+ if (zds->refMultipleDDicts && zds->ddictSet) {
+ ZSTD_DCtx_selectFrameDDict(zds);
+ }
DEBUGLOG(5, "header size : %u", (U32)hSize);
if (ZSTD_isError(hSize)) {
#if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT>=1)
diff --git a/thirdparty/zstd/decompress/zstd_decompress_block.c b/thirdparty/zstd/decompress/zstd_decompress_block.c
index 19cbdc5c16..349dcdc333 100644
--- a/thirdparty/zstd/decompress/zstd_decompress_block.c
+++ b/thirdparty/zstd/decompress/zstd_decompress_block.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -577,7 +577,7 @@ static size_t ZSTD_buildSeqTable(ZSTD_seqSymbol* DTableSpace, const ZSTD_seqSymb
size_t ZSTD_decodeSeqHeaders(ZSTD_DCtx* dctx, int* nbSeqPtr,
const void* src, size_t srcSize)
{
- const BYTE* const istart = (const BYTE* const)src;
+ const BYTE* const istart = (const BYTE*)src;
const BYTE* const iend = istart + srcSize;
const BYTE* ip = istart;
int nbSeq;
@@ -658,7 +658,6 @@ typedef struct {
size_t litLength;
size_t matchLength;
size_t offset;
- const BYTE* match;
} seq_t;
typedef struct {
@@ -672,9 +671,6 @@ typedef struct {
ZSTD_fseState stateOffb;
ZSTD_fseState stateML;
size_t prevOffset[ZSTD_REP_NUM];
- const BYTE* prefixStart;
- const BYTE* dictEnd;
- size_t pos;
} seqState_t;
/*! ZSTD_overlapCopy8() :
@@ -936,10 +932,9 @@ ZSTD_updateFseStateWithDInfo(ZSTD_fseState* DStatePtr, BIT_DStream_t* bitD, ZSTD
: 0)
typedef enum { ZSTD_lo_isRegularOffset, ZSTD_lo_isLongOffset=1 } ZSTD_longOffset_e;
-typedef enum { ZSTD_p_noPrefetch=0, ZSTD_p_prefetch=1 } ZSTD_prefetch_e;
FORCE_INLINE_TEMPLATE seq_t
-ZSTD_decodeSequence(seqState_t* seqState, const ZSTD_longOffset_e longOffsets, const ZSTD_prefetch_e prefetch)
+ZSTD_decodeSequence(seqState_t* seqState, const ZSTD_longOffset_e longOffsets)
{
seq_t seq;
ZSTD_seqSymbol const llDInfo = seqState->stateLL.table[seqState->stateLL.state];
@@ -1014,14 +1009,6 @@ ZSTD_decodeSequence(seqState_t* seqState, const ZSTD_longOffset_e longOffsets, c
DEBUGLOG(6, "seq: litL=%u, matchL=%u, offset=%u",
(U32)seq.litLength, (U32)seq.matchLength, (U32)seq.offset);
- if (prefetch == ZSTD_p_prefetch) {
- size_t const pos = seqState->pos + seq.litLength;
- const BYTE* const matchBase = (seq.offset > pos) ? seqState->dictEnd : seqState->prefixStart;
- seq.match = matchBase + pos - seq.offset; /* note : this operation can overflow when seq.offset is really too large, which can only happen when input is corrupted.
- * No consequence though : no memory access will occur, offset is only used for prefetching */
- seqState->pos = pos + seq.matchLength;
- }
-
/* ANS state update
* gcc-9.0.0 does 2.5% worse with ZSTD_updateFseStateWithDInfo().
* clang-9.2.0 does 7% worse with ZSTD_updateFseState().
@@ -1108,7 +1095,7 @@ ZSTD_decompressSequences_body( ZSTD_DCtx* dctx,
{
const BYTE* ip = (const BYTE*)seqStart;
const BYTE* const iend = ip + seqSize;
- BYTE* const ostart = (BYTE* const)dst;
+ BYTE* const ostart = (BYTE*)dst;
BYTE* const oend = ostart + maxDstSize;
BYTE* op = ostart;
const BYTE* litPtr = dctx->litPtr;
@@ -1122,7 +1109,6 @@ ZSTD_decompressSequences_body( ZSTD_DCtx* dctx,
/* Regen sequences */
if (nbSeq) {
seqState_t seqState;
- size_t error = 0;
dctx->fseEntropy = 1;
{ U32 i; for (i=0; i<ZSTD_REP_NUM; i++) seqState.prevOffset[i] = dctx->entropy.rep[i]; }
RETURN_ERROR_IF(
@@ -1156,13 +1142,14 @@ ZSTD_decompressSequences_body( ZSTD_DCtx* dctx,
* If you see most cycles served out of the DSB you've hit the good case.
* If it is pretty even then you may be in an okay case.
*
- * I've been able to reproduce this issue on the following CPUs:
+ * This issue has been reproduced on the following CPUs:
* - Kabylake: Macbook Pro (15-inch, 2019) 2.4 GHz Intel Core i9
* Use Instruments->Counters to get DSB/MITE cycles.
* I never got performance swings, but I was able to
* go from the good case of mostly DSB to half of the
* cycles served from MITE.
* - Coffeelake: Intel i9-9900k
+ * - Coffeelake: Intel i7-9700k
*
* I haven't been able to reproduce the instability or DSB misses on any
* of the following CPUS:
@@ -1175,33 +1162,35 @@ ZSTD_decompressSequences_body( ZSTD_DCtx* dctx,
*
* https://gist.github.com/terrelln/9889fc06a423fd5ca6e99351564473f4
*/
+ __asm__(".p2align 6");
+ __asm__("nop");
__asm__(".p2align 5");
__asm__("nop");
+# if __GNUC__ >= 9
+ /* better for gcc-9 and gcc-10, worse for clang and gcc-8 */
+ __asm__(".p2align 3");
+# else
__asm__(".p2align 4");
+# endif
#endif
for ( ; ; ) {
- seq_t const sequence = ZSTD_decodeSequence(&seqState, isLongOffset, ZSTD_p_noPrefetch);
+ seq_t const sequence = ZSTD_decodeSequence(&seqState, isLongOffset);
size_t const oneSeqSize = ZSTD_execSequence(op, oend, sequence, &litPtr, litEnd, prefixStart, vBase, dictEnd);
#if defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) && defined(FUZZING_ASSERT_VALID_SEQUENCE)
assert(!ZSTD_isError(oneSeqSize));
if (frame) ZSTD_assertValidSequence(dctx, op, oend, sequence, prefixStart, vBase);
#endif
+ if (UNLIKELY(ZSTD_isError(oneSeqSize)))
+ return oneSeqSize;
DEBUGLOG(6, "regenerated sequence size : %u", (U32)oneSeqSize);
- BIT_reloadDStream(&(seqState.DStream));
op += oneSeqSize;
- /* gcc and clang both don't like early returns in this loop.
- * Instead break and check for an error at the end of the loop.
- */
- if (UNLIKELY(ZSTD_isError(oneSeqSize))) {
- error = oneSeqSize;
+ if (UNLIKELY(!--nbSeq))
break;
- }
- if (UNLIKELY(!--nbSeq)) break;
+ BIT_reloadDStream(&(seqState.DStream));
}
/* check if reached exact end */
DEBUGLOG(5, "ZSTD_decompressSequences_body: after decode loop, remaining nbSeq : %i", nbSeq);
- if (ZSTD_isError(error)) return error;
RETURN_ERROR_IF(nbSeq, corruption_detected, "");
RETURN_ERROR_IF(BIT_reloadDStream(&seqState.DStream) < BIT_DStream_completed, corruption_detected, "");
/* save reps for next block */
@@ -1232,6 +1221,24 @@ ZSTD_decompressSequences_default(ZSTD_DCtx* dctx,
#endif /* ZSTD_FORCE_DECOMPRESS_SEQUENCES_LONG */
#ifndef ZSTD_FORCE_DECOMPRESS_SEQUENCES_SHORT
+
+FORCE_INLINE_TEMPLATE size_t
+ZSTD_prefetchMatch(size_t prefetchPos, seq_t const sequence,
+ const BYTE* const prefixStart, const BYTE* const dictEnd)
+{
+ prefetchPos += sequence.litLength;
+ { const BYTE* const matchBase = (sequence.offset > prefetchPos) ? dictEnd : prefixStart;
+ const BYTE* const match = matchBase + prefetchPos - sequence.offset; /* note : this operation can overflow when seq.offset is really too large, which can only happen when input is corrupted.
+ * No consequence though : memory address is only used for prefetching, not for dereferencing */
+ PREFETCH_L1(match); PREFETCH_L1(match+CACHELINE_SIZE); /* note : it's safe to invoke PREFETCH() on any memory address, including invalid ones */
+ }
+ return prefetchPos + sequence.matchLength;
+}
+
+/* This decoding function employs prefetching
+ * to reduce latency impact of cache misses.
+ * It's generally employed when block contains a significant portion of long-distance matches
+ * or when coupled with a "cold" dictionary */
FORCE_INLINE_TEMPLATE size_t
ZSTD_decompressSequencesLong_body(
ZSTD_DCtx* dctx,
@@ -1242,7 +1249,7 @@ ZSTD_decompressSequencesLong_body(
{
const BYTE* ip = (const BYTE*)seqStart;
const BYTE* const iend = ip + seqSize;
- BYTE* const ostart = (BYTE* const)dst;
+ BYTE* const ostart = (BYTE*)dst;
BYTE* const oend = ostart + maxDstSize;
BYTE* op = ostart;
const BYTE* litPtr = dctx->litPtr;
@@ -1254,18 +1261,17 @@ ZSTD_decompressSequencesLong_body(
/* Regen sequences */
if (nbSeq) {
-#define STORED_SEQS 4
+#define STORED_SEQS 8
#define STORED_SEQS_MASK (STORED_SEQS-1)
-#define ADVANCED_SEQS 4
+#define ADVANCED_SEQS STORED_SEQS
seq_t sequences[STORED_SEQS];
int const seqAdvance = MIN(nbSeq, ADVANCED_SEQS);
seqState_t seqState;
int seqNb;
+ size_t prefetchPos = (size_t)(op-prefixStart); /* track position relative to prefixStart */
+
dctx->fseEntropy = 1;
{ int i; for (i=0; i<ZSTD_REP_NUM; i++) seqState.prevOffset[i] = dctx->entropy.rep[i]; }
- seqState.prefixStart = prefixStart;
- seqState.pos = (size_t)(op-prefixStart);
- seqState.dictEnd = dictEnd;
assert(dst != NULL);
assert(iend >= ip);
RETURN_ERROR_IF(
@@ -1277,21 +1283,23 @@ ZSTD_decompressSequencesLong_body(
/* prepare in advance */
for (seqNb=0; (BIT_reloadDStream(&seqState.DStream) <= BIT_DStream_completed) && (seqNb<seqAdvance); seqNb++) {
- sequences[seqNb] = ZSTD_decodeSequence(&seqState, isLongOffset, ZSTD_p_prefetch);
- PREFETCH_L1(sequences[seqNb].match); PREFETCH_L1(sequences[seqNb].match + sequences[seqNb].matchLength - 1); /* note : it's safe to invoke PREFETCH() on any memory address, including invalid ones */
+ seq_t const sequence = ZSTD_decodeSequence(&seqState, isLongOffset);
+ prefetchPos = ZSTD_prefetchMatch(prefetchPos, sequence, prefixStart, dictEnd);
+ sequences[seqNb] = sequence;
}
RETURN_ERROR_IF(seqNb<seqAdvance, corruption_detected, "");
/* decode and decompress */
for ( ; (BIT_reloadDStream(&(seqState.DStream)) <= BIT_DStream_completed) && (seqNb<nbSeq) ; seqNb++) {
- seq_t const sequence = ZSTD_decodeSequence(&seqState, isLongOffset, ZSTD_p_prefetch);
+ seq_t const sequence = ZSTD_decodeSequence(&seqState, isLongOffset);
size_t const oneSeqSize = ZSTD_execSequence(op, oend, sequences[(seqNb-ADVANCED_SEQS) & STORED_SEQS_MASK], &litPtr, litEnd, prefixStart, dictStart, dictEnd);
#if defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION) && defined(FUZZING_ASSERT_VALID_SEQUENCE)
assert(!ZSTD_isError(oneSeqSize));
if (frame) ZSTD_assertValidSequence(dctx, op, oend, sequences[(seqNb-ADVANCED_SEQS) & STORED_SEQS_MASK], prefixStart, dictStart);
#endif
if (ZSTD_isError(oneSeqSize)) return oneSeqSize;
- PREFETCH_L1(sequence.match); PREFETCH_L1(sequence.match + sequence.matchLength - 1); /* note : it's safe to invoke PREFETCH() on any memory address, including invalid ones */
+
+ prefetchPos = ZSTD_prefetchMatch(prefetchPos, sequence, prefixStart, dictEnd);
sequences[seqNb & STORED_SEQS_MASK] = sequence;
op += oneSeqSize;
}
@@ -1517,9 +1525,9 @@ ZSTD_decompressBlock_internal(ZSTD_DCtx* dctx,
}
-void ZSTD_checkContinuity(ZSTD_DCtx* dctx, const void* dst)
+void ZSTD_checkContinuity(ZSTD_DCtx* dctx, const void* dst, size_t dstSize)
{
- if (dst != dctx->previousDstEnd) { /* not contiguous */
+ if (dst != dctx->previousDstEnd && dstSize > 0) { /* not contiguous */
dctx->dictEnd = dctx->previousDstEnd;
dctx->virtualStart = (const char*)dst - ((const char*)(dctx->previousDstEnd) - (const char*)(dctx->prefixStart));
dctx->prefixStart = dst;
@@ -1533,7 +1541,7 @@ size_t ZSTD_decompressBlock(ZSTD_DCtx* dctx,
const void* src, size_t srcSize)
{
size_t dSize;
- ZSTD_checkContinuity(dctx, dst);
+ ZSTD_checkContinuity(dctx, dst, dstCapacity);
dSize = ZSTD_decompressBlock_internal(dctx, dst, dstCapacity, src, srcSize, /* frame */ 0);
dctx->previousDstEnd = (char*)dst + dSize;
return dSize;
diff --git a/thirdparty/zstd/decompress/zstd_decompress_block.h b/thirdparty/zstd/decompress/zstd_decompress_block.h
index b5715c168e..049a0cd84c 100644
--- a/thirdparty/zstd/decompress/zstd_decompress_block.h
+++ b/thirdparty/zstd/decompress/zstd_decompress_block.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
diff --git a/thirdparty/zstd/decompress/zstd_decompress_internal.h b/thirdparty/zstd/decompress/zstd_decompress_internal.h
index f80b471e99..ebda0c9031 100644
--- a/thirdparty/zstd/decompress/zstd_decompress_internal.h
+++ b/thirdparty/zstd/decompress/zstd_decompress_internal.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -99,6 +99,13 @@ typedef enum {
ZSTD_use_once = 1 /* Use the dictionary once and set to ZSTD_dont_use */
} ZSTD_dictUses_e;
+/* Hashset for storing references to multiple ZSTD_DDict within ZSTD_DCtx */
+typedef struct {
+ const ZSTD_DDict** ddictPtrTable;
+ size_t ddictPtrTableSize;
+ size_t ddictPtrCount;
+} ZSTD_DDictHashSet;
+
struct ZSTD_DCtx_s
{
const ZSTD_seqSymbol* LLTptr;
@@ -113,6 +120,7 @@ struct ZSTD_DCtx_s
const void* dictEnd; /* end of previous segment */
size_t expected;
ZSTD_frameHeader fParams;
+ U64 processedCSize;
U64 decodedSize;
blockType_e bType; /* used in ZSTD_decompressContinue(), store blockType between block header decoding and block decompression stages */
ZSTD_dStage stage;
@@ -136,6 +144,8 @@ struct ZSTD_DCtx_s
U32 dictID;
int ddictIsCold; /* if == 1 : dictionary is "new" for working context, and presumed "cold" (not in cpu cache) */
ZSTD_dictUses_e dictUses;
+ ZSTD_DDictHashSet* ddictSet; /* Hash set for multiple ddicts */
+ ZSTD_refMultipleDDicts_e refMultipleDDicts; /* User specified: if == 1, will allow references to multiple DDicts. Default == 0 (disabled) */
/* streaming */
ZSTD_dStreamStage streamStage;
@@ -166,6 +176,11 @@ struct ZSTD_DCtx_s
void const* dictContentBeginForFuzzing;
void const* dictContentEndForFuzzing;
#endif
+
+ /* Tracing */
+#if ZSTD_TRACE
+ ZSTD_TraceCtx traceCtx;
+#endif
}; /* typedef'd to ZSTD_DCtx within "zstd.h" */
@@ -184,7 +199,7 @@ size_t ZSTD_loadDEntropy(ZSTD_entropyDTables_t* entropy,
* If yes, do nothing (continue on current segment).
* If not, classify previous segment as "external dictionary", and start a new segment.
* This function cannot fail. */
-void ZSTD_checkContinuity(ZSTD_DCtx* dctx, const void* dst);
+void ZSTD_checkContinuity(ZSTD_DCtx* dctx, const void* dst, size_t dstSize);
#endif /* ZSTD_DECOMPRESS_INTERNAL_H */
diff --git a/thirdparty/zstd/zstd.h b/thirdparty/zstd/zstd.h
index b0ecdf5538..4651e6c4dc 100644
--- a/thirdparty/zstd/zstd.h
+++ b/thirdparty/zstd/zstd.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
@@ -71,8 +71,8 @@ extern "C" {
/*------ Version ------*/
#define ZSTD_VERSION_MAJOR 1
-#define ZSTD_VERSION_MINOR 4
-#define ZSTD_VERSION_RELEASE 8
+#define ZSTD_VERSION_MINOR 5
+#define ZSTD_VERSION_RELEASE 0
#define ZSTD_VERSION_NUMBER (ZSTD_VERSION_MAJOR *100*100 + ZSTD_VERSION_MINOR *100 + ZSTD_VERSION_RELEASE)
/*! ZSTD_versionNumber() :
@@ -109,7 +109,6 @@ ZSTDLIB_API const char* ZSTD_versionString(void);
#define ZSTD_BLOCKSIZE_MAX (1<<ZSTD_BLOCKSIZELOG_MAX)
-
/***************************************
* Simple API
***************************************/
@@ -166,7 +165,7 @@ ZSTDLIB_API unsigned long long ZSTD_getFrameContentSize(const void *src, size_t
* @return : decompressed size of `src` frame content _if known and not empty_, 0 otherwise. */
ZSTDLIB_API unsigned long long ZSTD_getDecompressedSize(const void* src, size_t srcSize);
-/*! ZSTD_findFrameCompressedSize() :
+/*! ZSTD_findFrameCompressedSize() : Requires v1.4.0+
* `src` should point to the start of a ZSTD frame or skippable frame.
* `srcSize` must be >= first frame size
* @return : the compressed size of the first frame starting at `src`,
@@ -180,8 +179,9 @@ ZSTDLIB_API size_t ZSTD_findFrameCompressedSize(const void* src, size_t srcSize)
ZSTDLIB_API size_t ZSTD_compressBound(size_t srcSize); /*!< maximum compressed size in worst case single-pass scenario */
ZSTDLIB_API unsigned ZSTD_isError(size_t code); /*!< tells if a `size_t` function result is an error code */
ZSTDLIB_API const char* ZSTD_getErrorName(size_t code); /*!< provides readable string from an error code */
-ZSTDLIB_API int ZSTD_minCLevel(void); /*!< minimum negative compression level allowed */
+ZSTDLIB_API int ZSTD_minCLevel(void); /*!< minimum negative compression level allowed, requires v1.4.0+ */
ZSTDLIB_API int ZSTD_maxCLevel(void); /*!< maximum compression level available */
+ZSTDLIB_API int ZSTD_defaultCLevel(void); /*!< default compression level, specified by ZSTD_CLEVEL_DEFAULT, requires v1.5.0+ */
/***************************************
@@ -199,7 +199,7 @@ ZSTDLIB_API int ZSTD_maxCLevel(void); /*!< maximum compres
*/
typedef struct ZSTD_CCtx_s ZSTD_CCtx;
ZSTDLIB_API ZSTD_CCtx* ZSTD_createCCtx(void);
-ZSTDLIB_API size_t ZSTD_freeCCtx(ZSTD_CCtx* cctx);
+ZSTDLIB_API size_t ZSTD_freeCCtx(ZSTD_CCtx* cctx); /* accept NULL pointer */
/*! ZSTD_compressCCtx() :
* Same as ZSTD_compress(), using an explicit ZSTD_CCtx.
@@ -222,7 +222,7 @@ ZSTDLIB_API size_t ZSTD_compressCCtx(ZSTD_CCtx* cctx,
* Use one context per thread for parallel execution. */
typedef struct ZSTD_DCtx_s ZSTD_DCtx;
ZSTDLIB_API ZSTD_DCtx* ZSTD_createDCtx(void);
-ZSTDLIB_API size_t ZSTD_freeDCtx(ZSTD_DCtx* dctx);
+ZSTDLIB_API size_t ZSTD_freeDCtx(ZSTD_DCtx* dctx); /* accept NULL pointer */
/*! ZSTD_decompressDCtx() :
* Same as ZSTD_decompress(),
@@ -234,9 +234,9 @@ ZSTDLIB_API size_t ZSTD_decompressDCtx(ZSTD_DCtx* dctx,
const void* src, size_t srcSize);
-/***************************************
-* Advanced compression API
-***************************************/
+/*********************************************
+* Advanced compression API (Requires v1.4.0+)
+**********************************************/
/* API design :
* Parameters are pushed one by one into an existing context,
@@ -266,7 +266,6 @@ typedef enum { ZSTD_fast=1,
Only the order (from fast to strong) is guaranteed */
} ZSTD_strategy;
-
typedef enum {
/* compression parameters
@@ -332,7 +331,6 @@ typedef enum {
* The higher the value of selected strategy, the more complex it is,
* resulting in stronger and slower compression.
* Special: value 0 means "use default strategy". */
-
/* LDM mode parameters */
ZSTD_c_enableLongDistanceMatching=160, /* Enable long distance matching.
* This parameter is designed to improve compression ratio
@@ -389,7 +387,7 @@ typedef enum {
ZSTD_c_jobSize=401, /* Size of a compression job. This value is enforced only when nbWorkers >= 1.
* Each compression job is completed in parallel, so this value can indirectly impact the nb of active threads.
* 0 means default, which is dynamically determined based on compression parameters.
- * Job size must be a minimum of overlap size, or 1 MB, whichever is largest.
+ * Job size must be a minimum of overlap size, or ZSTDMT_JOBSIZE_MIN (= 512 KB), whichever is largest.
* The minimum size is automatically and transparently enforced. */
ZSTD_c_overlapLog=402, /* Control the overlap size, as a fraction of window size.
* The overlap size is an amount of data reloaded from previous job at the beginning of a new job.
@@ -419,6 +417,8 @@ typedef enum {
* ZSTD_c_stableOutBuffer
* ZSTD_c_blockDelimiters
* ZSTD_c_validateSequences
+ * ZSTD_c_splitBlocks
+ * ZSTD_c_useRowMatchFinder
* Because they are not stable, it's necessary to define ZSTD_STATIC_LINKING_ONLY to access them.
* note : never ever use experimentalParam? names directly;
* also, the enums values themselves are unstable and can still change.
@@ -434,7 +434,10 @@ typedef enum {
ZSTD_c_experimentalParam9=1006,
ZSTD_c_experimentalParam10=1007,
ZSTD_c_experimentalParam11=1008,
- ZSTD_c_experimentalParam12=1009
+ ZSTD_c_experimentalParam12=1009,
+ ZSTD_c_experimentalParam13=1010,
+ ZSTD_c_experimentalParam14=1011,
+ ZSTD_c_experimentalParam15=1012
} ZSTD_cParameter;
typedef struct {
@@ -519,9 +522,9 @@ ZSTDLIB_API size_t ZSTD_compress2( ZSTD_CCtx* cctx,
const void* src, size_t srcSize);
-/***************************************
-* Advanced decompression API
-***************************************/
+/***********************************************
+* Advanced decompression API (Requires v1.4.0+)
+************************************************/
/* The advanced API pushes parameters one by one into an existing DCtx context.
* Parameters are sticky, and remain valid for all following frames
@@ -546,12 +549,14 @@ typedef enum {
* ZSTD_d_format
* ZSTD_d_stableOutBuffer
* ZSTD_d_forceIgnoreChecksum
+ * ZSTD_d_refMultipleDDicts
* Because they are not stable, it's necessary to define ZSTD_STATIC_LINKING_ONLY to access them.
* note : never ever use experimentalParam? names directly
*/
ZSTD_d_experimentalParam1=1000,
ZSTD_d_experimentalParam2=1001,
- ZSTD_d_experimentalParam3=1002
+ ZSTD_d_experimentalParam3=1002,
+ ZSTD_d_experimentalParam4=1003
} ZSTD_dParameter;
@@ -665,7 +670,7 @@ typedef ZSTD_CCtx ZSTD_CStream; /**< CCtx and CStream are now effectively same
/* Continue to distinguish them for compatibility with older versions <= v1.2.0 */
/*===== ZSTD_CStream management functions =====*/
ZSTDLIB_API ZSTD_CStream* ZSTD_createCStream(void);
-ZSTDLIB_API size_t ZSTD_freeCStream(ZSTD_CStream* zcs);
+ZSTDLIB_API size_t ZSTD_freeCStream(ZSTD_CStream* zcs); /* accept NULL pointer */
/*===== Streaming compression functions =====*/
typedef enum {
@@ -681,7 +686,7 @@ typedef enum {
: note : multithreaded compression will block to flush as much output as possible. */
} ZSTD_EndDirective;
-/*! ZSTD_compressStream2() :
+/*! ZSTD_compressStream2() : Requires v1.4.0+
* Behaves about the same as ZSTD_compressStream, with additional control on end directive.
* - Compression parameters are pushed into CCtx before starting compression, using ZSTD_CCtx_set*()
* - Compression parameters cannot be changed once compression is started (save a list of exceptions in multi-threading mode)
@@ -727,11 +732,11 @@ ZSTDLIB_API size_t ZSTD_CStreamOutSize(void); /**< recommended size for output
/* *****************************************************************************
- * This following is a legacy streaming API.
+ * This following is a legacy streaming API, available since v1.0+ .
* It can be replaced by ZSTD_CCtx_reset() and ZSTD_compressStream2().
* It is redundant, but remains fully supported.
- * Advanced parameters and dictionary compression can only be used through the
- * new API.
+ * Streaming in combination with advanced parameters and dictionary compression
+ * can only be used through the new API.
******************************************************************************/
/*!
@@ -786,7 +791,7 @@ typedef ZSTD_DCtx ZSTD_DStream; /**< DCtx and DStream are now effectively same
/* For compatibility with versions <= v1.2.0, prefer differentiating them. */
/*===== ZSTD_DStream management functions =====*/
ZSTDLIB_API ZSTD_DStream* ZSTD_createDStream(void);
-ZSTDLIB_API size_t ZSTD_freeDStream(ZSTD_DStream* zds);
+ZSTDLIB_API size_t ZSTD_freeDStream(ZSTD_DStream* zds); /* accept NULL pointer */
/*===== Streaming decompression functions =====*/
@@ -809,7 +814,7 @@ ZSTDLIB_API size_t ZSTD_DStreamOutSize(void); /*!< recommended size for output
/*! ZSTD_compress_usingDict() :
* Compression at an explicit compression level using a Dictionary.
* A dictionary can be any arbitrary data segment (also called a prefix),
- * or a buffer with specified information (see dictBuilder/zdict.h).
+ * or a buffer with specified information (see zdict.h).
* Note : This function loads the dictionary, resulting in significant startup delay.
* It's intended for a dictionary used only once.
* Note 2 : When `dict == NULL || dictSize < 8` no dictionary is used. */
@@ -852,7 +857,8 @@ ZSTDLIB_API ZSTD_CDict* ZSTD_createCDict(const void* dictBuffer, size_t dictSize
int compressionLevel);
/*! ZSTD_freeCDict() :
- * Function frees memory allocated by ZSTD_createCDict(). */
+ * Function frees memory allocated by ZSTD_createCDict().
+ * If a NULL pointer is passed, no operation is performed. */
ZSTDLIB_API size_t ZSTD_freeCDict(ZSTD_CDict* CDict);
/*! ZSTD_compress_usingCDict() :
@@ -874,7 +880,8 @@ typedef struct ZSTD_DDict_s ZSTD_DDict;
ZSTDLIB_API ZSTD_DDict* ZSTD_createDDict(const void* dictBuffer, size_t dictSize);
/*! ZSTD_freeDDict() :
- * Function frees memory allocated with ZSTD_createDDict() */
+ * Function frees memory allocated with ZSTD_createDDict()
+ * If a NULL pointer is passed, no operation is performed. */
ZSTDLIB_API size_t ZSTD_freeDDict(ZSTD_DDict* ddict);
/*! ZSTD_decompress_usingDDict() :
@@ -890,19 +897,25 @@ ZSTDLIB_API size_t ZSTD_decompress_usingDDict(ZSTD_DCtx* dctx,
* Dictionary helper functions
*******************************/
-/*! ZSTD_getDictID_fromDict() :
+/*! ZSTD_getDictID_fromDict() : Requires v1.4.0+
* Provides the dictID stored within dictionary.
* if @return == 0, the dictionary is not conformant with Zstandard specification.
* It can still be loaded, but as a content-only dictionary. */
ZSTDLIB_API unsigned ZSTD_getDictID_fromDict(const void* dict, size_t dictSize);
-/*! ZSTD_getDictID_fromDDict() :
+/*! ZSTD_getDictID_fromCDict() : Requires v1.5.0+
+ * Provides the dictID of the dictionary loaded into `cdict`.
+ * If @return == 0, the dictionary is not conformant to Zstandard specification, or empty.
+ * Non-conformant dictionaries can still be loaded, but as content-only dictionaries. */
+ZSTDLIB_API unsigned ZSTD_getDictID_fromCDict(const ZSTD_CDict* cdict);
+
+/*! ZSTD_getDictID_fromDDict() : Requires v1.4.0+
* Provides the dictID of the dictionary loaded into `ddict`.
* If @return == 0, the dictionary is not conformant to Zstandard specification, or empty.
* Non-conformant dictionaries can still be loaded, but as content-only dictionaries. */
ZSTDLIB_API unsigned ZSTD_getDictID_fromDDict(const ZSTD_DDict* ddict);
-/*! ZSTD_getDictID_fromFrame() :
+/*! ZSTD_getDictID_fromFrame() : Requires v1.4.0+
* Provides the dictID required to decompressed the frame stored within `src`.
* If @return == 0, the dictID could not be decoded.
* This could for one of the following reasons :
@@ -916,7 +929,7 @@ ZSTDLIB_API unsigned ZSTD_getDictID_fromFrame(const void* src, size_t srcSize);
/*******************************************************************************
- * Advanced dictionary and prefix API
+ * Advanced dictionary and prefix API (Requires v1.4.0+)
*
* This API allows dictionaries to be used with ZSTD_compress2(),
* ZSTD_compressStream2(), and ZSTD_decompress(). Dictionaries are sticky, and
@@ -925,7 +938,7 @@ ZSTDLIB_API unsigned ZSTD_getDictID_fromFrame(const void* src, size_t srcSize);
******************************************************************************/
-/*! ZSTD_CCtx_loadDictionary() :
+/*! ZSTD_CCtx_loadDictionary() : Requires v1.4.0+
* Create an internal CDict from `dict` buffer.
* Decompression will have to use same dictionary.
* @result : 0, or an error code (which can be tested with ZSTD_isError()).
@@ -944,11 +957,11 @@ ZSTDLIB_API unsigned ZSTD_getDictID_fromFrame(const void* src, size_t srcSize);
* to precisely select how dictionary content must be interpreted. */
ZSTDLIB_API size_t ZSTD_CCtx_loadDictionary(ZSTD_CCtx* cctx, const void* dict, size_t dictSize);
-/*! ZSTD_CCtx_refCDict() :
+/*! ZSTD_CCtx_refCDict() : Requires v1.4.0+
* Reference a prepared dictionary, to be used for all next compressed frames.
* Note that compression parameters are enforced from within CDict,
* and supersede any compression parameter previously set within CCtx.
- * The parameters ignored are labled as "superseded-by-cdict" in the ZSTD_cParameter enum docs.
+ * The parameters ignored are labelled as "superseded-by-cdict" in the ZSTD_cParameter enum docs.
* The ignored parameters will be used again if the CCtx is returned to no-dictionary mode.
* The dictionary will remain valid for future compressed frames using same CCtx.
* @result : 0, or an error code (which can be tested with ZSTD_isError()).
@@ -958,7 +971,7 @@ ZSTDLIB_API size_t ZSTD_CCtx_loadDictionary(ZSTD_CCtx* cctx, const void* dict, s
* Note 2 : CDict is just referenced, its lifetime must outlive its usage within CCtx. */
ZSTDLIB_API size_t ZSTD_CCtx_refCDict(ZSTD_CCtx* cctx, const ZSTD_CDict* cdict);
-/*! ZSTD_CCtx_refPrefix() :
+/*! ZSTD_CCtx_refPrefix() : Requires v1.4.0+
* Reference a prefix (single-usage dictionary) for next compressed frame.
* A prefix is **only used once**. Tables are discarded at end of frame (ZSTD_e_end).
* Decompression will need same prefix to properly regenerate data.
@@ -979,7 +992,7 @@ ZSTDLIB_API size_t ZSTD_CCtx_refCDict(ZSTD_CCtx* cctx, const ZSTD_CDict* cdict);
ZSTDLIB_API size_t ZSTD_CCtx_refPrefix(ZSTD_CCtx* cctx,
const void* prefix, size_t prefixSize);
-/*! ZSTD_DCtx_loadDictionary() :
+/*! ZSTD_DCtx_loadDictionary() : Requires v1.4.0+
* Create an internal DDict from dict buffer,
* to be used to decompress next frames.
* The dictionary remains valid for all future frames, until explicitly invalidated.
@@ -996,9 +1009,16 @@ ZSTDLIB_API size_t ZSTD_CCtx_refPrefix(ZSTD_CCtx* cctx,
*/
ZSTDLIB_API size_t ZSTD_DCtx_loadDictionary(ZSTD_DCtx* dctx, const void* dict, size_t dictSize);
-/*! ZSTD_DCtx_refDDict() :
+/*! ZSTD_DCtx_refDDict() : Requires v1.4.0+
* Reference a prepared dictionary, to be used to decompress next frames.
* The dictionary remains active for decompression of future frames using same DCtx.
+ *
+ * If called with ZSTD_d_refMultipleDDicts enabled, repeated calls of this function
+ * will store the DDict references in a table, and the DDict used for decompression
+ * will be determined at decompression time, as per the dict ID in the frame.
+ * The memory for the table is allocated on the first call to refDDict, and can be
+ * freed with ZSTD_freeDCtx().
+ *
* @result : 0, or an error code (which can be tested with ZSTD_isError()).
* Note 1 : Currently, only one dictionary can be managed.
* Referencing a new dictionary effectively "discards" any previous one.
@@ -1007,7 +1027,7 @@ ZSTDLIB_API size_t ZSTD_DCtx_loadDictionary(ZSTD_DCtx* dctx, const void* dict, s
*/
ZSTDLIB_API size_t ZSTD_DCtx_refDDict(ZSTD_DCtx* dctx, const ZSTD_DDict* ddict);
-/*! ZSTD_DCtx_refPrefix() :
+/*! ZSTD_DCtx_refPrefix() : Requires v1.4.0+
* Reference a prefix (single-usage dictionary) to decompress next frame.
* This is the reverse operation of ZSTD_CCtx_refPrefix(),
* and must use the same prefix as the one used during compression.
@@ -1028,7 +1048,7 @@ ZSTDLIB_API size_t ZSTD_DCtx_refPrefix(ZSTD_DCtx* dctx,
/* === Memory management === */
-/*! ZSTD_sizeof_*() :
+/*! ZSTD_sizeof_*() : Requires v1.4.0+
* These functions give the _current_ memory usage of selected object.
* Note that object memory usage can evolve (increase or decrease) over time. */
ZSTDLIB_API size_t ZSTD_sizeof_CCtx(const ZSTD_CCtx* cctx);
@@ -1053,6 +1073,28 @@ ZSTDLIB_API size_t ZSTD_sizeof_DDict(const ZSTD_DDict* ddict);
#if defined(ZSTD_STATIC_LINKING_ONLY) && !defined(ZSTD_H_ZSTD_STATIC_LINKING_ONLY)
#define ZSTD_H_ZSTD_STATIC_LINKING_ONLY
+/* Deprecation warnings :
+ * Should these warnings be a problem, it is generally possible to disable them,
+ * typically with -Wno-deprecated-declarations for gcc or _CRT_SECURE_NO_WARNINGS in Visual.
+ * Otherwise, it's also possible to define ZSTD_DISABLE_DEPRECATE_WARNINGS.
+ */
+#ifdef ZSTD_DISABLE_DEPRECATE_WARNINGS
+# define ZSTD_DEPRECATED(message) ZSTDLIB_API /* disable deprecation warnings */
+#else
+# if defined (__cplusplus) && (__cplusplus >= 201402) /* C++14 or greater */
+# define ZSTD_DEPRECATED(message) [[deprecated(message)]] ZSTDLIB_API
+# elif (defined(GNUC) && (GNUC > 4 || (GNUC == 4 && GNUC_MINOR >= 5))) || defined(__clang__)
+# define ZSTD_DEPRECATED(message) ZSTDLIB_API __attribute__((deprecated(message)))
+# elif defined(__GNUC__) && (__GNUC__ >= 3)
+# define ZSTD_DEPRECATED(message) ZSTDLIB_API __attribute__((deprecated))
+# elif defined(_MSC_VER)
+# define ZSTD_DEPRECATED(message) ZSTDLIB_API __declspec(deprecated(message))
+# else
+# pragma message("WARNING: You need to implement ZSTD_DEPRECATED for this compiler")
+# define ZSTD_DEPRECATED(message) ZSTDLIB_API
+# endif
+#endif /* ZSTD_DISABLE_DEPRECATE_WARNINGS */
+
/****************************************************************************************
* experimental API (static linking only)
****************************************************************************************
@@ -1206,6 +1248,12 @@ typedef enum {
} ZSTD_forceIgnoreChecksum_e;
typedef enum {
+ /* Note: this enum controls ZSTD_d_refMultipleDDicts */
+ ZSTD_rmd_refSingleDDict = 0,
+ ZSTD_rmd_refMultipleDDicts = 1
+} ZSTD_refMultipleDDicts_e;
+
+typedef enum {
/* Note: this enum and the behavior it controls are effectively internal
* implementation details of the compressor. They are expected to continue
* to evolve and should be considered only in the context of extremely
@@ -1253,6 +1301,11 @@ typedef enum {
ZSTD_lcm_uncompressed = 2 /**< Always emit uncompressed literals. */
} ZSTD_literalCompressionMode_e;
+typedef enum {
+ ZSTD_urm_auto = 0, /* Automatically determine whether or not we use row matchfinder */
+ ZSTD_urm_disableRowMatchFinder = 1, /* Never use row matchfinder */
+ ZSTD_urm_enableRowMatchFinder = 2 /* Always use row matchfinder when applicable */
+} ZSTD_useRowMatchFinderMode_e;
/***************************************
* Frame size functions
@@ -1286,7 +1339,7 @@ ZSTDLIB_API unsigned long long ZSTD_findDecompressedSize(const void* src, size_t
* `srcSize` must be the _exact_ size of this series
* (i.e. there should be a frame boundary at `src + srcSize`)
* @return : - upper-bound for the decompressed size of all data in all successive frames
- * - if an error occured: ZSTD_CONTENTSIZE_ERROR
+ * - if an error occurred: ZSTD_CONTENTSIZE_ERROR
*
* note 1 : an error can occur if `src` contains an invalid or incorrectly formatted frame.
* note 2 : the upper-bound is exact when the decompressed size field is available in every ZSTD encoded frame of `src`.
@@ -1372,6 +1425,23 @@ ZSTDLIB_API size_t ZSTD_compressSequences(ZSTD_CCtx* const cctx, void* dst, size
const void* src, size_t srcSize);
+/*! ZSTD_writeSkippableFrame() :
+ * Generates a zstd skippable frame containing data given by src, and writes it to dst buffer.
+ *
+ * Skippable frames begin with a a 4-byte magic number. There are 16 possible choices of magic number,
+ * ranging from ZSTD_MAGIC_SKIPPABLE_START to ZSTD_MAGIC_SKIPPABLE_START+15.
+ * As such, the parameter magicVariant controls the exact skippable frame magic number variant used, so
+ * the magic number used will be ZSTD_MAGIC_SKIPPABLE_START + magicVariant.
+ *
+ * Returns an error if destination buffer is not large enough, if the source size is not representable
+ * with a 4-byte unsigned int, or if the parameter magicVariant is greater than 15 (and therefore invalid).
+ *
+ * @return : number of bytes written or a ZSTD error.
+ */
+ZSTDLIB_API size_t ZSTD_writeSkippableFrame(void* dst, size_t dstCapacity,
+ const void* src, size_t srcSize, unsigned magicVariant);
+
+
/***************************************
* Memory management
***************************************/
@@ -1506,13 +1576,14 @@ ZSTDLIB_API ZSTD_CDict* ZSTD_createCDict_advanced(const void* dict, size_t dictS
* Note that the lifetime of such pool must exist while being used.
* ZSTD_CCtx_refThreadPool assigns a thread pool to a context (use NULL argument value
* to use an internal thread pool).
- * ZSTD_freeThreadPool frees a thread pool.
+ * ZSTD_freeThreadPool frees a thread pool, accepts NULL pointer.
*/
typedef struct POOL_ctx_s ZSTD_threadPool;
ZSTDLIB_API ZSTD_threadPool* ZSTD_createThreadPool(size_t numThreads);
-ZSTDLIB_API void ZSTD_freeThreadPool (ZSTD_threadPool* pool);
+ZSTDLIB_API void ZSTD_freeThreadPool (ZSTD_threadPool* pool); /* accept NULL pointer */
ZSTDLIB_API size_t ZSTD_CCtx_refThreadPool(ZSTD_CCtx* cctx, ZSTD_threadPool* pool);
+
/*
* This API is temporary and is expected to change or disappear in the future!
*/
@@ -1523,10 +1594,12 @@ ZSTDLIB_API ZSTD_CDict* ZSTD_createCDict_advanced2(
const ZSTD_CCtx_params* cctxParams,
ZSTD_customMem customMem);
-ZSTDLIB_API ZSTD_DDict* ZSTD_createDDict_advanced(const void* dict, size_t dictSize,
- ZSTD_dictLoadMethod_e dictLoadMethod,
- ZSTD_dictContentType_e dictContentType,
- ZSTD_customMem customMem);
+ZSTDLIB_API ZSTD_DDict* ZSTD_createDDict_advanced(
+ const void* dict, size_t dictSize,
+ ZSTD_dictLoadMethod_e dictLoadMethod,
+ ZSTD_dictContentType_e dictContentType,
+ ZSTD_customMem customMem);
+
/***************************************
* Advanced compression functions
@@ -1540,12 +1613,6 @@ ZSTDLIB_API ZSTD_DDict* ZSTD_createDDict_advanced(const void* dict, size_t dictS
* note: equivalent to ZSTD_createCDict_advanced(), with dictLoadMethod==ZSTD_dlm_byRef */
ZSTDLIB_API ZSTD_CDict* ZSTD_createCDict_byReference(const void* dictBuffer, size_t dictSize, int compressionLevel);
-/*! ZSTD_getDictID_fromCDict() :
- * Provides the dictID of the dictionary loaded into `cdict`.
- * If @return == 0, the dictionary is not conformant to Zstandard specification, or empty.
- * Non-conformant dictionaries can still be loaded, but as content-only dictionaries. */
-ZSTDLIB_API unsigned ZSTD_getDictID_fromCDict(const ZSTD_CDict* cdict);
-
/*! ZSTD_getCParams() :
* @return ZSTD_compressionParameters structure for a selected compression level and estimated srcSize.
* `estimatedSrcSize` value is optional, select 0 if not known */
@@ -1572,18 +1639,20 @@ ZSTDLIB_API ZSTD_compressionParameters ZSTD_adjustCParams(ZSTD_compressionParame
/*! ZSTD_compress_advanced() :
* Note : this function is now DEPRECATED.
* It can be replaced by ZSTD_compress2(), in combination with ZSTD_CCtx_setParameter() and other parameter setters.
- * This prototype will be marked as deprecated and generate compilation warning on reaching v1.5.x */
-ZSTDLIB_API size_t ZSTD_compress_advanced(ZSTD_CCtx* cctx,
+ * This prototype will generate compilation warnings. */
+ZSTD_DEPRECATED("use ZSTD_compress2")
+size_t ZSTD_compress_advanced(ZSTD_CCtx* cctx,
void* dst, size_t dstCapacity,
const void* src, size_t srcSize,
const void* dict,size_t dictSize,
ZSTD_parameters params);
/*! ZSTD_compress_usingCDict_advanced() :
- * Note : this function is now REDUNDANT.
+ * Note : this function is now DEPRECATED.
* It can be replaced by ZSTD_compress2(), in combination with ZSTD_CCtx_loadDictionary() and other parameter setters.
- * This prototype will be marked as deprecated and generate compilation warning in some future version */
-ZSTDLIB_API size_t ZSTD_compress_usingCDict_advanced(ZSTD_CCtx* cctx,
+ * This prototype will generate compilation warnings. */
+ZSTD_DEPRECATED("use ZSTD_compress2 with ZSTD_CCtx_loadDictionary")
+size_t ZSTD_compress_usingCDict_advanced(ZSTD_CCtx* cctx,
void* dst, size_t dstCapacity,
const void* src, size_t srcSize,
const ZSTD_CDict* cdict,
@@ -1645,7 +1714,7 @@ ZSTDLIB_API size_t ZSTD_CCtx_refPrefix_advanced(ZSTD_CCtx* cctx, const void* pre
/* Controls how the literals are compressed (default is auto).
* The value must be of type ZSTD_literalCompressionMode_e.
- * See ZSTD_literalCompressionMode_t enum definition for details.
+ * See ZSTD_literalCompressionMode_e enum definition for details.
*/
#define ZSTD_c_literalCompressionMode ZSTD_c_experimentalParam5
@@ -1797,12 +1866,52 @@ ZSTDLIB_API size_t ZSTD_CCtx_refPrefix_advanced(ZSTD_CCtx* cctx, const void* pre
*/
#define ZSTD_c_validateSequences ZSTD_c_experimentalParam12
+/* ZSTD_c_splitBlocks
+ * Default is 0 == disabled. Set to 1 to enable block splitting.
+ *
+ * Will attempt to split blocks in order to improve compression ratio at the cost of speed.
+ */
+#define ZSTD_c_splitBlocks ZSTD_c_experimentalParam13
+
+/* ZSTD_c_useRowMatchFinder
+ * Default is ZSTD_urm_auto.
+ * Controlled with ZSTD_useRowMatchFinderMode_e enum.
+ *
+ * By default, in ZSTD_urm_auto, when finalizing the compression parameters, the library
+ * will decide at runtime whether to use the row-based matchfinder based on support for SIMD
+ * instructions as well as the windowLog.
+ *
+ * Set to ZSTD_urm_disableRowMatchFinder to never use row-based matchfinder.
+ * Set to ZSTD_urm_enableRowMatchFinder to force usage of row-based matchfinder.
+ */
+#define ZSTD_c_useRowMatchFinder ZSTD_c_experimentalParam14
+
+/* ZSTD_c_deterministicRefPrefix
+ * Default is 0 == disabled. Set to 1 to enable.
+ *
+ * Zstd produces different results for prefix compression when the prefix is
+ * directly adjacent to the data about to be compressed vs. when it isn't.
+ * This is because zstd detects that the two buffers are contiguous and it can
+ * use a more efficient match finding algorithm. However, this produces different
+ * results than when the two buffers are non-contiguous. This flag forces zstd
+ * to always load the prefix in non-contiguous mode, even if it happens to be
+ * adjacent to the data, to guarantee determinism.
+ *
+ * If you really care about determinism when using a dictionary or prefix,
+ * like when doing delta compression, you should select this option. It comes
+ * at a speed penalty of about ~2.5% if the dictionary and data happened to be
+ * contiguous, and is free if they weren't contiguous. We don't expect that
+ * intentionally making the dictionary and data contiguous will be worth the
+ * cost to memcpy() the data.
+ */
+#define ZSTD_c_deterministicRefPrefix ZSTD_c_experimentalParam15
+
/*! ZSTD_CCtx_getParameter() :
* Get the requested compression parameter value, selected by enum ZSTD_cParameter,
* and store it into int* value.
* @return : 0, or an error code (which can be tested with ZSTD_isError()).
*/
-ZSTDLIB_API size_t ZSTD_CCtx_getParameter(ZSTD_CCtx* cctx, ZSTD_cParameter param, int* value);
+ZSTDLIB_API size_t ZSTD_CCtx_getParameter(const ZSTD_CCtx* cctx, ZSTD_cParameter param, int* value);
/*! ZSTD_CCtx_params :
@@ -1817,13 +1926,13 @@ ZSTDLIB_API size_t ZSTD_CCtx_getParameter(ZSTD_CCtx* cctx, ZSTD_cParameter param
* These parameters will be applied to
* all subsequent frames.
* - ZSTD_compressStream2() : Do compression using the CCtx.
- * - ZSTD_freeCCtxParams() : Free the memory.
+ * - ZSTD_freeCCtxParams() : Free the memory, accept NULL pointer.
*
* This can be used with ZSTD_estimateCCtxSize_advanced_usingCCtxParams()
* for static allocation of CCtx for single-threaded compression.
*/
ZSTDLIB_API ZSTD_CCtx_params* ZSTD_createCCtxParams(void);
-ZSTDLIB_API size_t ZSTD_freeCCtxParams(ZSTD_CCtx_params* params);
+ZSTDLIB_API size_t ZSTD_freeCCtxParams(ZSTD_CCtx_params* params); /* accept NULL pointer */
/*! ZSTD_CCtxParams_reset() :
* Reset params to default values.
@@ -1842,7 +1951,7 @@ ZSTDLIB_API size_t ZSTD_CCtxParams_init(ZSTD_CCtx_params* cctxParams, int compre
*/
ZSTDLIB_API size_t ZSTD_CCtxParams_init_advanced(ZSTD_CCtx_params* cctxParams, ZSTD_parameters params);
-/*! ZSTD_CCtxParams_setParameter() :
+/*! ZSTD_CCtxParams_setParameter() : Requires v1.4.0+
* Similar to ZSTD_CCtx_setParameter.
* Set one compression parameter, selected by enum ZSTD_cParameter.
* Parameters must be applied to a ZSTD_CCtx using
@@ -1857,7 +1966,7 @@ ZSTDLIB_API size_t ZSTD_CCtxParams_setParameter(ZSTD_CCtx_params* params, ZSTD_c
* Get the requested value of one compression parameter, selected by enum ZSTD_cParameter.
* @result : 0, or an error code (which can be tested with ZSTD_isError()).
*/
-ZSTDLIB_API size_t ZSTD_CCtxParams_getParameter(ZSTD_CCtx_params* params, ZSTD_cParameter param, int* value);
+ZSTDLIB_API size_t ZSTD_CCtxParams_getParameter(const ZSTD_CCtx_params* params, ZSTD_cParameter param, int* value);
/*! ZSTD_CCtx_setParametersUsingCCtxParams() :
* Apply a set of ZSTD_CCtx_params to the compression context.
@@ -1983,12 +2092,38 @@ ZSTDLIB_API size_t ZSTD_DCtx_getParameter(ZSTD_DCtx* dctx, ZSTD_dParameter param
*/
#define ZSTD_d_forceIgnoreChecksum ZSTD_d_experimentalParam3
+/* ZSTD_d_refMultipleDDicts
+ * Experimental parameter.
+ * Default is 0 == disabled. Set to 1 to enable
+ *
+ * If enabled and dctx is allocated on the heap, then additional memory will be allocated
+ * to store references to multiple ZSTD_DDict. That is, multiple calls of ZSTD_refDDict()
+ * using a given ZSTD_DCtx, rather than overwriting the previous DDict reference, will instead
+ * store all references. At decompression time, the appropriate dictID is selected
+ * from the set of DDicts based on the dictID in the frame.
+ *
+ * Usage is simply calling ZSTD_refDDict() on multiple dict buffers.
+ *
+ * Param has values of byte ZSTD_refMultipleDDicts_e
+ *
+ * WARNING: Enabling this parameter and calling ZSTD_DCtx_refDDict(), will trigger memory
+ * allocation for the hash table. ZSTD_freeDCtx() also frees this memory.
+ * Memory is allocated as per ZSTD_DCtx::customMem.
+ *
+ * Although this function allocates memory for the table, the user is still responsible for
+ * memory management of the underlying ZSTD_DDict* themselves.
+ */
+#define ZSTD_d_refMultipleDDicts ZSTD_d_experimentalParam4
+
+
/*! ZSTD_DCtx_setFormat() :
+ * This function is REDUNDANT. Prefer ZSTD_DCtx_setParameter().
* Instruct the decoder context about what kind of data to decode next.
* This instruction is mandatory to decode data without a fully-formed header,
* such ZSTD_f_zstd1_magicless for example.
* @return : 0, or an error code (which can be tested using ZSTD_isError()). */
-ZSTDLIB_API size_t ZSTD_DCtx_setFormat(ZSTD_DCtx* dctx, ZSTD_format_e format);
+ZSTD_DEPRECATED("use ZSTD_DCtx_setParameter() instead")
+size_t ZSTD_DCtx_setFormat(ZSTD_DCtx* dctx, ZSTD_format_e format);
/*! ZSTD_decompressStream_simpleArgs() :
* Same as ZSTD_decompressStream(),
@@ -2012,7 +2147,7 @@ ZSTDLIB_API size_t ZSTD_decompressStream_simpleArgs (
/*===== Advanced Streaming compression functions =====*/
/*! ZSTD_initCStream_srcSize() :
- * This function is deprecated, and equivalent to:
+ * This function is DEPRECATED, and equivalent to:
* ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only);
* ZSTD_CCtx_refCDict(zcs, NULL); // clear the dictionary (if any)
* ZSTD_CCtx_setParameter(zcs, ZSTD_c_compressionLevel, compressionLevel);
@@ -2021,15 +2156,15 @@ ZSTDLIB_API size_t ZSTD_decompressStream_simpleArgs (
* pledgedSrcSize must be correct. If it is not known at init time, use
* ZSTD_CONTENTSIZE_UNKNOWN. Note that, for compatibility with older programs,
* "0" also disables frame content size field. It may be enabled in the future.
- * Note : this prototype will be marked as deprecated and generate compilation warnings on reaching v1.5.x
+ * This prototype will generate compilation warnings.
*/
-ZSTDLIB_API size_t
-ZSTD_initCStream_srcSize(ZSTD_CStream* zcs,
+ZSTD_DEPRECATED("use ZSTD_CCtx_reset, see zstd.h for detailed instructions")
+size_t ZSTD_initCStream_srcSize(ZSTD_CStream* zcs,
int compressionLevel,
unsigned long long pledgedSrcSize);
/*! ZSTD_initCStream_usingDict() :
- * This function is deprecated, and is equivalent to:
+ * This function is DEPRECATED, and is equivalent to:
* ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only);
* ZSTD_CCtx_setParameter(zcs, ZSTD_c_compressionLevel, compressionLevel);
* ZSTD_CCtx_loadDictionary(zcs, dict, dictSize);
@@ -2038,15 +2173,15 @@ ZSTD_initCStream_srcSize(ZSTD_CStream* zcs,
* dict == NULL or dictSize < 8, in which case no dict is used.
* Note: dict is loaded with ZSTD_dct_auto (treated as a full zstd dictionary if
* it begins with ZSTD_MAGIC_DICTIONARY, else as raw content) and ZSTD_dlm_byCopy.
- * Note : this prototype will be marked as deprecated and generate compilation warnings on reaching v1.5.x
+ * This prototype will generate compilation warnings.
*/
-ZSTDLIB_API size_t
-ZSTD_initCStream_usingDict(ZSTD_CStream* zcs,
+ZSTD_DEPRECATED("use ZSTD_CCtx_reset, see zstd.h for detailed instructions")
+size_t ZSTD_initCStream_usingDict(ZSTD_CStream* zcs,
const void* dict, size_t dictSize,
int compressionLevel);
/*! ZSTD_initCStream_advanced() :
- * This function is deprecated, and is approximately equivalent to:
+ * This function is DEPRECATED, and is approximately equivalent to:
* ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only);
* // Pseudocode: Set each zstd parameter and leave the rest as-is.
* for ((param, value) : params) {
@@ -2058,23 +2193,24 @@ ZSTD_initCStream_usingDict(ZSTD_CStream* zcs,
* dict is loaded with ZSTD_dct_auto and ZSTD_dlm_byCopy.
* pledgedSrcSize must be correct.
* If srcSize is not known at init time, use value ZSTD_CONTENTSIZE_UNKNOWN.
- * Note : this prototype will be marked as deprecated and generate compilation warnings on reaching v1.5.x
+ * This prototype will generate compilation warnings.
*/
-ZSTDLIB_API size_t
-ZSTD_initCStream_advanced(ZSTD_CStream* zcs,
+ZSTD_DEPRECATED("use ZSTD_CCtx_reset, see zstd.h for detailed instructions")
+size_t ZSTD_initCStream_advanced(ZSTD_CStream* zcs,
const void* dict, size_t dictSize,
ZSTD_parameters params,
unsigned long long pledgedSrcSize);
/*! ZSTD_initCStream_usingCDict() :
- * This function is deprecated, and equivalent to:
+ * This function is DEPRECATED, and equivalent to:
* ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only);
* ZSTD_CCtx_refCDict(zcs, cdict);
- *
+ *
* note : cdict will just be referenced, and must outlive compression session
- * Note : this prototype will be marked as deprecated and generate compilation warnings on reaching v1.5.x
+ * This prototype will generate compilation warnings.
*/
-ZSTDLIB_API size_t ZSTD_initCStream_usingCDict(ZSTD_CStream* zcs, const ZSTD_CDict* cdict);
+ZSTD_DEPRECATED("use ZSTD_CCtx_reset and ZSTD_CCtx_refCDict, see zstd.h for detailed instructions")
+size_t ZSTD_initCStream_usingCDict(ZSTD_CStream* zcs, const ZSTD_CDict* cdict);
/*! ZSTD_initCStream_usingCDict_advanced() :
* This function is DEPRECATED, and is approximately equivalent to:
@@ -2089,18 +2225,21 @@ ZSTDLIB_API size_t ZSTD_initCStream_usingCDict(ZSTD_CStream* zcs, const ZSTD_CDi
* same as ZSTD_initCStream_usingCDict(), with control over frame parameters.
* pledgedSrcSize must be correct. If srcSize is not known at init time, use
* value ZSTD_CONTENTSIZE_UNKNOWN.
- * Note : this prototype will be marked as deprecated and generate compilation warnings on reaching v1.5.x
+ * This prototype will generate compilation warnings.
*/
-ZSTDLIB_API size_t
-ZSTD_initCStream_usingCDict_advanced(ZSTD_CStream* zcs,
+ZSTD_DEPRECATED("use ZSTD_CCtx_reset and ZSTD_CCtx_refCDict, see zstd.h for detailed instructions")
+size_t ZSTD_initCStream_usingCDict_advanced(ZSTD_CStream* zcs,
const ZSTD_CDict* cdict,
ZSTD_frameParameters fParams,
unsigned long long pledgedSrcSize);
/*! ZSTD_resetCStream() :
- * This function is deprecated, and is equivalent to:
+ * This function is DEPRECATED, and is equivalent to:
* ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only);
* ZSTD_CCtx_setPledgedSrcSize(zcs, pledgedSrcSize);
+ * Note: ZSTD_resetCStream() interprets pledgedSrcSize == 0 as ZSTD_CONTENTSIZE_UNKNOWN, but
+ * ZSTD_CCtx_setPledgedSrcSize() does not do the same, so ZSTD_CONTENTSIZE_UNKNOWN must be
+ * explicitly specified.
*
* start a new frame, using same parameters from previous frame.
* This is typically useful to skip dictionary loading stage, since it will re-use it in-place.
@@ -2110,9 +2249,10 @@ ZSTD_initCStream_usingCDict_advanced(ZSTD_CStream* zcs,
* For the time being, pledgedSrcSize==0 is interpreted as "srcSize unknown" for compatibility with older programs,
* but it will change to mean "empty" in future version, so use macro ZSTD_CONTENTSIZE_UNKNOWN instead.
* @return : 0, or an error code (which can be tested using ZSTD_isError())
- * Note : this prototype will be marked as deprecated and generate compilation warnings on reaching v1.5.x
+ * This prototype will generate compilation warnings.
*/
-ZSTDLIB_API size_t ZSTD_resetCStream(ZSTD_CStream* zcs, unsigned long long pledgedSrcSize);
+ZSTD_DEPRECATED("use ZSTD_CCtx_reset, see zstd.h for detailed instructions")
+size_t ZSTD_resetCStream(ZSTD_CStream* zcs, unsigned long long pledgedSrcSize);
typedef struct {
@@ -2199,8 +2339,7 @@ ZSTDLIB_API size_t ZSTD_resetDStream(ZSTD_DStream* zds);
ZSTD_CCtx object can be re-used multiple times within successive compression operations.
Start by initializing a context.
- Use ZSTD_compressBegin(), or ZSTD_compressBegin_usingDict() for dictionary compression,
- or ZSTD_compressBegin_advanced(), for finer parameter control.
+ Use ZSTD_compressBegin(), or ZSTD_compressBegin_usingDict() for dictionary compression.
It's also possible to duplicate a reference context which has already been initialized, using ZSTD_copyCCtx()
Then, consume your input using ZSTD_compressContinue().
@@ -2225,15 +2364,17 @@ ZSTDLIB_API size_t ZSTD_resetDStream(ZSTD_DStream* zds);
/*===== Buffer-less streaming compression functions =====*/
ZSTDLIB_API size_t ZSTD_compressBegin(ZSTD_CCtx* cctx, int compressionLevel);
ZSTDLIB_API size_t ZSTD_compressBegin_usingDict(ZSTD_CCtx* cctx, const void* dict, size_t dictSize, int compressionLevel);
-ZSTDLIB_API size_t ZSTD_compressBegin_advanced(ZSTD_CCtx* cctx, const void* dict, size_t dictSize, ZSTD_parameters params, unsigned long long pledgedSrcSize); /**< pledgedSrcSize : If srcSize is not known at init time, use ZSTD_CONTENTSIZE_UNKNOWN */
ZSTDLIB_API size_t ZSTD_compressBegin_usingCDict(ZSTD_CCtx* cctx, const ZSTD_CDict* cdict); /**< note: fails if cdict==NULL */
-ZSTDLIB_API size_t ZSTD_compressBegin_usingCDict_advanced(ZSTD_CCtx* const cctx, const ZSTD_CDict* const cdict, ZSTD_frameParameters const fParams, unsigned long long const pledgedSrcSize); /* compression parameters are already set within cdict. pledgedSrcSize must be correct. If srcSize is not known, use macro ZSTD_CONTENTSIZE_UNKNOWN */
ZSTDLIB_API size_t ZSTD_copyCCtx(ZSTD_CCtx* cctx, const ZSTD_CCtx* preparedCCtx, unsigned long long pledgedSrcSize); /**< note: if pledgedSrcSize is not known, use ZSTD_CONTENTSIZE_UNKNOWN */
ZSTDLIB_API size_t ZSTD_compressContinue(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize);
ZSTDLIB_API size_t ZSTD_compressEnd(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize);
-
+/* The ZSTD_compressBegin_advanced() and ZSTD_compressBegin_usingCDict_advanced() are now DEPRECATED and will generate a compiler warning */
+ZSTD_DEPRECATED("use advanced API to access custom parameters")
+size_t ZSTD_compressBegin_advanced(ZSTD_CCtx* cctx, const void* dict, size_t dictSize, ZSTD_parameters params, unsigned long long pledgedSrcSize); /**< pledgedSrcSize : If srcSize is not known at init time, use ZSTD_CONTENTSIZE_UNKNOWN */
+ZSTD_DEPRECATED("use advanced API to access custom parameters")
+size_t ZSTD_compressBegin_usingCDict_advanced(ZSTD_CCtx* const cctx, const ZSTD_CDict* const cdict, ZSTD_frameParameters const fParams, unsigned long long const pledgedSrcSize); /* compression parameters are already set within cdict. pledgedSrcSize must be correct. If srcSize is not known, use macro ZSTD_CONTENTSIZE_UNKNOWN */
/**
Buffer-less streaming decompression (synchronous mode)
diff --git a/thirdparty/zstd/common/zstd_errors.h b/thirdparty/zstd/zstd_errors.h
index 6d0d003004..fa3686b772 100644
--- a/thirdparty/zstd/common/zstd_errors.h
+++ b/thirdparty/zstd/zstd_errors.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
+ * Copyright (c) Yann Collet, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under both the BSD-style license (found in the
diff --git a/version.py b/version.py
index 517a47f568..663f90b942 100644
--- a/version.py
+++ b/version.py
@@ -7,3 +7,4 @@ status = "dev"
module_config = ""
year = 2021
website = "https://godotengine.org"
+docs = "latest"